Skip to content

Commit 4a20c63

Browse files
committed
PHPC-138: var_dump()ing ReadPreference
1 parent 2acbc5b commit 4a20c63

File tree

2 files changed

+48
-6
lines changed

2 files changed

+48
-6
lines changed

src/MongoDB/ReadPreference.c

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
/* External libs */
2828
#include <bson.h>
2929
#include <mongoc.h>
30+
#include <mongoc-read-prefs-private.h>
3031

3132
/* PHP Core stuff */
3233
#include <php.h>
@@ -44,6 +45,8 @@
4445

4546
PHONGO_API zend_class_entry *php_phongo_readpreference_ce;
4647

48+
zend_object_handlers php_phongo_handler_readpreference;
49+
4750
/* {{{ proto MongoDB\Driver\ReadPreference ReadPreference::__construct(integer $readPreference[, array $tagSets = array()])
4851
Constructs a new ReadPreference */
4952
PHP_METHOD(ReadPreference, __construct)
@@ -130,31 +133,45 @@ zend_object_value php_phongo_readpreference_create_object(zend_class_entry *clas
130133
zend_object_value retval;
131134
php_phongo_readpreference_t *intern = NULL;
132135

133-
intern = (php_phongo_readpreference_t *)emalloc(sizeof(php_phongo_readpreference_t));
134-
memset(intern, 0, sizeof(php_phongo_readpreference_t));
136+
intern = (php_phongo_readpreference_t *)ecalloc(1, sizeof *intern);
135137

136138
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
137139
object_properties_init(&intern->std, class_type);
138140

139141
retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, php_phongo_readpreference_free_object, NULL TSRMLS_CC);
140-
retval.handlers = phongo_get_std_object_handlers();
142+
retval.handlers = &php_phongo_handler_readpreference;
141143

142144
return retval;
143145
} /* }}} */
146+
147+
HashTable *php_phongo_readpreference_get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */
148+
{
149+
zval retval = zval_used_for_init;
150+
mongoc_read_prefs_t *read_prefs = phongo_read_preference_from_zval(object TSRMLS_CC);
151+
152+
153+
*is_temp = 1;
154+
155+
php_phongo_read_preference_to_zval(&retval, read_prefs);
156+
157+
return Z_ARRVAL(retval);
158+
} /* }}} */
144159
/* }}} */
145160

146161
/* {{{ PHP_MINIT_FUNCTION */
147162
PHP_MINIT_FUNCTION(ReadPreference)
148163
{
149-
(void)type; /* We don't care if we are loaded via dl() or extension= */
150-
(void)module_number; /* We don't care if we are loaded via dl() or extension= */
164+
(void)type; (void)module_number;
151165
zend_class_entry ce;
152166

153167
INIT_NS_CLASS_ENTRY(ce, "MongoDB\\Driver", "ReadPreference", php_phongo_readpreference_me);
154-
ce.create_object = php_phongo_readpreference_create_object;
155168
php_phongo_readpreference_ce = zend_register_internal_class(&ce TSRMLS_CC);
169+
php_phongo_readpreference_ce->create_object = php_phongo_readpreference_create_object;
156170
php_phongo_readpreference_ce->ce_flags |= ZEND_ACC_FINAL_CLASS;
157171

172+
memcpy(&php_phongo_handler_readpreference, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
173+
php_phongo_handler_readpreference.get_debug_info = php_phongo_readpreference_get_debug_info;
174+
158175
zend_declare_class_constant_long(php_phongo_readpreference_ce, ZEND_STRL("RP_PRIMARY"), MONGOC_READ_PRIMARY TSRMLS_CC);
159176
zend_declare_class_constant_long(php_phongo_readpreference_ce, ZEND_STRL("RP_PRIMARY_PREFERRED"), MONGOC_READ_SECONDARY TSRMLS_CC);
160177
zend_declare_class_constant_long(php_phongo_readpreference_ce, ZEND_STRL("RP_SECONDARY"), MONGOC_READ_PRIMARY_PREFERRED TSRMLS_CC);

tests/readPreference/001.phpt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ $mc = new MongoDB\Driver\Manager(MONGODB_URI);
1212
$rp = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY);
1313
$rp2 = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY, array("tag" => "one"));
1414
$rp3 = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY, array());
15+
var_dump($rp, $rp2, $rp3);
16+
1517
try {
1618
$rp4 = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY, array("tag" => "one"));
1719
} catch(InvalidArgumentException $e) {
@@ -28,6 +30,29 @@ try {
2830
===DONE===
2931
<?php exit(0); ?>
3032
--EXPECTF--
33+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
34+
["mode"]=>
35+
int(1)
36+
["tags"]=>
37+
array(0) {
38+
}
39+
}
40+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
41+
["mode"]=>
42+
int(5)
43+
["tags"]=>
44+
array(1) {
45+
["tag"]=>
46+
string(3) "one"
47+
}
48+
}
49+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
50+
["mode"]=>
51+
int(1)
52+
["tags"]=>
53+
array(0) {
54+
}
55+
}
3156
Invalid tagSet
3257
Invalid ReadPreference
3358
===DONE===

0 commit comments

Comments
 (0)