FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

sqlite: reuse cached column names in statement all() and get() · nodejs/node@0e8af33 · GitHub

/ node Public

Commit 0e8af33

Browse files
authored andcommitted
sqlite: reuse cached column names in statement all() and get()
Signed-off-by: geeksilva97 <edigleyssonsilva@gmail.com> PR-URL: #65276 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
1 parent a39ad67 commit 0e8af33

2 files changed

Lines changed: 31 additions & 66 deletions

File tree

‎src/node_sqlite.cc‎

Lines changed: 28 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -3182,10 +3182,11 @@ Maybe<void> ExtractRowValues(Environment* env,
31823182
}
31833183

31843184
MaybeLocal<Value> StatementExecutionHelper::All(Environment* env,
3185-
DatabaseSync* db,
3186-
sqlite3_stmt* stmt,
3187-
bool return_arrays,
3188-
bool use_big_ints) {
3185+
StatementSync* statement) {
3186+
DatabaseSync* db = statement->db_.get();
3187+
sqlite3_stmt* stmt = statement->statement_.get();
3188+
const bool return_arrays = statement->return_arrays_;
3189+
const bool use_big_ints = statement->use_big_ints_;
31893190
Isolate* isolate = env->isolate();
31903191
EscapableHandleScope scope(isolate);
31913192
int r;
@@ -3211,13 +3212,10 @@ MaybeLocal<Value> StatementExecutionHelper::All(Environment* env,
32113212
rows.emplace_back(row_array);
32123213
} else {
32133214
if (row_keys.size() == 0) {
3214-
row_keys.reserve(num_cols);
3215-
for (int i = 0; i < num_cols; ++i) {
3216-
Local<Name> key;
3217-
if (!ColumnNameToName(env, stmt, i).ToLocal(&key)) {
3218-
return MaybeLocal<Value>();
3219-
}
3220-
row_keys.emplace_back(key);
3215+
// Reuses the statement's internalized column names instead of
3216+
// re-interning them on every call.
3217+
if (!statement->GetCachedColumnNames(&row_keys)) {
3218+
return MaybeLocal<Value>();
32213219
}
32223220
}
32233221
DCHECK_EQ(row_keys.size(), row_values.size());
@@ -3232,9 +3230,10 @@ MaybeLocal<Value> StatementExecutionHelper::All(Environment* env,
32323230
}
32333231

32343232
MaybeLocal<Object> StatementExecutionHelper::Run(Environment* env,
3235-
DatabaseSync* db,
3236-
sqlite3_stmt* stmt,
3237-
bool use_big_ints) {
3233+
StatementSync* statement) {
3234+
DatabaseSync* db = statement->db_.get();
3235+
sqlite3_stmt* stmt = statement->statement_.get();
3236+
const bool use_big_ints = statement->use_big_ints_;
32383237
Isolate* isolate = env->isolate();
32393238
EscapableHandleScope scope(isolate);
32403239
// Declared before the reset below so that it outlives it: sqlite3_reset()
@@ -3319,10 +3318,11 @@ BaseObjectPtr<StatementSyncIterator> StatementExecutionHelper::Iterate(
33193318
}
33203319

33213320
MaybeLocal<Value> StatementExecutionHelper::Get(Environment* env,
3322-
DatabaseSync* db,
3323-
sqlite3_stmt* stmt,
3324-
bool return_arrays,
3325-
bool use_big_ints) {
3321+
StatementSync* statement) {
3322+
DatabaseSync* db = statement->db_.get();
3323+
sqlite3_stmt* stmt = statement->statement_.get();
3324+
const bool return_arrays = statement->return_arrays_;
3325+
const bool use_big_ints = statement->use_big_ints_;
33263326
Isolate* isolate = env->isolate();
33273327
EscapableHandleScope scope(isolate);
33283328
// Declared before the reset below so that it outlives it: sqlite3_reset()
@@ -3360,13 +3360,10 @@ MaybeLocal<Value> StatementExecutionHelper::Get(Environment* env,
33603360
result = Array::New(isolate, row_values.data(), row_values.size());
33613361
} else {
33623362
LocalVector<Name> keys(isolate);
3363-
keys.reserve(num_cols);
3364-
for (int i = 0; i < num_cols; ++i) {
3365-
Local<Name> key;
3366-
if (!ColumnNameToName(env, stmt, i).ToLocal(&key)) {
3367-
return MaybeLocal<Value>();
3368-
}
3369-
keys.emplace_back(key);
3363+
// Reuses the statement's internalized column names instead of
3364+
// re-interning them on every call.
3365+
if (!statement->GetCachedColumnNames(&keys)) {
3366+
return MaybeLocal<Value>();
33703367
}
33713368

33723369
DCHECK_EQ(keys.size(), row_values.size());
@@ -3399,12 +3396,7 @@ void StatementSync::All(const FunctionCallbackInfo<Value>& args) {
33993396
if (needs_reset) sqlite3_reset(stmt->statement_.get());
34003397
});
34013398
Local<Value> result;
3402-
if (StatementExecutionHelper::All(env,
3403-
stmt->db_.get(),
3404-
stmt->statement_.get(),
3405-
stmt->return_arrays_,
3406-
stmt->use_big_ints_)
3407-
.ToLocal(&result)) {
3399+
if (StatementExecutionHelper::All(env, stmt).ToLocal(&result)) {
34083400
RESET_AND_CHECK(
34093401
isolate, stmt->db_.get(), stmt->statement_.get(), needs_reset, void());
34103402
args.GetReturnValue().Set(result);
@@ -3452,12 +3444,7 @@ void StatementSync::Get(const FunctionCallbackInfo<Value>& args) {
34523444
}
34533445

34543446
Local<Value> result;
3455-
if (StatementExecutionHelper::Get(env,
3456-
stmt->db_.get(),
3457-
stmt->statement_.get(),
3458-
stmt->return_arrays_,
3459-
stmt->use_big_ints_)
3460-
.ToLocal(&result)) {
3447+
if (StatementExecutionHelper::Get(env, stmt).ToLocal(&result)) {
34613448
args.GetReturnValue().Set(result);
34623449
}
34633450
}
@@ -3478,9 +3465,7 @@ void StatementSync::Run(const FunctionCallbackInfo<Value>& args) {
34783465
}
34793466

34803467
Local<Object> result;
3481-
if (StatementExecutionHelper::Run(
3482-
env, stmt->db_.get(), stmt->statement_.get(), stmt->use_big_ints_)
3483-
.ToLocal(&result)) {
3468+
if (StatementExecutionHelper::Run(env, stmt).ToLocal(&result)) {
34843469
args.GetReturnValue().Set(result);
34853470
}
34863471
}
@@ -3821,9 +3806,7 @@ void SQLTagStore::Run(const FunctionCallbackInfo<Value>& args) {
38213806
}
38223807

38233808
Local<Object> result;
3824-
if (StatementExecutionHelper::Run(
3825-
env, stmt->db_.get(), stmt->statement_.get(), stmt->use_big_ints_)
3826-
.ToLocal(&result)) {
3809+
if (StatementExecutionHelper::Run(env, stmt.get()).ToLocal(&result)) {
38273810
args.GetReturnValue().Set(result);
38283811
}
38293812
}
@@ -3881,12 +3864,7 @@ void SQLTagStore::Get(const FunctionCallbackInfo<Value>& args) {
38813864
}
38823865

38833866
Local<Value> result;
3884-
if (StatementExecutionHelper::Get(env,
3885-
stmt->db_.get(),
3886-
stmt->statement_.get(),
3887-
stmt->return_arrays_,
3888-
stmt->use_big_ints_)
3889-
.ToLocal(&result)) {
3867+
if (StatementExecutionHelper::Get(env, stmt.get()).ToLocal(&result)) {
38903868
args.GetReturnValue().Set(result);
38913869
}
38923870
}
@@ -3918,12 +3896,7 @@ void SQLTagStore::All(const FunctionCallbackInfo<Value>& args) {
39183896
if (needs_reset) sqlite3_reset(stmt->statement_.get());
39193897
});
39203898
Local<Value> result;
3921-
if (StatementExecutionHelper::All(env,
3922-
stmt->db_.get(),
3923-
stmt->statement_.get(),
3924-
stmt->return_arrays_,
3925-
stmt->use_big_ints_)
3926-
.ToLocal(&result)) {
3899+
if (StatementExecutionHelper::All(env, stmt.get()).ToLocal(&result)) {
39273900
RESET_AND_CHECK(
39283901
isolate, stmt->db_.get(), stmt->statement_.get(), needs_reset, void());
39293902
args.GetReturnValue().Set(result);

‎src/node_sqlite.h‎

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -178,14 +178,9 @@ using StatementPtr = DeleteFnPtr<sqlite3_stmt, FinalizeStatement>;
178178
class StatementExecutionHelper {
179179
public:
180180
static v8::MaybeLocal<v8::Value> All(Environment* env,
181-
DatabaseSync* db,
182-
sqlite3_stmt* stmt,
183-
bool return_arrays,
184-
bool use_big_ints);
181+
StatementSync* statement);
185182
static v8::MaybeLocal<v8::Object> Run(Environment* env,
186-
DatabaseSync* db,
187-
sqlite3_stmt* stmt,
188-
bool use_big_ints);
183+
StatementSync* statement);
189184
static BaseObjectPtr<StatementSyncIterator> Iterate(
190185
Environment* env, BaseObjectPtr<StatementSync> stmt);
191186
static v8::MaybeLocal<v8::Value> ColumnToValue(Environment* env,
@@ -196,10 +191,7 @@ class StatementExecutionHelper {
196191
sqlite3_stmt* stmt,
197192
const int column);
198193
static v8::MaybeLocal<v8::Value> Get(Environment* env,
199-
DatabaseSync* db,
200-
sqlite3_stmt* stmt,
201-
bool return_arrays,
202-
bool use_big_ints);
194+
StatementSync* statement);
203195
};
204196

205197
class DatabaseSync;

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL