@@ -94,17 +94,11 @@ inline void THROW_ERR_SQLITE_ERROR(Isolate* isolate, const char* message) {
9494
9595DatabaseSync::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
122116void 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
126122bool 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
267263void DatabaseSync::Open (const FunctionCallbackInfo<Value>& args) {
0 commit comments