mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
Merge pull request #1205 from jaffee/1194-deprecate-rangeenabled
deprecate RangeEnabled, but leave in API
This commit is contained in:
commit
ede383f8eb
16 changed files with 74 additions and 112 deletions
|
|
@ -41,6 +41,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|||
- Group the write operations in syncBlock by MaxWritesPerRequest ([#950](https://github.com/pilosa/pilosa/pull/950))
|
||||
- Refactored HTTPClient handling ([#991](https://github.com/pilosa/pilosa/pull/991))
|
||||
- Remove FrameSchema. Move Fields to the Frame struct ([#907](https://github.com/pilosa/pilosa/pull/907))
|
||||
- Deprecated RangeEnabled option ([#1205](https://github.com/pilosa/pilosa/pull/1205))
|
||||
|
||||
### Removed
|
||||
|
||||
|
|
|
|||
|
|
@ -310,7 +310,7 @@ func TestClient_ImportValue(t *testing.T) {
|
|||
|
||||
// Load bitmap into cache to ensure cache gets updated.
|
||||
index := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
frame, err := index.CreateFrameIfNotExists("f", pilosa.FrameOptions{RangeEnabled: true, Fields: []*pilosa.Field{&fld}})
|
||||
frame, err := index.CreateFrameIfNotExists("f", pilosa.FrameOptions{Fields: []*pilosa.Field{&fld}})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -427,7 +427,6 @@ func TestCluster_ResizeStates(t *testing.T) {
|
|||
// Add Field Data to node0.
|
||||
if err := tc.CreateFrame("i", "fields", pilosa.FrameOptions{
|
||||
InverseEnabled: false,
|
||||
RangeEnabled: true,
|
||||
//CacheType: pilosa.CacheTypeNone,
|
||||
Fields: []*pilosa.Field{
|
||||
{
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ omitted. If it is present then its format should be YYYY-MM-DDTHH:MM.
|
|||
flags.Var(&Importer.IndexOptions.TimeQuantum, "index-time-quantum", "Time quantum for the index (DEPRECATED. This feature will be removed in a future version. Set time quantum of each frame instead.)")
|
||||
flags.Var(&Importer.FrameOptions.TimeQuantum, "frame-time-quantum", "Time quantum for the frame")
|
||||
flags.BoolVar(&Importer.FrameOptions.InverseEnabled, "frame-inverse-enabled", false, "Enable inverse frame")
|
||||
flags.BoolVar(&Importer.FrameOptions.RangeEnabled, "frame-range-enabled", false, "Enabled range encoded frame")
|
||||
flags.BoolVar(&Importer.FrameOptions.RangeEnabled, "frame-range-enabled", false, "DEPRECATED - any frame can have fields. This option will be removed.")
|
||||
flags.StringVar(&Importer.FrameOptions.CacheType, "frame-cache-type", pilosa.CacheTypeRanked, "Cache type for the frame; valid values: none, lru, ranked")
|
||||
flags.Uint32Var(&Importer.FrameOptions.CacheSize, "frame-cache-size", 50000, "Cache size for the frame")
|
||||
ctl.SetTLSConfig(flags, &Importer.TLS.CertificatePath, &Importer.TLS.CertificateKeyPath, &Importer.TLS.SkipVerify)
|
||||
|
|
|
|||
|
|
@ -86,9 +86,7 @@ func TestImportCommand_Run(t *testing.T) {
|
|||
}
|
||||
|
||||
// Ensure that the ImportValue path runs (note: we have specified a value
|
||||
// for cm.Field. Because the handler doesn't return errors (it sends them
|
||||
// to the logger), we don't get an error returned at `cm.Run()` even though
|
||||
// we haven't setup frame `f` to be RangeEnabled.
|
||||
// for cm.Field.)
|
||||
func TestImportCommand_RunValue(t *testing.T) {
|
||||
|
||||
buf := bytes.Buffer{}
|
||||
|
|
@ -117,7 +115,7 @@ func TestImportCommand_RunValue(t *testing.T) {
|
|||
cm.Host = s.Host()
|
||||
|
||||
http.DefaultClient.Do(MustNewHTTPRequest("POST", s.URL+"/index/i", strings.NewReader("")))
|
||||
http.DefaultClient.Do(MustNewHTTPRequest("POST", s.URL+"/index/i/frame/f", strings.NewReader(`{"options":{"rangeEnabled": true, "fields": [{"name": "foo", "type": "int", "min": 0, "max": 100}]}}`)))
|
||||
http.DefaultClient.Do(MustNewHTTPRequest("POST", s.URL+"/index/i/frame/f", strings.NewReader(`{"options":{"fields": [{"name": "foo", "type": "int", "min": 0, "max": 100}]}}`)))
|
||||
|
||||
cm.Index = "i"
|
||||
cm.Frame = "f"
|
||||
|
|
|
|||
|
|
@ -219,10 +219,8 @@ func (d *DiagnosticsCollector) EnrichWithSchemaProperties() {
|
|||
numIndexes += 1
|
||||
for _, frame := range index.Frames() {
|
||||
numFrames += 1
|
||||
if frame.rangeEnabled {
|
||||
if fields, err := frame.GetFields(); err == nil {
|
||||
bsiFieldCount += len(fields)
|
||||
}
|
||||
if fields, err := frame.GetFields(); err == nil {
|
||||
bsiFieldCount += len(fields)
|
||||
}
|
||||
if frame.TimeQuantum() != "" {
|
||||
timeQuantumEnabled = true
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ The request payload is in JSON, and may contain the `options` field. The `option
|
|||
* `inverseEnabled` (boolean): Enables [the inverted view](../data-model/#inverse) for this frame if `true`.
|
||||
* `cacheType` (string): [ranked](../data-model/#ranked) or [LRU](../data-model/#lru) caching on this frame. Default is `lru`.
|
||||
* `cacheSize` (int): Number of rows to keep in the cache. Default 50,000.
|
||||
* `rangeEnabled` (boolean): Enables range-encoded fields in this frame.
|
||||
* `rangeEnabled` (boolean): DEPRECATED - has no effect, will be removed. All frames support BSI fields.
|
||||
* `fields` (array): List of range-encoded [fields](../data-model/#bsi-range-encoding).
|
||||
|
||||
Each individual `field` contains the following:
|
||||
|
|
@ -130,7 +130,7 @@ curl localhost:10101/index/user/frame/language \
|
|||
``` request
|
||||
curl localhost:10101/index/repository/frame/stats \
|
||||
-X POST \
|
||||
-d '{"rangeEnabled": true, "fields": [{"name": "pullrequests", "type": "int", "min": 0, "max": 1000000}]}'
|
||||
-d '{"fields": [{"name": "pullrequests", "type": "int", "min": 0, "max": 1000000}]}'
|
||||
```
|
||||
``` response
|
||||
{}
|
||||
|
|
|
|||
|
|
@ -259,7 +259,6 @@ In addition to storing rows of bits, a frame can also contain fields that store
|
|||
curl localhost:10101/index/patients/frame/measurements \
|
||||
-X POST \
|
||||
-d '{"options":{
|
||||
"rangeEnabled": true,
|
||||
"fields": [
|
||||
{"name": "age", "type": "int", "min": 0, "max": 120},
|
||||
{"name": "weight", "type": "int", "min": 0, "max": 500},
|
||||
|
|
|
|||
|
|
@ -280,7 +280,6 @@ func TestExecutor_Execute_SetFieldValue(t *testing.T) {
|
|||
// Create frames.
|
||||
index := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
if _, err := index.CreateFrameIfNotExists("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: pilosa.FieldTypeInt, Min: 0, Max: 50},
|
||||
{Name: "field1", Type: pilosa.FieldTypeInt, Min: 1, Max: 2},
|
||||
|
|
@ -330,7 +329,6 @@ func TestExecutor_Execute_SetFieldValue(t *testing.T) {
|
|||
defer hldr.Close()
|
||||
index := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
if _, err := index.CreateFrameIfNotExists("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: pilosa.FieldTypeInt, Min: 0, Max: 100},
|
||||
},
|
||||
|
|
@ -611,7 +609,6 @@ func TestExecutor_Execute_Sum(t *testing.T) {
|
|||
}
|
||||
|
||||
if _, err := idx.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "foo", Type: pilosa.FieldTypeInt, Min: 10, Max: 100},
|
||||
{Name: "bar", Type: pilosa.FieldTypeInt, Min: 0, Max: 100000},
|
||||
|
|
@ -621,7 +618,6 @@ func TestExecutor_Execute_Sum(t *testing.T) {
|
|||
}
|
||||
|
||||
if _, err := idx.CreateFrame("other", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "foo", Type: pilosa.FieldTypeInt, Min: 0, Max: 1000},
|
||||
},
|
||||
|
|
@ -723,7 +719,6 @@ func TestExecutor_Execute_FieldRange(t *testing.T) {
|
|||
}
|
||||
|
||||
if _, err := idx.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "foo", Type: pilosa.FieldTypeInt, Min: 10, Max: 100},
|
||||
{Name: "bar", Type: pilosa.FieldTypeInt, Min: 0, Max: 100000},
|
||||
|
|
@ -733,7 +728,6 @@ func TestExecutor_Execute_FieldRange(t *testing.T) {
|
|||
}
|
||||
|
||||
if _, err := idx.CreateFrame("other", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "foo", Type: pilosa.FieldTypeInt, Min: 0, Max: 1000},
|
||||
},
|
||||
|
|
@ -742,7 +736,6 @@ func TestExecutor_Execute_FieldRange(t *testing.T) {
|
|||
}
|
||||
|
||||
if _, err := idx.CreateFrame("edge", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "foo", Type: pilosa.FieldTypeInt, Min: -100, Max: 100},
|
||||
},
|
||||
|
|
|
|||
35
frame.go
35
frame.go
|
|
@ -33,7 +33,6 @@ import (
|
|||
const (
|
||||
DefaultCacheType = CacheTypeRanked
|
||||
DefaultInverseEnabled = false
|
||||
DefaultRangeEnabled = false
|
||||
|
||||
// Default ranked frame cache
|
||||
DefaultCacheSize = 50000
|
||||
|
|
@ -59,7 +58,6 @@ type Frame struct {
|
|||
cacheType string
|
||||
cacheSize uint32
|
||||
timeQuantum TimeQuantum
|
||||
rangeEnabled bool
|
||||
fields []*Field
|
||||
|
||||
Logger Logger
|
||||
|
|
@ -88,7 +86,6 @@ func NewFrame(path, index, name string) (*Frame, error) {
|
|||
cacheType: DefaultCacheType,
|
||||
cacheSize: DefaultCacheSize,
|
||||
//timeQuantum
|
||||
rangeEnabled: DefaultRangeEnabled,
|
||||
//fields
|
||||
|
||||
Logger: NopLogger,
|
||||
|
|
@ -145,11 +142,6 @@ func (f *Frame) InverseEnabled() bool {
|
|||
return f.inverseEnabled
|
||||
}
|
||||
|
||||
// RangeEnabled returns true if range fields can be stored on this frame.
|
||||
func (f *Frame) RangeEnabled() bool {
|
||||
return f.rangeEnabled
|
||||
}
|
||||
|
||||
// SetCacheSize sets the cache size for ranked fames. Persists to meta file on update.
|
||||
// defaults to DefaultCacheSize 50000
|
||||
func (f *Frame) SetCacheSize(v uint32) error {
|
||||
|
|
@ -188,7 +180,6 @@ func (f *Frame) Options() FrameOptions {
|
|||
func (f *Frame) options() FrameOptions {
|
||||
return FrameOptions{
|
||||
InverseEnabled: f.inverseEnabled,
|
||||
RangeEnabled: f.rangeEnabled,
|
||||
CacheType: f.cacheType,
|
||||
CacheSize: f.cacheSize,
|
||||
TimeQuantum: f.timeQuantum,
|
||||
|
|
@ -268,7 +259,6 @@ func (f *Frame) loadMeta() error {
|
|||
f.cacheType = DefaultCacheType
|
||||
f.cacheSize = DefaultCacheSize
|
||||
f.timeQuantum = ""
|
||||
f.rangeEnabled = DefaultRangeEnabled
|
||||
//f.fields
|
||||
return nil
|
||||
} else if err != nil {
|
||||
|
|
@ -287,7 +277,6 @@ func (f *Frame) loadMeta() error {
|
|||
}
|
||||
f.cacheSize = pb.CacheSize
|
||||
f.timeQuantum = TimeQuantum(pb.TimeQuantum)
|
||||
f.rangeEnabled = pb.RangeEnabled
|
||||
f.fields = decodeFields(pb.Fields)
|
||||
|
||||
return nil
|
||||
|
|
@ -365,11 +354,6 @@ func (f *Frame) CreateField(field *Field) error {
|
|||
f.mu.Lock()
|
||||
defer f.mu.Unlock()
|
||||
|
||||
// Ensure frame supports fields.
|
||||
if !f.RangeEnabled() {
|
||||
return ErrFrameFieldsNotAllowed
|
||||
}
|
||||
|
||||
// Append field.
|
||||
if err := f.addField(field); err != nil {
|
||||
return err
|
||||
|
|
@ -402,11 +386,6 @@ func (f *Frame) GetFields() ([]*Field, error) {
|
|||
f.mu.RLock()
|
||||
defer f.mu.RUnlock()
|
||||
|
||||
// Ensure the frame supports fields.
|
||||
if !f.RangeEnabled() {
|
||||
return nil, ErrFrameFieldsNotAllowed
|
||||
}
|
||||
|
||||
err := f.loadMeta()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -420,11 +399,6 @@ func (f *Frame) DeleteField(name string) error {
|
|||
f.mu.Lock()
|
||||
defer f.mu.Unlock()
|
||||
|
||||
// Ensure frame supports fields.
|
||||
if !f.RangeEnabled() {
|
||||
return ErrFrameFieldsNotAllowed
|
||||
}
|
||||
|
||||
// Remove field.
|
||||
if err := f.deleteField(name); err != nil {
|
||||
return err
|
||||
|
|
@ -890,11 +864,6 @@ func (f *Frame) Import(rowIDs, columnIDs []uint64, timestamps []*time.Time) erro
|
|||
|
||||
// ImportValue bulk imports range-encoded value data.
|
||||
func (f *Frame) ImportValue(fieldName string, columnIDs []uint64, values []int64) error {
|
||||
// Verify that this frame is range-encoded.
|
||||
if !f.RangeEnabled() {
|
||||
return fmt.Errorf("Frame not RangeEnabled: %s", f.name)
|
||||
}
|
||||
|
||||
viewName := ViewFieldPrefix + fieldName
|
||||
// Get the field so we know bitDepth.
|
||||
field := f.Field(fieldName)
|
||||
|
|
@ -991,7 +960,7 @@ func (p frameInfoSlice) Less(i, j int) bool { return p[i].Name < p[j].Name }
|
|||
// FrameOptions represents options to set when initializing a frame.
|
||||
type FrameOptions struct {
|
||||
InverseEnabled bool `json:"inverseEnabled,omitempty"`
|
||||
RangeEnabled bool `json:"rangeEnabled,omitempty"`
|
||||
RangeEnabled bool `json:"rangeEnabled,omitempty"` // deprecated, will be removed
|
||||
CacheType string `json:"cacheType,omitempty"`
|
||||
CacheSize uint32 `json:"cacheSize,omitempty"`
|
||||
TimeQuantum TimeQuantum `json:"timeQuantum,omitempty"`
|
||||
|
|
@ -1009,7 +978,6 @@ func encodeFrameOptions(o *FrameOptions) *internal.FrameMeta {
|
|||
}
|
||||
return &internal.FrameMeta{
|
||||
InverseEnabled: o.InverseEnabled,
|
||||
RangeEnabled: o.RangeEnabled,
|
||||
CacheType: o.CacheType,
|
||||
CacheSize: o.CacheSize,
|
||||
TimeQuantum: string(o.TimeQuantum),
|
||||
|
|
@ -1023,7 +991,6 @@ func decodeFrameOptions(options *internal.FrameMeta) *FrameOptions {
|
|||
}
|
||||
return &FrameOptions{
|
||||
InverseEnabled: options.InverseEnabled,
|
||||
RangeEnabled: options.RangeEnabled,
|
||||
CacheType: options.CacheType,
|
||||
CacheSize: options.CacheSize,
|
||||
TimeQuantum: TimeQuantum(options.TimeQuantum),
|
||||
|
|
|
|||
|
|
@ -77,7 +77,6 @@ func TestFrame_SetFieldValue(t *testing.T) {
|
|||
defer idx.Close()
|
||||
|
||||
f, err := idx.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: pilosa.FieldTypeInt, Min: 0, Max: 30},
|
||||
{Name: "field1", Type: pilosa.FieldTypeInt, Min: 20, Max: 25},
|
||||
|
|
@ -123,7 +122,6 @@ func TestFrame_SetFieldValue(t *testing.T) {
|
|||
defer idx.Close()
|
||||
|
||||
f, err := idx.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: pilosa.FieldTypeInt, Min: 0, Max: 30},
|
||||
},
|
||||
|
|
@ -161,7 +159,6 @@ func TestFrame_SetFieldValue(t *testing.T) {
|
|||
defer idx.Close()
|
||||
|
||||
f, err := idx.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: pilosa.FieldTypeInt, Min: 0, Max: 30},
|
||||
},
|
||||
|
|
@ -181,7 +178,6 @@ func TestFrame_SetFieldValue(t *testing.T) {
|
|||
defer idx.Close()
|
||||
|
||||
f, err := idx.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: pilosa.FieldTypeInt, Min: 20, Max: 30},
|
||||
},
|
||||
|
|
@ -201,7 +197,6 @@ func TestFrame_SetFieldValue(t *testing.T) {
|
|||
defer idx.Close()
|
||||
|
||||
f, err := idx.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: pilosa.FieldTypeInt, Min: 20, Max: 30},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -788,8 +788,6 @@ func (h *Handler) handleGetFrameFields(w http.ResponseWriter, r *http.Request) {
|
|||
fallthrough
|
||||
case ErrFrameNotFound:
|
||||
http.Error(w, err.Error(), http.StatusNotFound)
|
||||
case ErrFrameFieldsNotAllowed:
|
||||
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||
default:
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -902,7 +902,7 @@ func TestHandler_Frame_AddField(t *testing.T) {
|
|||
|
||||
t.Run("OK", func(t *testing.T) {
|
||||
idx := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
f, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{RangeEnabled: true})
|
||||
f, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
@ -927,7 +927,7 @@ func TestHandler_Frame_AddField(t *testing.T) {
|
|||
|
||||
t.Run("ErrInvalidFieldType", func(t *testing.T) {
|
||||
idx := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
if _, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{RangeEnabled: true}); err != nil {
|
||||
if _, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
|
|
@ -949,7 +949,7 @@ func TestHandler_Frame_AddField(t *testing.T) {
|
|||
|
||||
t.Run("ErrInvalidFieldRange", func(t *testing.T) {
|
||||
idx := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
if _, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{RangeEnabled: true}); err != nil {
|
||||
if _, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
|
|
@ -972,8 +972,7 @@ func TestHandler_Frame_AddField(t *testing.T) {
|
|||
t.Run("ErrFieldAlreadyExists", func(t *testing.T) {
|
||||
idx := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
if _, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{{Name: "x", Type: pilosa.FieldTypeInt, Min: 0, Max: 100}},
|
||||
Fields: []*pilosa.Field{{Name: "x", Type: pilosa.FieldTypeInt, Min: 0, Max: 100}},
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
@ -1006,7 +1005,7 @@ func TestHandler_Frame_DeleteField(t *testing.T) {
|
|||
|
||||
t.Run("OK", func(t *testing.T) {
|
||||
idx := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
f, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{RangeEnabled: true})
|
||||
f, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else if err := f.CreateField(&pilosa.Field{Name: "x", Type: pilosa.FieldTypeInt, Min: 0, Max: 100}); err != nil {
|
||||
|
|
@ -1034,7 +1033,7 @@ func TestHandler_Frame_DeleteField(t *testing.T) {
|
|||
|
||||
t.Run("ErrFieldNotFound", func(t *testing.T) {
|
||||
idx := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
f, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{RangeEnabled: true})
|
||||
f, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else if err := f.CreateField(&pilosa.Field{Name: "x", Type: pilosa.FieldTypeInt, Min: 0, Max: 100}); err != nil {
|
||||
|
|
@ -1071,7 +1070,7 @@ func TestHandler_Frame_GetFields(t *testing.T) {
|
|||
|
||||
t.Run("OK", func(t *testing.T) {
|
||||
idx := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
f, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{RangeEnabled: true})
|
||||
f, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else if err := f.CreateField(&pilosa.Field{Name: "x", Type: pilosa.FieldTypeInt, Min: 1, Max: 100}); err != nil {
|
||||
|
|
@ -1105,7 +1104,7 @@ func TestHandler_Frame_GetFields(t *testing.T) {
|
|||
|
||||
t.Run("ErrFrameFieldNotAllowed", func(t *testing.T) {
|
||||
idx := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
|
||||
_, err := idx.CreateFrameIfNotExists("f1", pilosa.FrameOptions{RangeEnabled: false})
|
||||
_, err := idx.CreateFrameIfNotExists("f1", pilosa.FrameOptions{})
|
||||
|
||||
resp, err := http.Get(s.URL + "/index/i/frame/f1/fields")
|
||||
if err != nil {
|
||||
|
|
@ -1113,12 +1112,12 @@ func TestHandler_Frame_GetFields(t *testing.T) {
|
|||
}
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else if resp.StatusCode != http.StatusBadRequest {
|
||||
} else if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("unexpected status code: %d", resp.StatusCode)
|
||||
} else if body, err := ioutil.ReadAll(resp.Body); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if strings.TrimSpace(string(body)) != `frame fields not allowed` {
|
||||
t.Fatalf("unexpected body: %q", body)
|
||||
} else if strings.TrimSpace(string(body)) == `frame fields not allowed` {
|
||||
t.Fatalf("shouldn't get frame fields not allowed error: %q", body)
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
|||
11
index.go
11
index.go
|
|
@ -404,13 +404,7 @@ func (i *Index) createFrame(name string, opt FrameOptions) (*Frame, error) {
|
|||
|
||||
// Validate mutually exclusive options if ranges are enabled.
|
||||
if opt.RangeEnabled {
|
||||
if opt.InverseEnabled {
|
||||
return nil, ErrInverseRangeNotAllowed
|
||||
}
|
||||
} else {
|
||||
if len(opt.Fields) > 0 {
|
||||
return nil, ErrFrameFieldsNotAllowed
|
||||
}
|
||||
i.Logger.Printf("RangeEnabled is deprecated - no need to set RangeEnabled to true when creating a frame")
|
||||
}
|
||||
|
||||
// Validate fields.
|
||||
|
|
@ -452,9 +446,6 @@ func (i *Index) createFrame(name string, opt FrameOptions) (*Frame, error) {
|
|||
}
|
||||
|
||||
f.inverseEnabled = opt.InverseEnabled
|
||||
f.rangeEnabled = opt.RangeEnabled
|
||||
|
||||
f.rangeEnabled = opt.RangeEnabled
|
||||
|
||||
// Set fields.
|
||||
f.fields = opt.Fields
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ func TestIndex_CreateFrame(t *testing.T) {
|
|||
|
||||
// Create frame with schema and verify it exists.
|
||||
if f, err := index.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
RangeEnabled: false,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: pilosa.FieldTypeInt, Min: 10, Max: 20},
|
||||
{Name: "field1", Type: pilosa.FieldTypeInt, Min: 11, Max: 21},
|
||||
|
|
@ -124,16 +124,47 @@ func TestIndex_CreateFrame(t *testing.T) {
|
|||
}
|
||||
})
|
||||
|
||||
t.Run("ErrInverseRangeNotAllowed", func(t *testing.T) {
|
||||
t.Run("ErrInverseRangeAllowed", func(t *testing.T) {
|
||||
index := test.MustOpenIndex()
|
||||
defer index.Close()
|
||||
|
||||
if _, err := index.CreateFrame("f", pilosa.FrameOptions{
|
||||
InverseEnabled: true,
|
||||
frame, err := index.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
}); err != pilosa.ErrInverseRangeNotAllowed {
|
||||
InverseEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
&pilosa.Field{
|
||||
Name: "myfield",
|
||||
Type: pilosa.FieldTypeInt,
|
||||
Min: -20,
|
||||
Max: 100,
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
ch, err := frame.SetBit(pilosa.ViewStandard, 1, 2, nil)
|
||||
if !ch || err != nil {
|
||||
t.Fatal(ch, err)
|
||||
}
|
||||
ch, err = frame.SetBit(pilosa.ViewInverse, 1, 2, nil)
|
||||
if !ch || err != nil {
|
||||
t.Fatal(ch, err)
|
||||
}
|
||||
ch, err = frame.SetFieldValue(1, "myfield", 87)
|
||||
if !ch || err != nil {
|
||||
t.Fatal(ch, err)
|
||||
}
|
||||
views := frame.Views()
|
||||
if len(views) != 3 {
|
||||
var names string
|
||||
for _, v := range views {
|
||||
names = names + v.Name() + " "
|
||||
}
|
||||
t.Fatalf("Unexpected views: %s", names)
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
t.Run("ErrRangeCacheAllowed", func(t *testing.T) {
|
||||
|
|
@ -141,8 +172,7 @@ func TestIndex_CreateFrame(t *testing.T) {
|
|||
defer index.Close()
|
||||
|
||||
if _, err := index.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
CacheType: pilosa.CacheTypeRanked,
|
||||
CacheType: pilosa.CacheTypeRanked,
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
@ -152,15 +182,14 @@ func TestIndex_CreateFrame(t *testing.T) {
|
|||
index := test.MustOpenIndex()
|
||||
defer index.Close()
|
||||
if _, err := index.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
CacheType: pilosa.CacheTypeNone,
|
||||
CacheSize: uint32(5),
|
||||
CacheType: pilosa.CacheTypeNone,
|
||||
CacheSize: uint32(5),
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("ErrFrameFieldsNotAllowed", func(t *testing.T) {
|
||||
t.Run("ErrFrameFieldsAllowed", func(t *testing.T) {
|
||||
index := test.MustOpenIndex()
|
||||
defer index.Close()
|
||||
|
||||
|
|
@ -168,7 +197,7 @@ func TestIndex_CreateFrame(t *testing.T) {
|
|||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: pilosa.FieldTypeInt},
|
||||
},
|
||||
}); err != pilosa.ErrFrameFieldsNotAllowed {
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
|
|
@ -178,7 +207,6 @@ func TestIndex_CreateFrame(t *testing.T) {
|
|||
defer index.Close()
|
||||
|
||||
if _, err := index.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "", Type: pilosa.FieldTypeInt},
|
||||
},
|
||||
|
|
@ -192,7 +220,6 @@ func TestIndex_CreateFrame(t *testing.T) {
|
|||
defer index.Close()
|
||||
|
||||
if _, err := index.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: "bad_type"},
|
||||
},
|
||||
|
|
@ -206,7 +233,7 @@ func TestIndex_CreateFrame(t *testing.T) {
|
|||
defer index.Close()
|
||||
|
||||
if _, err := index.CreateFrame("f", pilosa.FrameOptions{
|
||||
RangeEnabled: true,
|
||||
RangeEnabled: true, // make sure we can still create frames with RangeEnabled: true after deprecation
|
||||
Fields: []*pilosa.Field{
|
||||
{Name: "field0", Type: pilosa.FieldTypeInt, Min: 100, Max: 50},
|
||||
},
|
||||
|
|
|
|||
23
pilosa.go
23
pilosa.go
|
|
@ -46,19 +46,16 @@ var (
|
|||
ErrInputDefinitionActionRequired = errors.New("field definitions require an action")
|
||||
ErrInputDefinitionNotFound = errors.New("input-definition not found")
|
||||
|
||||
ErrFieldNotFound = errors.New("field not found")
|
||||
ErrFieldExists = errors.New("field already exists")
|
||||
ErrFieldNameRequired = errors.New("field name required")
|
||||
ErrInvalidFieldType = errors.New("invalid field type")
|
||||
ErrInvalidFieldRange = errors.New("invalid field range")
|
||||
ErrInverseRangeNotAllowed = errors.New("inverse range not allowed")
|
||||
ErrRangeCacheNotAllowed = errors.New("range cache not allowed")
|
||||
ErrFrameFieldsNotAllowed = errors.New("frame fields not allowed")
|
||||
ErrInvalidFieldValueType = errors.New("invalid field value type")
|
||||
ErrFieldValueTooLow = errors.New("field value too low")
|
||||
ErrFieldValueTooHigh = errors.New("field value too high")
|
||||
ErrInvalidRangeOperation = errors.New("invalid range operation")
|
||||
ErrInvalidBetweenValue = errors.New("invalid value for between operation")
|
||||
ErrFieldNotFound = errors.New("field not found")
|
||||
ErrFieldExists = errors.New("field already exists")
|
||||
ErrFieldNameRequired = errors.New("field name required")
|
||||
ErrInvalidFieldType = errors.New("invalid field type")
|
||||
ErrInvalidFieldRange = errors.New("invalid field range")
|
||||
ErrInvalidFieldValueType = errors.New("invalid field value type")
|
||||
ErrFieldValueTooLow = errors.New("field value too low")
|
||||
ErrFieldValueTooHigh = errors.New("field value too high")
|
||||
ErrInvalidRangeOperation = errors.New("invalid range operation")
|
||||
ErrInvalidBetweenValue = errors.New("invalid value for between operation")
|
||||
|
||||
ErrInvalidView = errors.New("invalid view")
|
||||
ErrInvalidCacheType = errors.New("invalid cache type")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue