From 1671921c4d8c956a75a3936a7b9e435692058c31 Mon Sep 17 00:00:00 2001 From: Colin Ihrig Date: Wed, 5 Feb 2025 23:12:14 -0500 Subject: [PATCH] sqlite: restore changes from #55373 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #55373 introduced a performance improvement for the all() method of prepared statements. Those changes appear to have been accidentally overwritten in #54181. This change restores the overwritten code. Refs: https://github.com/nodejs/node/pull/55373 Refs: https://github.com/nodejs/node/pull/54181 PR-URL: https://github.com/nodejs/node/pull/56908 Reviewed-By: Michaƫl Zasso Reviewed-By: Antoine du Hamel --- src/node_sqlite.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/node_sqlite.cc b/src/node_sqlite.cc index 08c407a4dcaba6..58cd643328b783 100644 --- a/src/node_sqlite.cc +++ b/src/node_sqlite.cc @@ -1510,18 +1510,22 @@ void StatementSync::All(const FunctionCallbackInfo& args) { auto reset = OnScopeLeave([&]() { sqlite3_reset(stmt->statement_); }); int num_cols = sqlite3_column_count(stmt->statement_); LocalVector rows(isolate); + LocalVector row_keys(isolate); while ((r = sqlite3_step(stmt->statement_)) == SQLITE_ROW) { - LocalVector row_keys(isolate); - row_keys.reserve(num_cols); + if (row_keys.size() == 0) { + row_keys.reserve(num_cols); + for (int i = 0; i < num_cols; ++i) { + Local key; + if (!stmt->ColumnNameToName(i).ToLocal(&key)) return; + row_keys.emplace_back(key); + } + } + LocalVector row_values(isolate); row_values.reserve(num_cols); - for (int i = 0; i < num_cols; ++i) { - Local key; - if (!stmt->ColumnNameToName(i).ToLocal(&key)) return; Local val; if (!stmt->ColumnToValue(i).ToLocal(&val)) return; - row_keys.emplace_back(key); row_values.emplace_back(val); }