@@ -96,17 +96,11 @@ inline void THROW_ERR_SQLITE_ERROR(Isolate* isolate, const char* message) {
96
96
97
97
DatabaseSync::DatabaseSync (Environment* env,
98
98
Local<Object> object,
99
- Local<String> location,
100
- bool open,
101
- bool enable_foreign_keys_on_open,
102
- bool enable_dqs_on_open)
103
- : BaseObject(env, object) {
99
+ DatabaseOpenConfiguration&& open_config,
100
+ bool open)
101
+ : BaseObject(env, object), open_config_(std::move(open_config)) {
104
102
MakeWeak ();
105
- node::Utf8Value utf8_location (env->isolate (), location);
106
- location_ = utf8_location.ToString ();
107
103
connection_ = nullptr ;
108
- enable_foreign_keys_on_open_ = enable_foreign_keys_on_open;
109
- enable_dqs_on_open_ = enable_dqs_on_open;
110
104
111
105
if (open) {
112
106
Open ();
@@ -132,7 +126,9 @@ DatabaseSync::~DatabaseSync() {
132
126
}
133
127
134
128
void DatabaseSync::MemoryInfo (MemoryTracker* tracker) const {
135
- tracker->TrackField (" location" , location_);
129
+ // TODO(tniessen): more accurately track the size of all fields
130
+ tracker->TrackFieldWithSize (
131
+ " open_config" , sizeof (open_config_), " DatabaseOpenConfiguration" );
136
132
}
137
133
138
134
bool DatabaseSync::Open () {
@@ -143,27 +139,29 @@ bool DatabaseSync::Open() {
143
139
144
140
// TODO(cjihrig): Support additional flags.
145
141
int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
146
- int r = sqlite3_open_v2 (location_.c_str (), &connection_, flags, nullptr );
142
+ int r = sqlite3_open_v2 (
143
+ open_config_.location ().c_str (), &connection_, flags, nullptr );
147
144
CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
148
145
149
146
r = sqlite3_db_config (connection_,
150
147
SQLITE_DBCONFIG_DQS_DML,
151
- static_cast <int >(enable_dqs_on_open_ ),
148
+ static_cast <int >(open_config_. get_enable_dqs () ),
152
149
nullptr );
153
150
CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
154
151
r = sqlite3_db_config (connection_,
155
152
SQLITE_DBCONFIG_DQS_DDL,
156
- static_cast <int >(enable_dqs_on_open_ ),
153
+ static_cast <int >(open_config_. get_enable_dqs () ),
157
154
nullptr );
158
155
CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
159
156
160
157
int foreign_keys_enabled;
161
- r = sqlite3_db_config (connection_,
162
- SQLITE_DBCONFIG_ENABLE_FKEY,
163
- static_cast <int >(enable_foreign_keys_on_open_),
164
- &foreign_keys_enabled);
158
+ r = sqlite3_db_config (
159
+ connection_,
160
+ SQLITE_DBCONFIG_ENABLE_FKEY,
161
+ static_cast <int >(open_config_.get_enable_foreign_keys ()),
162
+ &foreign_keys_enabled);
165
163
CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
166
- CHECK_EQ (foreign_keys_enabled, enable_foreign_keys_on_open_ );
164
+ CHECK_EQ (foreign_keys_enabled, open_config_. get_enable_foreign_keys () );
167
165
168
166
return true ;
169
167
}
@@ -205,9 +203,11 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
205
203
return ;
206
204
}
207
205
206
+ std::string location =
207
+ node::Utf8Value (env->isolate (), args[0 ].As <String>()).ToString ();
208
+ DatabaseOpenConfiguration open_config (std::move (location));
209
+
208
210
bool open = true ;
209
- bool enable_foreign_keys = true ;
210
- bool enable_dqs = false ;
211
211
212
212
if (args.Length () > 1 ) {
213
213
if (!args[1 ]->IsObject ()) {
@@ -246,7 +246,8 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
246
246
" boolean." );
247
247
return ;
248
248
}
249
- enable_foreign_keys = enable_foreign_keys_v.As <Boolean>()->Value ();
249
+ open_config.set_enable_foreign_keys (
250
+ enable_foreign_keys_v.As <Boolean>()->Value ());
250
251
}
251
252
252
253
Local<String> enable_dqs_string = FIXED_ONE_BYTE_STRING (
@@ -264,16 +265,11 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
264
265
" a boolean." );
265
266
return ;
266
267
}
267
- enable_dqs = enable_dqs_v.As <Boolean>()->Value ();
268
+ open_config. set_enable_dqs ( enable_dqs_v.As <Boolean>()->Value () );
268
269
}
269
270
}
270
271
271
- new DatabaseSync (env,
272
- args.This (),
273
- args[0 ].As <String>(),
274
- open,
275
- enable_foreign_keys,
276
- enable_dqs);
272
+ new DatabaseSync (env, args.This (), std::move (open_config), open);
277
273
}
278
274
279
275
void DatabaseSync::Open (const FunctionCallbackInfo<Value>& args) {
0 commit comments