@@ -96,17 +96,11 @@ inline void THROW_ERR_SQLITE_ERROR(Isolate* isolate, const char* message) {
9696
9797DatabaseSync::DatabaseSync (Environment* env,
9898 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)) {
104102 MakeWeak ();
105- node::Utf8Value utf8_location (env->isolate (), location);
106- location_ = utf8_location.ToString ();
107103 connection_ = nullptr ;
108- enable_foreign_keys_on_open_ = enable_foreign_keys_on_open;
109- enable_dqs_on_open_ = enable_dqs_on_open;
110104
111105 if (open) {
112106 Open ();
@@ -132,7 +126,9 @@ DatabaseSync::~DatabaseSync() {
132126}
133127
134128void 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" );
136132}
137133
138134bool DatabaseSync::Open () {
@@ -143,27 +139,29 @@ bool DatabaseSync::Open() {
143139
144140 // TODO(cjihrig): Support additional flags.
145141 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 );
147144 CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
148145
149146 r = sqlite3_db_config (connection_,
150147 SQLITE_DBCONFIG_DQS_DML,
151- static_cast <int >(enable_dqs_on_open_ ),
148+ static_cast <int >(open_config_. get_enable_dqs () ),
152149 nullptr );
153150 CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
154151 r = sqlite3_db_config (connection_,
155152 SQLITE_DBCONFIG_DQS_DDL,
156- static_cast <int >(enable_dqs_on_open_ ),
153+ static_cast <int >(open_config_. get_enable_dqs () ),
157154 nullptr );
158155 CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
159156
160157 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);
165163 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 () );
167165
168166 return true ;
169167}
@@ -205,9 +203,11 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
205203 return ;
206204 }
207205
206+ std::string location =
207+ node::Utf8Value (env->isolate (), args[0 ].As <String>()).ToString ();
208+ DatabaseOpenConfiguration open_config (std::move (location));
209+
208210 bool open = true ;
209- bool enable_foreign_keys = true ;
210- bool enable_dqs = false ;
211211
212212 if (args.Length () > 1 ) {
213213 if (!args[1 ]->IsObject ()) {
@@ -246,7 +246,8 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
246246 " boolean." );
247247 return ;
248248 }
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 ());
250251 }
251252
252253 Local<String> enable_dqs_string = FIXED_ONE_BYTE_STRING (
@@ -264,16 +265,11 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
264265 " a boolean." );
265266 return ;
266267 }
267- enable_dqs = enable_dqs_v.As <Boolean>()->Value ();
268+ open_config. set_enable_dqs ( enable_dqs_v.As <Boolean>()->Value () );
268269 }
269270 }
270271
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);
277273}
278274
279275void DatabaseSync::Open (const FunctionCallbackInfo<Value>& args) {
0 commit comments