Skip to content

Commit b9fe58f

Browse files
authored
PHPC-2242, PHPC-2243, PHPC-2244: BSON class improvements (#1435)
* PHPC-2242: Return BSON values in BSON class accessors * PHPC-2243: Drop BSON value class * PHPC-2244: Return Int64 instances when converting BSON objects to PHP
1 parent 358fd2f commit b9fe58f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+346
-4488
lines changed

config.m4

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ if test "$PHP_MONGODB" != "no"; then
147147
src/BSON/Unserializable.c \
148148
src/BSON/UTCDateTime.c \
149149
src/BSON/UTCDateTimeInterface.c \
150-
src/BSON/Value.c \
151150
src/BSON/functions.c \
152151
src/MongoDB/BulkWrite.c \
153152
src/MongoDB/ClientEncryption.c \

config.w32

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ if (PHP_MONGODB != "no") {
121121

122122
EXTENSION("mongodb", "php_phongo.c", null, PHP_MONGODB_CFLAGS);
123123
MONGODB_ADD_SOURCES("/src", "phongo_apm.c phongo_bson.c phongo_bson_encode.c phongo_client.c phongo_compat.c phongo_error.c phongo_execute.c phongo_ini.c phongo_util.c");
124-
MONGODB_ADD_SOURCES("/src/BSON", "Binary.c BinaryInterface.c Document.c Iterator.c DBPointer.c Decimal128.c Decimal128Interface.c Int64.c Javascript.c JavascriptInterface.c MaxKey.c MaxKeyInterface.c MinKey.c MinKeyInterface.c ObjectId.c ObjectIdInterface.c PackedArray.c Persistable.c Regex.c RegexInterface.c Serializable.c Symbol.c Timestamp.c TimestampInterface.c Type.c Undefined.c Unserializable.c UTCDateTime.c UTCDateTimeInterface.c Value.c functions.c");
124+
MONGODB_ADD_SOURCES("/src/BSON", "Binary.c BinaryInterface.c Document.c Iterator.c DBPointer.c Decimal128.c Decimal128Interface.c Int64.c Javascript.c JavascriptInterface.c MaxKey.c MaxKeyInterface.c MinKey.c MinKeyInterface.c ObjectId.c ObjectIdInterface.c PackedArray.c Persistable.c Regex.c RegexInterface.c Serializable.c Symbol.c Timestamp.c TimestampInterface.c Type.c Undefined.c Unserializable.c UTCDateTime.c UTCDateTimeInterface.c functions.c");
125125
MONGODB_ADD_SOURCES("/src/MongoDB", "BulkWrite.c ClientEncryption.c Command.c Cursor.c CursorId.c CursorInterface.c Manager.c Query.c ReadConcern.c ReadPreference.c Server.c ServerApi.c ServerDescription.c Session.c TopologyDescription.c WriteConcern.c WriteConcernError.c WriteError.c WriteResult.c");
126126
MONGODB_ADD_SOURCES("/src/MongoDB/Exception", "AuthenticationException.c BulkWriteException.c CommandException.c ConnectionException.c ConnectionTimeoutException.c EncryptionException.c Exception.c ExecutionTimeoutException.c InvalidArgumentException.c LogicException.c RuntimeException.c ServerException.c SSLConnectionException.c UnexpectedValueException.c WriteException.c");
127127
MONGODB_ADD_SOURCES("/src/MongoDB/Monitoring", "CommandFailedEvent.c CommandStartedEvent.c CommandSubscriber.c CommandSucceededEvent.c SDAMSubscriber.c Subscriber.c ServerChangedEvent.c ServerClosedEvent.c ServerHeartbeatFailedEvent.c ServerHeartbeatStartedEvent.c ServerHeartbeatSucceededEvent.c ServerOpeningEvent.c TopologyChangedEvent.c TopologyClosedEvent.c TopologyOpeningEvent.c functions.c");

php_phongo.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,6 @@ PHP_MINIT_FUNCTION(mongodb) /* {{{ */
207207
php_phongo_timestamp_interface_init_ce(INIT_FUNC_ARGS_PASSTHRU);
208208
php_phongo_utcdatetime_interface_init_ce(INIT_FUNC_ARGS_PASSTHRU);
209209

210-
php_phongo_value_init_ce(INIT_FUNC_ARGS_PASSTHRU);
211210
php_phongo_iterator_init_ce(INIT_FUNC_ARGS_PASSTHRU);
212211
php_phongo_packedarray_init_ce(INIT_FUNC_ARGS_PASSTHRU);
213212
php_phongo_document_init_ce(INIT_FUNC_ARGS_PASSTHRU);

src/BSON/Document.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
#include "phongo_bson_encode.h"
3131
#include "BSON/Document_arginfo.h"
3232
#include "BSON/Iterator.h"
33-
#include "BSON/Value.h"
3433

3534
zend_class_entry* php_phongo_document_ce;
3635

@@ -187,7 +186,7 @@ static PHP_METHOD(MongoDB_BSON_Document, get)
187186
RETURN_NULL();
188187
}
189188

190-
phongo_value_new(return_value, bson_iter_value(&iter));
189+
phongo_bson_value_to_zval(bson_iter_value(&iter), return_value);
191190
}
192191

193192
static PHP_METHOD(MongoDB_BSON_Document, getIterator)
@@ -257,6 +256,8 @@ static PHP_METHOD(MongoDB_BSON_Document, toPHP)
257256

258257
intern = Z_DOCUMENT_OBJ_P(getThis());
259258

259+
state.map.int64_as_object = true;
260+
260261
if (!php_phongo_bson_to_zval_ex(intern->bson, &state)) {
261262
zval_ptr_dtor(&state.zchild);
262263
php_phongo_bson_typemap_dtor(&state.map);

src/BSON/Document.stub.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ final static public function fromPHP(array|object $value): Document {}
2222
final static public function fromPHP($value): Document {}
2323
#endif
2424

25-
final public function get(string $key): Value {}
25+
#if PHP_VERSION_ID >= 80000
26+
final public function get(string $key): mixed {}
27+
#else
28+
/** @return mixed */
29+
final public function get(string $key) {}
30+
#endif
2631

2732
final public function getIterator(): Iterator {}
2833

src/BSON/Document_arginfo.h

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: a5464ed3bb6f730295df4e7945b5d3125b7af437 */
2+
* Stub hash: 5994291bf2bfdac1b9d8bad9b96d4f443c2f49aa */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MongoDB_BSON_Document___construct, 0, 0, 0)
55
ZEND_END_ARG_INFO()
@@ -24,9 +24,17 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_MongoDB_BSON_Document_fromP
2424
ZEND_END_ARG_INFO()
2525
#endif
2626

27-
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_MongoDB_BSON_Document_get, 0, 1, MongoDB\\BSON\\Value, 0)
27+
#if PHP_VERSION_ID >= 80000
28+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_MongoDB_BSON_Document_get, 0, 1, IS_MIXED, 0)
2829
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
2930
ZEND_END_ARG_INFO()
31+
#endif
32+
33+
#if !(PHP_VERSION_ID >= 80000)
34+
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MongoDB_BSON_Document_get, 0, 0, 1)
35+
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
36+
ZEND_END_ARG_INFO()
37+
#endif
3038

3139
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_MongoDB_BSON_Document_getIterator, 0, 0, MongoDB\\BSON\\Iterator, 0)
3240
ZEND_END_ARG_INFO()
@@ -81,7 +89,12 @@ static ZEND_METHOD(MongoDB_BSON_Document, fromPHP);
8189
#if !(PHP_VERSION_ID >= 80000)
8290
static ZEND_METHOD(MongoDB_BSON_Document, fromPHP);
8391
#endif
92+
#if PHP_VERSION_ID >= 80000
8493
static ZEND_METHOD(MongoDB_BSON_Document, get);
94+
#endif
95+
#if !(PHP_VERSION_ID >= 80000)
96+
static ZEND_METHOD(MongoDB_BSON_Document, get);
97+
#endif
8598
static ZEND_METHOD(MongoDB_BSON_Document, getIterator);
8699
static ZEND_METHOD(MongoDB_BSON_Document, has);
87100
#if PHP_VERSION_ID >= 80000
@@ -110,7 +123,12 @@ static const zend_function_entry class_MongoDB_BSON_Document_methods[] = {
110123
#if !(PHP_VERSION_ID >= 80000)
111124
ZEND_ME(MongoDB_BSON_Document, fromPHP, arginfo_class_MongoDB_BSON_Document_fromPHP, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC|ZEND_ACC_FINAL)
112125
#endif
126+
#if PHP_VERSION_ID >= 80000
127+
ZEND_ME(MongoDB_BSON_Document, get, arginfo_class_MongoDB_BSON_Document_get, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
128+
#endif
129+
#if !(PHP_VERSION_ID >= 80000)
113130
ZEND_ME(MongoDB_BSON_Document, get, arginfo_class_MongoDB_BSON_Document_get, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
131+
#endif
114132
ZEND_ME(MongoDB_BSON_Document, getIterator, arginfo_class_MongoDB_BSON_Document_getIterator, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
115133
ZEND_ME(MongoDB_BSON_Document, has, arginfo_class_MongoDB_BSON_Document_has, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
116134
#if PHP_VERSION_ID >= 80000

src/BSON/Iterator.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include "phongo_error.h"
3030
#include "BSON/Iterator.h"
3131
#include "BSON/Iterator_arginfo.h"
32-
#include "BSON/Value.h"
3332

3433
zend_class_entry* php_phongo_iterator_ce;
3534

@@ -90,7 +89,7 @@ static void php_phongo_iterator_build_current(php_phongo_iterator_t* intern)
9089
{
9190
php_phongo_iterator_free_current(intern);
9291

93-
phongo_value_new(&intern->current, bson_iter_value(&intern->iter));
92+
phongo_bson_value_to_zval(bson_iter_value(&intern->iter), &intern->current);
9493
}
9594

9695
static HashTable* php_phongo_iterator_get_properties_hash(phongo_compat_object_handler_type* object, bool is_temp)

src/BSON/Iterator.stub.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ final class Iterator implements \Iterator
1111
{
1212
final private function __construct() {}
1313

14-
final public function current(): Value {}
14+
#if PHP_VERSION_ID >= 80000
15+
final public function current(): mixed {}
16+
#else
17+
/** @return mixed */
18+
final public function current() {}
19+
#endif
1520

1621
#if PHP_VERSION_ID >= 80000
1722
final public function key(): string|int {}

src/BSON/Iterator_arginfo.h

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 97a4909ec6d6a3815686576310306dbb449ffb3b */
2+
* Stub hash: 3c935268e2187085468340004c8dc67052d5c19b */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MongoDB_BSON_Iterator___construct, 0, 0, 0)
55
ZEND_END_ARG_INFO()
66

7-
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_MongoDB_BSON_Iterator_current, 0, 0, MongoDB\\BSON\\Value, 0)
7+
#if PHP_VERSION_ID >= 80000
8+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_MongoDB_BSON_Iterator_current, 0, 0, IS_MIXED, 0)
89
ZEND_END_ARG_INFO()
10+
#endif
11+
12+
#if !(PHP_VERSION_ID >= 80000)
13+
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MongoDB_BSON_Iterator_current, 0, 0, 0)
14+
ZEND_END_ARG_INFO()
15+
#endif
916

1017
#if PHP_VERSION_ID >= 80000
1118
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_MongoDB_BSON_Iterator_key, 0, 0, MAY_BE_STRING|MAY_BE_LONG)
1219
ZEND_END_ARG_INFO()
1320
#endif
1421

1522
#if !(PHP_VERSION_ID >= 80000)
16-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MongoDB_BSON_Iterator_key, 0, 0, 0)
17-
ZEND_END_ARG_INFO()
23+
#define arginfo_class_MongoDB_BSON_Iterator_key arginfo_class_MongoDB_BSON_Iterator_current
1824
#endif
1925

2026
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_MongoDB_BSON_Iterator_next, 0, 0, IS_VOID, 0)
@@ -29,7 +35,12 @@ ZEND_END_ARG_INFO()
2935

3036

3137
static ZEND_METHOD(MongoDB_BSON_Iterator, __construct);
38+
#if PHP_VERSION_ID >= 80000
3239
static ZEND_METHOD(MongoDB_BSON_Iterator, current);
40+
#endif
41+
#if !(PHP_VERSION_ID >= 80000)
42+
static ZEND_METHOD(MongoDB_BSON_Iterator, current);
43+
#endif
3344
#if PHP_VERSION_ID >= 80000
3445
static ZEND_METHOD(MongoDB_BSON_Iterator, key);
3546
#endif
@@ -44,7 +55,12 @@ static ZEND_METHOD(MongoDB_BSON_Iterator, __wakeup);
4455

4556
static const zend_function_entry class_MongoDB_BSON_Iterator_methods[] = {
4657
ZEND_ME(MongoDB_BSON_Iterator, __construct, arginfo_class_MongoDB_BSON_Iterator___construct, ZEND_ACC_PRIVATE|ZEND_ACC_FINAL)
58+
#if PHP_VERSION_ID >= 80000
4759
ZEND_ME(MongoDB_BSON_Iterator, current, arginfo_class_MongoDB_BSON_Iterator_current, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
60+
#endif
61+
#if !(PHP_VERSION_ID >= 80000)
62+
ZEND_ME(MongoDB_BSON_Iterator, current, arginfo_class_MongoDB_BSON_Iterator_current, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
63+
#endif
4864
#if PHP_VERSION_ID >= 80000
4965
ZEND_ME(MongoDB_BSON_Iterator, key, arginfo_class_MongoDB_BSON_Iterator_key, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
5066
#endif

src/BSON/PackedArray.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
#include "phongo_bson_encode.h"
3131
#include "BSON/PackedArray_arginfo.h"
3232
#include "BSON/Iterator.h"
33-
#include "BSON/Value.h"
3433

3534
zend_class_entry* php_phongo_packedarray_ce;
3635

@@ -138,7 +137,7 @@ static PHP_METHOD(MongoDB_BSON_PackedArray, get)
138137
RETURN_NULL();
139138
}
140139

141-
phongo_value_new(return_value, bson_iter_value(&iter));
140+
phongo_bson_value_to_zval(bson_iter_value(&iter), return_value);
142141
}
143142

144143
static PHP_METHOD(MongoDB_BSON_PackedArray, getIterator)
@@ -185,7 +184,8 @@ static PHP_METHOD(MongoDB_BSON_PackedArray, toPHP)
185184

186185
intern = Z_PACKEDARRAY_OBJ_P(getThis());
187186

188-
state.is_visiting_array = true;
187+
state.is_visiting_array = true;
188+
state.map.int64_as_object = true;
189189

190190
if (!php_phongo_bson_to_zval_ex(intern->bson, &state)) {
191191
zval_ptr_dtor(&state.zchild);

src/BSON/PackedArray.stub.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ private function __construct() {}
1313

1414
final static public function fromPHP(array $value): PackedArray {}
1515

16-
final public function get(int $index): Value {}
16+
#if PHP_VERSION_ID >= 80000
17+
final public function get(int $index): mixed {}
18+
#else
19+
/** @return mixed */
20+
final public function get(int $index) {}
21+
#endif
1722

1823
final public function getIterator(): Iterator {}
1924

src/BSON/PackedArray_arginfo.h

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 5473b762427402941b0f73ff5b9f11ca45b98b26 */
2+
* Stub hash: 3668c2846f7f546547f3203320342b4ef816b117 */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MongoDB_BSON_PackedArray___construct, 0, 0, 0)
55
ZEND_END_ARG_INFO()
@@ -8,9 +8,17 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_MongoDB_BSON_PackedArray_fr
88
ZEND_ARG_TYPE_INFO(0, value, IS_ARRAY, 0)
99
ZEND_END_ARG_INFO()
1010

11-
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_MongoDB_BSON_PackedArray_get, 0, 1, MongoDB\\BSON\\Value, 0)
11+
#if PHP_VERSION_ID >= 80000
12+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_MongoDB_BSON_PackedArray_get, 0, 1, IS_MIXED, 0)
1213
ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0)
1314
ZEND_END_ARG_INFO()
15+
#endif
16+
17+
#if !(PHP_VERSION_ID >= 80000)
18+
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MongoDB_BSON_PackedArray_get, 0, 0, 1)
19+
ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0)
20+
ZEND_END_ARG_INFO()
21+
#endif
1422

1523
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_MongoDB_BSON_PackedArray_getIterator, 0, 0, MongoDB\\BSON\\Iterator, 0)
1624
ZEND_END_ARG_INFO()
@@ -54,7 +62,12 @@ ZEND_END_ARG_INFO()
5462

5563
static ZEND_METHOD(MongoDB_BSON_PackedArray, __construct);
5664
static ZEND_METHOD(MongoDB_BSON_PackedArray, fromPHP);
65+
#if PHP_VERSION_ID >= 80000
5766
static ZEND_METHOD(MongoDB_BSON_PackedArray, get);
67+
#endif
68+
#if !(PHP_VERSION_ID >= 80000)
69+
static ZEND_METHOD(MongoDB_BSON_PackedArray, get);
70+
#endif
5871
static ZEND_METHOD(MongoDB_BSON_PackedArray, getIterator);
5972
static ZEND_METHOD(MongoDB_BSON_PackedArray, has);
6073
#if PHP_VERSION_ID >= 80000
@@ -74,7 +87,12 @@ static ZEND_METHOD(MongoDB_BSON_PackedArray, __serialize);
7487
static const zend_function_entry class_MongoDB_BSON_PackedArray_methods[] = {
7588
ZEND_ME(MongoDB_BSON_PackedArray, __construct, arginfo_class_MongoDB_BSON_PackedArray___construct, ZEND_ACC_PRIVATE)
7689
ZEND_ME(MongoDB_BSON_PackedArray, fromPHP, arginfo_class_MongoDB_BSON_PackedArray_fromPHP, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC|ZEND_ACC_FINAL)
90+
#if PHP_VERSION_ID >= 80000
7791
ZEND_ME(MongoDB_BSON_PackedArray, get, arginfo_class_MongoDB_BSON_PackedArray_get, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
92+
#endif
93+
#if !(PHP_VERSION_ID >= 80000)
94+
ZEND_ME(MongoDB_BSON_PackedArray, get, arginfo_class_MongoDB_BSON_PackedArray_get, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
95+
#endif
7896
ZEND_ME(MongoDB_BSON_PackedArray, getIterator, arginfo_class_MongoDB_BSON_PackedArray_getIterator, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
7997
ZEND_ME(MongoDB_BSON_PackedArray, has, arginfo_class_MongoDB_BSON_PackedArray_has, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
8098
#if PHP_VERSION_ID >= 80000

0 commit comments

Comments
 (0)