From 3140b2d8cb979da72fac43acbe7db6bd020d34c0 Mon Sep 17 00:00:00 2001 From: Todd Gruben Date: Tue, 4 Feb 2020 11:55:49 -0600 Subject: [PATCH 1/2] 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'") + } +} From 0acac34fee8dd9b9b81131243e40a7c797a233b3 Mon Sep 17 00:00:00 2001 From: Todd Gruben Date: Tue, 4 Feb 2020 11:59:49 -0600 Subject: [PATCH 2/2] travis suggetions --- executor.go | 4 ++-- executor_test.go | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/executor.go b/executor.go index 2ec33902e..d0c53d43b 100644 --- a/executor.go +++ b/executor.go @@ -3590,7 +3590,7 @@ func (e *executor) collectCallKeySets(ctx context.Context, indexName string, c * if fieldName != "" { idx, exists := e.Holder.indexes[indexName] if !exists { - return errors.Errorf("index %s does not exist", indexName) + return errors.Wrapf(ErrIndexNotFound, "%s", indexName) } if field := idx.Field(fieldName); field != nil && field.ForeignIndex() != "" { foreignIndexName := field.ForeignIndex() @@ -3638,7 +3638,7 @@ func (e *executor) translateCall(indexName string, c *pql.Call, keyMaps map[stri colKey, rowKey, fieldName := c.TranslateInfo(columnLabel, rowLabel) idx, exists := e.Holder.indexes[indexName] if !exists { - return errors.Errorf("index %s does not exist", indexName) + return errors.Wrapf(ErrIndexNotFound, "%s", indexName) } if idx.Keys() { if c.Args[colKey] != nil && !isString(c.Args[colKey]) { diff --git a/executor_test.go b/executor_test.go index 7f7bfb956..5e969a977 100644 --- a/executor_test.go +++ b/executor_test.go @@ -4724,13 +4724,15 @@ func TestExecutor_Execute_NoIndex(t *testing.T) { defer c.Close() hldr := test.Holder{Holder: c[0].Server.Holder()} index := hldr.MustCreateIndexIfNotExists("i", *indexOptions) - //_, err := index.CreateField("f", fieldOption...) - index.CreateField("f") + _, err := index.CreateField("f") + if err != nil { + t.Fatal("should work") + } 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 { + }); errors.Cause(err) != pilosa.ErrIndexNotFound { t.Fatal("expecting error: 'index systems does not exist'") } }