diff --git a/executor.go b/executor.go index 414528be7..d0c53d43b 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.Wrapf(ErrIndexNotFound, "%s", 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.Wrapf(ErrIndexNotFound, "%s", 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..5e969a977 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,23 @@ 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") + 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))", + }); errors.Cause(err) != pilosa.ErrIndexNotFound { + t.Fatal("expecting error: 'index systems does not exist'") + } +}