Skip to content

Commit d3953f6

Browse files
committed
PHPC-1027: Introduce classes for deprecated BSON types (DBPointer)
1 parent a9f6e3b commit d3953f6

20 files changed

+709
-25
lines changed

config.m4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ if test "$MONGODB" != "no"; then
157157
src/bson-encode.c \
158158
src/BSON/Binary.c \
159159
src/BSON/BinaryInterface.c \
160+
src/BSON/DBPointer.c \
160161
src/BSON/Decimal128.c \
161162
src/BSON/Decimal128Interface.c \
162163
src/BSON/Javascript.c \

config.w32

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

8585
EXTENSION("mongodb", "php_phongo.c phongo_compat.c", null, PHP_MONGODB_CFLAGS);
8686
ADD_SOURCES(configure_module_dirname + "/src", "bson.c bson-encode.c", "mongodb");
87-
ADD_SOURCES(configure_module_dirname + "/src/BSON", "Binary.c BinaryInterface.c Decimal128.c Decimal128Interface.c Javascript.c JavascriptInterface.c MaxKey.c MaxKeyInterface.c MinKey.c MinKeyInterface.c ObjectId.c ObjectIdInterface.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", "mongodb");
87+
ADD_SOURCES(configure_module_dirname + "/src/BSON", "Binary.c BinaryInterface.c DBPointer.c Decimal128.c Decimal128Interface.c Javascript.c JavascriptInterface.c MaxKey.c MaxKeyInterface.c MinKey.c MinKeyInterface.c ObjectId.c ObjectIdInterface.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", "mongodb");
8888
ADD_SOURCES(configure_module_dirname + "/src/MongoDB", "BulkWrite.c Command.c Cursor.c CursorId.c Manager.c Query.c ReadConcern.c ReadPreference.c Server.c WriteConcern.c WriteConcernError.c WriteError.c WriteResult.c", "mongodb");
8989
ADD_SOURCES(configure_module_dirname + "/src/MongoDB/Exception", "AuthenticationException.c BulkWriteException.c ConnectionException.c ConnectionTimeoutException.c Exception.c ExecutionTimeoutException.c InvalidArgumentException.c LogicException.c RuntimeException.c SSLConnectionException.c UnexpectedValueException.c WriteException.c", "mongodb");
9090
ADD_SOURCES(configure_module_dirname + "/src/MongoDB/Monitoring", "CommandFailedEvent.c CommandStartedEvent.c CommandSubscriber.c CommandSucceededEvent.c Subscriber.c functions.c", "mongodb");

php_phongo.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2397,6 +2397,18 @@ void php_phongo_new_symbol(zval *object, const char *symbol, size_t symbol_len T
23972397
intern->symbol_len = symbol_len;
23982398
} /* }}} */
23992399

2400+
void php_phongo_new_dbpointer(zval *object, const char *ref, size_t ref_len, const bson_oid_t *oid TSRMLS_DC) /* {{{ */
2401+
{
2402+
php_phongo_dbpointer_t *intern;
2403+
2404+
object_init_ex(object, php_phongo_dbpointer_ce);
2405+
2406+
intern = Z_DBPOINTER_OBJ_P(object);
2407+
intern->ref = estrndup(ref, ref_len);
2408+
intern->ref_len = ref_len;
2409+
bson_oid_to_string(oid, intern->id);
2410+
} /* }}} */
2411+
24002412
/* {{{ Memory allocation wrappers */
24012413
static void* php_phongo_malloc(size_t num_bytes) /* {{{ */
24022414
{
@@ -2658,6 +2670,7 @@ PHP_MINIT_FUNCTION(mongodb)
26582670
php_phongo_utcdatetime_interface_init_ce(INIT_FUNC_ARGS_PASSTHRU);
26592671

26602672
php_phongo_binary_init_ce(INIT_FUNC_ARGS_PASSTHRU);
2673+
php_phongo_dbpointer_init_ce(INIT_FUNC_ARGS_PASSTHRU);
26612674
php_phongo_decimal128_init_ce(INIT_FUNC_ARGS_PASSTHRU);
26622675
php_phongo_javascript_init_ce(INIT_FUNC_ARGS_PASSTHRU);
26632676
php_phongo_maxkey_init_ce(INIT_FUNC_ARGS_PASSTHRU);

php_phongo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ void php_phongo_new_binary_from_binary_and_type(zval *object, const char *data,
160160
void php_phongo_new_decimal128(zval *object, const bson_decimal128_t *decimal TSRMLS_DC);
161161
void php_phongo_new_regex_from_regex_and_options(zval *object, const char *pattern, const char *flags TSRMLS_DC);
162162
void php_phongo_new_symbol(zval *object, const char *symbol, size_t symbol_len TSRMLS_DC);
163+
void php_phongo_new_dbpointer(zval *object, const char *namespace, size_t namespace_len, const bson_oid_t *oid TSRMLS_DC);
163164

164165
zend_bool phongo_writeerror_init(zval *return_value, bson_t *bson TSRMLS_DC);
165166
zend_bool phongo_writeconcernerror_init(zval *return_value, bson_t *bson TSRMLS_DC);

php_phongo_classes.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ static inline php_phongo_writeresult_t* php_writeresult_fetch_object(zend_object
6767
static inline php_phongo_binary_t* php_binary_fetch_object(zend_object *obj) {
6868
return (php_phongo_binary_t *)((char *)obj - XtOffsetOf(php_phongo_binary_t, std));
6969
}
70+
static inline php_phongo_dbpointer_t* php_dbpointer_fetch_object(zend_object *obj) {
71+
return (php_phongo_dbpointer_t *)((char *)obj - XtOffsetOf(php_phongo_dbpointer_t, std));
72+
}
7073
static inline php_phongo_decimal128_t* php_decimal128_fetch_object(zend_object *obj) {
7174
return (php_phongo_decimal128_t *)((char *)obj - XtOffsetOf(php_phongo_decimal128_t, std));
7275
}
@@ -121,6 +124,7 @@ static inline php_phongo_commandsucceededevent_t* php_commandsucceededevent_fetc
121124
# define Z_WRITEERROR_OBJ_P(zv) (php_writeerror_fetch_object(Z_OBJ_P(zv)))
122125
# define Z_WRITERESULT_OBJ_P(zv) (php_writeresult_fetch_object(Z_OBJ_P(zv)))
123126
# define Z_BINARY_OBJ_P(zv) (php_binary_fetch_object(Z_OBJ_P(zv)))
127+
# define Z_DBPOINTER_OBJ_P(zv) (php_dbpointer_fetch_object(Z_OBJ_P(zv)))
124128
# define Z_DECIMAL128_OBJ_P(zv) (php_decimal128_fetch_object(Z_OBJ_P(zv)))
125129
# define Z_JAVASCRIPT_OBJ_P(zv) (php_javascript_fetch_object(Z_OBJ_P(zv)))
126130
# define Z_MAXKEY_OBJ_P(zv) (php_maxkey_fetch_object(Z_OBJ_P(zv)))
@@ -149,6 +153,7 @@ static inline php_phongo_commandsucceededevent_t* php_commandsucceededevent_fetc
149153
# define Z_OBJ_WRITEERROR(zo) (php_writeerror_fetch_object(zo))
150154
# define Z_OBJ_WRITERESULT(zo) (php_writeresult_fetch_object(zo))
151155
# define Z_OBJ_BINARY(zo) (php_binary_fetch_object(zo))
156+
# define Z_OBJ_DBPOINTER(zo) (php_dbpointer_fetch_object(zo))
152157
# define Z_OBJ_DECIMAL128(zo) (php_decimal128_fetch_object(zo))
153158
# define Z_OBJ_JAVASCRIPT(zo) (php_javascript_fetch_object(zo))
154159
# define Z_OBJ_MAXKEY(zo) (php_maxkey_fetch_object(zo))
@@ -179,6 +184,7 @@ static inline php_phongo_commandsucceededevent_t* php_commandsucceededevent_fetc
179184
# define Z_WRITEERROR_OBJ_P(zv) ((php_phongo_writeerror_t *)zend_object_store_get_object(zv TSRMLS_CC))
180185
# define Z_WRITERESULT_OBJ_P(zv) ((php_phongo_writeresult_t *)zend_object_store_get_object(zv TSRMLS_CC))
181186
# define Z_BINARY_OBJ_P(zv) ((php_phongo_binary_t *)zend_object_store_get_object(zv TSRMLS_CC))
187+
# define Z_DBPOINTER_OBJ_P(zv) ((php_phongo_dbpointer_t *)zend_object_store_get_object(zv TSRMLS_CC))
182188
# define Z_DECIMAL128_OBJ_P(zv) ((php_phongo_decimal128_t *)zend_object_store_get_object(zv TSRMLS_CC))
183189
# define Z_JAVASCRIPT_OBJ_P(zv) ((php_phongo_javascript_t *)zend_object_store_get_object(zv TSRMLS_CC))
184190
# define Z_MAXKEY_OBJ_P(zv) ((php_phongo_maxkey_t *)zend_object_store_get_object(zv TSRMLS_CC))
@@ -207,6 +213,7 @@ static inline php_phongo_commandsucceededevent_t* php_commandsucceededevent_fetc
207213
# define Z_OBJ_WRITEERROR(zo) ((php_phongo_writeerror_t *)zo)
208214
# define Z_OBJ_WRITERESULT(zo) ((php_phongo_writeresult_t *)zo)
209215
# define Z_OBJ_BINARY(zo) ((php_phongo_binary_t *)zo)
216+
# define Z_OBJ_DBPOINTER(zo) ((php_phongo_dbpointer_t *)zo)
210217
# define Z_OBJ_DECIMAL128(zo) ((php_phongo_decimal128_t *)zo)
211218
# define Z_OBJ_JAVASCRIPT(zo) ((php_phongo_javascript_t *)zo)
212219
# define Z_OBJ_MAXKEY(zo) ((php_phongo_maxkey_t *)zo)
@@ -261,6 +268,7 @@ extern zend_class_entry *php_phongo_persistable_ce;
261268
extern zend_class_entry *php_phongo_unserializable_ce;
262269
extern zend_class_entry *php_phongo_serializable_ce;
263270
extern zend_class_entry *php_phongo_binary_ce;
271+
extern zend_class_entry *php_phongo_dbpointer_ce;
264272
extern zend_class_entry *php_phongo_decimal128_ce;
265273
extern zend_class_entry *php_phongo_javascript_ce;
266274
extern zend_class_entry *php_phongo_maxkey_ce;
@@ -289,6 +297,7 @@ extern zend_class_entry *php_phongo_commandsucceededevent_ce;
289297
extern zend_class_entry *php_phongo_subscriber_ce;
290298

291299
extern void php_phongo_binary_init_ce(INIT_FUNC_ARGS);
300+
extern void php_phongo_dbpointer_init_ce(INIT_FUNC_ARGS);
292301
extern void php_phongo_decimal128_init_ce(INIT_FUNC_ARGS);
293302
extern void php_phongo_javascript_init_ce(INIT_FUNC_ARGS);
294303
extern void php_phongo_maxkey_init_ce(INIT_FUNC_ARGS);

php_phongo_structs.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,15 @@ typedef struct {
147147
PHONGO_ZEND_OBJECT_POST
148148
} php_phongo_binary_t;
149149

150+
typedef struct {
151+
PHONGO_ZEND_OBJECT_PRE
152+
char *ref;
153+
size_t ref_len;
154+
char id[25];
155+
HashTable *properties;
156+
PHONGO_ZEND_OBJECT_POST
157+
} php_phongo_dbpointer_t;
158+
150159
typedef struct {
151160
PHONGO_ZEND_OBJECT_PRE
152161
bool initialized;

0 commit comments

Comments
 (0)