Skip to content

Commit 232e932

Browse files
committed
sqlite: use DictionaryTemplate for run() result
1 parent 637bda0 commit 232e932

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

src/env_properties.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,7 @@
434434
V(socketaddress_constructor_template, v8::FunctionTemplate) \
435435
V(space_stats_template, v8::DictionaryTemplate) \
436436
V(sqlite_column_template, v8::DictionaryTemplate) \
437+
V(sqlite_run_result_template, v8::DictionaryTemplate) \
437438
V(sqlite_statement_sync_constructor_template, v8::FunctionTemplate) \
438439
V(sqlite_statement_sync_iterator_constructor_template, v8::FunctionTemplate) \
439440
V(sqlite_session_constructor_template, v8::FunctionTemplate) \

src/node_sqlite.cc

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2305,7 +2305,7 @@ MaybeLocal<Object> StatementExecutionHelper::Run(Environment* env,
23052305
sqlite3_step(stmt);
23062306
int r = sqlite3_reset(stmt);
23072307
CHECK_ERROR_OR_THROW(isolate, db, r, SQLITE_OK, MaybeLocal<Object>());
2308-
Local<Object> result = Object::New(isolate);
2308+
23092309
sqlite3_int64 last_insert_rowid = sqlite3_last_insert_rowid(db->Connection());
23102310
sqlite3_int64 changes = sqlite3_changes64(db->Connection());
23112311
Local<Value> last_insert_rowid_val;
@@ -2319,13 +2319,18 @@ MaybeLocal<Object> StatementExecutionHelper::Run(Environment* env,
23192319
changes_val = Number::New(isolate, changes);
23202320
}
23212321

2322-
if (result
2323-
->Set(env->context(),
2324-
env->last_insert_rowid_string(),
2325-
last_insert_rowid_val)
2326-
.IsNothing() ||
2327-
result->Set(env->context(), env->changes_string(), changes_val)
2328-
.IsNothing()) {
2322+
auto run_result_template = env->sqlite_run_result_template();
2323+
if (run_result_template.IsEmpty()) {
2324+
static constexpr std::string_view run_result_keys[] = {"changes",
2325+
"lastInsertRowid"};
2326+
run_result_template = DictionaryTemplate::New(isolate, run_result_keys);
2327+
env->set_sqlite_run_result_template(run_result_template);
2328+
}
2329+
2330+
MaybeLocal<Value> values[] = {changes_val, last_insert_rowid_val};
2331+
Local<Object> result;
2332+
if (!NewDictionaryInstance(env->context(), run_result_template, values)
2333+
.ToLocal(&result)) {
23292334
return MaybeLocal<Object>();
23302335
}
23312336

0 commit comments

Comments
 (0)