From 40661d549d3cf62d4a1f5902a02594d5526e4459 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 5 Apr 2024 16:50:20 +0200 Subject: [PATCH] work in progress: query tracks --- storage/tracking/sql_code.go | 16 +++++++++++++++- storage/tracking/tracking.go | 15 +++++++++++++++ tests/storage_test.go | 2 ++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/storage/tracking/sql_code.go b/storage/tracking/sql_code.go index a31c56d..fb12e42 100644 --- a/storage/tracking/sql_code.go +++ b/storage/tracking/sql_code.go @@ -39,11 +39,25 @@ insert into {{ $tablename }} ( {{- if ne $j 0 -}}, {{ end }}${{ add1 $j }} {{- end -}}) returning trackid, timestamp` + + sql_select = ` +{{- $tablename := or (and .schema (printf "%s.%s" .schema .tablename)) .tablename -}} +select {{ range $j, $c := .scols -}} + {{- if ne $j 0 -}}, {{ end }}{{ toLower $c }}{{- end }} + from {{ $tablename }} + where {{ range $j, $c := .qucols -}} + {{- if ne $j 0 }} and {{ end }}{{ toLower $c }} = ${{ add1 $j }}{{- end }} + {{ with .ordcols -}} + ordered by {{ range $j, $c := . -}} + {{- if ne $j 0 -}}, {{ end }}{{ toLower $c }}{{- end -}} + {{- end }} + {{ with .limit }}limit {{ . }}{{ end }}` ) -var SqlCreate, SqlInsert *template.Template +var SqlCreate, SqlInsert, SqlSelect *template.Template func init() { SqlCreate = storage.Template("create_table", sql_table) SqlInsert = storage.Template("insert_track", sql_insert) + SqlSelect = storage.Template("select_track", sql_select) } diff --git a/storage/tracking/tracking.go b/storage/tracking/tracking.go index 9fdcf40..b3c35b6 100644 --- a/storage/tracking/tracking.go +++ b/storage/tracking/tracking.go @@ -95,6 +95,21 @@ func Tracks(db *sql.Storage) *Container { return &Container{container_definition, db} } +func (cont *Container) Query(headValues lib.StrSlice) Track { + head := lib.StrMap{} + db := cont.Storage + data := lib.Map{ + "schema": db.Schema, + "tablename": cont.TableName, + "scols": []string{"taskid", "data"}, + "qucols": []string{"taskid", "username"}, + } + sql := storage.BuildSql(SqlSelect, data) + print(sql) + tr := cont.ItemFactory(&TrackTemplate{Head: head}, cont) + return tr +} + func (cont *Container) NewTrack(headValues lib.StrSlice, data lib.Map) Track { head := lib.StrMap{} for i, k := range cont.HeadFields { diff --git a/tests/storage_test.go b/tests/storage_test.go index ffb2354..63ca87c 100644 --- a/tests/storage_test.go +++ b/tests/storage_test.go @@ -72,6 +72,8 @@ func TrackingTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { t.AssertEqual(track.TrackId(), lib.Ident(1)) t.AssertEqual(track.TimeStamp().Year(), time.Now().Year()) //fmt.Printf("%+v\n", track.TimeStamp()) + tr2 := cont.Query(lib.StrSlice{"", "john"}) + _ = tr2 } func MessageTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {