Skip to content

Commit 69ee396

Browse files
authored
set frame type (#16)
1 parent 5059f0c commit 69ee396

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

duck/duckdb.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,18 @@ func resultsToFrame(name string, res string, f *sdk.Frame, frames []*sdk.Frame)
213213
f.Meta = resultsFrame.Meta
214214
f.RefID = resultsFrame.RefID
215215

216+
kind := f.TimeSeriesSchema().Type
217+
if kind == sdk.TimeSeriesTypeLong {
218+
fillMode := &sdk.FillMissing{Mode: sdk.FillModeNull}
219+
frame, err := sdk.LongToWide(f, fillMode)
220+
if err != nil {
221+
logger.Warn("could not convert frame long to wide", "error", err)
222+
return nil
223+
}
224+
f.Fields = frame.Fields
225+
f.Meta = frame.Meta
226+
}
227+
216228
// TODO - appending to field names for now
217229
// applyLabels(*resultsFrame, frames)
218230

duck/duckdb_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,38 @@ func TestTimestamps(t *testing.T) {
252252
assert.Contains(t, txt, "Type: []*time.Time")
253253
}
254254

255+
func TestTimeSeries(t *testing.T) {
256+
db := NewInMemoryDB()
257+
258+
tt := "2024-02-23 09:01:54"
259+
dd, err := dateparse.ParseAny(tt)
260+
assert.Nil(t, err)
261+
262+
var values = []time.Time{dd}
263+
timeField := data.NewField("time", nil, values)
264+
265+
groupField := data.NewField("group", nil, []string{"A"})
266+
valueField := data.NewField("value", nil, []*float64{new(float64)})
267+
268+
frame := data.NewFrame("foo", timeField, groupField, valueField)
269+
frame.RefID = "foo"
270+
271+
frames := []*data.Frame{frame}
272+
273+
model := &data.Frame{}
274+
err = db.QueryFramesInto("foo", "select * from foo", frames, model)
275+
assert.Nil(t, err)
276+
277+
assert.Equal(t, data.FrameTypeTimeSeriesWide, model.Meta.Type)
278+
279+
assert.Equal(t, 1, model.Rows())
280+
txt, err := model.StringTable(-1, -1)
281+
assert.Nil(t, err)
282+
283+
fmt.Printf("GOT: %s", txt)
284+
assert.Contains(t, txt, "Type: []time.Time")
285+
}
286+
255287
func TestLabels(t *testing.T) {
256288
db := NewInMemoryDB()
257289

0 commit comments

Comments
 (0)