table/sql_query: Allow to use numbered parameters in queries

See #371. This is a holy mess of two broken drivers we depend on.
This commit is contained in:
fox.cpp 2021-07-10 23:17:01 +03:00
parent a202b5d49c
commit e041a786a0
No known key found for this signature in database
GPG key ID: 5B991F6215D2FCC0
3 changed files with 78 additions and 10 deletions

View file

@ -73,6 +73,31 @@ func (s *SQLTable) Init(cfg *config.Map) error {
// sql_table module literally wraps the sql_query module by generating a
// configuration block for it.
var (
useNamedArgs string
lookupQuery string
addQuery string
listQuery string
setQuery string
delQuery string
)
if driver == "sqlite3" {
useNamedArgs = "yes"
lookupQuery = fmt.Sprintf("SELECT %s FROM %s WHERE %s = :key", valueColumn, tableName, keyColumn)
addQuery = fmt.Sprintf("INSERT INTO %s(%s, %s) VALUES(:key, :value)", tableName, keyColumn, valueColumn)
listQuery = fmt.Sprintf("SELECT %s from %s", keyColumn, tableName)
setQuery = fmt.Sprintf("UPDATE %s SET %s = :value WHERE %s = :key", tableName, valueColumn, keyColumn)
delQuery = fmt.Sprintf("DELETE FROM %s WHERE %s = :key", tableName, keyColumn)
} else {
useNamedArgs = "no"
lookupQuery = fmt.Sprintf("SELECT %s FROM %s WHERE %s = $1", valueColumn, tableName, keyColumn)
addQuery = fmt.Sprintf("INSERT INTO %s(%s, %s) VALUES($1, $2)", tableName, keyColumn, valueColumn)
listQuery = fmt.Sprintf("SELECT %s from %s", keyColumn, tableName)
setQuery = fmt.Sprintf("UPDATE %s SET %s = $2 WHERE %s = $1", tableName, valueColumn, keyColumn)
delQuery = fmt.Sprintf("DELETE FROM %s WHERE %s = $1", tableName, keyColumn)
}
return s.wrapped.Init(config.NewMap(cfg.Globals, config.Node{
Children: []config.Node{
{
@ -83,25 +108,29 @@ func (s *SQLTable) Init(cfg *config.Map) error {
Name: "dsn",
Args: dsnParts,
},
{
Name: "named_args",
Args: []string{useNamedArgs},
},
{
Name: "lookup",
Args: []string{fmt.Sprintf("SELECT %s FROM %s WHERE %s = :key", valueColumn, tableName, keyColumn)},
Args: []string{lookupQuery},
},
{
Name: "add",
Args: []string{fmt.Sprintf("INSERT INTO %s(%s, %s) VALUES(:key, :value)", tableName, keyColumn, valueColumn)},
Args: []string{addQuery},
},
{
Name: "list",
Args: []string{fmt.Sprintf("SELECT %s from %s", keyColumn, tableName)},
Args: []string{listQuery},
},
{
Name: "set",
Args: []string{fmt.Sprintf("UPDATE %s SET %s = :value WHERE %s = :key", tableName, valueColumn, keyColumn)},
Args: []string{setQuery},
},
{
Name: "del",
Args: []string{fmt.Sprintf("DELETE FROM %s WHERE %s = :key", tableName, keyColumn)},
Args: []string{delQuery},
},
{
Name: "init",