@@ -1147,14 +1147,10 @@ void DatabaseSync::Prepare(const FunctionCallbackInfo<Value>& args) {
11471147 return ;
11481148 }
11491149
1150- Utf8Value sql (env->isolate (), args[0 ].As <String>());
1151- sqlite3_stmt* s = nullptr ;
1152- int r = sqlite3_prepare_v2 (db->connection_ , *sql, -1 , &s, 0 );
1153-
1154- CHECK_ERROR_OR_THROW (env->isolate (), db, r, SQLITE_OK, void ());
1155- BaseObjectPtr<StatementSync> stmt =
1156- StatementSync::Create (env, BaseObjectPtr<DatabaseSync>(db), s);
1157- db->statements_ .insert (stmt.get ());
1150+ std::optional<bool > return_arrays;
1151+ std::optional<bool > use_big_ints;
1152+ std::optional<bool > allow_bare_named_params;
1153+ std::optional<bool > allow_unknown_named_params;
11581154
11591155 if (args.Length () > 1 && !args[1 ]->IsUndefined ()) {
11601156 if (!args[1 ]->IsObject ()) {
@@ -1178,7 +1174,7 @@ void DatabaseSync::Prepare(const FunctionCallbackInfo<Value>& args) {
11781174 " The \" options.returnArrays\" argument must be a boolean." );
11791175 return ;
11801176 }
1181- stmt-> return_arrays_ = return_arrays_v->IsTrue ();
1177+ return_arrays = return_arrays_v->IsTrue ();
11821178 }
11831179
11841180 Local<Value> read_big_ints_v;
@@ -1195,7 +1191,7 @@ void DatabaseSync::Prepare(const FunctionCallbackInfo<Value>& args) {
11951191 " The \" options.readBigInts\" argument must be a boolean." );
11961192 return ;
11971193 }
1198- stmt-> use_big_ints_ = read_big_ints_v->IsTrue ();
1194+ use_big_ints = read_big_ints_v->IsTrue ();
11991195 }
12001196
12011197 Local<Value> allow_bare_named_params_v;
@@ -1214,7 +1210,7 @@ void DatabaseSync::Prepare(const FunctionCallbackInfo<Value>& args) {
12141210 " boolean." );
12151211 return ;
12161212 }
1217- stmt-> allow_bare_named_params_ = allow_bare_named_params_v->IsTrue ();
1213+ allow_bare_named_params = allow_bare_named_params_v->IsTrue ();
12181214 }
12191215
12201216 Local<Value> allow_unknown_named_params_v;
@@ -1233,11 +1229,32 @@ void DatabaseSync::Prepare(const FunctionCallbackInfo<Value>& args) {
12331229 " boolean." );
12341230 return ;
12351231 }
1236- stmt->allow_unknown_named_params_ =
1237- allow_unknown_named_params_v->IsTrue ();
1232+ allow_unknown_named_params = allow_unknown_named_params_v->IsTrue ();
12381233 }
12391234 }
12401235
1236+ Utf8Value sql (env->isolate (), args[0 ].As <String>());
1237+ sqlite3_stmt* s = nullptr ;
1238+ int r = sqlite3_prepare_v2 (db->connection_ , *sql, -1 , &s, 0 );
1239+
1240+ CHECK_ERROR_OR_THROW (env->isolate (), db, r, SQLITE_OK, void ());
1241+ BaseObjectPtr<StatementSync> stmt =
1242+ StatementSync::Create (env, BaseObjectPtr<DatabaseSync>(db), s);
1243+ db->statements_ .insert (stmt.get ());
1244+
1245+ if (return_arrays.has_value ()) {
1246+ stmt->return_arrays_ = return_arrays.value ();
1247+ }
1248+ if (use_big_ints.has_value ()) {
1249+ stmt->use_big_ints_ = use_big_ints.value ();
1250+ }
1251+ if (allow_bare_named_params.has_value ()) {
1252+ stmt->allow_bare_named_params_ = allow_bare_named_params.value ();
1253+ }
1254+ if (allow_unknown_named_params.has_value ()) {
1255+ stmt->allow_unknown_named_params_ = allow_unknown_named_params.value ();
1256+ }
1257+
12411258 args.GetReturnValue ().Set (stmt->object ());
12421259}
12431260
0 commit comments