File: typemap-001.phpt

package info (click to toggle)
php-mongodb 1.15.0%2B1.11.1%2B1.9.2%2B1.7.5-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 63,984 kB
  • sloc: ansic: 328,429; xml: 10,797; php: 4,235; sh: 179; python: 47; pascal: 36; makefile: 3
file content (122 lines) | stat: -rw-r--r-- 3,965 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
--TEST--
MongoDB\Driver\Cursor::setTypeMap(): Setting typemaps
--SKIPIF--
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
<?php skip_if_not_live(); ?>
<?php skip_if_not_clean(); ?>
--FILE--
<?php

require_once __DIR__ . "/../utils/basic.inc";

class MyArrayObject extends ArrayObject implements MongoDB\BSON\Unserializable
{
    public function bsonUnserialize(array $data): void
    {
        parent::__construct($data);
    }
}

$manager = create_test_manager();

$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(array('_id' => 1, 'bson_array' => array(1, 2, 3), 'bson_object' => array("string" => "keys", "for" => "ever")));
$bulk->insert(array('_id' => 2, 'bson_array' => array(4, 5, 6)));
$manager->executeBulkWrite(NS, $bulk);

function fetch($manager, $typemap = array()) {
    $cursor = $manager->executeQuery(NS, new MongoDB\Driver\Query(array('bson_array' => 1)));
    if ($typemap) {
        $cursor->setTypeMap($typemap);
    }

    $documents = $cursor->toArray();
    return $documents;
}


echo "Default\n";
$documents = fetch($manager);
var_dump($documents[0] instanceof stdClass);
var_dump(is_array($documents[0]->bson_array));
var_dump($documents[0]->bson_object instanceof stdClass);


echo "\nSetting to 'MyArrayObject' for arrays\n";
$documents = fetch($manager, array("array" => "MyArrayObject"));
var_dump($documents[0] instanceof stdClass);
var_dump($documents[0]->bson_array instanceof MyArrayObject);
var_dump($documents[0]->bson_object instanceof stdClass);

echo "\nSetting to 'MyArrayObject' for arrays, embedded, and root documents\n";
$documents = fetch($manager, array("array" => "MyArrayObject", "document" => "MyArrayObject", "root" => "MyArrayObject"));
var_dump($documents[0] instanceof MyArrayObject);
var_dump($documents[0]['bson_array'] instanceof MyArrayObject);
var_dump($documents[0]['bson_object'] instanceof MyArrayObject);


echo "\nSetting to 'array' for arrays, embedded, and root documents\n";
$documents = fetch($manager, array("array" => "array", "document" => "array", "root" => "array"));
var_dump(is_array($documents[0]));
var_dump(is_array($documents[0]['bson_array']));
var_dump(is_array($documents[0]['bson_object']));


echo "\nSetting to 'stdclass' for arrays and 'array' for embedded and root documents\n";
$documents = fetch($manager, array("array" => "stdclass", "document" => "array", "root" => "array"));
var_dump(is_array($documents[0]));
var_dump($documents[0]['bson_array'] instanceof stdClass);
var_dump(is_array($documents[0]['bson_object']));


echo "\nSetting to 'array' for arrays, 'stdclass' for embedded document, and 'MyArrayObject' for root document\n";
$documents = fetch($manager, array("array" => "array", "document" => "stdclass", "root" => "MyArrayObject"));
var_dump($documents[0] instanceof MyArrayObject);
var_dump(is_array($documents[0]['bson_array']));
var_dump($documents[0]['bson_object'] instanceof stdClass);


echo "\nSetting to 'stdclass' for arrays, embedded, and root documents\n";
$documents = fetch($manager, array("array" => "stdclass", "document" => "stdclass", "root" => "stdclass"));
var_dump($documents[0] instanceof stdClass);
var_dump($documents[0]->bson_array instanceof stdClass);
var_dump($documents[0]->bson_object instanceof stdClass);
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
Default
bool(true)
bool(true)
bool(true)

Setting to 'MyArrayObject' for arrays
bool(true)
bool(true)
bool(true)

Setting to 'MyArrayObject' for arrays, embedded, and root documents
bool(true)
bool(true)
bool(true)

Setting to 'array' for arrays, embedded, and root documents
bool(true)
bool(true)
bool(true)

Setting to 'stdclass' for arrays and 'array' for embedded and root documents
bool(true)
bool(true)
bool(true)

Setting to 'array' for arrays, 'stdclass' for embedded document, and 'MyArrayObject' for root document
bool(true)
bool(true)
bool(true)

Setting to 'stdclass' for arrays, embedded, and root documents
bool(true)
bool(true)
bool(true)
===DONE===