Skip to content
This repository was archived by the owner on Dec 23, 2021. It is now read-only.

Commit 7791bc7

Browse files
committed
HHVM-167: Parse readconcernlevel in URI options array
1 parent 669df94 commit 7791bc7

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

src/MongoDB/Driver/Manager.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ const StaticString
5858
s_MongoDBDriverManager_readpreferencetags("readpreferencetags"),
5959
s_MongoDBDriverManager_readPreference("readPreference"),
6060
s_MongoDBDriverManager_readPreferenceTags("readPreferenceTags"),
61+
s_MongoDBDriverManager_readconcernlevel("readconcernlevel"),
62+
s_MongoDBDriverManager_readConcernLevel("readConcernLevel"),
6163
s_MongoDBDriverManager_mode("mode"),
6264
s_MongoDBDriverManager_tags("tags"),
6365
s_MongoDBDriverManager_w("w"),
@@ -74,6 +76,47 @@ const StaticString
7476
s_MongoDBDriverManager_context_ssl_cafile("cafile"),
7577
s_MongoDBDriverManager_context_ssl_capath("capath");
7678

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+
}
77120
static bool hippo_mongo_driver_manager_apply_rp(mongoc_client_t *client, const Array options)
78121
{
79122
mongoc_read_prefs_t *new_rp;
@@ -407,6 +450,7 @@ void HHVM_METHOD(MongoDBDriverManager, __construct, const String &dsn, const Arr
407450

408451
hippo_mongo_driver_manager_apply_ssl_opts(data->m_client, driverOptions);
409452

453+
hippo_mongo_driver_manager_apply_rc(data->m_client, options);
410454
hippo_mongo_driver_manager_apply_rp(data->m_client, options);
411455
hippo_mongo_driver_manager_apply_wc(data->m_client, options);
412456
}

0 commit comments

Comments
 (0)