Merge pull request #962 from niaow/all-writeable

Make all query translations writeable
This commit is contained in:
Nia 2020-10-12 14:26:19 -04:00 committed by GitHub
commit 12af1b56c3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 19 deletions

View file

@ -3954,11 +3954,7 @@ func (e *executor) translateCalls(ctx context.Context, defaultIndexName string,
// Generate a list of all used
keySets := make(map[string]map[string]struct{})
writable := false
for _, c := range calls {
if c.Writable() {
writable = true
}
if err := e.collectCallKeySets(ctx, defaultIndexName, c, keySets); err != nil {
return err
}
@ -3975,14 +3971,14 @@ func (e *executor) translateCalls(ctx context.Context, defaultIndexName string,
if !idx.Keys() || len(keySets) == 0 {
continue
}
if keyMaps[indexName], err = e.Cluster.translateIndexKeySet(ctx, indexName, keySet, writable); err != nil {
if keyMaps[indexName], err = e.Cluster.translateIndexKeySet(ctx, indexName, keySet, true); err != nil {
return err
}
}
// Translate calls.
for _, c := range calls {
if err := e.translateCall(ctx, defaultIndexName, c, keyMaps, c.Writable()); err != nil {
if err := e.translateCall(ctx, defaultIndexName, c, keyMaps, true); err != nil {
return err
}
}

View file

@ -5667,6 +5667,21 @@ func TestExecutor_Execute_NoIndex(t *testing.T) {
}
}
func TestExecutor_Translate_NoKeys(t *testing.T) {
c := test.MustRunCluster(t, 1)
defer c.Close()
c.CreateField(t, "i", pilosa.IndexOptions{}, "k", pilosa.OptFieldKeys())
c.Query(t, "i", `Set(1, k="a")`)
c.Query(t, "i", `Set(2, k="b")`)
resp := c.Query(t, "i", `Count(Union(Row(k="a"), Row(k="b"), Row(k="c")))`)
if len(resp.Results) != 1 {
t.Errorf("expected one result but got %v", resp.Results)
} else if resp.Results[0] != uint64(2) {
t.Errorf("expected 2 but got %v", resp.Results[0])
}
}
func TestExecutor_Execute_CountDistinct(t *testing.T) {
data, err := ioutil.ReadFile("testdata/schema.json")
if err != nil {

View file

@ -791,19 +791,6 @@ func (c *Call) TranslateInfo(columnLabel, rowLabel string) (colKey, rowKey, fiel
}
}
// Writable returns true if call is mutable (e.g. can write new translation keys)
func (c *Call) Writable() bool {
switch c.Name {
case "Set", "SetRowAttrs", "SetColumnAttrs", "SetBit":
return true
case "Not":
// to support queries like Not(Row(f="garbage"))
return true
default:
return false
}
}
func (c *Call) ArgString(key string) string {
value, ok := c.Args[key]
if !ok {