Skip to content

Commit a9f6e3b

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

19 files changed

+590
-7
lines changed

config.m4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ if test "$MONGODB" != "no"; then
171171
src/BSON/Regex.c \
172172
src/BSON/RegexInterface.c \
173173
src/BSON/Serializable.c \
174+
src/BSON/Symbol.c \
174175
src/BSON/Timestamp.c \
175176
src/BSON/TimestampInterface.c \
176177
src/BSON/Type.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 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 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: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2386,6 +2386,17 @@ void php_phongo_new_regex_from_regex_and_options(zval *object, const char *patte
23862386
qsort((void *) intern->flags, intern->flags_len, 1, php_phongo_regex_compare_flags);
23872387
} /* }}} */
23882388

2389+
void php_phongo_new_symbol(zval *object, const char *symbol, size_t symbol_len TSRMLS_DC) /* {{{ */
2390+
{
2391+
php_phongo_symbol_t *intern;
2392+
2393+
object_init_ex(object, php_phongo_symbol_ce);
2394+
2395+
intern = Z_SYMBOL_OBJ_P(object);
2396+
intern->symbol = estrndup(symbol, symbol_len);
2397+
intern->symbol_len = symbol_len;
2398+
} /* }}} */
2399+
23892400
/* {{{ Memory allocation wrappers */
23902401
static void* php_phongo_malloc(size_t num_bytes) /* {{{ */
23912402
{
@@ -2654,6 +2665,7 @@ PHP_MINIT_FUNCTION(mongodb)
26542665
php_phongo_objectid_init_ce(INIT_FUNC_ARGS_PASSTHRU);
26552666
php_phongo_persistable_init_ce(INIT_FUNC_ARGS_PASSTHRU);
26562667
php_phongo_regex_init_ce(INIT_FUNC_ARGS_PASSTHRU);
2668+
php_phongo_symbol_init_ce(INIT_FUNC_ARGS_PASSTHRU);
26572669
php_phongo_timestamp_init_ce(INIT_FUNC_ARGS_PASSTHRU);
26582670
php_phongo_undefined_init_ce(INIT_FUNC_ARGS_PASSTHRU);
26592671
php_phongo_utcdatetime_init_ce(INIT_FUNC_ARGS_PASSTHRU);

php_phongo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ void php_phongo_new_javascript_from_javascript_and_scope(int init, zval *object,
159159
void php_phongo_new_binary_from_binary_and_type(zval *object, const char *data, size_t data_len, bson_subtype_t type TSRMLS_DC);
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);
162+
void php_phongo_new_symbol(zval *object, const char *symbol, size_t symbol_len TSRMLS_DC);
162163

163164
zend_bool phongo_writeerror_init(zval *return_value, bson_t *bson TSRMLS_DC);
164165
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
@@ -85,6 +85,9 @@ static inline php_phongo_objectid_t* php_objectid_fetch_object(zend_object *obj)
8585
static inline php_phongo_regex_t* php_regex_fetch_object(zend_object *obj) {
8686
return (php_phongo_regex_t *)((char *)obj - XtOffsetOf(php_phongo_regex_t, std));
8787
}
88+
static inline php_phongo_symbol_t* php_symbol_fetch_object(zend_object *obj) {
89+
return (php_phongo_symbol_t *)((char *)obj - XtOffsetOf(php_phongo_symbol_t, std));
90+
}
8891
static inline php_phongo_timestamp_t* php_timestamp_fetch_object(zend_object *obj) {
8992
return (php_phongo_timestamp_t *)((char *)obj - XtOffsetOf(php_phongo_timestamp_t, std));
9093
}
@@ -124,6 +127,7 @@ static inline php_phongo_commandsucceededevent_t* php_commandsucceededevent_fetc
124127
# define Z_MINKEY_OBJ_P(zv) (php_minkey_fetch_object(Z_OBJ_P(zv)))
125128
# define Z_OBJECTID_OBJ_P(zv) (php_objectid_fetch_object(Z_OBJ_P(zv)))
126129
# define Z_REGEX_OBJ_P(zv) (php_regex_fetch_object(Z_OBJ_P(zv)))
130+
# define Z_SYMBOL_OBJ_P(zv) (php_symbol_fetch_object(Z_OBJ_P(zv)))
127131
# define Z_TIMESTAMP_OBJ_P(zv) (php_timestamp_fetch_object(Z_OBJ_P(zv)))
128132
# define Z_UNDEFINED_OBJ_P(zv) (php_undefined_fetch_object(Z_OBJ_P(zv)))
129133
# define Z_UTCDATETIME_OBJ_P(zv) (php_utcdatetime_fetch_object(Z_OBJ_P(zv)))
@@ -151,6 +155,7 @@ static inline php_phongo_commandsucceededevent_t* php_commandsucceededevent_fetc
151155
# define Z_OBJ_MINKEY(zo) (php_minkey_fetch_object(zo))
152156
# define Z_OBJ_OBJECTID(zo) (php_objectid_fetch_object(zo))
153157
# define Z_OBJ_REGEX(zo) (php_regex_fetch_object(zo))
158+
# define Z_OBJ_SYMBOL(zo) (php_symbol_fetch_object(zo))
154159
# define Z_OBJ_TIMESTAMP(zo) (php_timestamp_fetch_object(zo))
155160
# define Z_OBJ_UNDEFINED(zo) (php_undefined_fetch_object(zo))
156161
# define Z_OBJ_UTCDATETIME(zo) (php_utcdatetime_fetch_object(zo))
@@ -180,6 +185,7 @@ static inline php_phongo_commandsucceededevent_t* php_commandsucceededevent_fetc
180185
# define Z_MINKEY_OBJ_P(zv) ((php_phongo_minkey_t *)zend_object_store_get_object(zv TSRMLS_CC))
181186
# define Z_OBJECTID_OBJ_P(zv) ((php_phongo_objectid_t *)zend_object_store_get_object(zv TSRMLS_CC))
182187
# define Z_REGEX_OBJ_P(zv) ((php_phongo_regex_t *)zend_object_store_get_object(zv TSRMLS_CC))
188+
# define Z_SYMBOL_OBJ_P(zv) ((php_phongo_symbol_t *)zend_object_store_get_object(zv TSRMLS_CC))
183189
# define Z_TIMESTAMP_OBJ_P(zv) ((php_phongo_timestamp_t *)zend_object_store_get_object(zv TSRMLS_CC))
184190
# define Z_UNDEFINED_OBJ_P(zv) ((php_phongo_undefined_t *)zend_object_store_get_object(zv TSRMLS_CC))
185191
# define Z_UTCDATETIME_OBJ_P(zv) ((php_phongo_utcdatetime_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_MINKEY(zo) ((php_phongo_minkey_t *)zo)
208214
# define Z_OBJ_OBJECTID(zo) ((php_phongo_objectid_t *)zo)
209215
# define Z_OBJ_REGEX(zo) ((php_phongo_regex_t *)zo)
216+
# define Z_OBJ_SYMBOL(zo) ((php_phongo_symbol_t *)zo)
210217
# define Z_OBJ_TIMESTAMP(zo) ((php_phongo_timestamp_t *)zo)
211218
# define Z_OBJ_UNDEFINED(zo) ((php_phongo_undefined_t *)zo)
212219
# define Z_OBJ_UTCDATETIME(zo) ((php_phongo_utcdatetime_t *)zo)
@@ -260,6 +267,7 @@ extern zend_class_entry *php_phongo_maxkey_ce;
260267
extern zend_class_entry *php_phongo_minkey_ce;
261268
extern zend_class_entry *php_phongo_objectid_ce;
262269
extern zend_class_entry *php_phongo_regex_ce;
270+
extern zend_class_entry *php_phongo_symbol_ce;
263271
extern zend_class_entry *php_phongo_timestamp_ce;
264272
extern zend_class_entry *php_phongo_undefined_ce;
265273
extern zend_class_entry *php_phongo_utcdatetime_ce;
@@ -289,6 +297,7 @@ extern void php_phongo_objectid_init_ce(INIT_FUNC_ARGS);
289297
extern void php_phongo_persistable_init_ce(INIT_FUNC_ARGS);
290298
extern void php_phongo_regex_init_ce(INIT_FUNC_ARGS);
291299
extern void php_phongo_serializable_init_ce(INIT_FUNC_ARGS);
300+
extern void php_phongo_symbol_init_ce(INIT_FUNC_ARGS);
292301
extern void php_phongo_timestamp_init_ce(INIT_FUNC_ARGS);
293302
extern void php_phongo_type_init_ce(INIT_FUNC_ARGS);
294303
extern void php_phongo_undefined_init_ce(INIT_FUNC_ARGS);

php_phongo_structs.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,14 @@ typedef struct {
192192
PHONGO_ZEND_OBJECT_POST
193193
} php_phongo_regex_t;
194194

195+
typedef struct {
196+
PHONGO_ZEND_OBJECT_PRE
197+
char *symbol;
198+
size_t symbol_len;
199+
HashTable *properties;
200+
PHONGO_ZEND_OBJECT_POST
201+
} php_phongo_symbol_t;
202+
195203
typedef struct {
196204
PHONGO_ZEND_OBJECT_PRE
197205
bool initialized;

0 commit comments

Comments
 (0)