Skip to content

Commit 71ad544

Browse files
committed
sqlite: restore changes from nodejs#55373
PR nodejs#55373 introduced a performance improvement for the all() method of prepared statements. Those changes appear to have been accidentally overwritten in nodejs#54181. This change restores the overwritten code. Refs: nodejs#55373 Refs: nodejs#54181
1 parent 206ebeb commit 71ad544

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/node_sqlite.cc

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,18 +1161,22 @@ void StatementSync::All(const FunctionCallbackInfo<Value>& args) {
11611161
auto reset = OnScopeLeave([&]() { sqlite3_reset(stmt->statement_); });
11621162
int num_cols = sqlite3_column_count(stmt->statement_);
11631163
LocalVector<Value> rows(isolate);
1164+
LocalVector<Name> row_keys(isolate);
11641165
while ((r = sqlite3_step(stmt->statement_)) == SQLITE_ROW) {
1165-
LocalVector<Name> row_keys(isolate);
1166-
row_keys.reserve(num_cols);
1166+
if (row_keys.size() == 0) {
1167+
row_keys.reserve(num_cols);
1168+
for (int i = 0; i < num_cols; ++i) {
1169+
Local<Name> key;
1170+
if (!stmt->ColumnNameToName(i).ToLocal(&key)) return;
1171+
row_keys.emplace_back(key);
1172+
}
1173+
}
1174+
11671175
LocalVector<Value> row_values(isolate);
11681176
row_values.reserve(num_cols);
1169-
11701177
for (int i = 0; i < num_cols; ++i) {
1171-
Local<Name> key;
1172-
if (!stmt->ColumnNameToName(i).ToLocal(&key)) return;
11731178
Local<Value> val;
11741179
if (!stmt->ColumnToValue(i).ToLocal(&val)) return;
1175-
row_keys.emplace_back(key);
11761180
row_values.emplace_back(val);
11771181
}
11781182

0 commit comments

Comments
 (0)