@@ -138,7 +138,9 @@ bool DatabaseSync::Open() {
138138 }
139139
140140 // TODO(cjihrig): Support additional flags.
141- int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE ;
141+ int flags = open_config_.get_read_only ()
142+ ? SQLITE_OPEN_READONLY
143+ : SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE ;
142144 int r = sqlite3_open_v2 (
143145 open_config_.location ().c_str (), &connection_, flags, nullptr );
144146 CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK , false );
@@ -231,6 +233,22 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
231233 open = open_v.As <Boolean>()->Value ();
232234 }
233235
236+ Local<String> read_only_string =
237+ FIXED_ONE_BYTE_STRING (env->isolate (), " readOnly" );
238+ Local<Value> read_only_v;
239+ if (!options->Get (env->context (), read_only_string).ToLocal (&read_only_v)) {
240+ return ;
241+ }
242+ if (!read_only_v->IsUndefined ()) {
243+ if (!read_only_v->IsBoolean ()) {
244+ node::THROW_ERR_INVALID_ARG_TYPE (
245+ env->isolate (),
246+ " The \" options.readOnly\" argument must be a boolean." );
247+ return ;
248+ }
249+ open_config.set_read_only (read_only_v.As <Boolean>()->Value ());
250+ }
251+
234252 Local<String> enable_foreign_keys_string =
235253 FIXED_ONE_BYTE_STRING (env->isolate (), " enableForeignKeyConstraints" );
236254 Local<Value> enable_foreign_keys_v;
0 commit comments