storage/sql: allow dynamic setting of table name (including schema) via template
This commit is contained in:
parent
064c442d4a
commit
afa1c3e860
2 changed files with 25 additions and 6 deletions
|
@ -1,18 +1,16 @@
|
|||
package msgstore
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
lib "git.sr.ht/~cco/go-scopes"
|
||||
"git.sr.ht/~cco/go-scopes/storage/sql"
|
||||
)
|
||||
|
||||
func Store(db *sql.Storage, msg lib.Message) {
|
||||
q := fmt.Sprintf(sql_insert_msg, "messages")
|
||||
q := db.SetTable(sql_insert_msg, "messages")
|
||||
db.Exec(q, msg.Domain(), msg.Action(), msg.Class(), msg.Item(), msg.Payload())
|
||||
}
|
||||
|
||||
const (
|
||||
sql_insert_msg = `insert into %s (domain, action, class, item, payload)
|
||||
sql_insert_msg = `insert into {{ .table }} (domain, action, class, item, payload)
|
||||
values ($1, $2, $3, $4, $5)`
|
||||
)
|
||||
|
|
|
@ -4,6 +4,8 @@ import (
|
|||
"database/sql"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"git.sr.ht/~cco/go-scopes/logging/log"
|
||||
)
|
||||
|
@ -117,8 +119,27 @@ func (db *Storage) RunScript(path string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
func (db *Storage) logErr(err error, info, q string) error {
|
||||
log.Error(err).Str("query", q).Msg(info)
|
||||
func (db *Storage) SetTable(q, tname string) string {
|
||||
t, err := template.New("sql").Parse(q)
|
||||
if err != nil {
|
||||
db.logErr(err, "sql.Storage.SetTable", q)
|
||||
return q
|
||||
}
|
||||
if db.Cfg.Schema != "" {
|
||||
tname = db.Cfg.Schema + "." + tname
|
||||
}
|
||||
var out strings.Builder
|
||||
data := map[string]interface{}{"table": tname}
|
||||
err = t.Execute(&out, data)
|
||||
if err != nil {
|
||||
db.logErr(err, "sql.Storage.SetTable", q)
|
||||
return q
|
||||
}
|
||||
return out.String()
|
||||
}
|
||||
|
||||
func (db *Storage) logErr(err error, info, inp string) error {
|
||||
log.Error(err).Str("input", inp).Msg(info)
|
||||
db.Errors = append(db.Errors, err)
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue