From 3140b2d8cb979da72fac43acbe7db6bd020d34c0 Mon Sep 17 00:00:00 2001 From: Todd Gruben Date: Tue, 4 Feb 2020 11:55:49 -0600 Subject: [PATCH] handle missing index in join properly --- executor.go | 10 ++++++++-- executor_test.go | 19 ++++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/executor.go b/executor.go index 414528be7..2ec33902e 100644 --- a/executor.go +++ b/executor.go @@ -3588,7 +3588,10 @@ func (e *executor) collectCallKeySets(ctx context.Context, indexName string, c * // Collect foreign index keys. if fieldName != "" { - idx := e.Holder.indexes[indexName] + idx, exists := e.Holder.indexes[indexName] + if !exists { + return errors.Errorf("index %s does not exist", indexName) + } if field := idx.Field(fieldName); field != nil && field.ForeignIndex() != "" { foreignIndexName := field.ForeignIndex() if m[foreignIndexName] == nil { @@ -3633,7 +3636,10 @@ func (e *executor) translateCall(indexName string, c *pql.Call, keyMaps map[stri // Translate column key. colKey, rowKey, fieldName := c.TranslateInfo(columnLabel, rowLabel) - idx := e.Holder.indexes[indexName] + idx, exists := e.Holder.indexes[indexName] + if !exists { + return errors.Errorf("index %s does not exist", indexName) + } if idx.Keys() { if c.Args[colKey] != nil && !isString(c.Args[colKey]) { if !isValidID(c.Args[colKey]) { diff --git a/executor_test.go b/executor_test.go index fa66f0acb..7f7bfb956 100644 --- a/executor_test.go +++ b/executor_test.go @@ -4415,7 +4415,6 @@ func runCallTest(t *testing.T, writeQuery string, readQueries []string, indexOpt c := test.MustRunCluster(t, 1) defer c.Close() - hldr := test.Holder{Holder: c[0].Server.Holder()} index := hldr.MustCreateIndexIfNotExists("i", *indexOptions) _, err := index.CreateField("f", fieldOption...) @@ -4717,3 +4716,21 @@ func TestExecutor_Execute_MinMaxCountEqual(t *testing.T) { } }) } + +func TestExecutor_Execute_NoIndex(t *testing.T) { + t.Helper() + indexOptions := &pilosa.IndexOptions{} + c := test.MustRunCluster(t, 1) + defer c.Close() + hldr := test.Holder{Holder: c[0].Server.Holder()} + index := hldr.MustCreateIndexIfNotExists("i", *indexOptions) + //_, err := index.CreateField("f", fieldOption...) + index.CreateField("f") + + if _, err := c[0].API.Query(context.Background(), &pilosa.QueryRequest{ + Index: "i", + Query: "Count(Distinct(Row(gpu_tag='GTX'), index=systems, field=jarvis_id))", + }); err == nil { + t.Fatal("expecting error: 'index systems does not exist'") + } +}