Skip to content

Commit e7d6728

Browse files
authored
sqlite: use DictionaryTemplate for run() result
PR-URL: #61432 Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
1 parent c6a89f9 commit e7d6728

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
@@ -2406,7 +2406,7 @@ MaybeLocal<Object> StatementExecutionHelper::Run(Environment* env,
24062406
sqlite3_step(stmt);
24072407
int r = sqlite3_reset(stmt);
24082408
CHECK_ERROR_OR_THROW(isolate, db, r, SQLITE_OK, MaybeLocal<Object>());
2409-
Local<Object> result = Object::New(isolate);
2409+
24102410
sqlite3_int64 last_insert_rowid = sqlite3_last_insert_rowid(db->Connection());
24112411
sqlite3_int64 changes = sqlite3_changes64(db->Connection());
24122412
Local<Value> last_insert_rowid_val;
@@ -2420,13 +2420,18 @@ MaybeLocal<Object> StatementExecutionHelper::Run(Environment* env,
24202420
changes_val = Number::New(isolate, changes);
24212421
}
24222422

2423-
if (result
2424-
->Set(env->context(),
2425-
env->last_insert_rowid_string(),
2426-
last_insert_rowid_val)
2427-
.IsNothing() ||
2428-
result->Set(env->context(), env->changes_string(), changes_val)
2429-
.IsNothing()) {
2423+
auto run_result_template = env->sqlite_run_result_template();
2424+
if (run_result_template.IsEmpty()) {
2425+
static constexpr std::string_view run_result_keys[] = {"changes",
2426+
"lastInsertRowid"};
2427+
run_result_template = DictionaryTemplate::New(isolate, run_result_keys);
2428+
env->set_sqlite_run_result_template(run_result_template);
2429+
}
2430+
2431+
MaybeLocal<Value> values[] = {changes_val, last_insert_rowid_val};
2432+
Local<Object> result;
2433+
if (!NewDictionaryInstance(env->context(), run_result_template, values)
2434+
.ToLocal(&result)) {
24302435
return MaybeLocal<Object>();
24312436
}
24322437

0 commit comments

Comments
 (0)