diff --git a/db.go b/db.go index 5e9b00f..7743d69 100644 --- a/db.go +++ b/db.go @@ -130,11 +130,6 @@ func (tdb *TelemDb) AddEvents(events ...skylab.BusEvent) (int64, error) { return tdb.AddEventsCtx(context.Background(), events...) } -// QueryModifier augments SQL strings. -type QueryModifier interface { - ModifyStatement(*strings.Builder) error -} - // LimitOffsetModifier is a modifier to support pagniation. type LimitOffsetModifier struct { Limit int @@ -157,7 +152,7 @@ type BusEventFilter struct { // now we can optionally add a limit. -func (tdb *TelemDb) GetPackets(ctx context.Context, filter BusEventFilter, options ...QueryModifier) ([]skylab.BusEvent, error) { +func (tdb *TelemDb) GetPackets(ctx context.Context, filter BusEventFilter, lim *LimitOffsetModifier) ([]skylab.BusEvent, error) { // construct a simple var whereFrags = make([]string, 0) @@ -204,8 +199,8 @@ func (tdb *TelemDb) GetPackets(ctx context.Context, filter BusEventFilter, optio // Augment our data further if there's i.e a limit modifier. // TODO: factor this out maybe? - for _, m := range options { - m.ModifyStatement(&sb) + if lim != nil { + lim.ModifyStatement(&sb) } rows, err := tdb.db.QueryxContext(ctx, sb.String()) if err != nil { @@ -252,7 +247,7 @@ type Datum struct { // A value is a specific data point. For example, bms_measurement.current // would be a value. func (tdb *TelemDb) GetValues(ctx context.Context, filter BusEventFilter, - field string, opts ...QueryModifier) ([]Datum, error) { + field string, lim *LimitOffsetModifier) ([]Datum, error) { // this fragment uses json_extract from sqlite to get a single // nested value. sb := strings.Builder{} @@ -285,12 +280,10 @@ func (tdb *TelemDb) GetValues(ctx context.Context, filter BusEventFilter, sb.WriteString(" ORDER BY ts DESC") - for _, m := range opts { - if m == nil { - continue - } - m.ModifyStatement(&sb) + if lim != nil { + lim.ModifyStatement(&sb) } + rows, err := tdb.db.QueryxContext(ctx, sb.String(), field, filter.Names[0]) if err != nil { return nil, err diff --git a/http.go b/http.go index aa79613..6e80f72 100644 --- a/http.go +++ b/http.go @@ -234,11 +234,7 @@ func apiV1GetPackets(tdb *TelemDb) http.HandlerFunc { // TODO: is the following check needed? var res []skylab.BusEvent - if lim != nil { - res, err = tdb.GetPackets(r.Context(), *bef, lim) - } else { - res, err = tdb.GetPackets(r.Context(), *bef) - } + res, err = tdb.GetPackets(r.Context(), *bef, lim) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return @@ -281,11 +277,7 @@ func apiV1GetValues(db *TelemDb) http.HandlerFunc { var res []Datum // make the call, skip the limit modifier if it's nil. - if lim == nil { - res, err = db.GetValues(r.Context(), *bef, field) - } else { - res, err = db.GetValues(r.Context(), *bef, field, lim) - } + res, err = db.GetValues(r.Context(), *bef, field, lim) if err != nil { // 500 server error: http.Error(w, err.Error(), http.StatusInternalServerError)