storage: first version of BuildQuery() basically OK
This commit is contained in:
parent
59e6516333
commit
f9cb596252
2 changed files with 15 additions and 13 deletions
|
@ -6,11 +6,12 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var Store = func(db *sql.Storage, msg lib.Message) {
|
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())
|
db.Exec(q, msg.Domain(), msg.Action(), msg.Class(), msg.Item(), msg.Payload())
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildQuery(db *sql.Storage, qname, tname string) string {
|
func init() {
|
||||||
t := db.Sql.Lookup(qname)
|
sql.SqlSources += `{{ define "insert_msg" -}}
|
||||||
return db.SetTable(t, tname)
|
insert into {{ .table }} (domain, action, class, item, payload)
|
||||||
|
values ($1, $2, $3, $4, $5) {{- end }}`
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,8 @@ type scpcon[T any] interface {
|
||||||
scp
|
scp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var SqlSources = ""
|
||||||
|
|
||||||
func Open(cfg *Cfg) *Storage {
|
func Open(cfg *Cfg) *Storage {
|
||||||
db, err := sql.Open(cfg.Driver, cfg.Connstr)
|
db, err := sql.Open(cfg.Driver, cfg.Connstr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -42,13 +44,6 @@ func Open(cfg *Cfg) *Storage {
|
||||||
return &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 {
|
func QueryData[T scn[T]](db *Storage, q string, args ...interface{}) []T {
|
||||||
var data []T
|
var data []T
|
||||||
var rec T
|
var rec T
|
||||||
|
@ -138,7 +133,13 @@ func (db *Storage) ParseTemplate(q string) *template.Template {
|
||||||
return t
|
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 != "" {
|
if db.Cfg.Schema != "" {
|
||||||
tname = db.Cfg.Schema + "." + tname
|
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}
|
data := map[string]interface{}{"table": tname}
|
||||||
err := t.Execute(&out, data)
|
err := t.Execute(&out, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
db.logErr(err, "sql.Storage.SetTable", fmt.Sprintf("%+v", t))
|
db.logErr(err, info, fmt.Sprintf("%+v", t))
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
return out.String()
|
return out.String()
|
||||||
|
|
Loading…
Add table
Reference in a new issue