diff --git a/executor.go b/executor.go index 390f85654..79a876023 100644 --- a/executor.go +++ b/executor.go @@ -3107,7 +3107,15 @@ func (e *executor) executeSetRow(ctx context.Context, indexName string, c *pql.C } result, err := e.mapReduce(ctx, indexName, shards, c, opt, mapFn, reduceFn) - return result.(bool), err + if err != nil { + return false, err + } + + b, ok := result.(bool) + if !ok { + return false, errors.New("unsupported result type") + } + return b, nil } // executeSetRowShard executes a SetRow() call for a single shard. diff --git a/executor_test.go b/executor_test.go index 45389d2a0..5241d3f7e 100644 --- a/executor_test.go +++ b/executor_test.go @@ -4018,6 +4018,25 @@ func TestExecutor_Execute_SetRow(t *testing.T) { t.Fatalf("unexpected columns: %+v", bits) } }) + t.Run("Err_Store(Distinct)", func(t *testing.T) { + c := test.MustRunCluster(t, 1) + defer c.Close() + hldr := test.Holder{Holder: c[0].Server.Holder()} + index := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{TrackExistence: true}) + f1, err := index.CreateField("f1", pilosa.OptFieldTypeDefault()) + if err != nil { + t.Fatal(err) + } + f2, err := index.CreateField("f2", pilosa.OptFieldTypeDefault()) + if err != nil { + t.Fatal(err) + } + + q := fmt.Sprintf(`Store(Distinct(field=%s), %s=2)`, f1.Name(), f2.Name()) + if res, err := c[0].API.Query(context.Background(), &pilosa.QueryRequest{Index: index.Name(), Query: q}); err == nil { + t.Fatalf("expected 'unsupported result type' error, got: %+v", res) + } + }) } func benchmarkExistence(nn bool, b *testing.B) {