From 9f17a14ea9f3ec48f84f9fcea526ecb5441d5de5 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 26 Mar 2024 15:45:56 +0100 Subject: [PATCH] also return timestamp from insert track and store in track --- storage/tracking/sql_code.go | 2 +- storage/tracking/tracking.go | 36 ++++++++++++++++++++++++++++++++++-- tests/storage_test.go | 2 +- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/storage/tracking/sql_code.go b/storage/tracking/sql_code.go index 1a61934..a31c56d 100644 --- a/storage/tracking/sql_code.go +++ b/storage/tracking/sql_code.go @@ -38,7 +38,7 @@ insert into {{ $tablename }} ( {{- range $j, $c := .columns -}} {{- if ne $j 0 -}}, {{ end }}${{ add1 $j }} {{- end -}}) - returning trackid` + returning trackid, timestamp` ) var SqlCreate, SqlInsert *template.Template diff --git a/storage/tracking/tracking.go b/storage/tracking/tracking.go index e83f7d7..c41d68d 100644 --- a/storage/tracking/tracking.go +++ b/storage/tracking/tracking.go @@ -3,10 +3,13 @@ package tracking import ( + sqllib "database/sql" "encoding/json" + "fmt" "time" lib "git.sr.ht/~cco/go-scopes" + "git.sr.ht/~cco/go-scopes/logging/log" "git.sr.ht/~cco/go-scopes/storage" sql "git.sr.ht/~cco/go-scopes/storage" ) @@ -84,15 +87,44 @@ func (cont *container) insert(tr *track) lib.Ident { "columns": columns, } sql := storage.BuildSql(SqlInsert, data) - if res := storage.QueryCol[lib.Ident](db, sql, values...); res != nil { - trid := lib.Ident(res[0]) + type rt struct { + trid lib.Ident + ts string + //ts *time.Time + } + var res []rt + proc := func(r *sqllib.Rows) error { + var rec rt + err := r.Scan(&rec.trid, &rec.ts) + res = append(res, rec) + return err + } + if err := db.Query(proc, sql, values...); err == nil { + row := res[0] + trid := row.trid tr.trackId = trid + if ts := ParseDateTime(row.ts); ts != nil { + fmt.Printf("%+v\n", ts) + tr.timeStamp = ts + } tr.container = cont return trid } return 0 } +func ParseDateTime(inp string) *time.Time { + if ts, err := time.Parse(time.RFC3339, inp); err == nil { + return &ts + } + ts, err := time.Parse("2006-01-02 15:04:05", inp) + if err == nil { + return &ts + } + log.Error(err).Msg("storage.tracking.ParseDateTime") + return nil +} + func (cont *container) CreateTable() { db := cont.storage data := lib.Map{ diff --git a/tests/storage_test.go b/tests/storage_test.go index c0145b7..af5ffc2 100644 --- a/tests/storage_test.go +++ b/tests/storage_test.go @@ -66,7 +66,7 @@ func BaseTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { } func TrackingTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { - cont := tracking.SimpleContainer(db) + cont := tracking.Tracks(db) cont.CreateTable() track := cont.New(lib.StrSlice{"t01", "john"}, lib.Map{}) t.AssertEqual(track.TrackId(), lib.Ident(1))