mirror of
https://github.com/foxcpp/maddy.git
synced 2025-04-07 06:57:37 +03:00
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:
parent
a202b5d49c
commit
e041a786a0
3 changed files with 78 additions and 10 deletions
|
@ -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",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue