Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 88c7f5b

Browse filesBrowse files
tniessenRafaelGSS
authored andcommitted
sqlite: refactor open options
Move options that are only relevant for opening the database into a self-contained class. PR-URL: #55442 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent adda37f commit 88c7f5b
Copy full SHA for 88c7f5b

File tree

Expand file treeCollapse file tree

2 files changed

+50
-35
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+50
-35
lines changed
Open diff view settings
Collapse file

‎src/node_sqlite.cc‎

Copy file name to clipboardExpand all lines: src/node_sqlite.cc
+24-28Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -94,17 +94,11 @@ inline void THROW_ERR_SQLITE_ERROR(Isolate* isolate, const char* message) {
9494

9595
DatabaseSync::DatabaseSync(Environment* env,
9696
Local<Object> object,
97-
Local<String> location,
98-
bool open,
99-
bool enable_foreign_keys_on_open,
100-
bool enable_dqs_on_open)
101-
: BaseObject(env, object) {
97+
DatabaseOpenConfiguration&& open_config,
98+
bool open)
99+
: BaseObject(env, object), open_config_(std::move(open_config)) {
102100
MakeWeak();
103-
node::Utf8Value utf8_location(env->isolate(), location);
104-
location_ = utf8_location.ToString();
105101
connection_ = nullptr;
106-
enable_foreign_keys_on_open_ = enable_foreign_keys_on_open;
107-
enable_dqs_on_open_ = enable_dqs_on_open;
108102

109103
if (open) {
110104
Open();
@@ -120,7 +114,9 @@ DatabaseSync::~DatabaseSync() {
120114
}
121115

122116
void DatabaseSync::MemoryInfo(MemoryTracker* tracker) const {
123-
tracker->TrackField("location", location_);
117+
// TODO(tniessen): more accurately track the size of all fields
118+
tracker->TrackFieldWithSize(
119+
"open_config", sizeof(open_config_), "DatabaseOpenConfiguration");
124120
}
125121

126122
bool DatabaseSync::Open() {
@@ -131,27 +127,29 @@ bool DatabaseSync::Open() {
131127

132128
// TODO(cjihrig): Support additional flags.
133129
int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
134-
int r = sqlite3_open_v2(location_.c_str(), &connection_, flags, nullptr);
130+
int r = sqlite3_open_v2(
131+
open_config_.location().c_str(), &connection_, flags, nullptr);
135132
CHECK_ERROR_OR_THROW(env()->isolate(), connection_, r, SQLITE_OK, false);
136133

137134
r = sqlite3_db_config(connection_,
138135
SQLITE_DBCONFIG_DQS_DML,
139-
static_cast<int>(enable_dqs_on_open_),
136+
static_cast<int>(open_config_.get_enable_dqs()),
140137
nullptr);
141138
CHECK_ERROR_OR_THROW(env()->isolate(), connection_, r, SQLITE_OK, false);
142139
r = sqlite3_db_config(connection_,
143140
SQLITE_DBCONFIG_DQS_DDL,
144-
static_cast<int>(enable_dqs_on_open_),
141+
static_cast<int>(open_config_.get_enable_dqs()),
145142
nullptr);
146143
CHECK_ERROR_OR_THROW(env()->isolate(), connection_, r, SQLITE_OK, false);
147144

148145
int foreign_keys_enabled;
149-
r = sqlite3_db_config(connection_,
150-
SQLITE_DBCONFIG_ENABLE_FKEY,
151-
static_cast<int>(enable_foreign_keys_on_open_),
152-
&foreign_keys_enabled);
146+
r = sqlite3_db_config(
147+
connection_,
148+
SQLITE_DBCONFIG_ENABLE_FKEY,
149+
static_cast<int>(open_config_.get_enable_foreign_keys()),
150+
&foreign_keys_enabled);
153151
CHECK_ERROR_OR_THROW(env()->isolate(), connection_, r, SQLITE_OK, false);
154-
CHECK_EQ(foreign_keys_enabled, enable_foreign_keys_on_open_);
152+
CHECK_EQ(foreign_keys_enabled, open_config_.get_enable_foreign_keys());
155153

156154
return true;
157155
}
@@ -193,9 +191,11 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
193191
return;
194192
}
195193

194+
std::string location =
195+
node::Utf8Value(env->isolate(), args[0].As<String>()).ToString();
196+
DatabaseOpenConfiguration open_config(std::move(location));
197+
196198
bool open = true;
197-
bool enable_foreign_keys = true;
198-
bool enable_dqs = false;
199199

200200
if (args.Length() > 1) {
201201
if (!args[1]->IsObject()) {
@@ -234,7 +234,8 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
234234
"boolean.");
235235
return;
236236
}
237-
enable_foreign_keys = enable_foreign_keys_v.As<Boolean>()->Value();
237+
open_config.set_enable_foreign_keys(
238+
enable_foreign_keys_v.As<Boolean>()->Value());
238239
}
239240

240241
Local<String> enable_dqs_string = FIXED_ONE_BYTE_STRING(
@@ -252,16 +253,11 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
252253
"a boolean.");
253254
return;
254255
}
255-
enable_dqs = enable_dqs_v.As<Boolean>()->Value();
256+
open_config.set_enable_dqs(enable_dqs_v.As<Boolean>()->Value());
256257
}
257258
}
258259

259-
new DatabaseSync(env,
260-
args.This(),
261-
args[0].As<String>(),
262-
open,
263-
enable_foreign_keys,
264-
enable_dqs);
260+
new DatabaseSync(env, args.This(), std::move(open_config), open);
265261
}
266262

267263
void DatabaseSync::Open(const FunctionCallbackInfo<Value>& args) {
Collapse file

‎src/node_sqlite.h‎

Copy file name to clipboardExpand all lines: src/node_sqlite.h
+26-7Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,37 @@
1414
namespace node {
1515
namespace sqlite {
1616

17+
class DatabaseOpenConfiguration {
18+
public:
19+
explicit DatabaseOpenConfiguration(std::string&& location)
20+
: location_(std::move(location)) {}
21+
22+
inline const std::string& location() const { return location_; }
23+
24+
inline bool get_enable_foreign_keys() const { return enable_foreign_keys_; }
25+
26+
inline void set_enable_foreign_keys(bool flag) {
27+
enable_foreign_keys_ = flag;
28+
}
29+
30+
inline bool get_enable_dqs() const { return enable_dqs_; }
31+
32+
inline void set_enable_dqs(bool flag) { enable_dqs_ = flag; }
33+
34+
private:
35+
std::string location_;
36+
bool enable_foreign_keys_ = true;
37+
bool enable_dqs_ = false;
38+
};
39+
1740
class StatementSync;
1841

1942
class DatabaseSync : public BaseObject {
2043
public:
2144
DatabaseSync(Environment* env,
2245
v8::Local<v8::Object> object,
23-
v8::Local<v8::String> location,
24-
bool open,
25-
bool enable_foreign_keys_on_open,
26-
bool enable_dqs_on_open);
46+
DatabaseOpenConfiguration&& open_config,
47+
bool open);
2748
void MemoryInfo(MemoryTracker* tracker) const override;
2849
static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
2950
static void Open(const v8::FunctionCallbackInfo<v8::Value>& args);
@@ -42,11 +63,9 @@ class DatabaseSync : public BaseObject {
4263
bool Open();
4364

4465
~DatabaseSync() override;
45-
std::string location_;
66+
DatabaseOpenConfiguration open_config_;
4667
sqlite3* connection_;
4768
std::unordered_set<StatementSync*> statements_;
48-
bool enable_foreign_keys_on_open_;
49-
bool enable_dqs_on_open_;
5069
};
5170

5271
class StatementSync : public BaseObject {

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.