@@ -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