work in progress: Container.Update()

This commit is contained in:
Helmut Merz 2024-04-13 19:31:00 +02:00
parent ab5082ee89
commit 45ab1200e2
2 changed files with 34 additions and 9 deletions

View file

@ -8,9 +8,10 @@ import (
const (
sql_table = `
{{- $json := or .Params.jsonType "json" -}}
{{- $params := .Cont.Storage.Params -}}
{{- $json := or $params.jsonType "json" -}}
create table if not exists {{ .Table }} (
trackid {{ or .Params.idType "integer" }} primary key,
trackid {{ or $params.idType "integer" }} primary key,
{{ range .Cont.HeadFields -}}{{ toLower . }} text default '',
{{ end -}}
timestamp timestamptz default current_timestamp,
@ -38,6 +39,8 @@ insert into {{ .Table }} (
{{- end -}})
returning trackid, timestamp`
sql_update = ``
sql_select = `
select {{ range $j, $c := .Scols -}}
{{- if ne $j 0 -}}, {{ end }}{{ toLower $c }}{{- end }}
@ -55,10 +58,11 @@ select {{ range $j, $c := .Scols -}}
`
)
var SqlCreate, SqlInsert, SqlSelect *template.Template
var SqlCreate, SqlInsert, SqlUpdate, SqlSelect *template.Template
func init() {
SqlCreate = storage.Template("create_table", sql_table)
SqlInsert = storage.Template("insert_track", sql_insert)
SqlUpdate = storage.Template("update_track", sql_update)
SqlSelect = storage.Template("select_track", sql_select)
}

View file

@ -43,6 +43,15 @@ func MakeTrack(cont *Container, h ...string) *Track {
return &tr
}
func (tr *Track) AsSlice() []any {
var sl []any
for _, k := range tr.container.HeadFields {
sl = append(sl, tr.Head[k])
}
sl = append(sl, tr.TimeStamp, tr.Data)
return sl
}
func (tr *Track) SetHead(h ...string) {
for i, k := range tr.container.HeadFields {
if i >= len(h) {
@ -141,7 +150,6 @@ func (spec *querySpec) setup(cont *Container) {
spec.AddOrd(c, false)
}
spec.Cont = cont
spec.Params = cont.Storage.Params
}
func (cont *Container) Get(id lib.Ident) *Track {
@ -196,11 +204,11 @@ func (cont *Container) NewTrack(h []string, data lib.Map) *Track {
return tr
}
func (cont *Container) Save(t *Track) lib.Ident {
return 0
func (cont *Container) Save(tr *Track) *Track {
return tr
}
func (cont *Container) Insert(tr *Track) lib.Ident {
func (cont *Container) Insert(tr *Track) *Track {
quSpec := &querySpec{
Scols: append(cont.HeadFields, "Data"),
}
@ -219,9 +227,22 @@ func (cont *Container) Insert(tr *Track) lib.Ident {
return err
}
if err := cont.Storage.Query(proc, sql, values...); err == nil {
return tr.trackId
return tr
}
return 0
return nil
}
func (cont *Container) Update(tr *Track) *Track {
quSpec := &querySpec{
Qucols: lib.StrSlice{"trackid"},
}
quSpec.setup(cont)
sql := storage.BuildSql(SqlUpdate, quSpec)
n, _ := cont.Storage.Exec(sql, append(tr.AsSlice(), tr.trackId)...)
if n == 1 {
return tr
}
return nil
}
func ParseDateTime(inp string) *time.Time {