From 59f5d4f7d61d3e8ffa21e4484f0386c95e3680a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Podg=C3=B3rski?= Date: Thu, 13 Feb 2020 07:08:45 +0100 Subject: [PATCH] Do not clear existence column (#117) --- executor.go | 7 ------- executor_test.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/executor.go b/executor.go index d0c53d43b..162680a24 100644 --- a/executor.go +++ b/executor.go @@ -2679,13 +2679,6 @@ func (e *executor) executeClearBit(ctx context.Context, index string, c *pql.Cal return false, ErrFieldNotFound } - // Clear column on existence field - if ef := idx.existenceField(); ef != nil { - if _, err := ef.ClearBit(0, colID); err != nil { - return false, errors.Wrap(err, "clearing existence column") - } - } - // Int field. if f.Type() == FieldTypeInt || f.Type() == FieldTypeDecimal { return e.executeClearValueField(ctx, index, c, f, colID, opt) diff --git a/executor_test.go b/executor_test.go index 5e969a977..e11429d0f 100644 --- a/executor_test.go +++ b/executor_test.go @@ -692,6 +692,48 @@ func TestExecutor_Execute_Clear(t *testing.T) { t.Fatalf("expected column changed") } }) + + t.Run("RowKeyColumnKey_NotClearNot", func(t *testing.T) { + writeQuery := `Set("056009039|q2db_3385|11", f="all_users")` + readQueries := []string{ + `Not(Row(f="has_deleted_date"))`, + `Clear("056009039|q2db_3385|11", f="has_deleted_date")`, + `Not(Row(f="has_deleted_date")) `, + } + results := []interface{}{ + "056009039|q2db_3385|11", + false, + "056009039|q2db_3385|11", + } + + responses := runCallTest(t, writeQuery, readQueries, &pilosa.IndexOptions{ + Keys: true, + TrackExistence: true, + }, pilosa.OptFieldKeys()) + for i, resp := range responses { + if len(resp.Results) != 1 { + t.Fatalf("response %d: len(results) expected: 1, got: %d", i, len(resp.Results)) + } + + switch r := resp.Results[0].(type) { + case bool: + if results[i] != r { + t.Fatalf("response %d: expected: %v, got: %v", i, results[i], r) + } + + case *pilosa.Row: + if len(r.Keys) != 1 { + t.Fatalf("response %d: len(keys) expected: 1, got: %d", i, len(r.Keys)) + } + if results[i] != r.Keys[0] { + t.Fatalf("response %d: expected: %v, got: %v", i, results[i], r.Keys[0]) + } + + default: + t.Fatalf("response %d: expected: %T, got: %T", i, results[i], r) + } + } + }) } // Ensure a set query can be executed on a bool field.