also return timestamp from insert track and store in track

This commit is contained in:
Helmut Merz 2024-03-26 15:45:56 +01:00
parent 1c44b135d8
commit 9f17a14ea9
3 changed files with 36 additions and 4 deletions

View file

@ -38,7 +38,7 @@ insert into {{ $tablename }} (
{{- range $j, $c := .columns -}} {{- range $j, $c := .columns -}}
{{- if ne $j 0 -}}, {{ end }}${{ add1 $j }} {{- if ne $j 0 -}}, {{ end }}${{ add1 $j }}
{{- end -}}) {{- end -}})
returning trackid` returning trackid, timestamp`
) )
var SqlCreate, SqlInsert *template.Template var SqlCreate, SqlInsert *template.Template

View file

@ -3,10 +3,13 @@
package tracking package tracking
import ( import (
sqllib "database/sql"
"encoding/json" "encoding/json"
"fmt"
"time" "time"
lib "git.sr.ht/~cco/go-scopes" lib "git.sr.ht/~cco/go-scopes"
"git.sr.ht/~cco/go-scopes/logging/log"
"git.sr.ht/~cco/go-scopes/storage" "git.sr.ht/~cco/go-scopes/storage"
sql "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, "columns": columns,
} }
sql := storage.BuildSql(SqlInsert, data) sql := storage.BuildSql(SqlInsert, data)
if res := storage.QueryCol[lib.Ident](db, sql, values...); res != nil { type rt struct {
trid := lib.Ident(res[0]) 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 tr.trackId = trid
if ts := ParseDateTime(row.ts); ts != nil {
fmt.Printf("%+v\n", ts)
tr.timeStamp = ts
}
tr.container = cont tr.container = cont
return trid return trid
} }
return 0 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() { func (cont *container) CreateTable() {
db := cont.storage db := cont.storage
data := lib.Map{ data := lib.Map{

View file

@ -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) { func TrackingTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
cont := tracking.SimpleContainer(db) cont := tracking.Tracks(db)
cont.CreateTable() cont.CreateTable()
track := cont.New(lib.StrSlice{"t01", "john"}, lib.Map{}) track := cont.New(lib.StrSlice{"t01", "john"}, lib.Map{})
t.AssertEqual(track.TrackId(), lib.Ident(1)) t.AssertEqual(track.TrackId(), lib.Ident(1))