Skip to content

PHPC-952: Move BSON type initiators to bson.c #1030

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 21, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 48 additions & 48 deletions phongo_compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,60 +162,60 @@
#define ADD_ASSOC_INT64(_zv, _key, _value) add_assoc_long((_zv), (_key), (_value))
#elif SIZEOF_PHONGO_LONG == 4
#if PHP_VERSION_ID >= 70000
#define ADD_INDEX_INT64(_zv, _index, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval zchild; \
php_phongo_new_int64(&zchild, (_value) TSRMLS_CC); \
add_index_zval((_zv), (_index), &zchild); \
} else { \
add_index_long((_zv), (_index), (_value)); \
#define ADD_INDEX_INT64(_zv, _index, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval zchild; \
php_phongo_bson_new_int64(&zchild, (_value) TSRMLS_CC); \
add_index_zval((_zv), (_index), &zchild); \
} else { \
add_index_long((_zv), (_index), (_value)); \
}
#define ADD_NEXT_INDEX_INT64(_zv, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval zchild; \
php_phongo_new_int64(&zchild, (_value) TSRMLS_CC); \
add_next_index_zval((_zv), &zchild); \
} else { \
add_next_index_long((_zv), (_value)); \
#define ADD_NEXT_INDEX_INT64(_zv, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval zchild; \
php_phongo_bson_new_int64(&zchild, (_value) TSRMLS_CC); \
add_next_index_zval((_zv), &zchild); \
} else { \
add_next_index_long((_zv), (_value)); \
}
#define ADD_ASSOC_INT64(_zv, _key, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval zchild; \
php_phongo_new_int64(&zchild, (_value) TSRMLS_CC); \
add_assoc_zval((_zv), (_key), &zchild); \
} else { \
add_assoc_long((_zv), (_key), (_value)); \
#define ADD_ASSOC_INT64(_zv, _key, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval zchild; \
php_phongo_bson_new_int64(&zchild, (_value) TSRMLS_CC); \
add_assoc_zval((_zv), (_key), &zchild); \
} else { \
add_assoc_long((_zv), (_key), (_value)); \
}
#else /* PHP_VERSION_ID < 70000 */
#define ADD_INDEX_INT64(_zv, _index, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval* zchild = NULL; \
TSRMLS_FETCH(); \
MAKE_STD_ZVAL(zchild); \
php_phongo_new_int64(zchild, (_value) TSRMLS_CC); \
add_index_zval((_zv), (_index), zchild); \
} else { \
add_index_long((_zv), (_index), (_value)); \
#define ADD_INDEX_INT64(_zv, _index, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval* zchild = NULL; \
TSRMLS_FETCH(); \
MAKE_STD_ZVAL(zchild); \
php_phongo_bson_new_int64(zchild, (_value) TSRMLS_CC); \
add_index_zval((_zv), (_index), zchild); \
} else { \
add_index_long((_zv), (_index), (_value)); \
}
#define ADD_NEXT_INDEX_INT64(_zv, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval* zchild = NULL; \
TSRMLS_FETCH(); \
MAKE_STD_ZVAL(zchild); \
php_phongo_new_int64(zchild, (_value) TSRMLS_CC); \
add_next_index_zval((_zv), zchild); \
} else { \
add_next_index_long((_zv), (_value)); \
#define ADD_NEXT_INDEX_INT64(_zv, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval* zchild = NULL; \
TSRMLS_FETCH(); \
MAKE_STD_ZVAL(zchild); \
php_phongo_bson_new_int64(zchild, (_value) TSRMLS_CC); \
add_next_index_zval((_zv), zchild); \
} else { \
add_next_index_long((_zv), (_value)); \
}
#define ADD_ASSOC_INT64(_zv, _key, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval* zchild = NULL; \
TSRMLS_FETCH(); \
MAKE_STD_ZVAL(zchild); \
php_phongo_new_int64(zchild, (_value) TSRMLS_CC); \
add_assoc_zval((_zv), (_key), zchild); \
} else { \
add_assoc_long((_zv), (_key), (_value)); \
#define ADD_ASSOC_INT64(_zv, _key, _value) \
if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \
zval* zchild = NULL; \
TSRMLS_FETCH(); \
MAKE_STD_ZVAL(zchild); \
php_phongo_bson_new_int64(zchild, (_value) TSRMLS_CC); \
add_assoc_zval((_zv), (_key), zchild); \
} else { \
add_assoc_long((_zv), (_key), (_value)); \
}
#endif /* PHP_VERSION_ID */
#else /* SIZEOF_PHONGO_LONG != 8 && SIZEOF_PHONGO_LONG != 4 */
Expand Down
3 changes: 3 additions & 0 deletions php_bson.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,9 @@ void php_phongo_bson_state_dtor(php_phongo_bson_state* state);
void php_phongo_bson_state_copy_ctor(php_phongo_bson_state* dst, php_phongo_bson_state* src);
void php_phongo_bson_typemap_dtor(php_phongo_bson_typemap* map);

void php_phongo_bson_new_timestamp_from_increment_and_timestamp(zval* object, uint32_t increment, uint32_t timestamp TSRMLS_DC);
void php_phongo_bson_new_int64(zval* object, int64_t integer TSRMLS_DC);

php_phongo_field_path* php_phongo_field_path_alloc(bool owns_elements);
void php_phongo_field_path_free(php_phongo_field_path* field_path);
void php_phongo_field_path_write_item_at_current_level(php_phongo_field_path* field_path, const char* element);
Expand Down
144 changes: 0 additions & 144 deletions php_phongo.c
Original file line number Diff line number Diff line change
Expand Up @@ -1148,27 +1148,6 @@ const mongoc_read_prefs_t* phongo_read_preference_from_zval(zval* zread_preferen
/* }}} */

/* {{{ phongo zval from mongoc types */
void php_phongo_cursor_id_new_from_id(zval* object, int64_t cursorid TSRMLS_DC) /* {{{ */
{
php_phongo_cursorid_t* intern;

object_init_ex(object, php_phongo_cursorid_ce);

intern = Z_CURSORID_OBJ_P(object);
intern->id = cursorid;
} /* }}} */

void php_phongo_objectid_new_from_oid(zval* object, const bson_oid_t* oid TSRMLS_DC) /* {{{ */
{
php_phongo_objectid_t* intern;

object_init_ex(object, php_phongo_objectid_ce);

intern = Z_OBJECTID_OBJ_P(object);
bson_oid_to_string(oid, intern->oid);
intern->initialized = true;
} /* }}} */

php_phongo_server_description_type_t php_phongo_server_description_type(mongoc_server_description_t* sd)
{
const char* name = mongoc_server_description_type(sd);
Expand Down Expand Up @@ -2743,129 +2722,6 @@ void phongo_manager_init(php_phongo_manager_t* manager, const char* uri_string,
#endif
} /* }}} */

void php_phongo_new_utcdatetime_from_epoch(zval* object, int64_t msec_since_epoch TSRMLS_DC) /* {{{ */
{
php_phongo_utcdatetime_t* intern;

object_init_ex(object, php_phongo_utcdatetime_ce);

intern = Z_UTCDATETIME_OBJ_P(object);
intern->milliseconds = msec_since_epoch;
intern->initialized = true;
} /* }}} */

void php_phongo_new_timestamp_from_increment_and_timestamp(zval* object, uint32_t increment, uint32_t timestamp TSRMLS_DC) /* {{{ */
{
php_phongo_timestamp_t* intern;

object_init_ex(object, php_phongo_timestamp_ce);

intern = Z_TIMESTAMP_OBJ_P(object);
intern->increment = increment;
intern->timestamp = timestamp;
intern->initialized = true;
} /* }}} */
void php_phongo_new_javascript_from_javascript(int init, zval* object, const char* code, size_t code_len TSRMLS_DC) /* {{{ */
{
php_phongo_new_javascript_from_javascript_and_scope(init, object, code, code_len, NULL TSRMLS_CC);
} /* }}} */
void php_phongo_new_javascript_from_javascript_and_scope(int init, zval* object, const char* code, size_t code_len, const bson_t* scope TSRMLS_DC) /* {{{ */
{
php_phongo_javascript_t* intern;

if (init) {
object_init_ex(object, php_phongo_javascript_ce);
}

intern = Z_JAVASCRIPT_OBJ_P(object);
intern->code = estrndup(code, code_len);
intern->code_len = code_len;
intern->scope = scope ? bson_copy(scope) : NULL;
} /* }}} */
void php_phongo_new_binary_from_binary_and_type(zval* object, const char* data, size_t data_len, bson_subtype_t type TSRMLS_DC) /* {{{ */
{
php_phongo_binary_t* intern;

object_init_ex(object, php_phongo_binary_ce);

intern = Z_BINARY_OBJ_P(object);
intern->data = estrndup(data, data_len);
intern->data_len = data_len;
intern->type = (uint8_t) type;
} /* }}} */

void php_phongo_new_decimal128(zval* object, const bson_decimal128_t* decimal TSRMLS_DC) /* {{{ */
{
php_phongo_decimal128_t* intern;

object_init_ex(object, php_phongo_decimal128_ce);

intern = Z_DECIMAL128_OBJ_P(object);
memcpy(&intern->decimal, decimal, sizeof(bson_decimal128_t));
intern->initialized = true;
} /* }}} */

void php_phongo_new_int64(zval* object, int64_t integer TSRMLS_DC) /* {{{ */
{
php_phongo_int64_t* intern;

object_init_ex(object, php_phongo_int64_ce);

intern = Z_INT64_OBJ_P(object);
intern->integer = integer;
intern->initialized = true;
} /* }}} */

/* qsort() compare callback for alphabetizing regex flags upon initialization */
static int php_phongo_regex_compare_flags(const void* f1, const void* f2)
{
if (*(const char*) f1 == *(const char*) f2) {
return 0;
}

return (*(const char*) f1 > *(const char*) f2) ? 1 : -1;
}

void php_phongo_new_regex_from_regex_and_options(zval* object, const char* pattern, const char* flags TSRMLS_DC) /* {{{ */
{
php_phongo_regex_t* intern;

object_init_ex(object, php_phongo_regex_ce);

intern = Z_REGEX_OBJ_P(object);
intern->pattern_len = strlen(pattern);
intern->pattern = estrndup(pattern, intern->pattern_len);
intern->flags_len = strlen(flags);
intern->flags = estrndup(flags, intern->flags_len);

/* Ensure flags are alphabetized upon initialization. This may be removed
* once CDRIVER-1883 is implemented. */
qsort((void*) intern->flags, intern->flags_len, 1, php_phongo_regex_compare_flags);
} /* }}} */

void php_phongo_new_symbol(zval* object, const char* symbol, size_t symbol_len TSRMLS_DC) /* {{{ */
{
php_phongo_symbol_t* intern;

object_init_ex(object, php_phongo_symbol_ce);

intern = Z_SYMBOL_OBJ_P(object);
intern->symbol = estrndup(symbol, symbol_len);
intern->symbol_len = symbol_len;
} /* }}} */

void php_phongo_new_dbpointer(zval* object, const char* ref, size_t ref_len, const bson_oid_t* oid TSRMLS_DC) /* {{{ */
{
php_phongo_dbpointer_t* intern;

object_init_ex(object, php_phongo_dbpointer_ce);

intern = Z_DBPOINTER_OBJ_P(object);
intern->ref = estrndup(ref, ref_len);
intern->ref_len = ref_len;
bson_oid_to_string(oid, intern->id);
} /* }}} */

/* {{{ Memory allocation wrappers */
static void* php_phongo_malloc(size_t num_bytes) /* {{{ */
{
Expand Down
12 changes: 0 additions & 12 deletions php_phongo.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,18 +162,6 @@ void php_phongo_cursor_to_zval(zval* retval, const mongoc_cursor_t* cursor);

void phongo_manager_init(php_phongo_manager_t* manager, const char* uri_string, zval* options, zval* driverOptions TSRMLS_DC);
int php_phongo_set_monitoring_callbacks(mongoc_client_t* client);
void php_phongo_objectid_new_from_oid(zval* object, const bson_oid_t* oid TSRMLS_DC);
void php_phongo_cursor_id_new_from_id(zval* object, int64_t cursorid TSRMLS_DC);
void php_phongo_new_utcdatetime_from_epoch(zval* object, int64_t msec_since_epoch TSRMLS_DC);
void php_phongo_new_timestamp_from_increment_and_timestamp(zval* object, uint32_t increment, uint32_t timestamp TSRMLS_DC);
void php_phongo_new_javascript_from_javascript(int init, zval* object, const char* code, size_t code_len TSRMLS_DC);
void php_phongo_new_javascript_from_javascript_and_scope(int init, zval* object, const char* code, size_t code_len, const bson_t* scope TSRMLS_DC);
void php_phongo_new_binary_from_binary_and_type(zval* object, const char* data, size_t data_len, bson_subtype_t type TSRMLS_DC);
void php_phongo_new_decimal128(zval* object, const bson_decimal128_t* decimal TSRMLS_DC);
void php_phongo_new_int64(zval* object, int64_t integer TSRMLS_DC);
void php_phongo_new_regex_from_regex_and_options(zval* object, const char* pattern, const char* flags TSRMLS_DC);
void php_phongo_new_symbol(zval* object, const char* symbol, size_t symbol_len TSRMLS_DC);
void php_phongo_new_dbpointer(zval* object, const char* namespace, size_t namespace_len, const bson_oid_t* oid TSRMLS_DC);

zend_bool phongo_writeerror_init(zval* return_value, bson_t* bson TSRMLS_DC);
zend_bool phongo_writeconcernerror_init(zval* return_value, bson_t* bson TSRMLS_DC);
Expand Down
10 changes: 10 additions & 0 deletions src/MongoDB/Cursor.c
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,16 @@ static int php_phongo_cursor_to_array_apply(zend_object_iterator* iter, void* pu
return ZEND_HASH_APPLY_KEEP;
} /* }}} */

static void php_phongo_cursor_id_new_from_id(zval* object, int64_t cursorid TSRMLS_DC) /* {{{ */
{
php_phongo_cursorid_t* intern;

object_init_ex(object, php_phongo_cursorid_ce);

intern = Z_CURSORID_OBJ_P(object);
intern->id = cursorid;
} /* }}} */

/* {{{ proto array MongoDB\Driver\Cursor::toArray()
Returns an array of all result documents for this cursor */
static PHP_METHOD(Cursor, toArray)
Expand Down
6 changes: 3 additions & 3 deletions src/MongoDB/Session.c
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ static PHP_METHOD(Session, getOperationTime)
RETURN_NULL();
}

php_phongo_new_timestamp_from_increment_and_timestamp(return_value, increment, timestamp TSRMLS_CC);
php_phongo_bson_new_timestamp_from_increment_and_timestamp(return_value, increment, timestamp TSRMLS_CC);
} /* }}} */

/* {{{ proto MongoDB\Driver\Server|null MongoDB\Driver\Session::getServer()
Expand Down Expand Up @@ -610,13 +610,13 @@ static HashTable* php_phongo_session_get_debug_info(zval* object, int* is_temp T
#if PHP_VERSION_ID >= 70000
zval ztimestamp;

php_phongo_new_timestamp_from_increment_and_timestamp(&ztimestamp, increment, timestamp TSRMLS_CC);
php_phongo_bson_new_timestamp_from_increment_and_timestamp(&ztimestamp, increment, timestamp TSRMLS_CC);
ADD_ASSOC_ZVAL_EX(&retval, "operationTime", &ztimestamp);
#else
zval* ztimestamp;

MAKE_STD_ZVAL(ztimestamp);
php_phongo_new_timestamp_from_increment_and_timestamp(ztimestamp, increment, timestamp TSRMLS_CC);
php_phongo_bson_new_timestamp_from_increment_and_timestamp(ztimestamp, increment, timestamp TSRMLS_CC);
ADD_ASSOC_ZVAL_EX(&retval, "operationTime", ztimestamp);
#endif
} else {
Expand Down
Loading