@@ -94,17 +94,11 @@ inline void THROW_ERR_SQLITE_ERROR(Isolate* isolate, const char* message) {
94
94
95
95
DatabaseSync::DatabaseSync (Environment* env,
96
96
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)) {
102
100
MakeWeak ();
103
- node::Utf8Value utf8_location (env->isolate (), location);
104
- location_ = utf8_location.ToString ();
105
101
connection_ = nullptr ;
106
- enable_foreign_keys_on_open_ = enable_foreign_keys_on_open;
107
- enable_dqs_on_open_ = enable_dqs_on_open;
108
102
109
103
if (open ) {
110
104
Open ();
@@ -120,7 +114,9 @@ DatabaseSync::~DatabaseSync() {
120
114
}
121
115
122
116
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" );
124
120
}
125
121
126
122
bool DatabaseSync::Open () {
@@ -131,27 +127,29 @@ bool DatabaseSync::Open() {
131
127
132
128
// TODO(cjihrig): Support additional flags.
133
129
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 );
135
132
CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
136
133
137
134
r = sqlite3_db_config (connection_,
138
135
SQLITE_DBCONFIG_DQS_DML,
139
- static_cast <int >(enable_dqs_on_open_ ),
136
+ static_cast <int >(open_config_. get_enable_dqs () ),
140
137
nullptr );
141
138
CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
142
139
r = sqlite3_db_config (connection_,
143
140
SQLITE_DBCONFIG_DQS_DDL,
144
- static_cast <int >(enable_dqs_on_open_ ),
141
+ static_cast <int >(open_config_. get_enable_dqs () ),
145
142
nullptr );
146
143
CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
147
144
148
145
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);
153
151
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 () );
155
153
156
154
return true ;
157
155
}
@@ -193,9 +191,11 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
193
191
return ;
194
192
}
195
193
194
+ std::string location =
195
+ node::Utf8Value (env->isolate (), args[0 ].As <String>()).ToString ();
196
+ DatabaseOpenConfiguration open_config (std::move (location));
197
+
196
198
bool open = true ;
197
- bool enable_foreign_keys = true ;
198
- bool enable_dqs = false ;
199
199
200
200
if (args.Length () > 1 ) {
201
201
if (!args[1 ]->IsObject ()) {
@@ -234,7 +234,8 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
234
234
" boolean." );
235
235
return ;
236
236
}
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 ());
238
239
}
239
240
240
241
Local<String> enable_dqs_string = FIXED_ONE_BYTE_STRING (
@@ -252,16 +253,11 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
252
253
" a boolean." );
253
254
return ;
254
255
}
255
- enable_dqs = enable_dqs_v.As <Boolean >()->Value ();
256
+ open_config. set_enable_dqs ( enable_dqs_v.As <Boolean >()->Value () );
256
257
}
257
258
}
258
259
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 );
265
261
}
266
262
267
263
void DatabaseSync::Open (const FunctionCallbackInfo<Value>& args) {
0 commit comments