/* {{{ proto BSON\UTCDateTime UTCDateTime::__construct(integer $milliseconds) Construct a new UTCDateTime */ PHP_METHOD(UTCDateTime, __construct) { php_phongo_utcdatetime_t *intern; zend_error_handling error_handling; long milliseconds; #if SIZEOF_LONG == 4 char *s_milliseconds; int s_milliseconds_len; #endif zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = Z_UTCDATETIME_OBJ_P(getThis()); #if SIZEOF_LONG == 4 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &s_milliseconds, &s_milliseconds_len) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } intern->milliseconds = STRTOLL(s_milliseconds); #else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &milliseconds) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } intern->milliseconds = milliseconds; #endif zend_restore_error_handling(&error_handling TSRMLS_CC); }
/* {{{ proto MongoDB\Driver\UTCDatetime UTCDatetime::__construct(integer $milliseconds) Construct a new UTCDatetime */ PHP_METHOD(UTCDatetime, __construct) { php_phongo_utcdatetime_t *intern; zend_error_handling error_handling; long milliseconds; #if SIZEOF_LONG == 4 char *s_milliseconds; int s_milliseconds_len; #endif zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = (php_phongo_utcdatetime_t *)zend_object_store_get_object(getThis() TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &milliseconds) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } #if SIZEOF_LONG == 4 if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &s_milliseconds, &s_milliseconds_len) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } intern->milliseconds = strtoll(s_milliseconds, NULL, 10); #else intern->milliseconds = milliseconds; #endif zend_restore_error_handling(&error_handling TSRMLS_CC); }
/* {{{ proto MongoDB\Driver\BulkWrite BulkWrite::__construct([array $options = array()]) Constructs a new BulkWrite */ PHP_METHOD(BulkWrite, __construct) { php_phongo_bulkwrite_t *intern; zend_error_handling error_handling; zval *options = NULL; zend_bool ordered = 1; SUPPRESS_UNUSED_WARNING(return_value_ptr) SUPPRESS_UNUSED_WARNING(return_value) SUPPRESS_UNUSED_WARNING(return_value_used) zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = Z_BULKWRITE_OBJ_P(getThis()); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a!", &options) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); if (options && php_array_exists(options, "ordered")) { ordered = php_array_fetch_bool(options, "ordered"); } intern->bulk = phongo_bulkwrite_init(ordered); intern->ordered = ordered; intern->bypass = BYPASS_UNSET; intern->num_ops = 0; if (options && php_array_exists(options, "bypassDocumentValidation")) { zend_bool bypass = php_array_fetch_bool(options, "bypassDocumentValidation"); mongoc_bulk_operation_set_bypass_document_validation(intern->bulk, bypass); intern->bypass = bypass; } }
/* {{{ proto BSON\Javascript Javascript::__construct(string $javascript[, array|object $document]) * The string is JavaScript code. The document is a mapping from identifiers to values, representing the scope in which the string should be evaluated * NOTE: eJSON does not support this type :( */ PHP_METHOD(Javascript, __construct) { php_phongo_javascript_t *intern; zend_error_handling error_handling; char *javascript; int javascript_len; zval *document = NULL; bson_t scope = BSON_INITIALIZER; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = (php_phongo_javascript_t *)zend_object_store_get_object(getThis() TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|A!", &javascript, &javascript_len, &document) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); if (document) { zval_to_bson(document, PHONGO_BSON_NONE, &scope, NULL TSRMLS_CC); } php_phongo_new_javascript_from_javascript_and_scope(0, getThis(), javascript, javascript_len, &scope TSRMLS_CC); bson_destroy(&scope); }
/* {{{ proto BSON\Regex Regex::__construct(string $pattern, string $flags) Constructs a new regular expression. */ PHP_METHOD(Regex, __construct) { php_phongo_regex_t *intern; zend_error_handling error_handling; char *pattern; phongo_zpp_char_len pattern_len; char *flags; phongo_zpp_char_len flags_len; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = Z_REGEX_OBJ_P(getThis()); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &pattern, &pattern_len, &flags, &flags_len) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); intern->pattern = estrndup(pattern, pattern_len); intern->pattern_len = pattern_len; intern->flags = estrndup(flags, flags_len); intern->flags_len = flags_len; }
/* {{{ proto void MongoDB\BSON\Undefined::unserialize(string $serialized) */ static PHP_METHOD(Undefined, unserialize) { zend_error_handling error_handling; char* serialized; phongo_zpp_char_len serialized_len; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &serialized, &serialized_len) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); } /* }}} */
/* {{{ proto MongoDB\Driver\CursorId CursorId::__construct(string $id) Construct a new CursorId */ PHP_METHOD(CursorId, __construct) { php_phongo_cursorid_t *intern; zend_error_handling error_handling; char *id; int id_len; (void)return_value; (void)return_value_ptr; (void)return_value_used; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = (php_phongo_cursorid_t *)zend_object_store_get_object(getThis() TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &id, &id_len) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); }
/* {{{ proto MongoDB\Driver\ReadPreference ReadPreference::__construct(integer $readPreference[, array $tagSets = array()]) Constructs a new ReadPreference */ PHP_METHOD(ReadPreference, __construct) { php_phongo_readpreference_t *intern; zend_error_handling error_handling; long readPreference; zval *tagSets = NULL; (void)return_value_ptr; (void)return_value; (void)return_value_used; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = (php_phongo_readpreference_t *)zend_object_store_get_object(getThis() TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|a!", &readPreference, &tagSets) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); switch(readPreference) { case MONGOC_READ_PRIMARY: case MONGOC_READ_SECONDARY: case MONGOC_READ_PRIMARY_PREFERRED: case MONGOC_READ_SECONDARY_PREFERRED: case MONGOC_READ_NEAREST: intern->read_preference = mongoc_read_prefs_new(readPreference); if (tagSets) { bson_t *tags = bson_new(); zval_to_bson(tagSets, PHONGO_BSON_NONE, (bson_t *)tags, NULL TSRMLS_CC); mongoc_read_prefs_set_tags(intern->read_preference, tags); bson_destroy(tags); if (!mongoc_read_prefs_is_valid(intern->read_preference)) { phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "%s", "Invalid tagSet"); return; } } break; default: phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "%s", "Invalid ReadPreference"); return; } }
/* {{{ proto MongoDB\WriteResult WriteException::getWriteResult() Returns the WriteResult from the failed write operation. */ PHP_METHOD(WriteException, getWriteResult) { zend_error_handling error_handling; zval *writeresult; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); if (zend_parse_parameters_none() == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); writeresult = zend_read_property(php_phongo_writeexception_ce, getThis(), ZEND_STRL("writeResult"), 0 TSRMLS_CC); RETURN_ZVAL(writeresult, 1, 0); }
/* {{{ proto MongoDB\Driver\Result Result::__construct(MongoDB\Driver\Server $server, array|object $responseDocument) Constructs a new Result */ PHP_METHOD(Result, __construct) { php_phongo_result_t *intern; zend_error_handling error_handling; zval *server; zval *responseDocument; (void)return_value; (void)return_value_ptr; (void)return_value_used; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = (php_phongo_result_t *)zend_object_store_get_object(getThis() TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "OA", &server, php_phongo_server_ce, &responseDocument) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); }
/* {{{ proto BSON\Timestamp Timestamp::__construct(integer $increment, int $timestamp) Construct a new BSON Timestamp (4bytes increment, 4bytes timestamp) */ PHP_METHOD(Timestamp, __construct) { php_phongo_timestamp_t *intern; zend_error_handling error_handling; long increment; long timestamp; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = Z_TIMESTAMP_OBJ_P(getThis()); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &increment, ×tamp) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); intern->increment = increment; intern->timestamp = timestamp; }
/* {{{ proto MongoDB\Query Query::__construct(array|object $filter[, array $options = array()]) Constructs a new Query */ PHP_METHOD(Query, __construct) { php_phongo_query_t *intern; zend_error_handling error_handling; zval *filter; zval *options = NULL; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = (php_phongo_query_t *)zend_object_store_get_object(getThis() TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "A|a!", &filter, &options) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); phongo_query_init(intern, filter, options TSRMLS_CC); }
/* {{{ proto BSON\Binary Binary::__construct(string $data, int $type) Construct a new BSON Binary type */ PHP_METHOD(Binary, __construct) { php_phongo_binary_t *intern; zend_error_handling error_handling; char *data; int data_len; long type; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = (php_phongo_binary_t *)zend_object_store_get_object(getThis() TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &data, &data_len, &type) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); intern->data = estrndup(data, data_len); intern->data_len = data_len; intern->type = type; }
/* {{{ proto MongoDB\Driver\Query Query::__construct(array|object $filter[, array $options = array()]) Constructs a new Query */ PHP_METHOD(Query, __construct) { php_phongo_query_t *intern; zend_error_handling error_handling; zval *zfilter; zval *zoptions = NULL; bson_t bfilter; bson_t boptions = BSON_INITIALIZER; (void)return_value_ptr; (void)return_value; (void)return_value_used; zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = (php_phongo_query_t *)zend_object_store_get_object(getThis() TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "A|a!", &zfilter, &zoptions) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); intern->query = bson_new(); bson_init(&bfilter); zval_to_bson(zfilter, PHONGO_BSON_NONE, &bfilter, NULL TSRMLS_CC); if (zoptions) { bson_init(&boptions); zval_to_bson(zoptions, PHONGO_BSON_NONE, &boptions, NULL TSRMLS_CC); } if (!phongo_query_init(intern, &bfilter, &boptions TSRMLS_CC)) { bson_clear(&intern->query); } bson_destroy(&bfilter); bson_destroy(&boptions); }
/* {{{ proto void MongoDB\Driver\WriteConcern::__construct(integer|string $w[, integer $wtimeout[, boolean $journal]]) Constructs a new WriteConcern */ static PHP_METHOD(WriteConcern, __construct) { php_phongo_writeconcern_t *intern; zend_error_handling error_handling; zval *w, *journal; phongo_long wtimeout = 0; SUPPRESS_UNUSED_WARNING(return_value) SUPPRESS_UNUSED_WARNING(return_value_ptr) SUPPRESS_UNUSED_WARNING(return_value_used) zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = Z_WRITECONCERN_OBJ_P(getThis()); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|lz", &w, &wtimeout, &journal) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); intern->write_concern = mongoc_write_concern_new(); if (Z_TYPE_P(w) == IS_LONG) { if (Z_LVAL_P(w) < -3) { phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Expected w to be >= -3, %ld given", Z_LVAL_P(w)); return; } mongoc_write_concern_set_w(intern->write_concern, Z_LVAL_P(w)); } else if (Z_TYPE_P(w) == IS_STRING) { if (strcmp(Z_STRVAL_P(w), PHONGO_WRITE_CONCERN_W_MAJORITY) == 0) { mongoc_write_concern_set_w(intern->write_concern, MONGOC_WRITE_CONCERN_W_MAJORITY); } else { mongoc_write_concern_set_wtag(intern->write_concern, Z_STRVAL_P(w)); } } else { phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Expected w to be integer or string, %s given", zend_get_type_by_const(Z_TYPE_P(w))); return; } switch(ZEND_NUM_ARGS()) { case 3: if (Z_TYPE_P(journal) != IS_NULL) { #ifdef ZEND_ENGINE_3 mongoc_write_concern_set_journal(intern->write_concern, zend_is_true(journal)); #else mongoc_write_concern_set_journal(intern->write_concern, Z_BVAL_P(journal)); #endif } /* fallthrough */ case 2: if (wtimeout < 0) { phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Expected wtimeout to be >= 0, %" PHONGO_LONG_FORMAT " given", wtimeout); return; } if (wtimeout > INT32_MAX) { phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Expected wtimeout to be <= %" PRId32 ", %" PHONGO_LONG_FORMAT " given", INT32_MAX, wtimeout); return; } mongoc_write_concern_set_wtimeout(intern->write_concern, wtimeout); } } /* }}} */