Skip to content

Commit 0274331

Browse files
tanlisualcaeusjmikola
committed
PHPC-1805 and PHPC-1910: Implement ServerDescription class and Server::getServerDescription() (mongodb#1239)
Co-authored-by: Andreas Braun <[email protected]> Co-authored-by: Jeremy Mikola <[email protected]>
1 parent f62570c commit 0274331

18 files changed

+569
-1
lines changed

config.m4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ if test "$PHP_MONGODB" != "no"; then
146146
src/MongoDB/ReadPreference.c \
147147
src/MongoDB/Server.c \
148148
src/MongoDB/ServerApi.c \
149+
src/MongoDB/ServerDescription.c \
149150
src/MongoDB/Session.c \
150151
src/MongoDB/WriteConcern.c \
151152
src/MongoDB/WriteConcernError.c \

config.w32

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ if (PHP_MONGODB != "no") {
120120
EXTENSION("mongodb", "php_phongo.c phongo_compat.c", null, PHP_MONGODB_CFLAGS);
121121
MONGODB_ADD_SOURCES("/src", "bson.c bson-encode.c phongo_apm.c phongo_ini.c");
122122
MONGODB_ADD_SOURCES("/src/BSON", "Binary.c BinaryInterface.c DBPointer.c Decimal128.c Decimal128Interface.c Int64.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");
123-
MONGODB_ADD_SOURCES("/src/MongoDB", "BulkWrite.c ClientEncryption.c Command.c Cursor.c CursorId.c CursorInterface.c Manager.c Query.c ReadConcern.c ReadPreference.c Server.c ServerApi.c Session.c WriteConcern.c WriteConcernError.c WriteError.c WriteResult.c");
123+
MONGODB_ADD_SOURCES("/src/MongoDB", "BulkWrite.c ClientEncryption.c Command.c Cursor.c CursorId.c CursorInterface.c Manager.c Query.c ReadConcern.c ReadPreference.c Server.c ServerApi.c ServerDescription.c Session.c WriteConcern.c WriteConcernError.c WriteError.c WriteResult.c");
124124
MONGODB_ADD_SOURCES("/src/MongoDB/Exception", "AuthenticationException.c BulkWriteException.c CommandException.c ConnectionException.c ConnectionTimeoutException.c EncryptionException.c Exception.c ExecutionTimeoutException.c InvalidArgumentException.c LogicException.c RuntimeException.c ServerException.c SSLConnectionException.c UnexpectedValueException.c WriteException.c");
125125
MONGODB_ADD_SOURCES("/src/MongoDB/Monitoring", "CommandFailedEvent.c CommandStartedEvent.c CommandSubscriber.c CommandSucceededEvent.c Subscriber.c functions.c");
126126
MONGODB_ADD_SOURCES("/src/libmongoc/src/common", PHP_MONGODB_COMMON_SOURCES);

php_phongo.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,17 @@ void phongo_server_init(zval* return_value, zval* manager, uint32_t server_id) /
358358
}
359359
/* }}} */
360360

361+
void phongo_serverdescription_init(zval* return_value, mongoc_server_description_t* server_description) /* {{{ */
362+
{
363+
php_phongo_serverdescription_t* intern;
364+
365+
object_init_ex(return_value, php_phongo_serverdescription_ce);
366+
367+
intern = Z_SERVERDESCRIPTION_OBJ_P(return_value);
368+
intern->server_description = server_description;
369+
}
370+
/* }}} */
371+
361372
void phongo_session_init(zval* return_value, zval* manager, mongoc_client_session_t* client_session) /* {{{ */
362373
{
363374
php_phongo_session_t* session;
@@ -3600,6 +3611,7 @@ PHP_MINIT_FUNCTION(mongodb)
36003611
php_phongo_readpreference_init_ce(INIT_FUNC_ARGS_PASSTHRU);
36013612
php_phongo_server_init_ce(INIT_FUNC_ARGS_PASSTHRU);
36023613
php_phongo_serverapi_init_ce(INIT_FUNC_ARGS_PASSTHRU);
3614+
php_phongo_serverdescription_init_ce(INIT_FUNC_ARGS_PASSTHRU);
36033615
php_phongo_session_init_ce(INIT_FUNC_ARGS_PASSTHRU);
36043616
php_phongo_writeconcern_init_ce(INIT_FUNC_ARGS_PASSTHRU);
36053617
php_phongo_writeconcernerror_init_ce(INIT_FUNC_ARGS_PASSTHRU);

php_phongo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ zend_object_handlers* phongo_get_std_object_handlers(void);
117117

118118
void phongo_clientencryption_init(php_phongo_clientencryption_t* ce_obj, zval* manager, zval* options);
119119
void phongo_server_init(zval* return_value, zval* manager, uint32_t server_id);
120+
void phongo_serverdescription_init(zval* return_value, mongoc_server_description_t* serverDescription);
120121
void phongo_session_init(zval* return_value, zval* manager, mongoc_client_session_t* client_session);
121122
void phongo_objectid_init(zval* return_value, const bson_oid_t* oid);
122123
void phongo_readconcern_init(zval* return_value, const mongoc_read_concern_t* read_concern);
@@ -144,6 +145,7 @@ void php_phongo_read_preference_prep_tagsets(zval* tagSets);
144145
bool php_phongo_read_preference_tags_are_valid(const bson_t* tags);
145146

146147
bool php_phongo_server_to_zval(zval* retval, mongoc_client_t* client, mongoc_server_description_t* sd);
148+
bool php_phongo_server_description_to_zval(zval* retval, mongoc_server_description_t* sd);
147149
void php_phongo_read_concern_to_zval(zval* retval, const mongoc_read_concern_t* read_concern);
148150
void php_phongo_write_concern_to_zval(zval* retval, const mongoc_write_concern_t* write_concern);
149151

php_phongo_classes.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ static inline php_phongo_server_t* php_server_fetch_object(zend_object* obj)
6363
{
6464
return (php_phongo_server_t*) ((char*) obj - XtOffsetOf(php_phongo_server_t, std));
6565
}
66+
static inline php_phongo_serverdescription_t* php_serverdescription_fetch_object(zend_object* obj)
67+
{
68+
return (php_phongo_serverdescription_t*) ((char*) obj - XtOffsetOf(php_phongo_serverdescription_t, std));
69+
}
6670
static inline php_phongo_serverapi_t* php_serverapi_fetch_object(zend_object* obj)
6771
{
6872
return (php_phongo_serverapi_t*) ((char*) obj - XtOffsetOf(php_phongo_serverapi_t, std));
@@ -162,6 +166,7 @@ static inline php_phongo_commandsucceededevent_t* php_commandsucceededevent_fetc
162166
#define Z_READPREFERENCE_OBJ_P(zv) (php_readpreference_fetch_object(Z_OBJ_P(zv)))
163167
#define Z_SERVER_OBJ_P(zv) (php_server_fetch_object(Z_OBJ_P(zv)))
164168
#define Z_SERVERAPI_OBJ_P(zv) (php_serverapi_fetch_object(Z_OBJ_P(zv)))
169+
#define Z_SERVERDESCRIPTION_OBJ_P(zv) (php_serverdescription_fetch_object(Z_OBJ_P(zv)))
165170
#define Z_SESSION_OBJ_P(zv) (php_session_fetch_object(Z_OBJ_P(zv)))
166171
#define Z_BULKWRITE_OBJ_P(zv) (php_bulkwrite_fetch_object(Z_OBJ_P(zv)))
167172
#define Z_WRITECONCERN_OBJ_P(zv) (php_writeconcern_fetch_object(Z_OBJ_P(zv)))
@@ -195,6 +200,7 @@ static inline php_phongo_commandsucceededevent_t* php_commandsucceededevent_fetc
195200
#define Z_OBJ_READPREFERENCE(zo) (php_readpreference_fetch_object(zo))
196201
#define Z_OBJ_SERVER(zo) (php_server_fetch_object(zo))
197202
#define Z_OBJ_SERVERAPI(zo) (php_serverapi_fetch_object(zo))
203+
#define Z_OBJ_SERVERDESCRIPTION(zo) (php_serverdescription_fetch_object(zo))
198204
#define Z_OBJ_SESSION(zo) (php_session_fetch_object(zo))
199205
#define Z_OBJ_BULKWRITE(zo) (php_bulkwrite_fetch_object(zo))
200206
#define Z_OBJ_WRITECONCERN(zo) (php_writeconcern_fetch_object(zo))
@@ -228,6 +234,7 @@ extern zend_class_entry* php_phongo_readconcern_ce;
228234
extern zend_class_entry* php_phongo_readpreference_ce;
229235
extern zend_class_entry* php_phongo_server_ce;
230236
extern zend_class_entry* php_phongo_serverapi_ce;
237+
extern zend_class_entry* php_phongo_serverdescription_ce;
231238
extern zend_class_entry* php_phongo_session_ce;
232239
extern zend_class_entry* php_phongo_bulkwrite_ce;
233240
extern zend_class_entry* php_phongo_writeconcern_ce;
@@ -326,6 +333,7 @@ extern void php_phongo_readconcern_init_ce(INIT_FUNC_ARGS);
326333
extern void php_phongo_readpreference_init_ce(INIT_FUNC_ARGS);
327334
extern void php_phongo_server_init_ce(INIT_FUNC_ARGS);
328335
extern void php_phongo_serverapi_init_ce(INIT_FUNC_ARGS);
336+
extern void php_phongo_serverdescription_init_ce(INIT_FUNC_ARGS);
329337
extern void php_phongo_session_init_ce(INIT_FUNC_ARGS);
330338
extern void php_phongo_writeconcern_init_ce(INIT_FUNC_ARGS);
331339
extern void php_phongo_writeconcernerror_init_ce(INIT_FUNC_ARGS);

php_phongo_structs.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ typedef struct {
114114
zend_object std;
115115
} php_phongo_serverapi_t;
116116

117+
typedef struct {
118+
mongoc_server_description_t* server_description;
119+
HashTable* properties;
120+
zend_object std;
121+
} php_phongo_serverdescription_t;
122+
117123
typedef struct {
118124
mongoc_client_session_t* client_session;
119125
zval manager;

src/MongoDB/Server.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,20 @@ static PHP_METHOD(Server, getPort)
403403
phongo_throw_exception(PHONGO_ERROR_RUNTIME, "Failed to get server description");
404404
} /* }}} */
405405

406+
/* {{{ proto MongoDB\Driver\ServerDescription MongoDB\Driver\Server::getServerDescription()
407+
Returns the server description for this Server */
408+
static PHP_METHOD(Server, getServerDescription)
409+
{
410+
mongoc_server_description_t* server_description;
411+
php_phongo_server_t* intern = Z_SERVER_OBJ_P(getThis());
412+
413+
PHONGO_PARSE_PARAMETERS_NONE();
414+
415+
server_description = mongoc_client_get_server_description(Z_MANAGER_OBJ_P(&intern->manager)->client, intern->server_id);
416+
417+
phongo_serverdescription_init(return_value, server_description);
418+
} /* }}} */
419+
406420
/* {{{ proto integer MongoDB\Driver\Server::getType()
407421
Returns the node type of this Server */
408422
static PHP_METHOD(Server, getType)
@@ -604,6 +618,7 @@ static zend_function_entry php_phongo_server_me[] = {
604618
PHP_ME(Server, getInfo, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
605619
PHP_ME(Server, getLatency, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
606620
PHP_ME(Server, getPort, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
621+
PHP_ME(Server, getServerDescription, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
607622
PHP_ME(Server, getType, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
608623
PHP_ME(Server, isPrimary, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
609624
PHP_ME(Server, isSecondary, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)

0 commit comments

Comments
 (0)