work in progress: Container.Update()
This commit is contained in:
parent
ab5082ee89
commit
45ab1200e2
2 changed files with 34 additions and 9 deletions
|
@ -8,9 +8,10 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
sql_table = `
|
sql_table = `
|
||||||
{{- $json := or .Params.jsonType "json" -}}
|
{{- $params := .Cont.Storage.Params -}}
|
||||||
|
{{- $json := or $params.jsonType "json" -}}
|
||||||
create table if not exists {{ .Table }} (
|
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 '',
|
{{ range .Cont.HeadFields -}}{{ toLower . }} text default '',
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
timestamp timestamptz default current_timestamp,
|
timestamp timestamptz default current_timestamp,
|
||||||
|
@ -38,6 +39,8 @@ insert into {{ .Table }} (
|
||||||
{{- end -}})
|
{{- end -}})
|
||||||
returning trackid, timestamp`
|
returning trackid, timestamp`
|
||||||
|
|
||||||
|
sql_update = ``
|
||||||
|
|
||||||
sql_select = `
|
sql_select = `
|
||||||
select {{ range $j, $c := .Scols -}}
|
select {{ range $j, $c := .Scols -}}
|
||||||
{{- if ne $j 0 -}}, {{ end }}{{ toLower $c }}{{- end }}
|
{{- 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() {
|
func init() {
|
||||||
SqlCreate = storage.Template("create_table", sql_table)
|
SqlCreate = storage.Template("create_table", sql_table)
|
||||||
SqlInsert = storage.Template("insert_track", sql_insert)
|
SqlInsert = storage.Template("insert_track", sql_insert)
|
||||||
|
SqlUpdate = storage.Template("update_track", sql_update)
|
||||||
SqlSelect = storage.Template("select_track", sql_select)
|
SqlSelect = storage.Template("select_track", sql_select)
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,15 @@ func MakeTrack(cont *Container, h ...string) *Track {
|
||||||
return &tr
|
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) {
|
func (tr *Track) SetHead(h ...string) {
|
||||||
for i, k := range tr.container.HeadFields {
|
for i, k := range tr.container.HeadFields {
|
||||||
if i >= len(h) {
|
if i >= len(h) {
|
||||||
|
@ -141,7 +150,6 @@ func (spec *querySpec) setup(cont *Container) {
|
||||||
spec.AddOrd(c, false)
|
spec.AddOrd(c, false)
|
||||||
}
|
}
|
||||||
spec.Cont = cont
|
spec.Cont = cont
|
||||||
spec.Params = cont.Storage.Params
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cont *Container) Get(id lib.Ident) *Track {
|
func (cont *Container) Get(id lib.Ident) *Track {
|
||||||
|
@ -196,11 +204,11 @@ func (cont *Container) NewTrack(h []string, data lib.Map) *Track {
|
||||||
return tr
|
return tr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cont *Container) Save(t *Track) lib.Ident {
|
func (cont *Container) Save(tr *Track) *Track {
|
||||||
return 0
|
return tr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cont *Container) Insert(tr *Track) lib.Ident {
|
func (cont *Container) Insert(tr *Track) *Track {
|
||||||
quSpec := &querySpec{
|
quSpec := &querySpec{
|
||||||
Scols: append(cont.HeadFields, "Data"),
|
Scols: append(cont.HeadFields, "Data"),
|
||||||
}
|
}
|
||||||
|
@ -219,9 +227,22 @@ func (cont *Container) Insert(tr *Track) lib.Ident {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := cont.Storage.Query(proc, sql, values...); err == nil {
|
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 {
|
func ParseDateTime(inp string) *time.Time {
|
||||||
|
|
Loading…
Add table
Reference in a new issue