Merged pull request #141

This commit is contained in:
Derick Rethans
2015-12-02 18:30:39 +00:00
17 changed files with 93 additions and 98 deletions

View File

@@ -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
View File

@@ -0,0 +1 @@
1.3.0-dev

1
VERSION_RELEASED Normal file
View File

@@ -0,0 +1 @@
1.2.2

View File

@@ -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

View File

@@ -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");

View File

@@ -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

View File

@@ -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);
}
/* }}} */

View File

@@ -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);

View File

@@ -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()

View File

@@ -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)) {

View File

@@ -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;
}

View File

@@ -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"]=>

View File

@@ -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"]=>

View File

@@ -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"]=>

View File

@@ -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"]=>