diff --git a/storage/msgstore/msgstore.go b/storage/msgstore/msgstore.go index 4ca80c5..91a09e6 100644 --- a/storage/msgstore/msgstore.go +++ b/storage/msgstore/msgstore.go @@ -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)` ) diff --git a/storage/sql/sql.go b/storage/sql/sql.go index b3b4935..c36c428 100644 --- a/storage/sql/sql.go +++ b/storage/sql/sql.go @@ -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 }