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