Add named parameters support

SQLite supports named parameters in either of these forms:
- $NAME
- :NAME
- @NAME

These parameters should be supplied to the query either in a form of a map
or as a list, the key is always iodata:
- #{":myparam" => "value"}
- [{"$myparam", 1}]
- [{text, "@myparam", "value"}]
This commit is contained in:
Dmitry Matveyev
2023-01-08 13:54:27 +06:00
parent c71ad3eb6b
commit 16580ce11d
5 changed files with 99 additions and 1 deletions

View File

@@ -281,6 +281,26 @@ bind_for_queries_test() ->
ok.
named_bind_for_queries_test() ->
{ok, Db} = esqlite3:open(":memory:"),
ok = esqlite3:exec(Db, "begin;"),
ok = esqlite3:exec(Db, "create table test_table(one varchar(10), two int);"),
ok = esqlite3:exec(Db, "commit;"),
?assertEqual([[1]], esqlite3:q(Db, <<"SELECT count(type) FROM sqlite_master WHERE type='table' AND name=:name;">>,
[{<<":name">>, "test_table"}])),
?assertEqual([[1]], esqlite3:q(Db, <<"SELECT count(type) FROM sqlite_master WHERE type='table' AND name=$name;">>,
[{"$name", test_table}])),
?assertEqual([[1]], esqlite3:q(Db, <<"SELECT count(type) FROM sqlite_master WHERE type='table' AND name=@name;">>,
[{"@name", <<"test_table">>}])),
?assertEqual([[1]], esqlite3:q(Db, <<"SELECT count(type) FROM sqlite_master WHERE type='table' AND name=:name;">>,
#{":name" => test_table})),
?assertEqual([[1]], esqlite3:q(Db, <<"SELECT count(type) FROM sqlite_master WHERE type='table' AND name=:name;">>,
[{text, ":name", "test_table"}])),
ok.
column_names2_test() ->
{ok, Db} = esqlite3:open(":memory:"),
ok = esqlite3:exec(Db, "begin;"),