diff --git a/storage/msgstore/msgstore.go b/storage/msgstore/msgstore.go index b3dedb2..0523723 100644 --- a/storage/msgstore/msgstore.go +++ b/storage/msgstore/msgstore.go @@ -6,11 +6,12 @@ import ( ) var Store = func(db *sql.Storage, msg lib.Message) { - q := buildQuery(db, "insert_msg", "messages") + q := db.BuildQuery("insert_msg", "messages") db.Exec(q, msg.Domain(), msg.Action(), msg.Class(), msg.Item(), msg.Payload()) } -func buildQuery(db *sql.Storage, qname, tname string) string { - t := db.Sql.Lookup(qname) - return db.SetTable(t, tname) +func init() { + sql.SqlSources += `{{ define "insert_msg" -}} + insert into {{ .table }} (domain, action, class, item, payload) + values ($1, $2, $3, $4, $5) {{- end }}` } diff --git a/storage/sql/sql.go b/storage/sql/sql.go index bf286c4..a298f25 100644 --- a/storage/sql/sql.go +++ b/storage/sql/sql.go @@ -31,6 +31,8 @@ type scpcon[T any] interface { scp } +var SqlSources = "" + func Open(cfg *Cfg) *Storage { db, err := sql.Open(cfg.Driver, cfg.Connstr) if err != nil { @@ -42,13 +44,6 @@ func Open(cfg *Cfg) *Storage { return &storage } -const SqlSources = ` -{{- define "insert_msg" -}} - insert into {{ .table }} (domain, action, class, item, payload) - values ($1, $2, $3, $4, $5) -{{- end }} -` - func QueryData[T scn[T]](db *Storage, q string, args ...interface{}) []T { var data []T var rec T @@ -138,7 +133,13 @@ func (db *Storage) ParseTemplate(q string) *template.Template { return t } -func (db *Storage) SetTable(t *template.Template, tname string) string { +func (db *Storage) BuildQuery(qname, tname string) string { + info := "sql.Storage.SetTable" + t := db.Sql.Lookup(qname) + if t == nil { + db.logErr(fmt.Errorf("template not found"), info, qname) + return "" + } if db.Cfg.Schema != "" { tname = db.Cfg.Schema + "." + tname } @@ -146,7 +147,7 @@ func (db *Storage) SetTable(t *template.Template, tname string) string { data := map[string]interface{}{"table": tname} err := t.Execute(&out, data) if err != nil { - db.logErr(err, "sql.Storage.SetTable", fmt.Sprintf("%+v", t)) + db.logErr(err, info, fmt.Sprintf("%+v", t)) return "" } return out.String()