mirror of
https://github.com/macintoshplus/mongo-php-driver.git
synced 2026-04-02 14:22:19 +02:00
Merged pull request #141
This commit is contained in:
@@ -20,7 +20,7 @@ build_lcov() {
|
||||
build_lcov
|
||||
|
||||
phpize
|
||||
./configure --enable-developer-flags --enable-coverage
|
||||
./configure --enable-developer-flags --enable-coverage CFLAGS="-Wno-type-limits"
|
||||
make all -j4
|
||||
sudo make install
|
||||
echo "Use the most-up-to-date run-tests.. old ones like 5.3 don't report failure exit codes"
|
||||
|
||||
1
VERSION_CURRENT
Normal file
1
VERSION_CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
1.3.0-dev
|
||||
1
VERSION_RELEASED
Normal file
1
VERSION_RELEASED
Normal file
@@ -0,0 +1 @@
|
||||
1.2.2
|
||||
23
config.m4
23
config.m4
@@ -235,6 +235,7 @@ if test "$MONGODB" != "no"; then
|
||||
mongoc-cursor-transform.c \
|
||||
mongoc-cursor-cursorid.c \
|
||||
mongoc-database.c \
|
||||
mongoc-find-and-modify.c \
|
||||
mongoc-init.c \
|
||||
mongoc-gridfs.c \
|
||||
mongoc-gridfs-file.c \
|
||||
@@ -246,12 +247,15 @@ if test "$MONGODB" != "no"; then
|
||||
mongoc-log.c \
|
||||
mongoc-matcher-op.c \
|
||||
mongoc-matcher.c \
|
||||
mongoc-memcmp.c \
|
||||
mongoc-opcode.c \
|
||||
mongoc-queue.c \
|
||||
mongoc-read-concern.c \
|
||||
mongoc-read-prefs.c \
|
||||
mongoc-rpc.c \
|
||||
mongoc-set.c \
|
||||
mongoc-server-description.c \
|
||||
mongoc-server-stream.c \
|
||||
mongoc-socket.c \
|
||||
mongoc-stream.c \
|
||||
mongoc-stream-buffered.c \
|
||||
@@ -299,13 +303,13 @@ PHP_ARG_WITH(libbson, Use system libbson,
|
||||
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
|
||||
AC_MSG_CHECKING(for libbson)
|
||||
if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libbson-1.0; then
|
||||
if $PKG_CONFIG libbson-1.0 --atleast-version 1.2.0; then
|
||||
if $PKG_CONFIG libbson-1.0 --atleast-version 1.3.0; then
|
||||
LIBBSON_INC=`$PKG_CONFIG libbson-1.0 --cflags`
|
||||
LIBBSON_LIB=`$PKG_CONFIG libbson-1.0 --libs`
|
||||
LIBBSON_VER=`$PKG_CONFIG libbson-1.0 --modversion`
|
||||
AC_MSG_RESULT(version $LIBBSON_VER found)
|
||||
else
|
||||
AC_MSG_ERROR(system libbson must be upgraded to version >= 1.2.0)
|
||||
AC_MSG_ERROR(system libbson must be upgraded to version >= 1.3.0)
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR(pkgconfig and libbson must be installed)
|
||||
@@ -314,8 +318,8 @@ PHP_ARG_WITH(libbson, Use system libbson,
|
||||
PHP_EVAL_LIBLINE($LIBBSON_LIB, MONGODB_SHARED_LIBADD)
|
||||
AC_DEFINE(HAVE_SYSTEM_LIBBSON, 1, [Use system libbson])
|
||||
else
|
||||
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libbson/src/yajl], $YAJL_SOURCES, [$STD_CFLAGS $MAINTAINER_CFLAGS], shared_objects_mongodb, yes)
|
||||
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libbson/src/bson], $BSON_SOURCES, [$STD_CFLAGS $MAINTAINER_CFLAGS], shared_objects_mongodb, yes)
|
||||
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libbson/src/yajl], $YAJL_SOURCES, [$STD_CFLAGS], shared_objects_mongodb, yes)
|
||||
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libbson/src/bson], $BSON_SOURCES, [$STD_CFLAGS], shared_objects_mongodb, yes)
|
||||
fi
|
||||
|
||||
dnl libmongoc stuff {{{
|
||||
@@ -331,7 +335,7 @@ PHP_ARG_WITH(libmongoc, Use system libmongoc,
|
||||
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
|
||||
AC_MSG_CHECKING(for libmongoc)
|
||||
if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libmongoc-1.0 && $PKG_CONFIG --exists libmongoc-priv; then
|
||||
if $PKG_CONFIG libmongoc-1.0 --atleast-version 1.2.0; then
|
||||
if $PKG_CONFIG libmongoc-1.0 --atleast-version 1.3.0; then
|
||||
LIBMONGOC_INC=`$PKG_CONFIG libmongoc-priv --cflags`
|
||||
LIBMONGOC_LIB=`$PKG_CONFIG libmongoc-priv --libs`
|
||||
LIBMONGOC_VER=`$PKG_CONFIG libmongoc-priv --modversion`
|
||||
@@ -339,7 +343,7 @@ PHP_ARG_WITH(libmongoc, Use system libmongoc,
|
||||
CFLAGS="$CFLAGS -DMONGOC_I_AM_A_DRIVER"
|
||||
|
||||
else
|
||||
AC_MSG_ERROR(system libmongoc must be upgraded to version >= 1.2.0)
|
||||
AC_MSG_ERROR(system libmongoc must be upgraded to version >= 1.3.0)
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR(pkgconfig and mongoc must be installed)
|
||||
@@ -350,9 +354,9 @@ PHP_ARG_WITH(libmongoc, Use system libmongoc,
|
||||
else
|
||||
CPPFLAGS="$CPPFLAGS -DBSON_COMPILATION -DMONGOC_COMPILATION -DMONGOC_TRACE"
|
||||
|
||||
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES, [$STD_CFLAGS $MAINTAINER_CFLAGS], shared_objects_mongodb, yes)
|
||||
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES_SSL, [$STD_CFLAGS $MAINTAINER_CFLAGS], shared_objects_mongodb, yes)
|
||||
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES_SASL, [$STD_CFLAGS $MAINTAINER_CFLAGS], shared_objects_mongodb, yes)
|
||||
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES, [$STD_CFLAGS], shared_objects_mongodb, yes)
|
||||
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES_SSL, [$STD_CFLAGS], shared_objects_mongodb, yes)
|
||||
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES_SASL, [$STD_CFLAGS], shared_objects_mongodb, yes)
|
||||
|
||||
|
||||
PHP_SETUP_OPENSSL(MONGODB_SHARED_LIBADD)
|
||||
@@ -426,6 +430,7 @@ else
|
||||
AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 0)
|
||||
fi
|
||||
|
||||
m4_include(src/libmongoc/build/autotools/WeakSymbols.m4)
|
||||
m4_include(src/libmongoc/build/autotools/m4/ax_pthread.m4)
|
||||
AX_PTHREAD
|
||||
|
||||
|
||||
@@ -15,11 +15,12 @@ if (PHP_MONGODB != "no") {
|
||||
ADD_SOURCES(configure_module_dirname + "/src/contrib/", "php-ssl.c", "mongodb");
|
||||
ADD_SOURCES(configure_module_dirname + "/src/libbson/src/yajl", "yajl_version.c yajl.c yajl_encode.c yajl_lex.c yajl_parser.c yajl_buf.c yajl_tree.c yajl_alloc.c yajl_gen.c", "mongodb");
|
||||
ADD_SOURCES(configure_module_dirname + "/src/libbson/src/bson", "bcon.c bson.c bson-atomic.c bson-clock.c bson-context.c bson-error.c bson-iter.c bson-iso8601.c bson-json.c bson-keys.c bson-md5.c bson-memory.c bson-oid.c bson-reader.c bson-string.c bson-timegm.c bson-utf8.c bson-value.c bson-version-functions.c bson-writer.c", "mongodb");
|
||||
ADD_SOURCES(configure_module_dirname + "/src/libmongoc/src/mongoc", "mongoc-array.c mongoc-async.c mongoc-async-cmd.c mongoc-buffer.c mongoc-bulk-operation.c mongoc-b64.c mongoc-client.c mongoc-client-pool.c mongoc-cluster.c mongoc-collection.c mongoc-counters.c mongoc-cursor.c mongoc-cursor-array.c mongoc-cursor-transform.c mongoc-cursor-cursorid.c mongoc-database.c mongoc-init.c mongoc-gridfs.c mongoc-gridfs-file.c mongoc-gridfs-file-page.c mongoc-gridfs-file-list.c mongoc-host-list.c mongoc-index.c mongoc-list.c mongoc-log.c mongoc-matcher-op.c mongoc-matcher.c mongoc-opcode.c mongoc-queue.c mongoc-read-prefs.c mongoc-rpc.c mongoc-set.c mongoc-server-description.c mongoc-socket.c mongoc-stream.c mongoc-stream-buffered.c mongoc-stream-file.c mongoc-stream-gridfs.c mongoc-stream-socket.c mongoc-topology.c mongoc-topology-scanner.c mongoc-topology-description.c mongoc-uri.c mongoc-util.c mongoc-version-functions.c mongoc-write-command.c mongoc-write-concern.c", "mongodb");
|
||||
ADD_SOURCES(configure_module_dirname + "/src/libmongoc/src/mongoc", "mongoc-array.c mongoc-async.c mongoc-async-cmd.c mongoc-buffer.c mongoc-bulk-operation.c mongoc-b64.c mongoc-client.c mongoc-client-pool.c mongoc-cluster.c mongoc-collection.c mongoc-counters.c mongoc-cursor.c mongoc-cursor-array.c mongoc-cursor-transform.c mongoc-cursor-cursorid.c mongoc-database.c mongoc-find-and-modify.c mongoc-init.c mongoc-gridfs.c mongoc-gridfs-file.c mongoc-gridfs-file-page.c mongoc-gridfs-file-list.c mongoc-host-list.c mongoc-index.c mongoc-list.c mongoc-log.c mongoc-matcher-op.c mongoc-matcher.c mongoc-memcmp.c mongoc-opcode.c mongoc-queue.c mongoc-read-prefs.c mongoc-read-concern.c mongoc-rpc.c mongoc-set.c mongoc-server-description.c mongoc-server-stream.c mongoc-socket.c mongoc-stream.c mongoc-stream-buffered.c mongoc-stream-file.c mongoc-stream-gridfs.c mongoc-stream-socket.c mongoc-topology.c mongoc-topology-scanner.c mongoc-topology-description.c mongoc-uri.c mongoc-util.c mongoc-version-functions.c mongoc-write-command.c mongoc-write-concern.c", "mongodb");
|
||||
ADD_SOURCES(configure_module_dirname + "/src/libmongoc/src/mongoc", "mongoc-rand.c mongoc-scram.c mongoc-stream-tls.c mongoc-ssl.c", "mongodb");
|
||||
ADD_SOURCES(configure_module_dirname + "/src/libmongoc/src/mongoc", "mongoc-sasl.c", "mongodb");
|
||||
|
||||
AC_DEFINE("HAVE_MONGOC", 1);
|
||||
AC_DEFINE("MONGOC_HAVE_WEAK_SYMBOLS", 1);
|
||||
|
||||
if (!CHECK_LIB("libsasl.lib", "mongodb", PHP_MONGODB)) {
|
||||
WARNING("mongodb libsasl support not enabled, libs not found");
|
||||
|
||||
18
php_phongo.c
18
php_phongo.c
@@ -643,12 +643,14 @@ int phongo_execute_command(mongoc_client_t *client, const char *db, const bson_t
|
||||
* after the error checking above. */
|
||||
if (bson_iter_init_find(&iter, doc, "cursor") && BSON_ITER_HOLDS_DOCUMENT(&iter) && bson_iter_recurse(&iter, &child)) {
|
||||
mongoc_cursor_cursorid_t *cid;
|
||||
bson_t empty = BSON_INITIALIZER;
|
||||
|
||||
_mongoc_cursor_cursorid_init(cursor);
|
||||
_mongoc_cursor_cursorid_init(cursor, &empty);
|
||||
cursor->limit = 0;
|
||||
|
||||
cid = cursor->iface_data;
|
||||
cid->has_cursor = true;
|
||||
cid->in_batch = true;
|
||||
bson_destroy (&empty);
|
||||
|
||||
while (bson_iter_next(&child)) {
|
||||
if (BSON_ITER_IS_KEY(&child, "id")) {
|
||||
@@ -659,8 +661,8 @@ int phongo_execute_command(mongoc_client_t *client, const char *db, const bson_t
|
||||
ns = bson_iter_utf8(&child, &cursor->nslen);
|
||||
bson_strncpy(cursor->ns, ns, sizeof cursor->ns);
|
||||
} else if (BSON_ITER_IS_KEY(&child, "firstBatch")) {
|
||||
if (BSON_ITER_HOLDS_ARRAY(&child) && bson_iter_recurse(&child, &cid->first_batch_iter)) {
|
||||
cid->in_first_batch = true;
|
||||
if (BSON_ITER_HOLDS_ARRAY(&child) && bson_iter_recurse(&child, &cid->batch_iter)) {
|
||||
cid->in_batch = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -919,11 +921,6 @@ bool phongo_stream_socket_check_closed(mongoc_stream_t *stream) /* {{{ */
|
||||
return PHP_STREAM_OPTION_RETURN_OK != php_stream_set_option(base_stream->stream, PHP_STREAM_OPTION_CHECK_LIVENESS, 0, NULL);
|
||||
} /* }}} */
|
||||
|
||||
mongoc_stream_t* phongo_stream_get_base_stream(mongoc_stream_t *stream) /* {{{ */
|
||||
{
|
||||
return (mongoc_stream_t *) stream;
|
||||
} /* }}} */
|
||||
|
||||
ssize_t phongo_stream_poll (mongoc_stream_poll_t *streams, size_t nstreams, int32_t timeout) /* {{{ */
|
||||
{
|
||||
php_pollfd *fds = NULL;
|
||||
@@ -1174,7 +1171,6 @@ mongoc_stream_t* phongo_stream_initiator(const mongoc_uri_t *uri, const mongoc_h
|
||||
base_stream->vtable.readv = phongo_stream_readv;
|
||||
base_stream->vtable.setsockopt = phongo_stream_setsockopt;
|
||||
base_stream->vtable.check_closed = phongo_stream_socket_check_closed;
|
||||
base_stream->vtable.get_base_stream = phongo_stream_get_base_stream;
|
||||
base_stream->vtable.poll = phongo_stream_poll;
|
||||
|
||||
if (host->family != AF_UNIX) {
|
||||
@@ -1356,10 +1352,8 @@ void php_phongo_cursor_to_zval(zval *retval, php_phongo_cursor_t *cursor) /* {{{
|
||||
_ADD_BOOL(zcursor, is_command);
|
||||
_ADD_BOOL(zcursor, sent);
|
||||
_ADD_BOOL(zcursor, done);
|
||||
_ADD_BOOL(zcursor, failed);
|
||||
_ADD_BOOL(zcursor, end_of_event);
|
||||
_ADD_BOOL(zcursor, in_exhaust);
|
||||
_ADD_BOOL(zcursor, redir_primary);
|
||||
_ADD_BOOL(zcursor, has_fields);
|
||||
#undef _ADD_BOOL
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@ PHP_METHOD(Javascript, __construct)
|
||||
}
|
||||
|
||||
php_phongo_new_javascript_from_javascript_and_scope(0, getThis(), javascript, javascript_len, &scope TSRMLS_CC);
|
||||
bson_destroy(&scope);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
@@ -315,7 +315,7 @@ HashTable *php_phongo_bulkwrite_get_debug_info(zval *object, int *is_temp TSRMLS
|
||||
add_assoc_null_ex(&retval, ZEND_STRS("collection"));
|
||||
}
|
||||
|
||||
add_assoc_bool_ex(&retval, ZEND_STRS("ordered"), intern->bulk->ordered);
|
||||
add_assoc_bool_ex(&retval, ZEND_STRS("ordered"), intern->bulk->flags.ordered);
|
||||
add_assoc_bool_ex(&retval, ZEND_STRS("executed"), intern->bulk->executed);
|
||||
add_assoc_long_ex(&retval, ZEND_STRS("server_id"), intern->bulk->hint);
|
||||
|
||||
|
||||
@@ -256,7 +256,8 @@ PHP_METHOD(Manager, selectServer)
|
||||
php_phongo_manager_t *intern;
|
||||
zval *zreadPreference = NULL;
|
||||
const mongoc_read_prefs_t *readPreference;
|
||||
uint32_t server_id;
|
||||
bson_error_t error;
|
||||
mongoc_server_description_t *selected_server = NULL;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -267,8 +268,13 @@ PHP_METHOD(Manager, selectServer)
|
||||
}
|
||||
|
||||
readPreference = phongo_read_preference_from_zval(zreadPreference TSRMLS_CC);
|
||||
server_id = mongoc_cluster_preselect(&intern->client->cluster, MONGOC_OPCODE_QUERY, readPreference, NULL);
|
||||
phongo_server_init(return_value, intern->client, server_id TSRMLS_CC);
|
||||
selected_server = mongoc_topology_select(intern->client->topology, MONGOC_SS_READ, readPreference, MONGOC_SS_DEFAULT_LOCAL_THRESHOLD_MS, &error);
|
||||
if (selected_server) {
|
||||
phongo_server_init(return_value, intern->client, selected_server->id TSRMLS_CC);
|
||||
mongoc_server_description_destroy(selected_server);
|
||||
} else {
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", error.message);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto void MongoDB\Driver\Manager::__wakeUp()
|
||||
|
||||
@@ -75,7 +75,6 @@ PHP_METHOD(Query, __construct)
|
||||
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)) {
|
||||
|
||||
@@ -134,6 +134,7 @@ PHP_METHOD(Server, getHost)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
intern = (php_phongo_server_t *)zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||
@@ -142,11 +143,11 @@ PHP_METHOD(Server, getHost)
|
||||
return;
|
||||
}
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
RETURN_STRING(sd->host.host, 1);
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto array Server::getTags()
|
||||
@@ -155,6 +156,7 @@ PHP_METHOD(Server, getTags)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -165,7 +167,7 @@ PHP_METHOD(Server, getTags)
|
||||
}
|
||||
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER;
|
||||
state.map.root_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
|
||||
state.map.document_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
|
||||
@@ -175,7 +177,7 @@ PHP_METHOD(Server, getTags)
|
||||
RETURN_ZVAL(state.zchild, 0, 1);
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto array Server::getInfo()
|
||||
@@ -184,6 +186,7 @@ PHP_METHOD(Server, getInfo)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -194,7 +197,7 @@ PHP_METHOD(Server, getInfo)
|
||||
}
|
||||
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER;
|
||||
state.map.root_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
|
||||
state.map.document_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
|
||||
@@ -204,7 +207,7 @@ PHP_METHOD(Server, getInfo)
|
||||
RETURN_ZVAL(state.zchild, 0, 1);
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto integer Server::getLatency()
|
||||
@@ -213,6 +216,7 @@ PHP_METHOD(Server, getLatency)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -222,11 +226,11 @@ PHP_METHOD(Server, getLatency)
|
||||
return;
|
||||
}
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
RETURN_LONG(sd->round_trip_time);
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto integer Server::getPort()
|
||||
@@ -235,6 +239,7 @@ PHP_METHOD(Server, getPort)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -244,11 +249,11 @@ PHP_METHOD(Server, getPort)
|
||||
return;
|
||||
}
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
RETURN_LONG(sd->host.port);
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto integer Server::getType()
|
||||
@@ -257,6 +262,7 @@ PHP_METHOD(Server, getType)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -266,11 +272,11 @@ PHP_METHOD(Server, getType)
|
||||
return;
|
||||
}
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
RETURN_LONG(sd->type);
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto bool Server::isPrimary()
|
||||
@@ -279,6 +285,7 @@ PHP_METHOD(Server, isPrimary)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -288,11 +295,11 @@ PHP_METHOD(Server, isPrimary)
|
||||
return;
|
||||
}
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
RETURN_BOOL(sd->type == MONGOC_SERVER_RS_PRIMARY);
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto bool Server::isSecondary()
|
||||
@@ -301,6 +308,7 @@ PHP_METHOD(Server, isSecondary)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -310,11 +318,11 @@ PHP_METHOD(Server, isSecondary)
|
||||
return;
|
||||
}
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
RETURN_BOOL(sd->type == MONGOC_SERVER_RS_SECONDARY);
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto bool Server::isArbiter()
|
||||
@@ -323,6 +331,7 @@ PHP_METHOD(Server, isArbiter)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -332,11 +341,11 @@ PHP_METHOD(Server, isArbiter)
|
||||
return;
|
||||
}
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
RETURN_BOOL(sd->type == MONGOC_SERVER_RS_ARBITER);
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto bool Server::isHidden()
|
||||
@@ -345,6 +354,7 @@ PHP_METHOD(Server, isHidden)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -354,13 +364,13 @@ PHP_METHOD(Server, isHidden)
|
||||
return;
|
||||
}
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
bson_iter_t iter;
|
||||
|
||||
RETURN_BOOL(bson_iter_init_find_case(&iter, &sd->last_is_master, "hidden") && bson_iter_as_bool(&iter));
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto bool Server::isPassive()
|
||||
@@ -369,6 +379,7 @@ PHP_METHOD(Server, isPassive)
|
||||
{
|
||||
php_phongo_server_t *intern;
|
||||
mongoc_server_description_t *sd;
|
||||
bson_error_t error;
|
||||
(void)return_value_ptr; (void)return_value_used;
|
||||
|
||||
|
||||
@@ -378,13 +389,13 @@ PHP_METHOD(Server, isPassive)
|
||||
return;
|
||||
}
|
||||
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
bson_iter_t iter;
|
||||
|
||||
RETURN_BOOL(bson_iter_init_find_case(&iter, &sd->last_is_master, "passive") && bson_iter_as_bool(&iter));
|
||||
}
|
||||
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -470,16 +481,24 @@ static int php_phongo_server_compare_objects(zval *o1, zval *o2 TSRMLS_DC) /* {{
|
||||
{
|
||||
php_phongo_server_t *intern1;
|
||||
php_phongo_server_t *intern2;
|
||||
bson_error_t error1;
|
||||
bson_error_t error2;
|
||||
mongoc_server_description_t *sd1, *sd2;
|
||||
|
||||
intern1 = (php_phongo_server_t *)zend_object_store_get_object(o1 TSRMLS_CC);
|
||||
intern2 = (php_phongo_server_t *)zend_object_store_get_object(o2 TSRMLS_CC);
|
||||
|
||||
sd1 = mongoc_topology_description_server_by_id(&intern1->client->topology->description, intern1->server_id);
|
||||
sd2 = mongoc_topology_description_server_by_id(&intern2->client->topology->description, intern2->server_id);
|
||||
sd1 = mongoc_topology_description_server_by_id(&intern1->client->topology->description, intern1->server_id, &error1);
|
||||
sd2 = mongoc_topology_description_server_by_id(&intern2->client->topology->description, intern2->server_id, &error2);
|
||||
|
||||
if (!sd1 || !sd2) {
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
if (!sd1 && !sd2) {
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server descriptions: %s and %s", error1.message, error2.message);
|
||||
} else if (!sd1) {
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error1.message);
|
||||
} else {
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error2.message);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -517,14 +536,14 @@ HashTable *php_phongo_server_get_debug_info(zval *object, int *is_temp TSRMLS_DC
|
||||
php_phongo_server_t *intern = NULL;
|
||||
zval retval = zval_used_for_init;
|
||||
mongoc_server_description_t *sd;
|
||||
|
||||
bson_error_t error;
|
||||
|
||||
*is_temp = 1;
|
||||
intern = (php_phongo_server_t *)zend_object_store_get_object(object TSRMLS_CC);
|
||||
|
||||
|
||||
if (!(sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) {
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone");
|
||||
if (!(sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) {
|
||||
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
Submodule src/libbson updated: e434c354a3...96731f7926
Submodule src/libmongoc updated: 495cd3ffa9...4839021d58
@@ -38,7 +38,7 @@ object(MongoDB\Driver\Command)#%d (1) {
|
||||
bool(true)
|
||||
object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
["cursor"]=>
|
||||
array(19) {
|
||||
array(%d) {
|
||||
["stamp"]=>
|
||||
int(0)
|
||||
["is_command"]=>
|
||||
@@ -47,14 +47,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
bool(true)
|
||||
["done"]=>
|
||||
bool(false)
|
||||
["failed"]=>
|
||||
bool(false)
|
||||
["end_of_event"]=>
|
||||
bool(false)
|
||||
["in_exhaust"]=>
|
||||
bool(false)
|
||||
["redir_primary"]=>
|
||||
bool(false)
|
||||
["has_fields"]=>
|
||||
bool(false)
|
||||
["query"]=>
|
||||
|
||||
@@ -36,7 +36,7 @@ var_dump(iterator_to_array($qr));
|
||||
bool(true)
|
||||
object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
["cursor"]=>
|
||||
array(19) {
|
||||
array(%d) {
|
||||
["stamp"]=>
|
||||
int(0)
|
||||
["is_command"]=>
|
||||
@@ -45,14 +45,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
bool(true)
|
||||
["done"]=>
|
||||
bool(false)
|
||||
["failed"]=>
|
||||
bool(false)
|
||||
["end_of_event"]=>
|
||||
bool(false)
|
||||
["in_exhaust"]=>
|
||||
bool(false)
|
||||
["redir_primary"]=>
|
||||
bool(false)
|
||||
["has_fields"]=>
|
||||
bool(true)
|
||||
["query"]=>
|
||||
|
||||
@@ -32,7 +32,7 @@ foreach($rps as $r) {
|
||||
--EXPECTF--
|
||||
object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
["cursor"]=>
|
||||
array(18) {
|
||||
array(%d) {
|
||||
["stamp"]=>
|
||||
int(0)
|
||||
["is_command"]=>
|
||||
@@ -41,14 +41,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
bool(true)
|
||||
["done"]=>
|
||||
bool(true)
|
||||
["failed"]=>
|
||||
bool(false)
|
||||
["end_of_event"]=>
|
||||
bool(true)
|
||||
["in_exhaust"]=>
|
||||
bool(false)
|
||||
["redir_primary"]=>
|
||||
bool(false)
|
||||
["has_fields"]=>
|
||||
bool(false)
|
||||
["query"]=>
|
||||
@@ -88,7 +84,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
}
|
||||
object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
["cursor"]=>
|
||||
array(18) {
|
||||
array(%d) {
|
||||
["stamp"]=>
|
||||
int(0)
|
||||
["is_command"]=>
|
||||
@@ -97,14 +93,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
bool(true)
|
||||
["done"]=>
|
||||
bool(true)
|
||||
["failed"]=>
|
||||
bool(false)
|
||||
["end_of_event"]=>
|
||||
bool(true)
|
||||
["in_exhaust"]=>
|
||||
bool(false)
|
||||
["redir_primary"]=>
|
||||
bool(false)
|
||||
["has_fields"]=>
|
||||
bool(false)
|
||||
["query"]=>
|
||||
@@ -144,7 +136,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
}
|
||||
object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
["cursor"]=>
|
||||
array(18) {
|
||||
array(%d) {
|
||||
["stamp"]=>
|
||||
int(0)
|
||||
["is_command"]=>
|
||||
@@ -153,14 +145,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
bool(true)
|
||||
["done"]=>
|
||||
bool(true)
|
||||
["failed"]=>
|
||||
bool(false)
|
||||
["end_of_event"]=>
|
||||
bool(true)
|
||||
["in_exhaust"]=>
|
||||
bool(false)
|
||||
["redir_primary"]=>
|
||||
bool(false)
|
||||
["has_fields"]=>
|
||||
bool(false)
|
||||
["query"]=>
|
||||
@@ -200,7 +188,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
}
|
||||
object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
["cursor"]=>
|
||||
array(18) {
|
||||
array(%d) {
|
||||
["stamp"]=>
|
||||
int(0)
|
||||
["is_command"]=>
|
||||
@@ -209,14 +197,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
bool(true)
|
||||
["done"]=>
|
||||
bool(true)
|
||||
["failed"]=>
|
||||
bool(false)
|
||||
["end_of_event"]=>
|
||||
bool(true)
|
||||
["in_exhaust"]=>
|
||||
bool(false)
|
||||
["redir_primary"]=>
|
||||
bool(false)
|
||||
["has_fields"]=>
|
||||
bool(false)
|
||||
["query"]=>
|
||||
@@ -256,7 +240,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
}
|
||||
object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
["cursor"]=>
|
||||
array(18) {
|
||||
array(%d) {
|
||||
["stamp"]=>
|
||||
int(0)
|
||||
["is_command"]=>
|
||||
@@ -265,14 +249,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
bool(true)
|
||||
["done"]=>
|
||||
bool(true)
|
||||
["failed"]=>
|
||||
bool(false)
|
||||
["end_of_event"]=>
|
||||
bool(true)
|
||||
["in_exhaust"]=>
|
||||
bool(false)
|
||||
["redir_primary"]=>
|
||||
bool(false)
|
||||
["has_fields"]=>
|
||||
bool(false)
|
||||
["query"]=>
|
||||
|
||||
@@ -27,7 +27,7 @@ var_dump($server == $result->getServer());
|
||||
bool(true)
|
||||
object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
["cursor"]=>
|
||||
array(19) {
|
||||
array(%d) {
|
||||
["stamp"]=>
|
||||
int(0)
|
||||
["is_command"]=>
|
||||
@@ -36,14 +36,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) {
|
||||
bool(true)
|
||||
["done"]=>
|
||||
bool(false)
|
||||
["failed"]=>
|
||||
bool(false)
|
||||
["end_of_event"]=>
|
||||
bool(false)
|
||||
["in_exhaust"]=>
|
||||
bool(false)
|
||||
["redir_primary"]=>
|
||||
bool(false)
|
||||
["has_fields"]=>
|
||||
bool(false)
|
||||
["query"]=>
|
||||
|
||||
Reference in New Issue
Block a user