From cad0da95e1e9692702aa87245e35a16f8e825961 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 12 Apr 2024 10:41:10 +0200 Subject: [PATCH] Work in progress: Container.QueryLast() --- storage/tracking/tracking.go | 34 +++++++++++++++++++++------------- tests/storage_test.go | 7 ++++--- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/storage/tracking/tracking.go b/storage/tracking/tracking.go index 1b230af..35a1372 100644 --- a/storage/tracking/tracking.go +++ b/storage/tracking/tracking.go @@ -5,7 +5,6 @@ package tracking import ( sqllib "database/sql" "encoding/json" - "fmt" "time" lib "git.sr.ht/~cco/go-scopes" @@ -100,32 +99,41 @@ func (cont *Container) Get(id lib.Ident) *Track { tr = cont.ItemFactory(cont) return tr.ScanP(r) } - qu := lib.Map{ + quData := lib.Map{ "schema": db.Schema, "tablename": cont.TableName, "scols": append(cont.HeadFields, "timestamp", "data", "trackid"), "qucols": lib.StrSlice{"trackid"}, } - sql := storage.BuildSql(SqlSelect, qu) - print(sql) + sql := storage.BuildSql(SqlSelect, quData) db.Query(proc, sql, id) - fmt.Printf("%+v\n", *tr) return tr } -func (cont *Container) Query(headValues lib.StrSlice) *Track { +func (cont *Container) QueryLast(hv lib.StrSlice) *Track { 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, "tablename": cont.TableName, - "scols": lib.StrSlice{"taskid", "data"}, - "qucols": lib.StrSlice{"taskid", "username"}, + "scols": append(cont.HeadFields, "timestamp", "data", "trackid"), + "qucols": qucols, "ordcols": lib.StrSlice{"timestamp"}, } - sql := storage.BuildSql(SqlSelect, data) - //print(sql) - _ = sql - tr := cont.ItemFactory(cont) + sql := storage.BuildSql(SqlSelect, quData) + db.Query(proc, sql, quvals...) return tr } diff --git a/tests/storage_test.go b/tests/storage_test.go index 080a137..0443c66 100644 --- a/tests/storage_test.go +++ b/tests/storage_test.go @@ -71,10 +71,11 @@ func TrackingTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { track := cont.NewTrack(lib.StrSlice{"t01", "john"}, nil) t.AssertEqual(track.TrackId(), lib.Ident(1)) t.AssertEqual(track.TimeStamp.Year(), time.Now().Year()) - //fmt.Printf("%+v\n", track.TimeStamp()) tr2 := cont.Get(1) - //tr2 := cont.Query(lib.StrSlice{"", "john"}) - _ = tr2 + //fmt.Printf("%+v\n", tr2.TimeStamp()) + 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) {