provide common method QueryOne for single row queries

This commit is contained in:
Helmut Merz 2024-04-12 13:00:13 +02:00
parent a9f8ea6b47
commit 53e0759e9f

View file

@ -99,7 +99,9 @@ func (cont *Container) setupQuerySpec(spec *querySpec) *querySpec {
} else { } else {
spec.Table = fmt.Sprintf("%s.%s", cont.Storage.Schema, cont.TableName) 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 { for i, v := range spec.Headvals {
if v != "" { if v != "" {
spec.Qucols = append(spec.Qucols, cont.HeadFields[i]) spec.Qucols = append(spec.Qucols, cont.HeadFields[i])
@ -124,36 +126,31 @@ type querySpec struct {
} }
func (cont *Container) Get(id lib.Ident) *Track { 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{ quSpec := &querySpec{
Qucols: lib.StrSlice{"trackid"}, Qucols: lib.StrSlice{"trackid"},
Quvals: []any{id}, Quvals: []any{id},
} }
cont.setupQuerySpec(quSpec) return cont.QueryOne(quSpec)
sql := storage.BuildSql(SqlSelect, quSpec)
db.Query(proc, sql, id)
return tr
} }
func (cont *Container) QueryLast(hv ...string) *Track { 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 db := cont.Storage
var tr *Track var tr *Track
proc := func(r *sql.Rows) error { proc := func(r *sql.Rows) error {
tr = cont.ItemFactory(cont) tr = cont.ItemFactory(cont)
return tr.ScanP(r) return tr.ScanP(r)
} }
quSpec := &querySpec{
Headvals: hv,
Ordcols: lib.StrSlice{"timestamp"},
}
cont.setupQuerySpec(quSpec) cont.setupQuerySpec(quSpec)
sql := storage.BuildSql(SqlSelect, quSpec) sql := storage.BuildSql(SqlSelect, quSpec)
println(sql)
db.Query(proc, sql, quSpec.Quvals...) db.Query(proc, sql, quSpec.Quvals...)
return tr return tr
} }