Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 693e264

Browse files
tanlisualcaeusjmikola
authored
PHPC-1805 and PHPC-1910: Implement ServerDescription class and Server::getServerDescription() (#1239)
Co-authored-by: Andreas Braun <git@alcaeus.org> Co-authored-by: Jeremy Mikola <jmikola@gmail.com>
1 parent f3bf5a3 commit 693e264

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)

AltStyle によって変換されたページ (->オリジナル) /