mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
sqlite: add support for unknown named parameters
This commit adds a method for toggling support for unknown named parameters in prepared statements. Fixes: https://github.com/nodejs/node/issues/55533 PR-URL: https://github.com/nodejs/node/pull/57552 Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
1 parent
2ce79787de
commit
bd5c90654a
4 files changed
+84
-3
No files matched your search
+29
-3
@@ -1012,6 +1012,7 @@ StatementSync::StatementSync(Environment* env,
|
||||
// connection level and inherited by statements to reduce boilerplate.
|
||||
use_big_ints_ = false;
|
||||
allow_bare_named_params_ = true;
|
||||
allow_unknown_named_params_ = false;
|
||||
bare_named_params_ = std::nullopt;
|
||||
}
|
||||
|
||||
@@ -1095,9 +1096,13 @@ bool StatementSync::BindParams(const FunctionCallbackInfo<Value>& args) {
|
||||
}
|
||||
|
||||
if (r == 0) {
|
||||
THROW_ERR_INVALID_STATE(
|
||||
env(), "Unknown named parameter '%s'", *utf8_key);
|
||||
return false;
|
||||
if (allow_unknown_named_params_) {
|
||||
continue;
|
||||
} else {
|
||||
THROW_ERR_INVALID_STATE(
|
||||
env(), "Unknown named parameter '%s'", *utf8_key);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1627,6 +1632,23 @@ void StatementSync::SetAllowBareNamedParameters(
|
||||
stmt->allow_bare_named_params_ = args[0]->IsTrue();
|
||||
}
|
||||
|
||||
void StatementSync::SetAllowUnknownNamedParameters(
|
||||
const FunctionCallbackInfo<Value>& args) {
|
||||
StatementSync* stmt;
|
||||
ASSIGN_OR_RETURN_UNWRAP(&stmt, args.This());
|
||||
Environment* env = Environment::GetCurrent(args);
|
||||
THROW_AND_RETURN_ON_BAD_STATE(
|
||||
env, stmt->IsFinalized(), "statement has been finalized");
|
||||
|
||||
if (!args[0]->IsBoolean()) {
|
||||
THROW_ERR_INVALID_ARG_TYPE(env->isolate(),
|
||||
"The \"enabled\" argument must be a boolean.");
|
||||
return;
|
||||
}
|
||||
|
||||
stmt->allow_unknown_named_params_ = args[0]->IsTrue();
|
||||
}
|
||||
|
||||
void StatementSync::SetReadBigInts(const FunctionCallbackInfo<Value>& args) {
|
||||
StatementSync* stmt;
|
||||
ASSIGN_OR_RETURN_UNWRAP(&stmt, args.This());
|
||||
@@ -1690,6 +1712,10 @@ Local<FunctionTemplate> StatementSync::GetConstructorTemplate(
|
||||
tmpl,
|
||||
"setAllowBareNamedParameters",
|
||||
StatementSync::SetAllowBareNamedParameters);
|
||||
SetProtoMethod(isolate,
|
||||
tmpl,
|
||||
"setAllowUnknownNamedParameters",
|
||||
StatementSync::SetAllowUnknownNamedParameters);
|
||||
SetProtoMethod(
|
||||
isolate, tmpl, "setReadBigInts", StatementSync::SetReadBigInts);
|
||||
env->set_sqlite_statement_sync_constructor_template(tmpl);
|
||||
|
||||
Reference in new issue
Block a user