@@ -189,6 +189,20 @@ static bool BooleanProperty (napi_env env, napi_value obj, const char* key,
189
189
return DEFAULT;
190
190
}
191
191
192
+ /* *
193
+ * Returns a boolean value.
194
+ * Returns 'DEFAULT' if the JS value is undefined or otherwise not a boolean.
195
+ */
196
+ static bool BooleanValue (napi_env env, napi_value value, bool DEFAULT) {
197
+ bool result;
198
+
199
+ if (napi_get_value_bool (env, value, &result) == napi_ok) {
200
+ return result;
201
+ } else {
202
+ return DEFAULT;
203
+ }
204
+ }
205
+
192
206
enum Encoding { buffer, utf8, view };
193
207
194
208
/* *
@@ -211,6 +225,19 @@ static Encoding GetEncoding (napi_env env, napi_value options, const char* optio
211
225
return Encoding::utf8;
212
226
}
213
227
228
+ /* *
229
+ * Returns internal Encoding enum by its equivalent numeric value.
230
+ */
231
+ static Encoding GetEncoding (napi_env env, napi_value value) {
232
+ int32_t result;
233
+
234
+ if (napi_get_value_int32 (env, value, &result) == napi_ok) {
235
+ return static_cast <Encoding>(result);
236
+ }
237
+
238
+ return Encoding::utf8;
239
+ }
240
+
214
241
/* *
215
242
* Returns a uint32 property 'key' from 'obj'.
216
243
* Returns 'DEFAULT' if the property doesn't exist.
@@ -1231,6 +1258,7 @@ struct GetWorker final : public PriorityWorker {
1231
1258
key_ (key),
1232
1259
encoding_(encoding) {
1233
1260
options_.fill_cache = fillCache;
1261
+ options_.snapshot = database->NewSnapshot ();
1234
1262
}
1235
1263
1236
1264
~GetWorker () {
@@ -1239,6 +1267,7 @@ struct GetWorker final : public PriorityWorker {
1239
1267
1240
1268
void DoExecute () override {
1241
1269
SetStatus (database_->Get (options_, key_, value_));
1270
+ database_->ReleaseSnapshot (options_.snapshot );
1242
1271
}
1243
1272
1244
1273
void HandleOKCallback (napi_env env, napi_deferred deferred) override {
@@ -1258,14 +1287,13 @@ struct GetWorker final : public PriorityWorker {
1258
1287
* Gets a value from a database.
1259
1288
*/
1260
1289
NAPI_METHOD (db_get) {
1261
- NAPI_ARGV (3 );
1290
+ NAPI_ARGV (4 );
1262
1291
NAPI_DB_CONTEXT ();
1263
1292
NAPI_PROMISE ();
1264
1293
1265
1294
leveldb::Slice key = ToSlice (env, argv[1 ]);
1266
- napi_value options = argv[2 ];
1267
- const Encoding encoding = GetEncoding (env, options, " valueEncoding" );
1268
- const bool fillCache = BooleanProperty (env, options, " fillCache" , true );
1295
+ const Encoding encoding = GetEncoding (env, argv[2 ]);
1296
+ const bool fillCache = BooleanValue (env, argv[3 ], true );
1269
1297
1270
1298
GetWorker* worker = new GetWorker (
1271
1299
env, database, deferred, key, encoding, fillCache
0 commit comments