mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-10-06 19:07:50 +00:00
fix Clear() returning false when clearing a bit with no time views
This commit is contained in:
parent
21888703e5
commit
a270bff67b
3 changed files with 78 additions and 6 deletions
|
|
@ -5719,3 +5719,42 @@ func TestExecutor_Execute_TopNDistinct(t *testing.T) {
|
|||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestTimelessClearRegression(t *testing.T) {
|
||||
data, err := ioutil.ReadFile("testdata/timeRegressionSchema.json")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
c := test.MustRunCluster(t, 1)
|
||||
defer c.Close()
|
||||
|
||||
api := c[0].API
|
||||
|
||||
schema := &pilosa.Schema{}
|
||||
if err := json.NewDecoder(bytes.NewReader(data)).Decode(schema); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := api.ApplySchema(context.TODO(), schema, false); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
idxName := schema.Indexes[0].Name
|
||||
|
||||
setQuery := `Set(511, stargazer=376)`
|
||||
if _, err := api.Query(context.TODO(), &pilosa.QueryRequest{Index: idxName, Query: setQuery}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
setQuery = `Set(512, stargazer=300, 2017-05-18T00:00)`
|
||||
if _, err := api.Query(context.TODO(), &pilosa.QueryRequest{Index: idxName, Query: setQuery}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
clearQuery := `Clear(511, stargazer=376)`
|
||||
if res, err := api.Query(context.TODO(), &pilosa.QueryRequest{Index: idxName, Query: clearQuery}); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if res.Results[0] != true {
|
||||
t.Fatal("clear supposedly failed")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
13
field.go
13
field.go
|
|
@ -1281,15 +1281,14 @@ func (f *Field) ClearBit(rowID, colID uint64) (changed bool, err error) {
|
|||
// Retrieve view. Exit if it doesn't exist.
|
||||
view, present := f.viewMap[viewName]
|
||||
if !present {
|
||||
return changed, errors.Wrap(err, "clearing missing view")
|
||||
|
||||
return false, errors.Wrap(err, "clearing missing view")
|
||||
}
|
||||
|
||||
// Clear non-time bit.
|
||||
if v, err := view.clearBit(rowID, colID); err != nil {
|
||||
return changed, errors.Wrap(err, "clearing on view")
|
||||
return false, errors.Wrap(err, "clearing on view")
|
||||
} else if v {
|
||||
changed = v
|
||||
changed = changed || v
|
||||
}
|
||||
if len(f.viewMap) == 1 { // assuming no time views
|
||||
return changed, nil
|
||||
|
|
@ -1304,10 +1303,12 @@ func (f *Field) ClearBit(rowID, colID uint64) (changed bool, err error) {
|
|||
level--
|
||||
}
|
||||
if level < skipAbove {
|
||||
if changed, err = view.clearBit(rowID, colID); err != nil {
|
||||
cleared, err := view.clearBit(rowID, colID)
|
||||
changed = changed || cleared
|
||||
if err != nil {
|
||||
return changed, errors.Wrapf(err, "clearing on view %s", view.name)
|
||||
}
|
||||
if !changed {
|
||||
if !cleared {
|
||||
skipAbove = level + 1
|
||||
} else {
|
||||
skipAbove = maxInt
|
||||
|
|
|
|||
32
testdata/timeRegressionSchema.json
vendored
Normal file
32
testdata/timeRegressionSchema.json
vendored
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"indexes": [
|
||||
{
|
||||
"name": "repository",
|
||||
"options": {
|
||||
"keys": false,
|
||||
"trackExistence": true
|
||||
},
|
||||
"fields": [
|
||||
{
|
||||
"name": "language",
|
||||
"options": {
|
||||
"type": "set",
|
||||
"cacheType": "ranked",
|
||||
"cacheSize": 50000,
|
||||
"keys": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "stargazer",
|
||||
"options": {
|
||||
"type": "time",
|
||||
"timeQuantum": "YMD",
|
||||
"keys": false,
|
||||
"noStandardView": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"shardWidth": 1048576
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue