From 51401bf909ac53cfde81536250480e2f77a0ec03 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 25 Mar 2024 14:59:50 +0100 Subject: [PATCH] tracking: insert basically working --- storage/tracking/sql_code.go | 2 +- storage/tracking/tracking.go | 34 ++++++++++++++++++++++++++++++---- tests/storage_test.go | 6 ++++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/storage/tracking/sql_code.go b/storage/tracking/sql_code.go index 4f8aac3..481c972 100644 --- a/storage/tracking/sql_code.go +++ b/storage/tracking/sql_code.go @@ -36,7 +36,7 @@ insert into {{ $tablename }} ( {{- end -}}) values ( {{- range $j, $c := .columns -}} - {{- if ne $j 0 -}}, {{ end }}${{ $j }} + {{- if ne $j 0 -}}, {{ end }}${{ add1 $j }} {{- end -}}) ` ) diff --git a/storage/tracking/tracking.go b/storage/tracking/tracking.go index 4f8edab..f10bafa 100644 --- a/storage/tracking/tracking.go +++ b/storage/tracking/tracking.go @@ -3,6 +3,7 @@ package tracking import ( + "encoding/json" "time" lib "git.sr.ht/~cco/go-scopes" @@ -10,15 +11,16 @@ import ( 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 + Data lib.Data Container *container } type container struct { + tableName string headFields []string indexes [][]string storage *sql.Storage @@ -26,23 +28,47 @@ type container struct { func Container(db *sql.Storage) *container { return &container{ + tableName: "tracks", headFields: []string{"taskId", "userName"}, indexes: [][]string{[]string{"taskId", "userName"}, []string{"userName"}}, storage: db, } } +func Insert(cont *container, tr Track) int64 { + var columns []string + var values []any + for _, k := range cont.headFields { + columns = append(columns, k) + values = append(values, tr.Head[k]) + } + columns = append(columns, "Data") + b, _ := json.Marshal(tr.Data) + values = append(values, b) + db := cont.storage + data := map[string]interface{}{ + "schema": db.Schema, + "tablename": cont.tableName, + "columns": columns, + } + sql := storage.BuildSql(SqlInsert, data) + if n, err := db.Exec(sql, values...); err == nil { + return n + } + return 0 +} + func Create(cont *container) *container { db := cont.storage data := map[string]interface{}{ "schema": db.Schema, - "tablename": "tracks", + "tablename": cont.tableName, "headFields": cont.headFields, "indexes": cont.indexes, "params": db.Params, } sql := storage.BuildSql(SqlCreate, data) - println(sql) + //println(sql) _, err := db.Exec(sql) if err == nil { return cont diff --git a/tests/storage_test.go b/tests/storage_test.go index 0921695..8c45a93 100644 --- a/tests/storage_test.go +++ b/tests/storage_test.go @@ -3,6 +3,7 @@ package scopes import ( tbase "testing" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/common/testing" "git.sr.ht/~cco/go-scopes/core/message" sql "git.sr.ht/~cco/go-scopes/storage" @@ -67,6 +68,11 @@ func BaseTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { func TrackingTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { cont := tracking.Container(db) tracking.Create(cont) + track := tracking.Track{ + Head: map[string]string{"taskId": "t01", "userName": "john"}, + Data: lib.Map{}, + } + tracking.Insert(cont, track) } func MessageTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {