@@ -1129,6 +1129,21 @@ inline void DatabaseNew(const FunctionCallbackInfo<Value>& args,
11291129 allow_unknown_named_params_v.As <Boolean>()->Value ());
11301130 }
11311131 }
1132+
1133+ Local<Value> defensive_v;
1134+ if (!options->Get (env->context (), env->defensive_string ())
1135+ .ToLocal (&defensive_v)) {
1136+ return ;
1137+ }
1138+ if (!defensive_v->IsUndefined ()) {
1139+ if (!defensive_v->IsBoolean ()) {
1140+ THROW_ERR_INVALID_ARG_TYPE (
1141+ env->isolate (),
1142+ " The \" options.defensive\" argument must be a boolean." );
1143+ return ;
1144+ }
1145+ open_config.set_enable_defensive (defensive_v.As <Boolean>()->Value ());
1146+ }
11321147 }
11331148
11341149 open_config.set_async (async);
@@ -2576,8 +2591,10 @@ MaybeLocal<Promise::Resolver> StatementAsyncExecutionHelper::All(
25762591 }
25772592 }
25782593
2579- resolver->Resolve (env->context (),
2580- Array::New (isolate, js_rows.data (), js_rows.size ()));
2594+ resolver
2595+ ->Resolve (env->context (),
2596+ Array::New (isolate, js_rows.data (), js_rows.size ()))
2597+ .FromJust ();
25812598 };
25822599
25832600 Local<Promise::Resolver> resolver =
@@ -2647,7 +2664,6 @@ MaybeLocal<Promise::Resolver> StatementAsyncExecutionHelper::Get(
26472664
26482665MaybeLocal<Promise::Resolver> StatementAsyncExecutionHelper::Run (
26492666 Environment* env, Statement* stmt) {
2650- Isolate* isolate = env->isolate ();
26512667 Database* db = stmt->db_ .get ();
26522668 sqlite3* conn = db->Connection ();
26532669 auto task =
@@ -3379,61 +3395,16 @@ void SQLTagStore::MemoryInfo(MemoryTracker* tracker) const {
33793395 tracker->TrackFieldWithSize (" sql_tags_cache" , cache_content_size);
33803396}
33813397
3382- // TODO(geeksilva97): move this to a common location if other classes need it
3383- inline Local<FunctionTemplate> GetStatementConstructorTemplate (
3384- Isolate* isolate) {
3385- Local<FunctionTemplate> tmpl =
3386- NewFunctionTemplate (isolate, IllegalConstructor);
3387- tmpl->InstanceTemplate ()->SetInternalFieldCount (
3388- Statement::kInternalFieldCount );
3389- SetProtoMethod (isolate, tmpl, " iterate" , Statement::Iterate);
3390- SetProtoMethod (isolate, tmpl, " all" , Statement::All);
3391- SetProtoMethod (isolate, tmpl, " get" , Statement::Get);
3392- SetProtoMethod (isolate, tmpl, " run" , Statement::Run);
3393- SetProtoMethodNoSideEffect (isolate, tmpl, " columns" , Statement::Columns);
3394- SetSideEffectFreeGetter (isolate,
3395- tmpl,
3396- FIXED_ONE_BYTE_STRING (isolate, " sourceSQL" ),
3397- Statement::SourceSQLGetter);
3398- SetSideEffectFreeGetter (isolate,
3399- tmpl,
3400- FIXED_ONE_BYTE_STRING (isolate, " expandedSQL" ),
3401- Statement::ExpandedSQLGetter);
3402- SetProtoMethod (isolate,
3403- tmpl,
3404- " setAllowBareNamedParameters" ,
3405- Statement::SetAllowBareNamedParameters);
3406- SetProtoMethod (isolate,
3407- tmpl,
3408- " setAllowUnknownNamedParameters" ,
3409- Statement::SetAllowUnknownNamedParameters);
3410- SetProtoMethod (isolate, tmpl, " setReadBigInts" , Statement::SetReadBigInts);
3411- SetProtoMethod (isolate, tmpl, " setReturnArrays" , Statement::SetReturnArrays);
3412-
3413- return tmpl;
3414- }
3415-
3416- Local<FunctionTemplate> Statement::GetConstructorTemplate (
3417- Environment* env, std::string_view name = " Statement" ) {
3418- Isolate* isolate = env->isolate ();
3419- Local<FunctionTemplate> tmpl = GetStatementConstructorTemplate (isolate);
3420- Local<String> class_name;
3421- if (!String::NewFromUtf8 (isolate, name.data ()).ToLocal (&class_name)) {
3422- return Local<FunctionTemplate>();
3423- }
3424-
3425- tmpl->SetClassName (class_name);
3426- return tmpl;
3427- }
3428-
34293398BaseObjectPtr<Statement> Statement::Create (Environment* env,
34303399 BaseObjectPtr<Database> db,
34313400 sqlite3_stmt* stmt) {
3401+ Local<FunctionTemplate> tmpl =
3402+ env->sqlite_statement_async_constructor_template ();
3403+ if (!db->is_async ()) {
3404+ tmpl = env->sqlite_statement_sync_constructor_template ();
3405+ }
34323406 Local<Object> obj;
3433- if (!GetConstructorTemplate (env)
3434- ->InstanceTemplate ()
3435- ->NewInstance (env->context ())
3436- .ToLocal (&obj)) {
3407+ if (!tmpl->InstanceTemplate ()->NewInstance (env->context ()).ToLocal (&obj)) {
34373408 return nullptr ;
34383409 }
34393410
0 commit comments