work in progress: Container.Get() - process query result -> Track

This commit is contained in:
Helmut Merz 2024-04-11 16:53:35 +02:00
parent 8401f4d51e
commit 9a57630a27
2 changed files with 34 additions and 6 deletions

View file

@ -46,6 +46,7 @@ func Store(act lib.Action) bool {
func StoreDB(db *sql.Storage, msg lib.Message) {
cont := Messages(db)
// cont.Save(PrepareMessage(cont, msg))
cont.Save(cont.ItemFactory(cont))
}

View file

@ -5,6 +5,7 @@ package tracking
import (
sqllib "database/sql"
"encoding/json"
"fmt"
"time"
lib "git.sr.ht/~cco/go-scopes"
@ -36,7 +37,6 @@ func (tr *Track) Container() *Container {
func MakeTrack(cont *Container, h ...string) *Track {
tr := Track{
Head: lib.StrMap{},
Data: lib.Map{},
container: cont,
}
tr.SetHead(h...)
@ -54,6 +54,24 @@ func (tr *Track) SetHead(h ...string) {
}
}
func (tr *Track) ScanP(rows *sql.Rows) error {
tr.Head = lib.StrMap{}
var d []any
for _, _ = range tr.container.HeadFields {
//tr.Head[k] = ""
var hv string
d = append(d, &hv)
}
var ts string
d = append(d, &ts)
var rd string
d = append(d, &rd)
err := rows.Scan(d...)
fmt.Printf("%+v\n", d)
fmt.Printf("%+v, %+v, %+v, %+v\n", *d[0].(*string), *d[1].(*string), *d[2].(*string), *d[3].(*string))
return err
}
// basic container implementation
type ContDef struct {
@ -74,17 +92,27 @@ func Tracks(db *sql.Storage) *Container {
func (cont *Container) Get(id lib.Ident) *Track {
db := cont.Storage
var trs []*Track
processTracks := func(r *sql.Rows) error {
tr := cont.ItemFactory(cont)
err := tr.ScanP(r)
trs = append(trs, tr)
return err
}
qu := lib.Map{
"schema": db.Schema,
"tablename": cont.TableName,
"scols": append(cont.HeadFields, "timestamp", "data"),
"qucols": lib.StrSlice{"taskid"},
"qucols": lib.StrSlice{"trackid"},
}
sql := storage.BuildSql(SqlSelect, qu)
print(sql)
var h []string
tr := cont.ItemFactory(cont, h...)
return tr
//tr := cont.ItemFactory(cont)
db.Query(processTracks, sql, id)
if len(trs) > 0 {
return trs[0]
}
return nil
}
func (cont *Container) Query(headValues lib.StrSlice) *Track {
@ -143,7 +171,6 @@ func (cont *Container) Insert(tr *Track) lib.Ident {
return err
}
if err := db.Query(proc, sql, values...); err == nil {
//tr.Update(&TrackTemplate{TrackId: trid, TimeStamp: ts})
tr.trackId = trid
tr.TimeStamp = ts
return trid