Work in progress: Container.QueryLast()

This commit is contained in:
Helmut Merz 2024-04-12 10:41:10 +02:00
parent b01887d412
commit cad0da95e1
2 changed files with 25 additions and 16 deletions

View file

@ -5,7 +5,6 @@ package tracking
import ( import (
sqllib "database/sql" sqllib "database/sql"
"encoding/json" "encoding/json"
"fmt"
"time" "time"
lib "git.sr.ht/~cco/go-scopes" lib "git.sr.ht/~cco/go-scopes"
@ -100,32 +99,41 @@ func (cont *Container) Get(id lib.Ident) *Track {
tr = cont.ItemFactory(cont) tr = cont.ItemFactory(cont)
return tr.ScanP(r) return tr.ScanP(r)
} }
qu := lib.Map{ quData := lib.Map{
"schema": db.Schema, "schema": db.Schema,
"tablename": cont.TableName, "tablename": cont.TableName,
"scols": append(cont.HeadFields, "timestamp", "data", "trackid"), "scols": append(cont.HeadFields, "timestamp", "data", "trackid"),
"qucols": lib.StrSlice{"trackid"}, "qucols": lib.StrSlice{"trackid"},
} }
sql := storage.BuildSql(SqlSelect, qu) sql := storage.BuildSql(SqlSelect, quData)
print(sql)
db.Query(proc, sql, id) db.Query(proc, sql, id)
fmt.Printf("%+v\n", *tr)
return tr return tr
} }
func (cont *Container) Query(headValues lib.StrSlice) *Track { func (cont *Container) QueryLast(hv lib.StrSlice) *Track {
db := cont.Storage db := cont.Storage
data := lib.Map{ var tr *Track
proc := func(r *sql.Rows) error {
tr = cont.ItemFactory(cont)
return tr.ScanP(r)
}
var qucols lib.StrSlice
var quvals []any
for i, k := range hv {
if k != "" {
qucols = append(qucols, cont.HeadFields[i])
quvals = append(quvals, k)
}
}
quData := lib.Map{
"schema": db.Schema, "schema": db.Schema,
"tablename": cont.TableName, "tablename": cont.TableName,
"scols": lib.StrSlice{"taskid", "data"}, "scols": append(cont.HeadFields, "timestamp", "data", "trackid"),
"qucols": lib.StrSlice{"taskid", "username"}, "qucols": qucols,
"ordcols": lib.StrSlice{"timestamp"}, "ordcols": lib.StrSlice{"timestamp"},
} }
sql := storage.BuildSql(SqlSelect, data) sql := storage.BuildSql(SqlSelect, quData)
//print(sql) db.Query(proc, sql, quvals...)
_ = sql
tr := cont.ItemFactory(cont)
return tr return tr
} }

View file

@ -71,10 +71,11 @@ func TrackingTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
track := cont.NewTrack(lib.StrSlice{"t01", "john"}, nil) track := cont.NewTrack(lib.StrSlice{"t01", "john"}, nil)
t.AssertEqual(track.TrackId(), lib.Ident(1)) t.AssertEqual(track.TrackId(), lib.Ident(1))
t.AssertEqual(track.TimeStamp.Year(), time.Now().Year()) t.AssertEqual(track.TimeStamp.Year(), time.Now().Year())
//fmt.Printf("%+v\n", track.TimeStamp())
tr2 := cont.Get(1) tr2 := cont.Get(1)
//tr2 := cont.Query(lib.StrSlice{"", "john"}) //fmt.Printf("%+v\n", tr2.TimeStamp())
_ = tr2 t.AssertEqual(tr2.Head["userName"], "john")
tr3 := cont.QueryLast(lib.StrSlice{"", "john"})
t.AssertEqual(tr3.Head["taskId"], "t01")
} }
func MessageTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { func MessageTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {