@@ -166,6 +166,20 @@ static bool BooleanProperty (napi_env env, napi_value obj, const char* key,
166
166
return DEFAULT;
167
167
}
168
168
169
+ /* *
170
+ * Returns a boolean value.
171
+ * Returns 'DEFAULT' if the JS value is undefined or otherwise not a boolean.
172
+ */
173
+ static bool BooleanValue (napi_env env, napi_value value, bool DEFAULT) {
174
+ bool result;
175
+
176
+ if (napi_get_value_bool (env, value, &result) == napi_ok) {
177
+ return result;
178
+ } else {
179
+ return DEFAULT;
180
+ }
181
+ }
182
+
169
183
enum Encoding { buffer, utf8, view };
170
184
171
185
/* *
@@ -188,6 +202,19 @@ static Encoding GetEncoding (napi_env env, napi_value options, const char* optio
188
202
return Encoding::utf8;
189
203
}
190
204
205
+ /* *
206
+ * Returns internal Encoding enum by its equivalent numeric value.
207
+ */
208
+ static Encoding GetEncoding (napi_env env, napi_value value) {
209
+ int32_t result;
210
+
211
+ if (napi_get_value_int32 (env, value, &result) == napi_ok) {
212
+ return static_cast <Encoding>(result);
213
+ }
214
+
215
+ return Encoding::utf8;
216
+ }
217
+
191
218
/* *
192
219
* Returns a uint32 property 'key' from 'obj'.
193
220
* Returns 'DEFAULT' if the property doesn't exist.
@@ -1140,6 +1167,7 @@ struct GetWorker final : public PriorityWorker {
1140
1167
key_ (key),
1141
1168
encoding_(encoding) {
1142
1169
options_.fill_cache = fillCache;
1170
+ options_.snapshot = database->NewSnapshot ();
1143
1171
}
1144
1172
1145
1173
~GetWorker () {
@@ -1148,6 +1176,7 @@ struct GetWorker final : public PriorityWorker {
1148
1176
1149
1177
void DoExecute () override {
1150
1178
SetStatus (database_->Get (options_, key_, value_));
1179
+ database_->ReleaseSnapshot (options_.snapshot );
1151
1180
}
1152
1181
1153
1182
void HandleOKCallback (napi_env env, napi_deferred deferred) override {
@@ -1167,14 +1196,13 @@ struct GetWorker final : public PriorityWorker {
1167
1196
* Gets a value from a database.
1168
1197
*/
1169
1198
NAPI_METHOD (db_get) {
1170
- NAPI_ARGV (3 );
1199
+ NAPI_ARGV (4 );
1171
1200
NAPI_DB_CONTEXT ();
1172
1201
NAPI_PROMISE ();
1173
1202
1174
1203
leveldb::Slice key = ToSlice (env, argv[1 ]);
1175
- napi_value options = argv[2 ];
1176
- const Encoding encoding = GetEncoding (env, options, " valueEncoding" );
1177
- const bool fillCache = BooleanProperty (env, options, " fillCache" , true );
1204
+ const Encoding encoding = GetEncoding (env, argv[2 ]);
1205
+ const bool fillCache = BooleanValue (env, argv[3 ], true );
1178
1206
1179
1207
GetWorker* worker = new GetWorker (
1180
1208
env, database, deferred, key, encoding, fillCache
0 commit comments