This is an automated email from the ASF dual-hosted git repository.

mhubail pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 7edce9eed0 [ASTERIXDB-3404][RT] Do not apply columnar filter on 
antimatter
7edce9eed0 is described below

commit 7edce9eed01b5eb8e9dd101a6d817243c76ecb53
Author: Wail Alkowaileet <[email protected]>
AuthorDate: Wed May 22 15:47:40 2024 -0700

    [ASTERIXDB-3404][RT] Do not apply columnar filter on antimatter
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    Ignore antimatter tuples when processing columnar filters
    
    Change-Id: Ica578dac11eba9311d65c47f38cc119811a7dcad
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18309
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Wail Alkowaileet <[email protected]>
    Reviewed-by: Murtadha Hubail <[email protected]>
---
 .../column/filter/delete/delete.001.ddl.sqlpp}     | 19 +++---
 .../column/filter/delete/delete.002.update.sqlpp}  | 15 ++---
 .../column/filter/delete/delete.003.get.http}      | 13 +---
 .../column/filter/delete/delete.004.update.sqlpp}  | 13 +---
 .../column/filter/delete/delete.005.update.sqlpp}  | 16 ++---
 .../column/filter/delete/delete.006.get.http}      | 13 +---
 .../column/filter/delete/delete.007.query.sqlpp}   | 13 ++--
 .../column/filter/delete/delete.008.query.sqlpp}   | 14 ++---
 .../column/filter/delete/delete.009.query.sqlpp}   | 14 ++---
 .../column/filter/delete/delete.010.query.sqlpp}   | 14 ++---
 .../column/filter/delete/delete.011.query.sqlpp}   | 14 ++---
 .../column/filter/delete/delete.012.query.sqlpp}   | 14 ++---
 .../column/filter/delete/delete.013.query.sqlpp}   | 14 ++---
 .../column/filter/delete/delete.014.query.sqlpp}   | 14 ++---
 .../column/filter/delete/delete.015.query.sqlpp}   | 14 ++---
 .../column/filter/delete/delete.003.regexadm       |  1 +
 .../column/filter/delete/delete.006.regexadm       |  1 +
 .../results/column/filter/delete/delete.007.adm    | 16 +++++
 .../results/column/filter/delete/delete.008.adm    |  5 ++
 .../results/column/filter/delete/delete.009.adm    |  6 ++
 .../results/column/filter/delete/delete.010.adm    |  5 ++
 .../results/column/filter/delete/delete.011.adm    | 11 ++++
 .../results/column/filter/delete/delete.012.adm    | 10 +++
 .../results/column/filter/delete/delete.013.adm    | 11 ++++
 .../results/column/filter/delete/delete.014.adm    |  0
 .../results/column/filter/delete/delete.015.adm    | 16 +++++
 .../src/test/resources/runtimets/sqlpp_queries.xml |  5 ++
 .../column/filter/FalseColumnFilterEvaluator.java  |  5 ++
 .../column/filter/FilterAccessorProvider.java      |  8 +++
 .../column/filter/TrueColumnFilterEvaluator.java   |  5 ++
 .../iterable/IColumnIterableFilterEvaluator.java   |  2 +
 .../evaluator/AbstractIterableFilterEvaluator.java | 64 ++++++++++++++++---
 .../evaluator/ColumnIterableFilterEvaluator.java   | 24 +-------
 .../ColumnIterableFilterEvaluatorFactory.java      |  3 +
 .../ColumnarRepeatedIterableFilterEvaluator.java   | 24 +-------
 .../column/operation/query/ColumnAssembler.java    |  2 +-
 .../column/tuple/QueryColumnTupleReference.java    |  3 +-
 .../tuple/QueryColumnWithMetaTupleReference.java   | 11 ++--
 .../column/values/IColumnValuesReaderFactory.java  |  2 +-
 .../values/reader/AbstractColumnValuesReader.java  |  2 +-
 .../values/reader/ColumnValueReaderFactory.java    |  3 +-
 .../values/reader/PrimitiveColumnValuesReader.java |  2 +-
 .../values/reader/value/key/LevelKeyReader.java    | 71 ++++++++++++++++++++++
 43 files changed, 337 insertions(+), 195 deletions(-)

diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.001.ddl.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.001.ddl.sqlpp
index 67eb135d4d..a271778586 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.001.ddl.sqlpp
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+DROP DATAVERSE test if exists;
+CREATE DATAVERSE test;
+USE test;
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
+CREATE TYPE ColumnType AS {
+    id: int
+};
 
-    int getTupleIndex();
-
-    void setAt(int index) throws HyracksDataException;
-}
+CREATE DATASET ColumnDataset(ColumnType)
+PRIMARY KEY id WITH {
+    "storage-format": {"format" : "column"}
+};
\ No newline at end of file
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.002.update.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.002.update.sqlpp
index 67eb135d4d..23f368ae52 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.002.update.sqlpp
@@ -16,15 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
-
-    int getTupleIndex();
-
-    void setAt(int index) throws HyracksDataException;
-}
+UPSERT INTO ColumnDataset (
+    SELECT VALUE {"id": x, "a": x}
+    FROM RANGE (1, 32) x
+);
\ No newline at end of file
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.003.get.http
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.003.get.http
index 67eb135d4d..57d830aed0 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.003.get.http
@@ -16,15 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
-
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
-
-    int getTupleIndex();
-
-    void setAt(int index) throws HyracksDataException;
-}
+/connector?dataverseName=test&datasetName=ColumnDataset
\ No newline at end of file
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.004.update.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.004.update.sqlpp
index 67eb135d4d..8a84d36537 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.004.update.sqlpp
@@ -16,15 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
-
-    int getTupleIndex();
-
-    void setAt(int index) throws HyracksDataException;
-}
+DELETE FROM ColumnDataset
+WHERE a MOD 2 = 0;
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.005.update.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.005.update.sqlpp
index 67eb135d4d..37f50b5720 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.005.update.sqlpp
@@ -16,15 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
-
-    int getTupleIndex();
-
-    void setAt(int index) throws HyracksDataException;
-}
+UPSERT INTO ColumnDataset (
+    SELECT VALUE {"id": x, "a": x}
+    FROM RANGE (1, 32) x
+    WHERE x MOD 2 = 1
+);
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.006.get.http
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.006.get.http
index 67eb135d4d..57d830aed0 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.006.get.http
@@ -16,15 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
-
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
-
-    int getTupleIndex();
-
-    void setAt(int index) throws HyracksDataException;
-}
+/connector?dataverseName=test&datasetName=ColumnDataset
\ No newline at end of file
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.007.query.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.007.query.sqlpp
index 67eb135d4d..f7f794f7f8 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.007.query.sqlpp
@@ -16,15 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
 
-    int getTupleIndex();
 
-    void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+ORDER by d.id;
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.008.query.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.008.query.sqlpp
index 67eb135d4d..3c55c72053 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.008.query.sqlpp
@@ -16,15 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
 
-    int getTupleIndex();
 
-    void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 = 0
+ORDER by d.id;
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.009.query.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.009.query.sqlpp
index 67eb135d4d..8ef187a04a 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.009.query.sqlpp
@@ -16,15 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
 
-    int getTupleIndex();
 
-    void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 = 1
+ORDER by d.id;
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.010.query.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.010.query.sqlpp
index 67eb135d4d..f9d28cedd9 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.010.query.sqlpp
@@ -16,15 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
 
-    int getTupleIndex();
 
-    void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 = 2
+ORDER by d.id;
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.011.query.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.011.query.sqlpp
index 67eb135d4d..61c0def517 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.011.query.sqlpp
@@ -16,15 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
 
-    int getTupleIndex();
 
-    void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 != 0
+ORDER by d.id;
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.012.query.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.012.query.sqlpp
index 67eb135d4d..ce57d42445 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.012.query.sqlpp
@@ -16,15 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
 
-    int getTupleIndex();
 
-    void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 != 1
+ORDER by d.id;
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.013.query.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.013.query.sqlpp
index 67eb135d4d..3d5765b49e 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.013.query.sqlpp
@@ -16,15 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
 
-    int getTupleIndex();
 
-    void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 != 2
+ORDER by d.id;
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.014.query.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.014.query.sqlpp
index 67eb135d4d..8f5f165e94 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.014.query.sqlpp
@@ -16,15 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
 
-    int getTupleIndex();
 
-    void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 2 = 0
+ORDER by d.id;
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.015.query.sqlpp
similarity index 69%
copy from 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.015.query.sqlpp
index 67eb135d4d..a1b871c0a1 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.015.query.sqlpp
@@ -16,15 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.iterable;
 
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator 
{
-    void reset();
 
-    int getTupleIndex();
 
-    void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 2 != 0
+ORDER by d.id;
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.003.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.003.regexadm
new file mode 100644
index 0000000000..81882d4ca9
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.003.regexadm
@@ -0,0 +1 @@
+\Q{"keys":"id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"ColumnType","open":true,"fields":[{"id":{"type":"AInt64"}}]},"splits":[\E.*\Q]}\E
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.006.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.006.regexadm
new file mode 100644
index 0000000000..81882d4ca9
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.006.regexadm
@@ -0,0 +1 @@
+\Q{"keys":"id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"ColumnType","open":true,"fields":[{"id":{"type":"AInt64"}}]},"splits":[\E.*\Q]}\E
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.007.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.007.adm
new file mode 100644
index 0000000000..9b5244cb2a
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.007.adm
@@ -0,0 +1,16 @@
+{ "id": 1, "a": 1 }
+{ "id": 3, "a": 3 }
+{ "id": 5, "a": 5 }
+{ "id": 7, "a": 7 }
+{ "id": 9, "a": 9 }
+{ "id": 11, "a": 11 }
+{ "id": 13, "a": 13 }
+{ "id": 15, "a": 15 }
+{ "id": 17, "a": 17 }
+{ "id": 19, "a": 19 }
+{ "id": 21, "a": 21 }
+{ "id": 23, "a": 23 }
+{ "id": 25, "a": 25 }
+{ "id": 27, "a": 27 }
+{ "id": 29, "a": 29 }
+{ "id": 31, "a": 31 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.008.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.008.adm
new file mode 100644
index 0000000000..1e05777ba6
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.008.adm
@@ -0,0 +1,5 @@
+{ "id": 3, "a": 3 }
+{ "id": 9, "a": 9 }
+{ "id": 15, "a": 15 }
+{ "id": 21, "a": 21 }
+{ "id": 27, "a": 27 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.009.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.009.adm
new file mode 100644
index 0000000000..ac77f3904b
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.009.adm
@@ -0,0 +1,6 @@
+{ "id": 1, "a": 1 }
+{ "id": 7, "a": 7 }
+{ "id": 13, "a": 13 }
+{ "id": 19, "a": 19 }
+{ "id": 25, "a": 25 }
+{ "id": 31, "a": 31 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.010.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.010.adm
new file mode 100644
index 0000000000..c13bcec61d
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.010.adm
@@ -0,0 +1,5 @@
+{ "id": 5, "a": 5 }
+{ "id": 11, "a": 11 }
+{ "id": 17, "a": 17 }
+{ "id": 23, "a": 23 }
+{ "id": 29, "a": 29 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.011.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.011.adm
new file mode 100644
index 0000000000..864fabe8c0
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.011.adm
@@ -0,0 +1,11 @@
+{ "id": 1, "a": 1 }
+{ "id": 5, "a": 5 }
+{ "id": 7, "a": 7 }
+{ "id": 11, "a": 11 }
+{ "id": 13, "a": 13 }
+{ "id": 17, "a": 17 }
+{ "id": 19, "a": 19 }
+{ "id": 23, "a": 23 }
+{ "id": 25, "a": 25 }
+{ "id": 29, "a": 29 }
+{ "id": 31, "a": 31 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.012.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.012.adm
new file mode 100644
index 0000000000..138272079e
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.012.adm
@@ -0,0 +1,10 @@
+{ "id": 3, "a": 3 }
+{ "id": 5, "a": 5 }
+{ "id": 9, "a": 9 }
+{ "id": 11, "a": 11 }
+{ "id": 15, "a": 15 }
+{ "id": 17, "a": 17 }
+{ "id": 21, "a": 21 }
+{ "id": 23, "a": 23 }
+{ "id": 27, "a": 27 }
+{ "id": 29, "a": 29 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.013.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.013.adm
new file mode 100644
index 0000000000..5ab1d997db
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.013.adm
@@ -0,0 +1,11 @@
+{ "id": 1, "a": 1 }
+{ "id": 3, "a": 3 }
+{ "id": 7, "a": 7 }
+{ "id": 9, "a": 9 }
+{ "id": 13, "a": 13 }
+{ "id": 15, "a": 15 }
+{ "id": 19, "a": 19 }
+{ "id": 21, "a": 21 }
+{ "id": 25, "a": 25 }
+{ "id": 27, "a": 27 }
+{ "id": 31, "a": 31 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.014.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.014.adm
new file mode 100644
index 0000000000..e69de29bb2
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.015.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.015.adm
new file mode 100644
index 0000000000..9b5244cb2a
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.015.adm
@@ -0,0 +1,16 @@
+{ "id": 1, "a": 1 }
+{ "id": 3, "a": 3 }
+{ "id": 5, "a": 5 }
+{ "id": 7, "a": 7 }
+{ "id": 9, "a": 9 }
+{ "id": 11, "a": 11 }
+{ "id": 13, "a": 13 }
+{ "id": 15, "a": 15 }
+{ "id": 17, "a": 17 }
+{ "id": 19, "a": 19 }
+{ "id": 21, "a": 21 }
+{ "id": 23, "a": 23 }
+{ "id": 25, "a": 25 }
+{ "id": 27, "a": 27 }
+{ "id": 29, "a": 29 }
+{ "id": 31, "a": 31 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml 
b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
index 6e19f2b106..7e2259b7ec 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
@@ -16388,6 +16388,11 @@
         <expected-warn>ASX0051: Incomparable input types: array and boolean 
(in line 27, at column 8)</expected-warn>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="column">
+      <compilation-unit name="filter/delete">
+        <output-dir compare="Text">filter/delete</output-dir>
+      </compilation-unit>
+    </test-case>
     <test-case FilePath="column">
       <compilation-unit name="filter/not-in_every">
         <output-dir compare="Text">filter/not-in_every</output-dir>
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
index f53208bb2a..51f125bd3f 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
@@ -41,6 +41,11 @@ public class FalseColumnFilterEvaluator implements 
IColumnIterableFilterEvaluato
         return -1;
     }
 
+    @Override
+    public int getValueIndex() {
+        return -1;
+    }
+
     @Override
     public void setAt(int index) {
         // NoOp
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
index af64325f60..db1862c3dd 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
@@ -52,6 +52,7 @@ public class FilterAccessorProvider {
     private final ObjectSchemaNode root;
     private final ObjectSchemaNode metaRoot;
     private final SchemaClipperVisitor clipperVisitor;
+    private final IColumnValuesReaderFactory readerFactory;
     private final PathExtractorVisitor pathExtractorVisitor;
     private final Map<ARecordType, PrimitiveSchemaNode> cachedNodes;
     private final List<IColumnRangeFilterValueAccessor> filterAccessors;
@@ -68,6 +69,7 @@ public class FilterAccessorProvider {
         this.root = root;
         this.metaRoot = metaRoot;
         this.clipperVisitor = clipperVisitor;
+        this.readerFactory = readerFactory;
         this.valueGetterFactory = valueGetterFactory;
         pathExtractorVisitor = new PathExtractorVisitor(readerFactory);
         cachedNodes = new HashMap<>();
@@ -122,6 +124,12 @@ public class FilterAccessorProvider {
         return new UnionColumnFilterValueAccessorEvaluator(unionReaders, 
valueGetters);
     }
 
+    public void initializeFilterReaders() {
+        // This primary key level reader will help us avoid skipping filter 
values when an anti-matter is encountered
+        IColumnValuesReader primaryKeyLevelReader = 
readerFactory.createValueReader(ATypeTag.MISSING, 0, 1, true);
+        filterColumnReaders.add(0, primaryKeyLevelReader);
+    }
+
     public List<IColumnRangeFilterValueAccessor> getFilterAccessors() {
         return filterAccessors;
     }
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
index 86ccab3aa4..0841e015e6 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
@@ -45,6 +45,11 @@ public class TrueColumnFilterEvaluator implements 
IColumnIterableFilterEvaluator
         return -1;
     }
 
+    @Override
+    public int getValueIndex() {
+        return -1;
+    }
+
     @Override
     public void setAt(int index) {
         // NoOp
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
index 67eb135d4d..1d2838e397 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
@@ -26,5 +26,7 @@ public interface IColumnIterableFilterEvaluator extends 
IColumnFilterEvaluator {
 
     int getTupleIndex();
 
+    int getValueIndex();
+
     void setAt(int index) throws HyracksDataException;
 }
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/AbstractIterableFilterEvaluator.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/AbstractIterableFilterEvaluator.java
index 9ebb7b72f8..a992090cd4 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/AbstractIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/AbstractIterableFilterEvaluator.java
@@ -18,7 +18,10 @@
  */
 package org.apache.asterix.column.filter.iterable.evaluator;
 
+import java.util.List;
+
 import 
org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.asterix.column.values.IColumnValuesReader;
 import org.apache.asterix.formats.nontagged.BinaryBooleanInspector;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -26,33 +29,78 @@ import org.apache.hyracks.data.std.primitive.VoidPointable;
 
 abstract class AbstractIterableFilterEvaluator implements 
IColumnIterableFilterEvaluator {
     protected final IScalarEvaluator evaluator;
+    protected final IColumnValuesReader primaryKeyReader;
+    protected final List<IColumnValuesReader> readers;
     private final VoidPointable booleanResult;
-    protected int index;
+    protected int tupleIndex;
+    protected int valueIndex;
 
-    AbstractIterableFilterEvaluator(IScalarEvaluator evaluator) {
+    AbstractIterableFilterEvaluator(IScalarEvaluator evaluator, 
List<IColumnValuesReader> readers) {
         this.evaluator = evaluator;
+        this.primaryKeyReader = readers.get(0);
+        this.readers = readers;
         this.booleanResult = new VoidPointable();
         reset();
     }
 
     @Override
     public final void reset() {
-        index = -1;
+        tupleIndex = -1;
+        valueIndex = -1;
     }
 
     @Override
     public final int getTupleIndex() {
-        return index;
+        return tupleIndex;
+    }
+
+    @Override
+    public int getValueIndex() {
+        return valueIndex;
     }
 
     @Override
     public final void setAt(int index) throws HyracksDataException {
-        int count = index - this.index;
-        // count - 1 as we want to evaluate the value at 'index'
-        skip(count - 1);
+        // -1 as we want to evaluate the value at 'index'
+        int count = index - this.tupleIndex - 1;
+        if (count > 0) {
+            tupleIndex += count - 1;
+            // skip(int) returns the number of skipped values (i.e., without 
anti-matters)
+            valueIndex += skip(count - 1);
+        }
     }
 
-    protected abstract void skip(int count) throws HyracksDataException;
+    protected final boolean next() throws HyracksDataException {
+        // start from 1 as 0 is reserved for the primary key level reader
+        boolean advance = true;
+        while (advance) {
+            advance = primaryKeyReader.next() && primaryKeyReader.isMissing();
+            // Advance tuple index
+            tupleIndex++;
+        }
+
+        // Advance value index
+        valueIndex++;
+        for (int i = 1; i < readers.size(); i++) {
+            if (!readers.get(i).next()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    protected final int skip(int count) throws HyracksDataException {
+        // Count non-anti-matter tuples
+        int nonAntiMatterCount = 0;
+        for (int i = 0; i < count; i++) {
+            primaryKeyReader.next();
+            nonAntiMatterCount += primaryKeyReader.isValue() ? 0 : 1;
+        }
+        for (int i = 1; nonAntiMatterCount > 0 && i < readers.size(); i++) {
+            readers.get(i).skip(nonAntiMatterCount);
+        }
+        return nonAntiMatterCount;
+    }
 
     protected final boolean inspect() throws HyracksDataException {
         evaluator.evaluate(null, booleanResult);
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluator.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluator.java
index 2878429da6..094b2bfd42 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluator.java
@@ -25,11 +25,9 @@ import 
org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 public class ColumnIterableFilterEvaluator extends 
AbstractIterableFilterEvaluator {
-    private final List<IColumnValuesReader> readers;
 
     public ColumnIterableFilterEvaluator(IScalarEvaluator evaluator, 
List<IColumnValuesReader> readers) {
-        super(evaluator);
-        this.readers = readers;
+        super(evaluator, readers);
     }
 
     @Override
@@ -37,28 +35,12 @@ public class ColumnIterableFilterEvaluator extends 
AbstractIterableFilterEvaluat
         boolean result = false;
         while (!result && next()) {
             result = inspect();
-            index++;
         }
         if (!result) {
             // Last tuple does not satisfy the condition
-            index++;
+            tupleIndex++;
+            valueIndex++;
         }
         return result;
     }
-
-    private boolean next() throws HyracksDataException {
-        for (int i = 0; i < readers.size(); i++) {
-            if (!readers.get(i).next()) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public void skip(int count) throws HyracksDataException {
-        for (int i = 0; count > 0 && i < readers.size(); i++) {
-            readers.get(i).skip(count);
-        }
-    }
 }
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluatorFactory.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluatorFactory.java
index 44441ddb86..2fd92e87a7 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluatorFactory.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluatorFactory.java
@@ -48,6 +48,9 @@ public class ColumnIterableFilterEvaluatorFactory implements 
IColumnIterableFilt
             throw new NullPointerException("Readers are empty");
         }
 
+        // Initialize column filter readers by including a primary key level 
reader
+        filterAccessorProvider.initializeFilterReaders();
+
         if (readers.stream().anyMatch(IColumnValuesReader::isRepeated)) {
             return new ColumnarRepeatedIterableFilterEvaluator(evaluator, 
readers);
         }
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnarRepeatedIterableFilterEvaluator.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnarRepeatedIterableFilterEvaluator.java
index 7db9f65d18..9a1f07f2cb 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnarRepeatedIterableFilterEvaluator.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnarRepeatedIterableFilterEvaluator.java
@@ -26,12 +26,10 @@ import 
org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 public class ColumnarRepeatedIterableFilterEvaluator extends 
AbstractIterableFilterEvaluator {
-    private final List<IColumnValuesReader> readers;
     private final List<IColumnValuesReader> repeatedReaders;
 
     ColumnarRepeatedIterableFilterEvaluator(IScalarEvaluator evaluator, 
List<IColumnValuesReader> readers) {
-        super(evaluator);
-        this.readers = readers;
+        super(evaluator, readers);
         repeatedReaders = new ArrayList<>();
         for (IColumnValuesReader reader : readers) {
             if (reader.isRepeated()) {
@@ -47,11 +45,11 @@ public class ColumnarRepeatedIterableFilterEvaluator 
extends AbstractIterableFil
             // TODO handle nested repetition (x = unnest --> y = unnest --> 
select (x = 1 AND y = 3))
             // TODO we need a way to 'rewind' y for each x
             result = evaluateRepeated();
-            index++;
         }
         if (!result) {
             // Last tuple does not satisfy the condition
-            index++;
+            tupleIndex++;
+            valueIndex++;
         }
         return result;
     }
@@ -73,20 +71,4 @@ public class ColumnarRepeatedIterableFilterEvaluator extends 
AbstractIterableFil
         } while (doNext);
         return result;
     }
-
-    private boolean next() throws HyracksDataException {
-        for (int i = 0; i < readers.size(); i++) {
-            if (!readers.get(i).next()) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    @Override
-    protected void skip(int count) throws HyracksDataException {
-        for (int i = 0; count > 0 && i < readers.size(); i++) {
-            readers.get(i).skip(count);
-        }
-    }
 }
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/ColumnAssembler.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/ColumnAssembler.java
index 835bb50f63..e619ecf99a 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/ColumnAssembler.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/ColumnAssembler.java
@@ -110,7 +110,7 @@ public final class ColumnAssembler {
     }
 
     public int skip(int count) throws HyracksDataException {
-        if (numberOfTuples == 0) {
+        if (numberOfTuples == 0 || count == 0) {
             // Avoid advancing tupleIndex and numberOfSkips if a mega leaf 
node is filtered out
             return 0;
         }
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnTupleReference.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnTupleReference.java
index 19cb753300..7ba0aae5cd 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnTupleReference.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnTupleReference.java
@@ -157,7 +157,8 @@ public final class QueryColumnTupleReference extends 
AbstractAsterixColumnTupleR
         // index == -1 if the normalized filter indicated that a mega leaf node
         // is filtered
         if (index == tupleIndex) {
-            assembler.setAt(index);
+            // setAt in the assembler expect the value index (i.e., tupleCount 
- antiMatterCount)
+            assembler.setAt(columnFilterEvaluator.getValueIndex());
             // set the next tuple index that satisfies the filter
             columnFilterEvaluator.evaluate();
             return assembler.nextValue();
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnWithMetaTupleReference.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnWithMetaTupleReference.java
index fc1f1d2b16..1e4aaeaadb 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnWithMetaTupleReference.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnWithMetaTupleReference.java
@@ -176,15 +176,18 @@ public final class QueryColumnWithMetaTupleReference 
extends AbstractAsterixColu
 
     private IValueReference getFilteredAssembledValue() throws 
HyracksDataException {
         int index = columnFilterEvaluator.getTupleIndex();
-        // index == -1 if the normalized filter indicated that a mega leaf node
-        // is filtered
+
+        // index == -1 if the normalized filter indicated that a mega leaf 
node is filtered
         if (index == tupleIndex) {
-            assembler.setAt(index);
-            metaAssembler.setAt(index);
+            // setAt in the assembler expect the value index (i.e., tupleCount 
- antiMatterCount)
+            int valueIndex = columnFilterEvaluator.getValueIndex();
+            assembler.setAt(valueIndex);
+            metaAssembler.setAt(valueIndex);
             // set the next tuple index that satisfies the filter
             columnFilterEvaluator.evaluate();
             return assembler.nextValue();
         }
+
         return MissingValueGetter.MISSING;
     }
 }
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/IColumnValuesReaderFactory.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/IColumnValuesReaderFactory.java
index 7c41512239..c32de2d055 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/IColumnValuesReaderFactory.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/IColumnValuesReaderFactory.java
@@ -52,7 +52,7 @@ public interface IColumnValuesReaderFactory {
      *
      * @param input column metadata info
      * @return columnar reader
-     * @see PathInfoSerializer#writePathInfo(ATypeTag, int, boolean)  for more 
information on how the path info is serialized
+     * @see PathInfoSerializer#writePathInfo(ATypeTag, int, boolean) how it 
serializes the path info
      */
     IColumnValuesReader createValueReader(DataInput input) throws IOException;
 }
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
index 133c744314..b03da57b32 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
@@ -57,7 +57,7 @@ abstract class AbstractColumnValuesReader implements 
IColumnValuesReader {
     AbstractColumnValuesReader(AbstractValueReader valueReader, int 
columnIndex, int maxLevel, boolean primaryKey) {
         this.valueReader = valueReader;
         this.columnIndex = columnIndex;
-        this.maxLevel = valueReader.getTypeTag() == ATypeTag.MISSING ? 
Integer.MAX_VALUE : maxLevel;
+        this.maxLevel = !primaryKey && valueReader.getTypeTag() == 
ATypeTag.MISSING ? Integer.MAX_VALUE : maxLevel;
         definitionLevels = new 
ParquetRunLengthBitPackingHybridDecoder(ColumnValuesUtil.getBitWidth(maxLevel));
         valuesStream = primaryKey ? new ByteBufferInputStream() : new 
MultiByteBufferInputStream();
         this.primaryKey = primaryKey;
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/ColumnValueReaderFactory.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/ColumnValueReaderFactory.java
index 34111385d1..d054b13c05 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/ColumnValueReaderFactory.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/ColumnValueReaderFactory.java
@@ -33,6 +33,7 @@ import 
org.apache.asterix.column.values.reader.value.StringValueReader;
 import org.apache.asterix.column.values.reader.value.UUIDValueReader;
 import org.apache.asterix.column.values.reader.value.key.DoubleKeyValueReader;
 import org.apache.asterix.column.values.reader.value.key.FloatKeyValueReader;
+import org.apache.asterix.column.values.reader.value.key.LevelKeyReader;
 import org.apache.asterix.column.values.reader.value.key.LongKeyValueReader;
 import org.apache.asterix.column.values.reader.value.key.StringKeyValueReader;
 import org.apache.asterix.column.values.reader.value.key.UUIDKeyValueReader;
@@ -70,7 +71,7 @@ public class ColumnValueReaderFactory implements 
IColumnValuesReaderFactory {
         switch (typeTag) {
             case MISSING:
             case NULL:
-                return NoOpValueReader.INSTANCE;
+                return primaryKey ? LevelKeyReader.INSTANCE : 
NoOpValueReader.INSTANCE;
             case BOOLEAN:
                 return new BooleanValueReader();
             case TINYINT:
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
index 5f28995da6..f1c29293d8 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
@@ -39,7 +39,7 @@ public final class PrimitiveColumnValuesReader extends 
AbstractColumnValuesReade
      */
     private final boolean primaryKey;
 
-    public PrimitiveColumnValuesReader(AbstractValueReader reader, int 
columnIndex, int maxLevel, boolean primaryKey) {
+    PrimitiveColumnValuesReader(AbstractValueReader reader, int columnIndex, 
int maxLevel, boolean primaryKey) {
         super(reader, columnIndex, maxLevel, primaryKey);
         this.primaryKey = primaryKey;
     }
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/value/key/LevelKeyReader.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/value/key/LevelKeyReader.java
new file mode 100644
index 0000000000..dddd0fa537
--- /dev/null
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/value/key/LevelKeyReader.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.column.values.reader.value.key;
+
+import java.io.IOException;
+
+import org.apache.asterix.column.bytes.stream.in.AbstractBytesInputStream;
+import org.apache.asterix.column.values.IColumnKeyValueReader;
+import org.apache.asterix.column.values.reader.value.AbstractValueReader;
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IValueReference;
+
+/**
+ * This singleton is used to ignore the key value and provide a way to read 
the key's level using
+ * {@link org.apache.asterix.column.values.reader.PrimitiveColumnValuesReader}
+ *
+ * @see 
org.apache.asterix.column.filter.iterable.evaluator.ColumnIterableFilterEvaluatorFactory
+ */
+public final class LevelKeyReader extends AbstractValueReader implements 
IColumnKeyValueReader {
+    public static final LevelKeyReader INSTANCE = new LevelKeyReader();
+
+    private LevelKeyReader() {
+    }
+
+    @Override
+    public int reset(int startIndex, int skipCount) throws 
HyracksDataException {
+        return 0;
+    }
+
+    @Override
+    public IValueReference getValue(int index) {
+        throw new UnsupportedOperationException(getClass().getName());
+    }
+
+    @Override
+    public void init(AbstractBytesInputStream in, int tupleCount) throws 
IOException {
+        // NoOp
+    }
+
+    @Override
+    public void nextValue() throws HyracksDataException {
+        // NoOp
+    }
+
+    @Override
+    public ATypeTag getTypeTag() {
+        return ATypeTag.MISSING;
+    }
+
+    @Override
+    public int compareTo(AbstractValueReader o) {
+        throw new UnsupportedOperationException(getClass().getName());
+    }
+}

Reply via email to