@@ -520,12 +520,60 @@ static HashTable* phongo_readpreference_get_properties(zend_object* object)
520520 return phongo_readpreference_get_properties_hash (object , false);
521521}
522522
523+ static int phongo_readpreference_compare_objects (zval * o1 , zval * o2 )
524+ {
525+ ZEND_COMPARE_OBJECTS_FALLBACK (o1 , o2 );
526+
527+ phongo_readpreference_t * intern1 , * intern2 ;
528+
529+ const mongoc_read_prefs_t * rp1 = NULL ;
530+ const mongoc_read_prefs_t * rp2 = NULL ;
531+
532+ intern1 = Z_READPREFERENCE_OBJ_P (o1 );
533+ intern2 = Z_READPREFERENCE_OBJ_P (o2 );
534+
535+ if (intern1 && intern1 -> read_preference ) {
536+ rp1 = intern1 -> read_preference ;
537+ }
538+
539+ if (intern2 && intern2 -> read_preference ) {
540+ rp2 = intern2 -> read_preference ;
541+ }
542+
543+ if (rp1 == rp2 ) {
544+ return 0 ;
545+ }
546+
547+ if (!rp1 || !rp2 ) {
548+ return -1 ;
549+ }
550+
551+ if (mongoc_read_prefs_get_mode (rp1 ) != mongoc_read_prefs_get_mode (rp2 )) {
552+ return -1 ;
553+ }
554+
555+ if (mongoc_read_prefs_get_max_staleness_seconds (rp1 ) != mongoc_read_prefs_get_max_staleness_seconds (rp2 )) {
556+ return -1 ;
557+ }
558+
559+ if (bson_compare (mongoc_read_prefs_get_tags (rp1 ), mongoc_read_prefs_get_tags (rp2 )) != 0 ) {
560+ return -1 ;
561+ }
562+
563+ if (bson_compare (mongoc_read_prefs_get_hedge (rp1 ), mongoc_read_prefs_get_hedge (rp2 )) != 0 ) {
564+ return -1 ;
565+ }
566+
567+ return 0 ;
568+ }
569+
523570void phongo_readpreference_init_ce (INIT_FUNC_ARGS )
524571{
525572 phongo_readpreference_ce = register_class_MongoDB_Driver_ReadPreference (phongo_serializable_ce );
526573 phongo_readpreference_ce -> create_object = phongo_readpreference_create_object ;
527574
528575 memcpy (& phongo_handler_readpreference , phongo_get_std_object_handlers (), sizeof (zend_object_handlers ));
576+ phongo_handler_readpreference .compare = phongo_readpreference_compare_objects ;
529577 phongo_handler_readpreference .get_debug_info = phongo_readpreference_get_debug_info ;
530578 phongo_handler_readpreference .get_properties = phongo_readpreference_get_properties ;
531579 phongo_handler_readpreference .free_obj = phongo_readpreference_free_object ;
0 commit comments