Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 28 additions & 55 deletions src/node_sqlite.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2987,10 +2987,11 @@ Maybe<void> ExtractRowValues(Environment* env,
}

MaybeLocal<Value> StatementExecutionHelper::All(Environment* env,
DatabaseSync* db,
sqlite3_stmt* stmt,
bool return_arrays,
bool use_big_ints) {
StatementSync* statement) {
DatabaseSync* db = statement->db_.get();
sqlite3_stmt* stmt = statement->statement_.get();
const bool return_arrays = statement->return_arrays_;
const bool use_big_ints = statement->use_big_ints_;
Isolate* isolate = env->isolate();
EscapableHandleScope scope(isolate);
int r;
Expand All @@ -3015,13 +3016,10 @@ MaybeLocal<Value> StatementExecutionHelper::All(Environment* env,
rows.emplace_back(row_array);
} else {
if (row_keys.size() == 0) {
row_keys.reserve(num_cols);
for (int i = 0; i < num_cols; ++i) {
Local<Name> key;
if (!ColumnNameToName(env, stmt, i).ToLocal(&key)) {
return MaybeLocal<Value>();
}
row_keys.emplace_back(key);
// Reuses the statement's internalized column names instead of
// re-interning them on every call.
if (!statement->GetCachedColumnNames(&row_keys)) {
return MaybeLocal<Value>();
}
}
DCHECK_EQ(row_keys.size(), row_values.size());
Expand All @@ -3036,9 +3034,10 @@ MaybeLocal<Value> StatementExecutionHelper::All(Environment* env,
}

MaybeLocal<Object> StatementExecutionHelper::Run(Environment* env,
DatabaseSync* db,
sqlite3_stmt* stmt,
bool use_big_ints) {
StatementSync* statement) {
DatabaseSync* db = statement->db_.get();
sqlite3_stmt* stmt = statement->statement_.get();
const bool use_big_ints = statement->use_big_ints_;
Isolate* isolate = env->isolate();
EscapableHandleScope scope(isolate);
bool needs_reset = true;
Expand Down Expand Up @@ -3122,10 +3121,11 @@ BaseObjectPtr<StatementSyncIterator> StatementExecutionHelper::Iterate(
}

MaybeLocal<Value> StatementExecutionHelper::Get(Environment* env,
DatabaseSync* db,
sqlite3_stmt* stmt,
bool return_arrays,
bool use_big_ints) {
StatementSync* statement) {
DatabaseSync* db = statement->db_.get();
sqlite3_stmt* stmt = statement->statement_.get();
const bool return_arrays = statement->return_arrays_;
const bool use_big_ints = statement->use_big_ints_;
Isolate* isolate = env->isolate();
EscapableHandleScope scope(isolate);
bool needs_reset = true;
Expand Down Expand Up @@ -3160,13 +3160,10 @@ MaybeLocal<Value> StatementExecutionHelper::Get(Environment* env,
result = Array::New(isolate, row_values.data(), row_values.size());
} else {
LocalVector<Name> keys(isolate);
keys.reserve(num_cols);
for (int i = 0; i < num_cols; ++i) {
Local<Name> key;
if (!ColumnNameToName(env, stmt, i).ToLocal(&key)) {
return MaybeLocal<Value>();
}
keys.emplace_back(key);
// Reuses the statement's internalized column names instead of
// re-interning them on every call.
if (!statement->GetCachedColumnNames(&keys)) {
return MaybeLocal<Value>();
}

DCHECK_EQ(keys.size(), row_values.size());
Expand Down Expand Up @@ -3197,12 +3194,7 @@ void StatementSync::All(const FunctionCallbackInfo<Value>& args) {
if (needs_reset) sqlite3_reset(stmt->statement_.get());
});
Local<Value> result;
if (StatementExecutionHelper::All(env,
stmt->db_.get(),
stmt->statement_.get(),
stmt->return_arrays_,
stmt->use_big_ints_)
.ToLocal(&result)) {
if (StatementExecutionHelper::All(env, stmt).ToLocal(&result)) {
RESET_AND_CHECK(
isolate, stmt->db_.get(), stmt->statement_.get(), needs_reset, void());
args.GetReturnValue().Set(result);
Expand Down Expand Up @@ -3246,12 +3238,7 @@ void StatementSync::Get(const FunctionCallbackInfo<Value>& args) {
}

Local<Value> result;
if (StatementExecutionHelper::Get(env,
stmt->db_.get(),
stmt->statement_.get(),
stmt->return_arrays_,
stmt->use_big_ints_)
.ToLocal(&result)) {
if (StatementExecutionHelper::Get(env, stmt).ToLocal(&result)) {
args.GetReturnValue().Set(result);
}
}
Expand All @@ -3270,9 +3257,7 @@ void StatementSync::Run(const FunctionCallbackInfo<Value>& args) {
}

Local<Object> result;
if (StatementExecutionHelper::Run(
env, stmt->db_.get(), stmt->statement_.get(), stmt->use_big_ints_)
.ToLocal(&result)) {
if (StatementExecutionHelper::Run(env, stmt).ToLocal(&result)) {
args.GetReturnValue().Set(result);
}
}
Expand Down Expand Up @@ -3610,9 +3595,7 @@ void SQLTagStore::Run(const FunctionCallbackInfo<Value>& args) {
}

Local<Object> result;
if (StatementExecutionHelper::Run(
env, stmt->db_.get(), stmt->statement_.get(), stmt->use_big_ints_)
.ToLocal(&result)) {
if (StatementExecutionHelper::Run(env, stmt.get()).ToLocal(&result)) {
args.GetReturnValue().Set(result);
}
}
Expand Down Expand Up @@ -3664,12 +3647,7 @@ void SQLTagStore::Get(const FunctionCallbackInfo<Value>& args) {
}

Local<Value> result;
if (StatementExecutionHelper::Get(env,
stmt->db_.get(),
stmt->statement_.get(),
stmt->return_arrays_,
stmt->use_big_ints_)
.ToLocal(&result)) {
if (StatementExecutionHelper::Get(env, stmt.get()).ToLocal(&result)) {
args.GetReturnValue().Set(result);
}
}
Expand Down Expand Up @@ -3698,12 +3676,7 @@ void SQLTagStore::All(const FunctionCallbackInfo<Value>& args) {
if (needs_reset) sqlite3_reset(stmt->statement_.get());
});
Local<Value> result;
if (StatementExecutionHelper::All(env,
stmt->db_.get(),
stmt->statement_.get(),
stmt->return_arrays_,
stmt->use_big_ints_)
.ToLocal(&result)) {
if (StatementExecutionHelper::All(env, stmt.get()).ToLocal(&result)) {
RESET_AND_CHECK(
isolate, stmt->db_.get(), stmt->statement_.get(), needs_reset, void());
args.GetReturnValue().Set(result);
Expand Down
14 changes: 3 additions & 11 deletions src/node_sqlite.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,14 +170,9 @@ using StatementPtr = DeleteFnPtr<sqlite3_stmt, FinalizeStatement>;
class StatementExecutionHelper {
public:
static v8::MaybeLocal<v8::Value> All(Environment* env,
DatabaseSync* db,
sqlite3_stmt* stmt,
bool return_arrays,
bool use_big_ints);
StatementSync* statement);
static v8::MaybeLocal<v8::Object> Run(Environment* env,
DatabaseSync* db,
sqlite3_stmt* stmt,
bool use_big_ints);
StatementSync* statement);
static BaseObjectPtr<StatementSyncIterator> Iterate(
Environment* env, BaseObjectPtr<StatementSync> stmt);
static v8::MaybeLocal<v8::Value> ColumnToValue(Environment* env,
Expand All @@ -188,10 +183,7 @@ class StatementExecutionHelper {
sqlite3_stmt* stmt,
const int column);
static v8::MaybeLocal<v8::Value> Get(Environment* env,
DatabaseSync* db,
sqlite3_stmt* stmt,
bool return_arrays,
bool use_big_ints);
StatementSync* statement);
};

class DatabaseSync : public BaseObject {
Expand Down
Loading