Skip to content

Commit 0d8cafe

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 88dcfce commit 0d8cafe

18 files changed

+569
-1
lines changed

config.m4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ if test "$PHP_MONGODB" != "no"; then
145145
src/MongoDB/ReadPreference.c \
146146
src/MongoDB/Server.c \
147147
src/MongoDB/ServerApi.c \
148+
src/MongoDB/ServerDescription.c \
148149
src/MongoDB/Session.c \
149150
src/MongoDB/WriteConcern.c \
150151
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");
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
@@ -382,6 +382,17 @@ void phongo_server_init(zval* return_value, zval* manager, uint32_t server_id) /
382382
}
383383
/* }}} */
384384

385+
void phongo_serverdescription_init(zval* return_value, mongoc_server_description_t* server_description) /* {{{ */
386+
{
387+
php_phongo_serverdescription_t* intern;
388+
389+
object_init_ex(return_value, php_phongo_serverdescription_ce);
390+
391+
intern = Z_SERVERDESCRIPTION_OBJ_P(return_value);
392+
intern->server_description = server_description;
393+
}
394+
/* }}} */
395+
385396
void phongo_session_init(zval* return_value, zval* manager, mongoc_client_session_t* client_session) /* {{{ */
386397
{
387398
php_phongo_session_t* session;
@@ -3738,6 +3749,7 @@ PHP_MINIT_FUNCTION(mongodb)
37383749
php_phongo_readpreference_init_ce(INIT_FUNC_ARGS_PASSTHRU);
37393750
php_phongo_server_init_ce(INIT_FUNC_ARGS_PASSTHRU);
37403751
php_phongo_serverapi_init_ce(INIT_FUNC_ARGS_PASSTHRU);
3752+
php_phongo_serverdescription_init_ce(INIT_FUNC_ARGS_PASSTHRU);
37413753
php_phongo_session_init_ce(INIT_FUNC_ARGS_PASSTHRU);
37423754
php_phongo_writeconcern_init_ce(INIT_FUNC_ARGS_PASSTHRU);
37433755
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
@@ -115,6 +115,7 @@ zend_object_handlers* phongo_get_std_object_handlers(void);
115115

116116
void phongo_clientencryption_init(php_phongo_clientencryption_t* ce_obj, zval* manager, zval* options);
117117
void phongo_server_init(zval* return_value, zval* manager, uint32_t server_id);
118+
void phongo_serverdescription_init(zval* return_value, mongoc_server_description_t* serverDescription);
118119
void phongo_session_init(zval* return_value, zval* manager, mongoc_client_session_t* client_session);
119120
void phongo_readconcern_init(zval* return_value, const mongoc_read_concern_t* read_concern);
120121
void phongo_readpreference_init(zval* return_value, const mongoc_read_prefs_t* read_prefs);
@@ -141,6 +142,7 @@ void php_phongo_read_preference_prep_tagsets(zval* tagSets);
141142
bool php_phongo_read_preference_tags_are_valid(const bson_t* tags);
142143

143144
bool php_phongo_server_to_zval(zval* retval, mongoc_server_description_t* sd);
145+
bool php_phongo_server_description_to_zval(zval* retval, mongoc_server_description_t* sd);
144146
void php_phongo_read_concern_to_zval(zval* retval, const mongoc_read_concern_t* read_concern);
145147
void php_phongo_write_concern_to_zval(zval* retval, const mongoc_write_concern_t* write_concern);
146148

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
@@ -384,6 +384,20 @@ static PHP_METHOD(Server, getPort)
384384
phongo_throw_exception(PHONGO_ERROR_RUNTIME, "Failed to get server description");
385385
} /* }}} */
386386

387+
/* {{{ proto MongoDB\Driver\ServerDescription MongoDB\Driver\Server::getServerDescription()
388+
Returns the server description for this Server */
389+
static PHP_METHOD(Server, getServerDescription)
390+
{
391+
mongoc_server_description_t* server_description;
392+
php_phongo_server_t* intern = Z_SERVER_OBJ_P(getThis());
393+
394+
PHONGO_PARSE_PARAMETERS_NONE();
395+
396+
server_description = mongoc_client_get_server_description(Z_MANAGER_OBJ_P(&intern->manager)->client, intern->server_id);
397+
398+
phongo_serverdescription_init(return_value, server_description);
399+
} /* }}} */
400+
387401
/* {{{ proto integer MongoDB\Driver\Server::getType()
388402
Returns the node type of this Server */
389403
static PHP_METHOD(Server, getType)
@@ -585,6 +599,7 @@ static zend_function_entry php_phongo_server_me[] = {
585599
PHP_ME(Server, getInfo, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
586600
PHP_ME(Server, getLatency, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
587601
PHP_ME(Server, getPort, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
602+
PHP_ME(Server, getServerDescription, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
588603
PHP_ME(Server, getType, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
589604
PHP_ME(Server, isPrimary, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
590605
PHP_ME(Server, isSecondary, ai_Server_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)

0 commit comments

Comments
 (0)