mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
commit
2ed559e2bb
4 changed files with 41 additions and 41 deletions
|
|
@ -145,7 +145,7 @@ func (cmd *ImportCommand) ensureSchema(ctx context.Context) error {
|
|||
func (cmd *ImportCommand) importPath(ctx context.Context, frameType, path string) error {
|
||||
// If frameType is `int`, treat the import data as values to be range-encoded.
|
||||
if frameType == pilosa.FrameTypeInt {
|
||||
return cmd.bufferFieldValues(ctx, path)
|
||||
return cmd.bufferValues(ctx, path)
|
||||
} else {
|
||||
if cmd.StringKeys {
|
||||
return cmd.bufferBitsK(ctx, path)
|
||||
|
|
@ -358,8 +358,8 @@ func (cmd *ImportCommand) importBitsK(ctx context.Context, bits []pilosa.Bit) er
|
|||
return nil
|
||||
}
|
||||
|
||||
// bufferFieldValues buffers slices of fieldValues to be imported as a batch.
|
||||
func (cmd *ImportCommand) bufferFieldValues(ctx context.Context, path string) error {
|
||||
// bufferValues buffers slices of FieldValues to be imported as a batch.
|
||||
func (cmd *ImportCommand) bufferValues(ctx context.Context, path string) error {
|
||||
a := make([]pilosa.FieldValue, 0, cmd.BufferSize)
|
||||
|
||||
var r *csv.Reader
|
||||
|
|
@ -407,7 +407,7 @@ func (cmd *ImportCommand) bufferFieldValues(ctx context.Context, path string) er
|
|||
}
|
||||
val.ColumnID = columnID
|
||||
|
||||
// Parse field value.
|
||||
// Parse FieldValue.
|
||||
value, err := strconv.ParseInt(record[1], 10, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid value on row %d: %q", rnum, record[1])
|
||||
|
|
@ -416,9 +416,9 @@ func (cmd *ImportCommand) bufferFieldValues(ctx context.Context, path string) er
|
|||
|
||||
a = append(a, val)
|
||||
|
||||
// If we've reached the buffer size then import field values.
|
||||
// If we've reached the buffer size then import FieldValues.
|
||||
if len(a) == cmd.BufferSize {
|
||||
if err := cmd.importFieldValues(ctx, a); err != nil {
|
||||
if err := cmd.importValues(ctx, a); err != nil {
|
||||
return err
|
||||
}
|
||||
a = a[:0]
|
||||
|
|
@ -426,22 +426,22 @@ func (cmd *ImportCommand) bufferFieldValues(ctx context.Context, path string) er
|
|||
}
|
||||
|
||||
// If there are still values in the buffer then flush them.
|
||||
if err := cmd.importFieldValues(ctx, a); err != nil {
|
||||
if err := cmd.importValues(ctx, a); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// importFieldValues sends batches of fieldValues to the server.
|
||||
func (cmd *ImportCommand) importFieldValues(ctx context.Context, vals []pilosa.FieldValue) error {
|
||||
// importValues sends batches of FieldValues to the server.
|
||||
func (cmd *ImportCommand) importValues(ctx context.Context, vals []pilosa.FieldValue) error {
|
||||
logger := log.New(cmd.Stderr, "", log.LstdFlags)
|
||||
|
||||
// Group vals by slice.
|
||||
logger.Printf("grouping %d vals", len(vals))
|
||||
valsBySlice := pilosa.FieldValues(vals).GroupBySlice()
|
||||
|
||||
// Parse path into field values.
|
||||
// Parse path into FieldValues.
|
||||
for slice, vals := range valsBySlice {
|
||||
if cmd.Sort {
|
||||
sort.Sort(pilosa.FieldValues(vals))
|
||||
|
|
|
|||
|
|
@ -281,7 +281,7 @@ func TestExecutor_Execute_SetValue(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Set field values.
|
||||
// Set bsiGroup values.
|
||||
e := test.NewExecutor(hldr.Holder, test.NewCluster(1))
|
||||
if _, err := e.Execute(context.Background(), "i", test.MustParse(`SetValue(col=10, f=25)`), nil, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -355,8 +355,8 @@ func TestExecutor_Execute_SetRowAttrs(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Set two fields on f/10.
|
||||
// Also set fields on other bitmaps and frames to test isolation.
|
||||
// Set two attrs on f/10.
|
||||
// Also set attrs on other bitmaps and frames to test isolation.
|
||||
e := test.NewExecutor(hldr.Holder, test.NewCluster(1))
|
||||
if _, err := e.Execute(context.Background(), "i", test.MustParse(`SetRowAttrs(row=10, frame=f, foo="bar")`), nil, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -617,9 +617,9 @@ func TestExecutor_Execute_MinMax(t *testing.T) {
|
|||
for i, tt := range tests {
|
||||
var pql string
|
||||
if tt.filter == "" {
|
||||
pql = `Min(frame=f, field=f)`
|
||||
pql = `Min(frame=f)`
|
||||
} else {
|
||||
pql = fmt.Sprintf(`Min(%s, frame=f, field=f)`, tt.filter)
|
||||
pql = fmt.Sprintf(`Min(%s, frame=f)`, tt.filter)
|
||||
}
|
||||
if result, err := e.Execute(context.Background(), "i", test.MustParse(pql), nil, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -643,9 +643,9 @@ func TestExecutor_Execute_MinMax(t *testing.T) {
|
|||
for i, tt := range tests {
|
||||
var pql string
|
||||
if tt.filter == "" {
|
||||
pql = `Max(frame=f, field=f)`
|
||||
pql = `Max(frame=f)`
|
||||
} else {
|
||||
pql = fmt.Sprintf(`Max(%s, frame=f, field=f)`, tt.filter)
|
||||
pql = fmt.Sprintf(`Max(%s, frame=f)`, tt.filter)
|
||||
}
|
||||
if result, err := e.Execute(context.Background(), "i", test.MustParse(pql), nil, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -711,7 +711,7 @@ func TestExecutor_Execute_Sum(t *testing.T) {
|
|||
}
|
||||
|
||||
t.Run("NoFilter", func(t *testing.T) {
|
||||
if result, err := e.Execute(context.Background(), "i", test.MustParse(`Sum(frame=foo, field=foo)`), nil, nil); err != nil {
|
||||
if result, err := e.Execute(context.Background(), "i", test.MustParse(`Sum(frame=foo)`), nil, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(result[0], pilosa.ValCount{Val: 200, Count: 5}) {
|
||||
t.Fatalf("unexpected result: %s", spew.Sdump(result))
|
||||
|
|
@ -719,7 +719,7 @@ func TestExecutor_Execute_Sum(t *testing.T) {
|
|||
})
|
||||
|
||||
t.Run("WithFilter", func(t *testing.T) {
|
||||
if result, err := e.Execute(context.Background(), "i", test.MustParse(`Sum(Bitmap(frame=x, row=0), frame=foo, field=foo)`), nil, nil); err != nil {
|
||||
if result, err := e.Execute(context.Background(), "i", test.MustParse(`Sum(Bitmap(frame=x, row=0), frame=foo)`), nil, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(result[0], pilosa.ValCount{Val: 80, Count: 2}) {
|
||||
t.Fatalf("unexpected result: %s", spew.Sdump(result))
|
||||
|
|
@ -769,7 +769,7 @@ func TestExecutor_Execute_BSIGroupRange(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
// Ensure a Range(field) query can be executed.
|
||||
// Ensure a Range(bsiGroup) query can be executed.
|
||||
func TestExecutor_Execute_Range(t *testing.T) {
|
||||
hldr := test.MustOpenHolder()
|
||||
defer hldr.Close()
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ func TestFragment_ClearBit(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// Ensure a fragment can set & read a field value.
|
||||
// Ensure a fragment can set & read a value.
|
||||
func TestFragment_SetValue(t *testing.T) {
|
||||
t.Run("OK", func(t *testing.T) {
|
||||
f := test.MustOpenFragment("i", "f", pilosa.ViewStandard, 0, "")
|
||||
|
|
@ -219,8 +219,8 @@ func TestFragment_SetValue(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
// Ensure a fragment can sum field values.
|
||||
func TestFragment_FieldSum(t *testing.T) {
|
||||
// Ensure a fragment can sum values.
|
||||
func TestFragment_Sum(t *testing.T) {
|
||||
const bitDepth = 16
|
||||
|
||||
f := test.MustOpenFragment("i", "f", pilosa.ViewStandard, 0, "")
|
||||
|
|
@ -258,8 +258,8 @@ func TestFragment_FieldSum(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
// Ensure a fragment can find the min and max of field values.
|
||||
func TestFragment_FieldMinMax(t *testing.T) {
|
||||
// Ensure a fragment can find the min and max of values.
|
||||
func TestFragment_MinMax(t *testing.T) {
|
||||
const bitDepth = 16
|
||||
|
||||
f := test.MustOpenFragment("i", "f", pilosa.ViewStandard, 0, "")
|
||||
|
|
@ -331,8 +331,8 @@ func TestFragment_FieldMinMax(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
// Ensure a fragment query for matching fields.
|
||||
func TestFragment_FieldRange(t *testing.T) {
|
||||
// Ensure a fragment query for matching values.
|
||||
func TestFragment_Range(t *testing.T) {
|
||||
const bitDepth = 16
|
||||
|
||||
t.Run("EQ", func(t *testing.T) {
|
||||
|
|
@ -400,28 +400,28 @@ func TestFragment_FieldRange(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Query for fields less than (ending with set column).
|
||||
// Query for values less than (ending with set column).
|
||||
if b, err := f.RangeOp(pql.LT, bitDepth, 301); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{2000, 5000, 6000}) {
|
||||
t.Fatalf("unexpected columns: %+v", b.Columns())
|
||||
}
|
||||
|
||||
// Query for fields less than (ending with unset column).
|
||||
// Query for values less than (ending with unset column).
|
||||
if b, err := f.RangeOp(pql.LT, bitDepth, 300); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{5000, 6000}) {
|
||||
t.Fatalf("unexpected columns: %+v", b.Columns())
|
||||
}
|
||||
|
||||
// Query for fields less than or equal to (ending with set column).
|
||||
// Query for values less than or equal to (ending with set column).
|
||||
if b, err := f.RangeOp(pql.LTE, bitDepth, 301); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{2000, 4000, 5000, 6000}) {
|
||||
t.Fatalf("unexpected columns: %+v", b.Columns())
|
||||
}
|
||||
|
||||
// Query for fields less than or equal to (ending with unset column).
|
||||
// Query for values less than or equal to (ending with unset column).
|
||||
if b, err := f.RangeOp(pql.LTE, bitDepth, 300); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{2000, 5000, 6000}) {
|
||||
|
|
@ -448,28 +448,28 @@ func TestFragment_FieldRange(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Query for fields greater than (ending with unset bit).
|
||||
// Query for values greater than (ending with unset bit).
|
||||
if b, err := f.RangeOp(pql.GT, bitDepth, 300); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{1000, 3000, 4000}) {
|
||||
t.Fatalf("unexpected columns: %+v", b.Columns())
|
||||
}
|
||||
|
||||
// Query for fields greater than (ending with set bit).
|
||||
// Query for values greater than (ending with set bit).
|
||||
if b, err := f.RangeOp(pql.GT, bitDepth, 301); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{1000, 3000}) {
|
||||
t.Fatalf("unexpected columns: %+v", b.Columns())
|
||||
}
|
||||
|
||||
// Query for fields greater than or equal to (ending with unset bit).
|
||||
// Query for values greater than or equal to (ending with unset bit).
|
||||
if b, err := f.RangeOp(pql.GTE, bitDepth, 300); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{1000, 2000, 3000, 4000}) {
|
||||
t.Fatalf("unexpected columns: %+v", b.Columns())
|
||||
}
|
||||
|
||||
// Query for fields greater than or equal to (ending with set bit).
|
||||
// Query for values greater than or equal to (ending with set bit).
|
||||
if b, err := f.RangeOp(pql.GTE, bitDepth, 301); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{1000, 3000, 4000}) {
|
||||
|
|
@ -496,28 +496,28 @@ func TestFragment_FieldRange(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Query for fields greater than (ending with unset column).
|
||||
// Query for values greater than (ending with unset column).
|
||||
if b, err := f.RangeBetween(bitDepth, 300, 2817); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{1000, 2000, 3000, 4000}) {
|
||||
t.Fatalf("unexpected columns: %+v", b.Columns())
|
||||
}
|
||||
|
||||
// Query for fields greater than (ending with set column).
|
||||
// Query for values greater than (ending with set column).
|
||||
if b, err := f.RangeBetween(bitDepth, 301, 2817); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{1000, 3000, 4000}) {
|
||||
t.Fatalf("unexpected columns: %+v", b.Columns())
|
||||
}
|
||||
|
||||
// Query for fields greater than or equal to (ending with unset column).
|
||||
// Query for values greater than or equal to (ending with unset column).
|
||||
if b, err := f.RangeBetween(bitDepth, 301, 2816); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{1000, 4000}) {
|
||||
t.Fatalf("unexpected columns: %+v", b.Columns())
|
||||
}
|
||||
|
||||
// Query for fields greater than or equal to (ending with set column).
|
||||
// Query for values greater than or equal to (ending with set column).
|
||||
if b, err := f.RangeBetween(bitDepth, 300, 2816); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !reflect.DeepEqual(b.Columns(), []uint64{1000, 2000, 4000}) {
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ func TestFrame_SetTimeQuantum(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// Ensure a frame can set & read a field value.
|
||||
// Ensure a frame can set & read a bsiGroup value.
|
||||
func TestFrame_SetValue(t *testing.T) {
|
||||
t.Run("OK", func(t *testing.T) {
|
||||
idx := test.MustOpenIndex()
|
||||
|
|
@ -86,7 +86,7 @@ func TestFrame_SetValue(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Set value on field.
|
||||
// Set value on frame.
|
||||
if changed, err := f.SetValue(100, 21); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !changed {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue