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 }