Skip to content

Commit abccde0

Browse files
committed
Implement compare_objects handler for ReadConcern
1 parent 7b030ed commit abccde0

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

src/MongoDB/ReadConcern.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,12 +216,36 @@ static HashTable* phongo_readconcern_get_properties(zend_object* object)
216216
return phongo_readconcern_get_properties_hash(object, false);
217217
}
218218

219+
static int phongo_readconcern_compare_objects(zval* o1, zval* o2)
220+
{
221+
ZEND_COMPARE_OBJECTS_FALLBACK(o1, o2);
222+
223+
phongo_readconcern_t* intern1;
224+
phongo_readconcern_t* intern2;
225+
int retval;
226+
227+
intern1 = Z_READCONCERN_OBJ_P(o1);
228+
intern2 = Z_READCONCERN_OBJ_P(o2);
229+
230+
retval = strcmp(
231+
mongoc_read_concern_get_level(intern1->read_concern),
232+
mongoc_read_concern_get_level(intern2->read_concern)
233+
);
234+
235+
if (retval != 0) {
236+
return retval;
237+
}
238+
239+
return 0;
240+
}
241+
219242
void phongo_readconcern_init_ce(INIT_FUNC_ARGS)
220243
{
221244
phongo_readconcern_ce = register_class_MongoDB_Driver_ReadConcern(phongo_serializable_ce);
222245
phongo_readconcern_ce->create_object = phongo_readconcern_create_object;
223246

224247
memcpy(&phongo_handler_readconcern, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
248+
phongo_handler_readconcern.compare = phongo_readconcern_compare_objects;
225249
phongo_handler_readconcern.get_debug_info = phongo_readconcern_get_debug_info;
226250
phongo_handler_readconcern.get_properties = phongo_readconcern_get_properties;
227251
phongo_handler_readconcern.free_obj = phongo_readconcern_free_object;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
--TEST--
2+
MongoDB\BSON\ReadConcern comparisons
3+
--FILE--
4+
<?php
5+
6+
var_dump(new MongoDB\Driver\ReadConcern(MongoDB\Driver\ReadConcern::LOCAL) == new MongoDB\Driver\ReadConcern(MongoDB\Driver\ReadConcern::LOCAL));
7+
var_dump(new MongoDB\Driver\ReadConcern(MongoDB\Driver\ReadConcern::LOCAL) > new MongoDB\Driver\ReadConcern(MongoDB\Driver\ReadConcern::AVAILABLE));
8+
var_dump(new MongoDB\Driver\ReadConcern(MongoDB\Driver\ReadConcern::LOCAL) < new MongoDB\Driver\ReadConcern(MongoDB\Driver\ReadConcern::AVAILABLE));
9+
10+
// Object comparison fallback if one value is not a ReadConcern
11+
var_dump(new MongoDB\Driver\ReadConcern() > new MongoDB\BSON\Int64('8589934592'));
12+
13+
?>
14+
===DONE===
15+
<?php exit(0); ?>
16+
--EXPECT--
17+
bool(true)
18+
bool(true)
19+
bool(false)
20+
bool(false)
21+
===DONE===

0 commit comments

Comments
 (0)