mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-12 23:51:03 +00:00
Merge pull request #962 from niaow/all-writeable
Make all query translations writeable
This commit is contained in:
commit
12af1b56c3
3 changed files with 17 additions and 19 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
13
pql/ast.go
13
pql/ast.go
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue