@@ -1361,6 +1361,7 @@ StatementSync::StatementSync(Environment* env,
13611361 // connection level and inherited by statements to reduce boilerplate.
13621362 use_big_ints_ = false ;
13631363 allow_bare_named_params_ = true ;
1364+ allow_unknown_named_params_ = false ;
13641365 bare_named_params_ = std::nullopt ;
13651366}
13661367
@@ -1443,9 +1444,13 @@ bool StatementSync::BindParams(const FunctionCallbackInfo<Value>& args) {
14431444 }
14441445
14451446 if (r == 0 ) {
1446- THROW_ERR_INVALID_STATE (
1447- env (), " Unknown named parameter '%s'" , *utf8_key);
1448- return false ;
1447+ if (allow_unknown_named_params_) {
1448+ continue ;
1449+ } else {
1450+ THROW_ERR_INVALID_STATE (
1451+ env (), " Unknown named parameter '%s'" , *utf8_key);
1452+ return false ;
1453+ }
14491454 }
14501455 }
14511456
@@ -2033,6 +2038,23 @@ void StatementSync::SetAllowBareNamedParameters(
20332038 stmt->allow_bare_named_params_ = args[0 ]->IsTrue ();
20342039}
20352040
2041+ void StatementSync::SetAllowUnknownNamedParameters (
2042+ const FunctionCallbackInfo<Value>& args) {
2043+ StatementSync* stmt;
2044+ ASSIGN_OR_RETURN_UNWRAP (&stmt, args.This ());
2045+ Environment* env = Environment::GetCurrent (args);
2046+ THROW_AND_RETURN_ON_BAD_STATE (
2047+ env, stmt->IsFinalized (), " statement has been finalized" );
2048+
2049+ if (!args[0 ]->IsBoolean ()) {
2050+ THROW_ERR_INVALID_ARG_TYPE (env->isolate (),
2051+ " The \" enabled\" argument must be a boolean." );
2052+ return ;
2053+ }
2054+
2055+ stmt->allow_unknown_named_params_ = args[0 ]->IsTrue ();
2056+ }
2057+
20362058void StatementSync::SetReadBigInts (const FunctionCallbackInfo<Value>& args) {
20372059 StatementSync* stmt;
20382060 ASSIGN_OR_RETURN_UNWRAP (&stmt, args.This ());
@@ -2098,6 +2120,10 @@ Local<FunctionTemplate> StatementSync::GetConstructorTemplate(
20982120 tmpl,
20992121 " setAllowBareNamedParameters" ,
21002122 StatementSync::SetAllowBareNamedParameters);
2123+ SetProtoMethod (isolate,
2124+ tmpl,
2125+ " setAllowUnknownNamedParameters" ,
2126+ StatementSync::SetAllowUnknownNamedParameters);
21012127 SetProtoMethod (
21022128 isolate, tmpl, " setReadBigInts" , StatementSync::SetReadBigInts);
21032129 env->set_sqlite_statement_sync_constructor_template (tmpl);
0 commit comments