@@ -58,6 +58,8 @@ const StaticString
58
58
s_MongoDBDriverManager_readpreferencetags (" readpreferencetags" ),
59
59
s_MongoDBDriverManager_readPreference (" readPreference" ),
60
60
s_MongoDBDriverManager_readPreferenceTags (" readPreferenceTags" ),
61
+ s_MongoDBDriverManager_readconcernlevel (" readconcernlevel" ),
62
+ s_MongoDBDriverManager_readConcernLevel (" readConcernLevel" ),
61
63
s_MongoDBDriverManager_mode (" mode" ),
62
64
s_MongoDBDriverManager_tags (" tags" ),
63
65
s_MongoDBDriverManager_w (" w" ),
@@ -74,6 +76,47 @@ const StaticString
74
76
s_MongoDBDriverManager_context_ssl_cafile (" cafile" ),
75
77
s_MongoDBDriverManager_context_ssl_capath (" capath" );
76
78
79
+ static bool hippo_mongo_driver_manager_apply_rc (mongoc_client_t *client, const Array options)
80
+ {
81
+ mongoc_read_concern_t *new_rc;
82
+ const mongoc_read_concern_t *old_rc;
83
+ const char *rc_str = NULL ;
84
+
85
+ if (!(old_rc = mongoc_client_get_read_concern (client))) {
86
+ throw MongoDriver::Utils::throwRunTimeException (" Client does not have a read concern" );
87
+
88
+ return false ;
89
+ }
90
+
91
+ if (options.size () == 0 ) {
92
+ return true ;
93
+ }
94
+
95
+ if (
96
+ !options.exists (s_MongoDBDriverManager_readConcernLevel) &&
97
+ !options.exists (s_MongoDBDriverManager_readconcernlevel)
98
+ ) {
99
+ return true ;
100
+ }
101
+
102
+ new_rc = mongoc_read_concern_copy (old_rc);
103
+
104
+ if (options.exists (s_MongoDBDriverManager_readconcernlevel) && options[s_MongoDBDriverManager_readconcernlevel].isString ()) {
105
+ rc_str = options[s_MongoDBDriverManager_readconcernlevel].toString ().c_str ();
106
+ }
107
+ if (options.exists (s_MongoDBDriverManager_readConcernLevel) && options[s_MongoDBDriverManager_readConcernLevel].isString ()) {
108
+ rc_str = options[s_MongoDBDriverManager_readConcernLevel].toString ().c_str ();
109
+ }
110
+
111
+ if (rc_str) {
112
+ mongoc_read_concern_set_level (new_rc, rc_str);
113
+ }
114
+
115
+ mongoc_client_set_read_concern (client, new_rc);
116
+ mongoc_read_concern_destroy (new_rc);
117
+
118
+ return true ;
119
+ }
77
120
static bool hippo_mongo_driver_manager_apply_rp (mongoc_client_t *client, const Array options)
78
121
{
79
122
mongoc_read_prefs_t *new_rp;
@@ -407,6 +450,7 @@ void HHVM_METHOD(MongoDBDriverManager, __construct, const String &dsn, const Arr
407
450
408
451
hippo_mongo_driver_manager_apply_ssl_opts (data->m_client , driverOptions);
409
452
453
+ hippo_mongo_driver_manager_apply_rc (data->m_client , options);
410
454
hippo_mongo_driver_manager_apply_rp (data->m_client , options);
411
455
hippo_mongo_driver_manager_apply_wc (data->m_client , options);
412
456
}
0 commit comments