From 53e0759e9fcfb817bb4612e08d5f344c878ddf9c Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 12 Apr 2024 13:00:13 +0200 Subject: [PATCH] provide common method QueryOne for single row queries --- storage/tracking/tracking.go | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/storage/tracking/tracking.go b/storage/tracking/tracking.go index 4f06fc6..4b75798 100644 --- a/storage/tracking/tracking.go +++ b/storage/tracking/tracking.go @@ -99,7 +99,9 @@ func (cont *Container) setupQuerySpec(spec *querySpec) *querySpec { } else { spec.Table = fmt.Sprintf("%s.%s", cont.Storage.Schema, cont.TableName) } - spec.Scols = append(cont.HeadFields, "timestamp", "data", "trackid") + if spec.Scols == nil { + spec.Scols = append(cont.HeadFields, "timestamp", "data", "trackid") + } for i, v := range spec.Headvals { if v != "" { spec.Qucols = append(spec.Qucols, cont.HeadFields[i]) @@ -124,36 +126,31 @@ type querySpec struct { } func (cont *Container) Get(id lib.Ident) *Track { - db := cont.Storage - var tr *Track - proc := func(r *sql.Rows) error { - tr = cont.ItemFactory(cont) - return tr.ScanP(r) - } quSpec := &querySpec{ Qucols: lib.StrSlice{"trackid"}, Quvals: []any{id}, } - cont.setupQuerySpec(quSpec) - sql := storage.BuildSql(SqlSelect, quSpec) - db.Query(proc, sql, id) - return tr + return cont.QueryOne(quSpec) } func (cont *Container) QueryLast(hv ...string) *Track { + quSpec := &querySpec{ + Headvals: hv, + Ordcols: lib.StrSlice{"timestamp"}, + Limit: 1, + } + return cont.QueryOne(quSpec) +} + +func (cont *Container) QueryOne(quSpec *querySpec) *Track { db := cont.Storage var tr *Track proc := func(r *sql.Rows) error { tr = cont.ItemFactory(cont) return tr.ScanP(r) } - quSpec := &querySpec{ - Headvals: hv, - Ordcols: lib.StrSlice{"timestamp"}, - } cont.setupQuerySpec(quSpec) sql := storage.BuildSql(SqlSelect, quSpec) - println(sql) db.Query(proc, sql, quSpec.Quvals...) return tr }