work in progress: tracking - creaate table 'tracks'
This commit is contained in:
parent
3923d49666
commit
1b83cd227f
6 changed files with 61 additions and 27 deletions
|
@ -92,15 +92,15 @@ func (db *Storage) Query(process rowsProc, q string, args ...interface{}) error
|
|||
//log.Debug().Str("query", q).Msg(info)
|
||||
rows, err := db.DB.Query(q, args...)
|
||||
if err != nil {
|
||||
return db.logErr(err, info, q)
|
||||
return db.LogErr(err, info, q)
|
||||
}
|
||||
for rows.Next() {
|
||||
if err := process(rows); err != nil {
|
||||
return db.logErr(err, info, q)
|
||||
return db.LogErr(err, info, q)
|
||||
}
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return db.logErr(err, info, q)
|
||||
return db.LogErr(err, info, q)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ func (db *Storage) Exec(q string, args ...interface{}) (int64, error) {
|
|||
//log.Debug().Str("query", q).Msg(info)
|
||||
res, err := db.DB.Exec(q, args...)
|
||||
if err != nil {
|
||||
db.logErr(err, info, q)
|
||||
db.LogErr(err, info, q)
|
||||
return 0, err
|
||||
}
|
||||
nrows, _ := res.RowsAffected()
|
||||
|
@ -125,7 +125,7 @@ func (db *Storage) DropTable(tn string) error {
|
|||
func (db *Storage) RunScript(path string) error {
|
||||
b, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return db.logErr(err, "sql.Storage.RunScript", path)
|
||||
return db.LogErr(err, "sql.Storage.RunScript", path)
|
||||
}
|
||||
_, err = db.Exec(string(b))
|
||||
return err
|
||||
|
@ -134,7 +134,7 @@ func (db *Storage) RunScript(path string) error {
|
|||
func (db *Storage) ParseTemplate(q string) *template.Template {
|
||||
t, err := template.New("sql").Parse(q)
|
||||
if err != nil {
|
||||
db.logErr(err, "sql.Storage.ParseTemplate", q)
|
||||
db.LogErr(err, "sql.Storage.ParseTemplate", q)
|
||||
return nil
|
||||
}
|
||||
return t
|
||||
|
@ -144,7 +144,7 @@ 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)
|
||||
db.LogErr(fmt.Errorf("template not found"), info, qname)
|
||||
return ""
|
||||
}
|
||||
if db.Cfg.Schema != "" {
|
||||
|
@ -154,13 +154,13 @@ func (db *Storage) BuildQuery(qname, tname string) string {
|
|||
data := map[string]interface{}{"table": tname}
|
||||
err := t.Execute(&out, data)
|
||||
if err != nil {
|
||||
db.logErr(err, info, fmt.Sprintf("%+v", t))
|
||||
db.LogErr(err, info, fmt.Sprintf("%+v", t))
|
||||
return ""
|
||||
}
|
||||
return out.String()
|
||||
}
|
||||
|
||||
func (db *Storage) logErr(err error, info, inp string) error {
|
||||
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
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
package tracking
|
||||
|
||||
const Sql_table = `
|
||||
create table {{ .tablename }} (
|
||||
const sql_table = `
|
||||
{{- $tablename := .tablename -}}
|
||||
create table {{ $tablename }} (
|
||||
trackid {{ .idType }} primary key,
|
||||
{{- range .headFields -}}{{ . }} text,
|
||||
{{ range .headFields -}}{{ . }} text,
|
||||
{{ end -}}
|
||||
timestamp timestamptz default current_timestamp,
|
||||
data {{ .jsonType -}}
|
||||
);
|
||||
|
||||
{{ range $i, $cols := .indexes }}
|
||||
create index idx_{{ .i }} on {{ .tablename }} ({{ .cols }});
|
||||
{{- range $i, $cols := .indexes }}
|
||||
create index idx_{{ $i }} on {{ $tablename }} ({{ $cols }});
|
||||
{{- end }}
|
||||
create index idx_timestamp on {{ .tablename }} (timestamp);`
|
||||
create index idx_timestamp on {{ .tablename }} (timestamp);
|
||||
`
|
||||
|
|
|
@ -3,30 +3,60 @@
|
|||
package tracking
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
lib "git.sr.ht/~cco/go-scopes"
|
||||
sql "git.sr.ht/~cco/go-scopes/storage"
|
||||
)
|
||||
|
||||
type Track struct {
|
||||
type track struct {
|
||||
TrackId uint
|
||||
Head map[string]string
|
||||
TimeStamp *time.Time
|
||||
Data lib.Payload
|
||||
Container *Container
|
||||
Container *container
|
||||
}
|
||||
|
||||
type Container struct {
|
||||
type container struct {
|
||||
headFields []string
|
||||
indexes [][]string
|
||||
indexes []string
|
||||
storage *sql.Storage
|
||||
}
|
||||
|
||||
func MakeContainer(st *sql.Storage) Container {
|
||||
return Container{
|
||||
func Container(db *sql.Storage) *container {
|
||||
return &container{
|
||||
headFields: []string{"taskId", "userName"},
|
||||
indexes: [][]string{[]string{"taskId", "userName"}, []string{"userName"}},
|
||||
storage: st,
|
||||
//indexes: [][]string{[]string{"taskId", "userName"}, []string{"userName"}},
|
||||
indexes: []string{"taskid, username", "username"},
|
||||
storage: db,
|
||||
}
|
||||
}
|
||||
|
||||
func Create(cont *container) *container {
|
||||
db := cont.storage
|
||||
t := db.ParseTemplate(sql_table)
|
||||
var out strings.Builder
|
||||
data := map[string]interface{}{
|
||||
"tablename": "tracks",
|
||||
"headFields": cont.headFields,
|
||||
"indexes": cont.indexes,
|
||||
"idType": "integer",
|
||||
"jsonType": "json",
|
||||
}
|
||||
err := t.Execute(&out, data)
|
||||
if err != nil {
|
||||
db.LogErr(err, "storage.tracking.Create", fmt.Sprintf("%+v", t))
|
||||
return nil
|
||||
}
|
||||
sql := out.String()
|
||||
println(sql)
|
||||
_, err = db.Exec(sql)
|
||||
if err != nil {
|
||||
println(err)
|
||||
db.LogErr(err, "storage.tracking.Create", fmt.Sprintf("%+v", t))
|
||||
return nil
|
||||
}
|
||||
return cont
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ func TestMatrixApp(tb *tbase.T) {
|
|||
t := testing.SetUpApp(tb, etc.ConfigMx())
|
||||
t.Run("app-matrix", MxTest)
|
||||
t.TearDownApp("matrix")
|
||||
t.AssertEqual(t.LogCheck(logfile, true), 13)
|
||||
t.AssertEqual(t.LogCheck(logfile, false), 13)
|
||||
}
|
||||
|
||||
func MxTest(t *testing.T) {
|
||||
|
|
|
@ -19,7 +19,7 @@ func TestScopesApp(tb *tbase.T) {
|
|||
t.Run("send", SendTest)
|
||||
t.Run("client", ClientTest)
|
||||
t.TearDownApp("")
|
||||
t.AssertEqual(t.LogCheck("", true), 18)
|
||||
t.AssertEqual(t.LogCheck("", false), 18)
|
||||
}
|
||||
|
||||
func AppTest(t *testing.T) {
|
||||
|
|
|
@ -68,17 +68,19 @@ func MessageTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
|
|||
}
|
||||
|
||||
func TrackingTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
|
||||
_ = tracking.Sql_table
|
||||
_ = tracking.MakeContainer(db)
|
||||
cont := tracking.Container(db)
|
||||
tracking.Create(cont)
|
||||
}
|
||||
|
||||
func resetSqlite(db *sql.Storage) {
|
||||
db.DropTable("test")
|
||||
db.DropTable("tracks")
|
||||
db.Exec(sqlite_create_table)
|
||||
}
|
||||
|
||||
func resetPgsql(db *sql.Storage) {
|
||||
db.DropTable("test")
|
||||
db.DropTable("tracks")
|
||||
db.Exec(pgsql_create_table)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue