Skip to content

Commit

Permalink
append labels to fields
Browse files Browse the repository at this point in the history
  • Loading branch information
scottlepp committed Feb 23, 2024
1 parent 154b4b4 commit 3968853
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 21 deletions.
10 changes: 10 additions & 0 deletions duck/data/parquet.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,16 @@ import (
func ToParquet(frames []*data.Frame, chunk int) (map[string]string, error) {
dirs := map[string]string{}
frameIndex := framesByRef(frames)

// TODO - appending lables to fields for now
// need to return multiple frames instead
for _, f := range frames {
for _, fld := range f.Fields {
lbls := fld.Labels.String()
fld.Name = fmt.Sprintf("%s %s", fld.Name, lbls)
}
}

for _, frameList := range frameIndex {

dir, err := os.MkdirTemp("", "duck")
Expand Down
45 changes: 24 additions & 21 deletions duck/duckdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,28 +195,31 @@ func resultsToFrame(name string, res string, f *sdk.Frame, frames []*sdk.Frame)
f.Meta = resultsFrame.Meta
f.RefID = resultsFrame.RefID

applyLabels(*resultsFrame, frames)
// TODO - appending to field names for now
// applyLabels(*resultsFrame, frames)

return resultsFrame, nil
}

func applyLabels(resultsFrame sdk.Frame, sourceFrames []*sdk.Frame) {
for _, fld := range resultsFrame.Fields {
for _, f := range sourceFrames {
srcField := find(f, fld)
if srcField != nil {
fld.Labels = srcField.Labels
break
}
}
}
}

func find(f *sdk.Frame, fld *sdk.Field) *sdk.Field {
for _, sfld := range f.Fields {
if sfld.Name == fld.Name {
return sfld
}
}
return nil
}
// TODO

// func applyLabels(resultsFrame sdk.Frame, sourceFrames []*sdk.Frame) {
// for _, fld := range resultsFrame.Fields {
// for _, f := range sourceFrames {
// srcField := find(f, fld)
// if srcField != nil {
// fld.Labels = srcField.Labels
// break
// }
// }
// }
// }

// func find(f *sdk.Frame, fld *sdk.Field) *sdk.Field {
// for _, sfld := range f.Fields {
// if sfld.Name == fld.Name {
// return sfld
// }
// }
// return nil
// }
38 changes: 38 additions & 0 deletions duck/duckdb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,3 +223,41 @@ func TestLabels(t *testing.T) {
assert.Contains(t, txt, "server=A")
assert.Contains(t, txt, "server=B")
}

// TODO - neeed to return 2 frames here
// or just append the labels to the fields???
func TestLabelsMultiFrame(t *testing.T) {
db := NewInMemoryDB()

f := new(float64)
*f = 12345

var values = []*float64{f}
labels := map[string]string{
"server": "A",
}
frame := data.NewFrame("foo", data.NewField("value", labels, values))
frame.RefID = "foo"

var values2 = []*float64{f}
labels2 := map[string]string{
"server": "B",
}
frame2 := data.NewFrame("foo", data.NewField("value", labels2, values2))
frame2.RefID = "foo"

frames := []*data.Frame{frame, frame2}

model := &data.Frame{}
_, err := db.QueryFramesInto("foo", "select * from foo", frames, model)
assert.Nil(t, err)

assert.Equal(t, 2, model.Rows())
txt, err := model.StringTable(-1, -1)
assert.Nil(t, err)

fmt.Printf("GOT: %s", txt)

assert.Contains(t, txt, "server=A")
assert.Contains(t, txt, "server=B")
}

0 comments on commit 3968853

Please sign in to comment.