diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java
index 6c6b2aa..249173a 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java
@@ -149,7 +149,7 @@
                     ARecordType metaItemType = (ARecordType) metadataProvider.findMetaType(dataset);
                     datasetType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(datasetType,
                             metaItemType, dataset);
-                    tupleProjectorFactory = IndexUtil.createTupleProjectorFactory(formatInfo, projectionInfo,
+                    tupleProjectorFactory = IndexUtil.createTupleProjectorFactory(context, formatInfo, projectionInfo,
                             metaProjectionInfo, datasetType, metaItemType, dataset.getPrimaryKeys().size());
                 }
                 break;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpectedSchemaBuilder.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpectedSchemaBuilder.java
index f972677..3f83d1a 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpectedSchemaBuilder.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpectedSchemaBuilder.java
@@ -70,19 +70,20 @@
     }
 
     public DataProjectionFiltrationInfo createProjectionInfo(LogicalVariable recordVariable) {
-        return createProjectionInfo(recordVariable, Collections.emptyMap(), null, null);
+        return createProjectionInfo(recordVariable, Collections.emptyMap(), Collections.emptyMap(), null, null);
     }
 
     public DataProjectionFiltrationInfo createProjectionInfo(LogicalVariable recordVariable,
-            Map<ILogicalExpression, ARecordType> filterPaths, ILogicalExpression filterExpression,
-            Map<String, FunctionCallInformation> sourceInformationMap) {
+            Map<ILogicalExpression, ARecordType> normalizedPaths, Map<ILogicalExpression, ARecordType> actualPaths,
+            ILogicalExpression filterExpression, Map<String, FunctionCallInformation> sourceInformationMap) {
         IExpectedSchemaNode rootNode = varToNode.get(recordVariable);
 
         ExpectedSchemaNodeToIATypeTranslatorVisitor typeBuilder =
                 new ExpectedSchemaNodeToIATypeTranslatorVisitor(sourceInformationMap);
         ARecordType recordType = (ARecordType) rootNode.accept(typeBuilder, null);
 
-        return new DataProjectionFiltrationInfo(recordType, sourceInformationMap, filterPaths, filterExpression);
+        return new DataProjectionFiltrationInfo(recordType, sourceInformationMap, normalizedPaths, actualPaths,
+                filterExpression);
     }
 
     public boolean setSchemaFromExpression(AbstractFunctionCallExpression expr, LogicalVariable producedVar,
@@ -116,13 +117,17 @@
             //It is a root node. Request the entire record
             varToNode.put(variable, RootExpectedSchemaNode.ALL_FIELDS_ROOT_NODE);
         } else {
-            //It is a nested node. Replace the node to a LEAF node
-            node.replaceIfNeeded(ExpectedSchemaNodeType.ANY, parent.getSourceLocation(), parent.getFunctionName());
+            // If it is a nested node, replace it to a LEAF node
+            AnyExpectedSchemaNode leafNode = (AnyExpectedSchemaNode) node.replaceIfNeeded(ExpectedSchemaNodeType.ANY,
+                    parent.getSourceLocation(), parent.getFunctionName());
+            // make the leaf node irreplaceable
+            leafNode.preventReplacing();
+            varToNode.put(variable, leafNode);
         }
     }
 
-    public boolean isVariableRegistered(LogicalVariable recordVar) {
-        return varToNode.containsKey(recordVar);
+    public boolean isVariableRegistered(LogicalVariable variable) {
+        return varToNode.containsKey(variable);
     }
 
     public boolean containsRegisteredDatasets() {
@@ -133,8 +138,11 @@
         return varToNode.get(variable);
     }
 
-    IExpectedSchemaNode getNode(AbstractFunctionCallExpression expr) {
-        return exprToNode.get(expr);
+    IExpectedSchemaNode getNode(ILogicalExpression expr) {
+        if (expr.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
+            return getNode(VariableUtilities.getVariable(expr));
+        }
+        return exprToNode.get((AbstractFunctionCallExpression) expr);
     }
 
     private IExpectedSchemaNode buildNestedNode(ILogicalExpression expr, IVariableTypeEnvironment typeEnv)
@@ -185,8 +193,9 @@
             AbstractFunctionCallExpression myExpr) {
         //Get the associated node with the sourceVar (if any)
         IExpectedSchemaNode oldNode = varToNode.get(sourceVar);
-        if (oldNode == null) {
-            //Variable is not associated with a node. No pushdown is possible
+        if (oldNode == null || !oldNode.allowsReplacing()) {
+            // Variable is not associated with a node. No pushdown is possible
+            // Or its associated node cannot be replaced
             return null;
         }
         //What is the expected type of the variable
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpressionValueAccessPushdownVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpressionValueAccessPushdownVisitor.java
index 8096b04..b71dcb4 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpressionValueAccessPushdownVisitor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpressionValueAccessPushdownVisitor.java
@@ -99,7 +99,7 @@
         }
 
         //Check nested arguments if contains any pushable value access
-        pushValueAccessExpressionArg(funcExpr.getArguments());
+        pushValueAccessExpressionArg(funcExpr.getArguments(), producedVar);
     }
 
     /**
@@ -147,13 +147,14 @@
                 && funcExpr.getArguments().get(0).getValue().getExpressionTag() == LogicalExpressionTag.VARIABLE;
     }
 
-    private void pushValueAccessExpressionArg(List<Mutable<ILogicalExpression>> exprList) throws AlgebricksException {
+    private void pushValueAccessExpressionArg(List<Mutable<ILogicalExpression>> exprList, LogicalVariable producedVar)
+            throws AlgebricksException {
         for (Mutable<ILogicalExpression> exprRef : exprList) {
             /*
              * We need to set the produced variable as null here as the produced variable will not correspond to the
              * nested expression.
              */
-            pushValueAccessExpression(exprRef, null, typeEnv);
+            pushValueAccessExpression(exprRef, producedVar, typeEnv);
         }
     }
 
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpressionValueFilterPushdown.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpressionValueFilterPushdown.java
index 8ca2372..bff8bff 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpressionValueFilterPushdown.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/ExpressionValueFilterPushdown.java
@@ -18,9 +18,10 @@
  */
 package org.apache.asterix.optimizer.rules.pushdown;
 
-import static org.apache.asterix.metadata.utils.ColumnFilterBuilder.COMPARE_FUNCTIONS;
-import static org.apache.asterix.metadata.utils.ColumnFilterBuilder.PUSHABLE_FUNCTIONS;
+import static org.apache.asterix.metadata.utils.filter.NormalizedColumnFilterBuilder.COMPARE_FUNCTIONS;
+import static org.apache.asterix.metadata.utils.filter.NormalizedColumnFilterBuilder.NORMALIZED_PUSHABLE_FUNCTIONS;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -31,8 +32,10 @@
 import org.apache.asterix.common.config.DatasetConfig;
 import org.apache.asterix.metadata.declared.DatasetDataSource;
 import org.apache.asterix.metadata.entities.Dataset;
+import org.apache.asterix.metadata.utils.filter.ColumnFilterBuilder;
 import org.apache.asterix.om.base.IAObject;
 import org.apache.asterix.om.constants.AsterixConstantValue;
+import org.apache.asterix.om.functions.BuiltinFunctions;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.optimizer.rules.pushdown.schema.AnyExpectedSchemaNode;
 import org.apache.asterix.optimizer.rules.pushdown.schema.ColumnFilterPathBuilderVisitor;
@@ -41,40 +44,49 @@
 import org.apache.asterix.runtime.projection.FunctionCallInformation;
 import org.apache.asterix.runtime.projection.ProjectionFiltrationWarningFactoryProvider;
 import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
 import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
-import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
 import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractScanOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
 import org.apache.hyracks.api.exceptions.SourceLocation;
 
 /**
  * Pushdown {@link SelectOperator} condition to the dataset to allow filtering mega leaf nodes.
  * This is currently only allowed for {@link DatasetConfig.DatasetFormat#COLUMN}
- * TODO allow partial filter with AND (e.g., lowercase(stringVal) == "some_text" AND intVal > 10 --push--> intVal > 10 )
  * TODO Filter could prevent REPLICATE (i.e., we can scan a dataset twice due to the fact one scan is filtered and
- * TODO the other is not) or (both have different filters)
+ * TODO the other is not or both have different filters)
  * TODO part of this class could potentially be used for external data dynamic prefixes
  */
 class ExpressionValueFilterPushdown {
     private final ExpectedSchemaBuilder builder;
     private final ColumnFilterPathBuilderVisitor pathBuilder;
-    private final Map<AbstractScanOperator, Map<ILogicalExpression, ARecordType>> datasetFilterPaths;
+    private final Map<AbstractScanOperator, Map<ILogicalExpression, ARecordType>> normalizedFilterPaths;
+    private final Map<AbstractScanOperator, Map<ILogicalExpression, ARecordType>> actualFilterPaths;
     private final Map<AbstractScanOperator, ILogicalExpression> datasetFilterExpression;
     private final Map<AbstractScanOperator, Map<String, FunctionCallInformation>> scanSourceInformationMaps;
     private final Set<AbstractScanOperator> registeredScans;
+    private final HashMap<LogicalVariable, ILogicalExpression> registeredExpressions;
     private final boolean columnFilterEnabled;
 
     ExpressionValueFilterPushdown(ExpectedSchemaBuilder builder, boolean columnFilterEnabled) {
         this.builder = builder;
         pathBuilder = new ColumnFilterPathBuilderVisitor();
-        datasetFilterPaths = new HashMap<>();
+        normalizedFilterPaths = new HashMap<>();
+        actualFilterPaths = new HashMap<>();
         datasetFilterExpression = new HashMap<>();
         scanSourceInformationMaps = new HashMap<>();
         registeredScans = new HashSet<>();
+        registeredExpressions = new HashMap<>();
         this.columnFilterEnabled = columnFilterEnabled;
     }
 
@@ -90,28 +102,68 @@
         }
     }
 
+    public void registerExpression(LogicalVariable producedVar, ILogicalExpression expr) {
+        if (builder.getNode(expr) == null) {
+            // we only register expressions that do not correspond to a schema node
+            registeredExpressions.put(producedVar, expr);
+        }
+    }
+
     /**
      * Try to push the condition down to dataset scan/access
      *
      * @param selectOp the select operator
      */
-    public void addFilterExpression(SelectOperator selectOp, AbstractScanOperator scanOp) {
-        if (datasetFilterPaths.containsKey(scanOp)) {
-            // Most bottom SELECT was applied, other selects should be ignored
-            return;
-        }
-        Map<ILogicalExpression, ARecordType> filterPaths = new HashMap<>();
+    public void addFilterExpression(IOptimizationContext context, SelectOperator selectOp,
+            AbstractScanOperator scanOp) {
+        Map<ILogicalExpression, ARecordType> normalizedPaths = new HashMap<>();
+        Map<ILogicalExpression, ARecordType> actualPaths = new HashMap<>();
         Map<String, FunctionCallInformation> sourceInformationMap = new HashMap<>();
-        Mutable<ILogicalExpression> conditionRef = selectOp.getCondition();
-        if (addPaths(conditionRef, filterPaths, sourceInformationMap)) {
-            datasetFilterPaths.put(scanOp, filterPaths);
-            datasetFilterExpression.put(scanOp, conditionRef.getValue());
+        ILogicalExpression conditionClone = selectOp.getCondition().getValue().cloneExpression();
+        Mutable<ILogicalExpression> conditionRef = new MutableObject<>(conditionClone);
+        if (addPaths(conditionRef, normalizedPaths, actualPaths, sourceInformationMap, true)) {
+            // Normalized paths
+            Map<ILogicalExpression, ARecordType> allNormalizedPaths =
+                    normalizedFilterPaths.computeIfAbsent(scanOp, k -> new HashMap<>());
+            allNormalizedPaths.putAll(normalizedPaths);
+
+            // Actual paths
+            Map<ILogicalExpression, ARecordType> allActualPaths =
+                    actualFilterPaths.computeIfAbsent(scanOp, k -> new HashMap<>());
+            allActualPaths.putAll(actualPaths);
+
+            // OR the previous condition with the current condition (if any)
+            // This might bring more than what's actually satisfies the predicate
+            putExpression(context, scanOp, conditionClone);
             scanSourceInformationMaps.put(scanOp, sourceInformationMap);
         }
     }
 
-    public Map<ILogicalExpression, ARecordType> getFilterPaths(AbstractScanOperator scanOp) {
-        return datasetFilterPaths.getOrDefault(scanOp, Collections.emptyMap());
+    private void putExpression(IOptimizationContext context, AbstractScanOperator scanOp,
+            ILogicalExpression conditionExpr) {
+        ILogicalExpression filterExpr = datasetFilterExpression.get(scanOp);
+        if (filterExpr != null) {
+            AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) filterExpr;
+            if (!BuiltinFunctions.OR.equals(funcExpr.getFunctionIdentifier())) {
+                IFunctionInfo fInfo = context.getMetadataProvider().lookupFunction(AlgebricksBuiltinFunctions.OR);
+                List<Mutable<ILogicalExpression>> args = new ArrayList<>();
+                args.add(new MutableObject<>(filterExpr));
+                funcExpr = new ScalarFunctionCallExpression(fInfo, args);
+                filterExpr = funcExpr;
+            }
+            funcExpr.getArguments().add(new MutableObject<>(conditionExpr));
+        } else {
+            filterExpr = conditionExpr;
+        }
+        datasetFilterExpression.put(scanOp, filterExpr);
+    }
+
+    public Map<ILogicalExpression, ARecordType> getNormalizedFilterPaths(AbstractScanOperator scanOp) {
+        return normalizedFilterPaths.getOrDefault(scanOp, Collections.emptyMap());
+    }
+
+    public Map<ILogicalExpression, ARecordType> getActualFilterPaths(AbstractScanOperator scanOp) {
+        return actualFilterPaths.getOrDefault(scanOp, Collections.emptyMap());
     }
 
     public ILogicalExpression getFilterExpression(AbstractScanOperator scanOp) {
@@ -122,62 +174,89 @@
         return scanSourceInformationMaps.getOrDefault(scanOp, new HashMap<>());
     }
 
-    private boolean addPaths(Mutable<ILogicalExpression> exprRef, Map<ILogicalExpression, ARecordType> filterPaths,
-            Map<String, FunctionCallInformation> sourceInformationMap) {
+    private boolean addPaths(Mutable<ILogicalExpression> exprRef, Map<ILogicalExpression, ARecordType> normalizedPaths,
+            Map<ILogicalExpression, ARecordType> actualPaths, Map<String, FunctionCallInformation> sourceInformationMap,
+            boolean includeNormalized) {
         ILogicalExpression expr = exprRef.getValue();
+        if (expr.getExpressionTag() == LogicalExpressionTag.CONSTANT) {
+            IAObject constantValue = ((AsterixConstantValue) ((ConstantExpression) expr).getValue()).getObject();
+            // Continue if a primitive constant is encountered
+            return !constantValue.getType().getTypeTag().isDerivedType();
+        }
+
+        LogicalVariable variable = VariableUtilities.getVariable(expr);
+        if (variable != null && registeredExpressions.containsKey(variable)) {
+            // Inline the expression
+            ILogicalExpression currentExpr = registeredExpressions.get(variable);
+            exprRef.setValue(currentExpr);
+            return addPaths(exprRef, normalizedPaths, actualPaths, sourceInformationMap, false);
+        }
+
+        IExpectedSchemaNode node = builder.getNode(expr);
+        if (node != null) {
+            return addPath(node, expr, actualPaths);
+        }
+
         if (!isFunctionExpression(expr)) {
             return false;
         }
 
         AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
         FunctionIdentifier fid = ((AbstractFunctionCallExpression) expr).getFunctionIdentifier();
-
-        if (!PUSHABLE_FUNCTIONS.contains(fid)) {
+        if (!ColumnFilterBuilder.isPushable(fid)) {
             return false;
         }
 
+        boolean normalizedIncluded = includeNormalized && NORMALIZED_PUSHABLE_FUNCTIONS.contains(fid);
+
         if (COMPARE_FUNCTIONS.contains(fid)) {
-            return addPaths(funcExpr, filterPaths, sourceInformationMap);
+            return handleCompare(funcExpr, normalizedPaths, actualPaths, sourceInformationMap, normalizedIncluded);
         }
         //AND/OR descend to the expression tree
-        return addPathsForArgs(funcExpr, filterPaths, sourceInformationMap);
+        return handleArgs(funcExpr, normalizedPaths, actualPaths, sourceInformationMap, includeNormalized);
     }
 
-    private boolean addPaths(AbstractFunctionCallExpression funcExpr, Map<ILogicalExpression, ARecordType> filterPaths,
-            Map<String, FunctionCallInformation> sourceInformationMap) {
+    private boolean handleCompare(AbstractFunctionCallExpression funcExpr,
+            Map<ILogicalExpression, ARecordType> normalizedPaths, Map<ILogicalExpression, ARecordType> actualPaths,
+            Map<String, FunctionCallInformation> sourceInformationMap, boolean includeNormalized) {
         List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
 
-        ILogicalExpression left = args.get(0).getValue();
-        ILogicalExpression right = args.get(1).getValue();
+        Mutable<ILogicalExpression> leftRef = args.get(0);
+        Mutable<ILogicalExpression> rightRef = args.get(1);
+
+        ILogicalExpression left = leftRef.getValue();
+        ILogicalExpression right = rightRef.getValue();
 
         if (isConstantExpression(left)) {
-            return addPaths(funcExpr, right, left, filterPaths, sourceInformationMap, true);
+            return handleCompare(funcExpr, rightRef, left, normalizedPaths, actualPaths, sourceInformationMap,
+                    includeNormalized, true);
         } else if (isConstantExpression(right)) {
-            return addPaths(funcExpr, left, right, filterPaths, sourceInformationMap, false);
+            return handleCompare(funcExpr, leftRef, right, normalizedPaths, actualPaths, sourceInformationMap,
+                    includeNormalized, false);
         }
         // No constants, return false
         return false;
     }
 
-    private boolean addPaths(AbstractFunctionCallExpression funcExpr, ILogicalExpression columnExpr,
-            ILogicalExpression constExpr, Map<ILogicalExpression, ARecordType> filterPaths,
-            Map<String, FunctionCallInformation> sourceInformationMap, boolean leftConstant) {
-        IExpectedSchemaNode node;
-        if (isFunctionExpression(columnExpr)) {
-            node = builder.getNode((AbstractFunctionCallExpression) columnExpr);
-        } else {
-            //Variable
-            node = builder.getNode(((VariableReferenceExpression) columnExpr).getVariableReference());
-        }
+    private boolean handleCompare(AbstractFunctionCallExpression funcExpr, Mutable<ILogicalExpression> columnExprRef,
+            ILogicalExpression constExpr, Map<ILogicalExpression, ARecordType> normalizedPaths,
+            Map<ILogicalExpression, ARecordType> actualPaths, Map<String, FunctionCallInformation> sourceInformationMap,
+            boolean includeNormalized, boolean leftConstant) {
 
-        if (node == null || node.getType() != ExpectedSchemaNodeType.ANY) {
-            // Expression cannot be pushed (e.g., $$r.getField("x") + 1) or had been accessed as a nested value
-            // Bail out
+        IAObject constantValue = ((AsterixConstantValue) ((ConstantExpression) constExpr).getValue()).getObject();
+        if (constantValue.getType().getTypeTag().isDerivedType()) {
+            // Cannot compare against nested values
             return false;
         }
 
+        ILogicalExpression columnExpr = columnExprRef.getValue();
+        IExpectedSchemaNode node = builder.getNode(columnExpr);
+        if (node == null || node.getType() != ExpectedSchemaNodeType.ANY) {
+            // Handle as a nested function call (e.g., numeric-add($$x, 1) > 10) where $$x is a value path
+            return addPaths(columnExprRef, normalizedPaths, actualPaths, null, false);
+        }
+
         AnyExpectedSchemaNode leafNode = (AnyExpectedSchemaNode) node;
-        IAObject constantValue = ((AsterixConstantValue) ((ConstantExpression) constExpr).getValue()).getObject();
 
         String functionName = funcExpr.getFunctionIdentifier().getName();
         SourceLocation sourceLocation = funcExpr.getSourceLocation();
@@ -185,17 +264,34 @@
                 ProjectionFiltrationWarningFactoryProvider.getIncomparableTypesFactory(leftConstant));
 
         ARecordType path = pathBuilder.buildPath(leafNode, constantValue, sourceInformationMap, functionCallInfo);
-        filterPaths.put(columnExpr, path);
+        if (includeNormalized
+                && (!normalizedPaths.containsKey(columnExpr) || path.equals(normalizedPaths.get(columnExpr)))) {
+            normalizedPaths.put(columnExpr, path);
+        } else {
+            normalizedPaths.clear();
+        }
+        actualPaths.put(columnExpr, path);
         return true;
     }
 
-    private boolean addPathsForArgs(AbstractFunctionCallExpression funcExpr,
-            Map<ILogicalExpression, ARecordType> filterPaths,
-            Map<String, FunctionCallInformation> sourceInformationMap) {
+    private boolean addPath(IExpectedSchemaNode node, ILogicalExpression columnExpr,
+            Map<ILogicalExpression, ARecordType> actualPaths) {
+        if (node.getType() != ExpectedSchemaNodeType.ANY) {
+            return false;
+        }
+        AnyExpectedSchemaNode leafNode = (AnyExpectedSchemaNode) node;
+        ARecordType path = pathBuilder.buildPath(leafNode, null, null, null);
+        actualPaths.put(columnExpr, path);
+        return true;
+    }
+
+    private boolean handleArgs(AbstractFunctionCallExpression funcExpr,
+            Map<ILogicalExpression, ARecordType> normalizedPaths, Map<ILogicalExpression, ARecordType> actualPaths,
+            Map<String, FunctionCallInformation> sourceInformationMap, boolean includeNormalized) {
         List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
         boolean add = true;
         for (int i = 0; add && i < args.size(); i++) {
-            add = addPaths(args.get(i), filterPaths, sourceInformationMap);
+            add = addPaths(args.get(i), normalizedPaths, actualPaths, sourceInformationMap, includeNormalized);
         }
         return add;
     }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/OperatorValueAccessPushdownVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/OperatorValueAccessPushdownVisitor.java
index 3ab07fd..ae7b919 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/OperatorValueAccessPushdownVisitor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/OperatorValueAccessPushdownVisitor.java
@@ -126,17 +126,18 @@
     public void finish() {
         for (Map.Entry<LogicalVariable, AbstractScanOperator> entry : registeredDatasets.entrySet()) {
             AbstractScanOperator scanOp = entry.getValue();
-            Map<ILogicalExpression, ARecordType> filterPaths = filterPushdown.getFilterPaths(scanOp);
+            Map<ILogicalExpression, ARecordType> normalizedPaths = filterPushdown.getNormalizedFilterPaths(scanOp);
+            Map<ILogicalExpression, ARecordType> actualPaths = filterPushdown.getActualFilterPaths(scanOp);
             ILogicalExpression filterExpression = filterPushdown.getFilterExpression(scanOp);
             Map<String, FunctionCallInformation> sourceInformationMap = filterPushdown.getSourceInformationMap(scanOp);
             if (scanOp.getOperatorTag() == LogicalOperatorTag.DATASOURCESCAN) {
                 DataSourceScanOperator scan = (DataSourceScanOperator) scanOp;
-                scan.setDatasetProjectionInfo(builder.createProjectionInfo(entry.getKey(), filterPaths,
+                scan.setDatasetProjectionInfo(builder.createProjectionInfo(entry.getKey(), normalizedPaths, actualPaths,
                         filterExpression, sourceInformationMap));
             } else {
                 UnnestMapOperator unnest = (UnnestMapOperator) scanOp;
-                unnest.setDatasetProjectionInfo(builder.createProjectionInfo(entry.getKey(), filterPaths,
-                        filterExpression, sourceInformationMap));
+                unnest.setDatasetProjectionInfo(builder.createProjectionInfo(entry.getKey(), normalizedPaths,
+                        actualPaths, filterExpression, sourceInformationMap));
             }
         }
 
@@ -175,7 +176,7 @@
 
         if (filterPushdown.allowsPushdown(lastSeenScan) && op.getOperatorTag() == LogicalOperatorTag.SELECT) {
             //Push filters down
-            filterPushdown.addFilterExpression((SelectOperator) op, lastSeenScan);
+            filterPushdown.addFilterExpression(context, (SelectOperator) op, lastSeenScan);
         }
 
         pushdownVisitor.end();
@@ -233,6 +234,20 @@
         return null;
     }
 
+    @Override
+    public Void visitAssignOperator(AssignOperator op, Void arg) throws AlgebricksException {
+        visitInputs(op, op.getVariables());
+        if (filterPushdown.allowsPushdown(lastSeenScan)) {
+            List<LogicalVariable> variables = op.getVariables();
+            List<Mutable<ILogicalExpression>> exprs = op.getExpressions();
+            for (int i = 0; i < variables.size(); i++) {
+                // Register any potential expression that can be used by the pushed down to filter
+                filterPushdown.registerExpression(variables.get(i), exprs.get(i).getValue());
+            }
+        }
+        return null;
+    }
+
     /*
      * ******************************************************************************
      * Helper methods
@@ -295,7 +310,10 @@
                  * Initially, we will request the entire record.
                  */
                 builder.registerRoot(recordVar, RootExpectedSchemaNode.ALL_FIELDS_ROOT_NODE);
-                filterPushdown.registerDataset(op, datasetDataSource);
+                if (op.getOperatorTag() == LogicalOperatorTag.DATASOURCESCAN) {
+                    // Not needed for secondary indexes
+                    filterPushdown.registerDataset(op, datasetDataSource);
+                }
                 registeredDatasets.put(recordVar, op);
 
                 if (datasetDataSource.hasMeta()) {
@@ -410,12 +428,6 @@
      */
 
     @Override
-    public Void visitAssignOperator(AssignOperator op, Void arg) throws AlgebricksException {
-        visitInputs(op, op.getVariables());
-        return null;
-    }
-
-    @Override
     public Void visitSelectOperator(SelectOperator op, Void arg) throws AlgebricksException {
         visitInputs(op);
         return null;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AbstractComplexExpectedSchemaNode.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AbstractComplexExpectedSchemaNode.java
index 5da5149..7184e1f 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AbstractComplexExpectedSchemaNode.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AbstractComplexExpectedSchemaNode.java
@@ -28,6 +28,11 @@
     }
 
     @Override
+    public boolean allowsReplacing() {
+        return true;
+    }
+
+    @Override
     public IExpectedSchemaNode replaceIfNeeded(ExpectedSchemaNodeType expectedNodeType, SourceLocation sourceLocation,
             String functionName) {
         //If no change is required, return the same node
@@ -42,7 +47,7 @@
              * In this case, we first saw (t.hashtags[*].text), but the next expression (t.hashtags) requested
              * the entire hashtags. So, the expected type for hashtags should be ANY
              */
-            node = new AnyExpectedSchemaNode(getParent(), getSourceLocation(), getFunctionName());
+            node = new AnyExpectedSchemaNode(getParent(), getSourceLocation(), getFunctionName(), false);
             getParent().replaceChild(this, node);
         } else if (expectedNodeType != getType()) {
             /*
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AnyExpectedSchemaNode.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AnyExpectedSchemaNode.java
index 834a405..891d744 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AnyExpectedSchemaNode.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AnyExpectedSchemaNode.java
@@ -21,10 +21,27 @@
 import org.apache.hyracks.api.exceptions.SourceLocation;
 
 public class AnyExpectedSchemaNode extends AbstractExpectedSchemaNode {
+    private boolean replaceable;
 
     public AnyExpectedSchemaNode(AbstractComplexExpectedSchemaNode parent, SourceLocation sourceLocation,
             String functionName) {
         super(parent, sourceLocation, functionName);
+        replaceable = true;
+    }
+
+    protected AnyExpectedSchemaNode(AbstractComplexExpectedSchemaNode parent, SourceLocation sourceLocation,
+            String functionName, boolean replaceable) {
+        super(parent, sourceLocation, functionName);
+        this.replaceable = replaceable;
+    }
+
+    @Override
+    public boolean allowsReplacing() {
+        return replaceable;
+    }
+
+    public void preventReplacing() {
+        replaceable = false;
     }
 
     @Override
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ColumnFilterPathBuilderVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ColumnFilterPathBuilderVisitor.java
index 3f83834..492aea7 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ColumnFilterPathBuilderVisitor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ColumnFilterPathBuilderVisitor.java
@@ -24,6 +24,7 @@
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.om.types.IATypeVisitor;
 import org.apache.asterix.runtime.projection.FunctionCallInformation;
@@ -39,10 +40,13 @@
 
     public ARecordType buildPath(AnyExpectedSchemaNode anyNode, IAObject constant,
             Map<String, FunctionCallInformation> sourceInformationMap, FunctionCallInformation compareFunctionInfo) {
-        this.type = rename(constant.getType());
-        this.sourceInformationMap = sourceInformationMap;
 
-        sourceInformationMap.put(type.getTypeName(), compareFunctionInfo);
+        this.sourceInformationMap = sourceInformationMap;
+        this.type = BuiltinType.ANY;
+        if (sourceInformationMap != null) {
+            this.type = rename(constant.getType());
+            sourceInformationMap.put(type.getTypeName(), compareFunctionInfo);
+        }
         return (ARecordType) anyNode.accept(this, anyNode);
     }
 
@@ -55,20 +59,20 @@
     @Override
     public IAType visit(ObjectExpectedSchemaNode node, IExpectedSchemaNode arg) {
         type = getRecordType(node, type, arg, getTypeName());
-        sourceInformationMap.put(type.getTypeName(), createFunctionCallInformation(arg));
+        putCallInfo(type, arg);
         return node.getParent().accept(this, node);
     }
 
     @Override
     public IAType visit(ArrayExpectedSchemaNode node, IExpectedSchemaNode arg) {
         type = new AOrderedListType(type, getTypeName());
-        sourceInformationMap.put(type.getTypeName(), createFunctionCallInformation(arg));
+        putCallInfo(type, arg);
         return node.getParent().accept(this, node);
     }
 
     @Override
     public IAType visit(UnionExpectedSchemaNode node, IExpectedSchemaNode arg) {
-        sourceInformationMap.put(type.getTypeName(), createFunctionCallInformation(arg));
+        putCallInfo(type, arg);
         return node.getParent().accept(this, arg);
     }
 
@@ -77,6 +81,12 @@
         return node.getParent().accept(this, node);
     }
 
+    private void putCallInfo(IAType type, IExpectedSchemaNode node) {
+        if (sourceInformationMap != null) {
+            sourceInformationMap.put(type.getTypeName(), createFunctionCallInformation(node));
+        }
+    }
+
     private static ARecordType getRecordType(ObjectExpectedSchemaNode objectNode, IAType childType,
             IExpectedSchemaNode childNode, String typeName) {
         String key = objectNode.getChildFieldName(childNode);
@@ -120,6 +130,14 @@
         }
 
         @Override
+        public boolean equals(Object obj) {
+            if (obj instanceof RenamedType) {
+                return originalType.equals(((RenamedType) obj).originalType);
+            }
+            return originalType.equals(obj);
+        }
+
+        @Override
         public int hash() {
             return originalType.hash();
         }
@@ -148,5 +166,10 @@
         public ObjectNode toJSON() {
             return originalType.toJSON();
         }
+
+        @Override
+        public String toString() {
+            return originalType.toString();
+        }
     }
 }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/IExpectedSchemaNode.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/IExpectedSchemaNode.java
index 454e32e..ed0001a 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/IExpectedSchemaNode.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/IExpectedSchemaNode.java
@@ -57,6 +57,11 @@
     <R, T> R accept(IExpectedSchemaNodeVisitor<R, T> visitor, T arg);
 
     /**
+     * @return checks whether a node can be replaced
+     */
+    boolean allowsReplacing();
+
+    /**
      * Replace a node from one type to another
      * Example:
      * - {@link ExpectedSchemaNodeType#ANY} to {@link ExpectedSchemaNodeType#OBJECT}
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.024.query.sqlpp
similarity index 79%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.024.query.sqlpp
index bc1f51c..3c99fea 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.024.query.sqlpp
@@ -16,8 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE test;
+SET `compiler.column.filter` "true";
+
+
+
+SELECT d.a, item
+FROM ColumnDataset d, d.array item
+-- First component has the answer
+WHERE item > 10
+  AND d.a = "1"
+ORDER BY d.id, d.a, item;
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.025.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.025.query.sqlpp
index 69abb37..2df6c8a 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.025.query.sqlpp
@@ -16,12 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-import org.apache.asterix.om.types.ATypeTag;
-
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+USE test;
+SET `compiler.column.filter` "true";
+SET `compiler.parallelism` "0";
+SET `compiler.sort.parallel` "false";
+EXPLAIN
+SELECT d.a, item
+FROM ColumnDataset d, d.array item
+-- First component has the answer
+WHERE item > 10
+  AND d.a = "1"
+ORDER BY d.id, d.a, item;
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.026.query.sqlpp
similarity index 78%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.026.query.sqlpp
index 69abb37..c284cf7 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.026.query.sqlpp
@@ -16,12 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+-- param max-warnings:json=1000
+USE test;
+SET `compiler.column.filter` "true";
 
-import org.apache.asterix.om.types.ATypeTag;
 
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
 
-    ATypeTag getTypeTag();
-}
+SELECT VALUE d
+FROM ColumnDataset d
+-- Should throw a warning (comparing array with bigint)
+WHERE d.array > 10
+ORDER BY d.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/003/003.005.query.sqlpp
similarity index 78%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/003/003.005.query.sqlpp
index 69abb37..12cf536 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/003/003.005.query.sqlpp
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-import org.apache.asterix.om.types.ATypeTag;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+SELECT VALUE item
+FROM ColumnDataset d, d.array item
+-- Should skip reading columns, as the predicate would yield missing
+WHERE item.notAField > 4
+ORDER BY d.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.001.ddl.sqlpp
similarity index 76%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.001.ddl.sqlpp
index 69abb37..ce257e2 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.001.ddl.sqlpp
@@ -16,12 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-import org.apache.asterix.om.types.ATypeTag;
+DROP DATAVERSE TestYelp IF EXISTS;
+CREATE DATAVERSE TestYelp;
+USE TestYelp;
 
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
+CREATE TYPE CheckinType AS {
+    checkin_id: int
+};
 
-    ATypeTag getTypeTag();
-}
+CREATE DATASET YelpCheckin(CheckinType) PRIMARY KEY checkin_id WITH {
+    "storage-format" : {"format" : "column"}
+};
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.002.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.002.update.sqlpp
new file mode 100644
index 0000000..8ee1570
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.002.update.sqlpp
@@ -0,0 +1,302 @@
+/*
+ * 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.
+ */
+
+USE TestYelp;
+
+INSERT INTO YelpCheckin (
+    [
+        {
+            "checkin_id": 1,
+            "business_id": "--1UhMGODdWsrMastO9DZw",
+            "dates": [
+                "2016-04-26 19:49:16",
+                "2016-08-30 18:36:57",
+                "2016-10-15 02:45:18",
+                "2016-11-18 01:54:50",
+                "2017-04-20 18:39:06",
+                "2017-05-03 17:58:02",
+                "2019-03-19 22:04:48"
+            ]
+        },
+        {
+            "checkin_id": 2,
+            "business_id": "--EF5N7P70J_UYBTPypYlA",
+            "dates": [
+                "2018-05-25 19:52:07",
+                "2018-09-18 16:09:44",
+                "2019-10-18 21:29:09"
+            ]
+        },
+        {
+            "checkin_id": 3,
+            "business_id": "--Ni3oJ4VOqfOEu7Sj2Vzg",
+            "dates": [
+                "2019-06-07 17:54:58"
+            ]
+        },
+        {
+            "checkin_id": 4,
+            "business_id": "--Y1Adl1YUWfYIRSd8vkmA",
+            "dates": [
+                "2011-05-03 20:54:05",
+                "2011-08-23 20:49:45",
+                "2014-12-04 06:13:01",
+                "2016-11-16 19:25:55"
+            ]
+        },
+        {
+            "checkin_id": 5,
+            "business_id": "--YPwqIlRJrhHkJcjY3eiA",
+            "dates": [
+                "2016-06-18 21:35:45",
+                "2016-10-15 18:17:51"
+            ]
+        },
+        {
+            "checkin_id": 6,
+            "business_id": "--e8PjCNhEz32pprnPhCwQ",
+            "dates": [
+                "2015-04-02 21:45:17"
+            ]
+        },
+        {
+            "checkin_id": 7,
+            "business_id": "--kinfHwmtdjz03g8B8z8Q",
+            "dates": [
+                "2014-08-27 17:49:18",
+                "2015-12-19 21:30:31",
+                "2018-11-27 15:53:50"
+            ]
+        },
+        {
+            "checkin_id": 8,
+            "business_id": "--q6datkI-f0EoVheXNEeQ",
+            "dates": [
+                "2014-01-28 20:56:04",
+                "2014-11-16 16:11:58",
+                "2015-11-15 19:21:53",
+                "2015-11-15 19:33:39"
+            ]
+        },
+        {
+            "checkin_id": 9,
+            "business_id": "--qvQS4MigHPykD2GV0-zw",
+            "dates": [
+                "2019-04-11 18:30:12"
+            ]
+        },
+        {
+            "checkin_id": 10,
+            "business_id": "--wIGbLEhlpl_UeAIyDmZQ",
+            "dates": [
+                "2015-06-06 20:01:06",
+                "2019-03-14 22:01:52"
+            ]
+        },
+        {
+            "checkin_id": 11,
+            "business_id": "-0FA-Qdi3SPYIoJz9UQw-A",
+            "dates": [
+                "2018-09-29 18:55:17",
+                "2018-10-20 16:48:05",
+                "2018-10-20 22:20:24"
+            ]
+        },
+        {
+            "checkin_id": 12,
+            "business_id": "-0Hj1hb_XW6ybWq2M7QhGA",
+            "dates": [
+                "2011-04-23 21:11:22",
+                "2014-05-04 19:42:48",
+                "2014-05-11 19:16:08",
+                "2014-06-04 19:14:18",
+                "2015-12-05 19:22:42",
+                "2017-05-15 23:19:00"
+            ]
+        },
+        {
+            "checkin_id": 13,
+            "business_id": "-0KMvRFwDWdVBeTpT11iHw",
+            "dates": [
+                "2012-07-13 21:43:57",
+                "2016-12-24 02:27:31",
+                "2017-08-31 00:35:26"
+            ]
+        },
+        {
+            "checkin_id": 14,
+            "business_id": "-0LPtgJC31FWMrMv317p0Q",
+            "dates": [
+                "2013-04-13 12:35:33",
+                "2013-08-19 23:35:49",
+                "2013-10-04 19:14:56"
+            ]
+        },
+        {
+            "checkin_id": 15,
+            "business_id": "-0M3o2uWBnQZwd3hmfEwuw",
+            "dates": [
+                "2016-09-10 19:26:19",
+                "2018-09-08 14:15:37",
+                "2019-09-13 22:47:25"
+            ]
+        },
+        {
+            "checkin_id": 16,
+            "business_id": "-0RRiWDtfnS16AKCtfvBZg",
+            "dates": [
+                "2017-05-19 14:30:16",
+                "2017-05-19 14:30:25",
+                "2017-08-28 15:49:37",
+                "2017-09-20 20:19:51",
+                "2017-10-01 16:31:05",
+                "2017-10-01 16:56:27",
+                "2017-12-27 23:33:20"
+            ]
+        },
+        {
+            "checkin_id": 17,
+            "business_id": "-0Soj75v-XoRcf2ERr8Bmg",
+            "dates": [
+                "2019-06-05 18:22:49"
+            ]
+        },
+        {
+            "checkin_id": 18,
+            "business_id": "-0ZumLlFjMh4ZW1z2nXGug",
+            "dates": [
+                "2011-09-24 21:37:32",
+                "2014-03-10 20:20:07",
+                "2015-05-27 00:40:24",
+                "2015-08-29 17:58:15",
+                "2018-03-16 15:03:26"
+            ]
+        },
+        {
+            "checkin_id": 19,
+            "business_id": "-0aOudcaAyac0VJbMX-L1g",
+            "dates": [
+                "2015-03-16 23:51:16",
+                "2015-12-21 04:48:01",
+                "2016-10-28 20:22:42",
+                "2016-10-28 20:23:00"
+            ]
+        },
+        {
+            "checkin_id": 20,
+            "business_id": "-0b86isaXMY0v4g-V8GZ9Q",
+            "dates": [
+                "2013-10-22 16:49:21",
+                "2014-11-21 17:39:24"
+            ]
+        },
+        {
+            "checkin_id": 21,
+            "business_id": "-0d-BfFSU0bwLcnMaGRxYw",
+            "dates": [
+                "2014-08-07 18:30:48",
+                "2014-09-16 20:41:45",
+                "2014-10-12 23:22:27",
+                "2015-07-21 20:43:56",
+                "2015-07-21 20:45:07"
+            ]
+        },
+        {
+            "checkin_id": 22,
+            "business_id": "-0jz6c3C6i7RG7Ag22K-Pg",
+            "dates": [
+                "2015-05-02 19:49:05",
+                "2015-05-06 03:52:18",
+                "2015-09-26 01:13:19"
+            ]
+        },
+        {
+            "checkin_id": 23,
+            "business_id": "-0y3MZU2oYP8r1ruDP1bfQ",
+            "dates": [
+                "2015-04-11 13:14:14",
+                "2015-11-21 16:05:56",
+                "2016-05-06 14:10:04",
+                "2017-08-09 15:15:10",
+                "2017-10-21 15:12:56"
+            ]
+        },
+        {
+            "checkin_id": 24,
+            "business_id": "-1BPe8UjF2_l3nVk-DFUjA",
+            "dates": [
+                "2015-12-03 18:44:00",
+                "2016-03-17 18:19:21",
+                "2016-11-02 15:58:38"
+            ]
+        },
+        {
+            "checkin_id": 25,
+            "business_id": "-1E2CQu_38mkghvmZgCCRw",
+            "dates": []
+        },
+        {
+            "checkin_id": 26,
+            "business_id": "-1wzk43IZ5D9Ysu6kzb5xA",
+            "dates": []
+        },
+        {
+            "checkin_id": 27,
+            "business_id": "-23R9P2eG7VTc6DVLjFKzA",
+            "dates": [
+                "2011-12-21 19:02:51",
+                "2012-04-15 04:21:39",
+                "2012-04-15 14:23:56",
+                "2013-06-30 22:39:51",
+                "2013-10-04 20:34:13",
+                "2014-07-16 02:28:40"
+            ]
+        },
+        {
+            "checkin_id": 28,
+            "business_id": "-26MGfikhJiTfCI-GqmzhQ",
+            "dates": [
+                "2018-06-13 20:16:07"
+            ]
+        },
+        {
+            "checkin_id": 29,
+            "business_id": "-2bLuJsMZ0WhI9daurVQNQ",
+            "dates": [
+                "2015-05-29 16:46:17",
+                "2015-06-01 15:03:53"
+            ]
+        },
+        {
+            "checkin_id": 30,
+            "business_id": "-2hDBMaza_ldqnZdiU06LQ",
+            "dates": [
+                "2011-10-08 12:02:23",
+                "2014-08-18 02:11:11",
+                "2016-01-07 05:27:51",
+                "2016-10-21 20:15:55",
+                "2016-12-01 03:57:10",
+                "2016-12-29 01:54:42",
+                "2018-07-22 19:55:31",
+                "2018-09-07 01:42:54",
+                "2019-03-08 03:41:06"
+            ]
+        }
+    ]
+);
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.003.get.http
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.003.get.http
index bc1f51c..a55ce93 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.003.get.http
@@ -16,8 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+/connector?dataverseName=TestYelp&datasetName=YelpCheckin
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.004.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.004.query.sqlpp
index bc1f51c..14482f6 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.004.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D > " ";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.005.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.005.query.sqlpp
index bc1f51c..070ed6c 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.005.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D > " ";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.006.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.006.query.sqlpp
index bc1f51c..6caaf79 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.006.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE TestYelp;
+SET `compiler.column.filter` "true";
+EXPLAIN
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D > " ";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.007.update.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.007.update.sqlpp
index bc1f51c..ea1dba3 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.007.update.sqlpp
@@ -16,8 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE TestYelp;
+
+DELETE FROM YelpCheckin C
+WHERE C.business_id != "--1UhMGODdWsrMastO9DZw";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.008.get.http
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.008.get.http
index bc1f51c..a55ce93 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.008.get.http
@@ -16,8 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+/connector?dataverseName=TestYelp&datasetName=YelpCheckin
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.009.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.009.query.sqlpp
index bc1f51c..14482f6 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.009.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D > " ";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.010.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.010.query.sqlpp
index bc1f51c..070ed6c 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.010.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D > " ";
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.011.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.011.update.sqlpp
new file mode 100644
index 0000000..3d60aa4
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.011.update.sqlpp
@@ -0,0 +1,306 @@
+/*
+ * 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.
+ */
+
+USE TestYelp;
+
+UPSERT INTO YelpCheckin (
+    [
+        {
+            "checkin_id": 1,
+            "business_id": "--1UhMGODdWsrMastO9DZw",
+            "dates": [
+                "2020-04-26 19:49:16",
+                "2020-08-30 18:36:57",
+                "2020-10-15 02:45:18",
+                "2020-11-18 01:54:50",
+                "2021-04-20 18:39:06",
+                "2021-05-03 17:58:02",
+                "2022-03-19 22:04:48"
+            ]
+        },
+        {
+            "checkin_id": 2,
+            "business_id": "--EF5N7P70J_UYBTPypYlA",
+            "dates": [
+                "2018-05-25 19:52:07",
+                "2018-09-18 16:09:44",
+                "2019-10-18 21:29:09"
+            ]
+        },
+        {
+            "checkin_id": 3,
+            "business_id": "--Ni3oJ4VOqfOEu7Sj2Vzg",
+            "dates": [
+                "2019-06-07 17:54:58"
+            ]
+        },
+        {
+            "checkin_id": 4,
+            "business_id": "--Y1Adl1YUWfYIRSd8vkmA",
+            "dates": [
+                "2011-05-03 20:54:05",
+                "2011-08-23 20:49:45",
+                "2014-12-04 06:13:01",
+                "2016-11-16 19:25:55"
+            ]
+        },
+        {
+            "checkin_id": 5,
+            "business_id": "--YPwqIlRJrhHkJcjY3eiA",
+            "dates": [
+                "2016-06-18 21:35:45",
+                "2016-10-15 18:17:51"
+            ]
+        },
+        {
+            "checkin_id": 6,
+            "business_id": "--e8PjCNhEz32pprnPhCwQ",
+            "dates": [
+                "2015-04-02 21:45:17"
+            ]
+        },
+        {
+            "checkin_id": 7,
+            "business_id": "--kinfHwmtdjz03g8B8z8Q",
+            "dates": [
+                "2014-08-27 17:49:18",
+                "2015-12-19 21:30:31",
+                "2018-11-27 15:53:50"
+            ]
+        },
+        {
+            "checkin_id": 8,
+            "business_id": "--q6datkI-f0EoVheXNEeQ",
+            "dates": [
+                "2014-01-28 20:56:04",
+                "2014-11-16 16:11:58",
+                "2015-11-15 19:21:53",
+                "2015-11-15 19:33:39"
+            ]
+        },
+        {
+            "checkin_id": 9,
+            "business_id": "--qvQS4MigHPykD2GV0-zw",
+            "dates": [
+                "2019-04-11 18:30:12"
+            ]
+        },
+        {
+            "checkin_id": 10,
+            "business_id": "--wIGbLEhlpl_UeAIyDmZQ",
+            "dates": [
+                "2015-06-06 20:01:06",
+                "2019-03-14 22:01:52"
+            ]
+        },
+        {
+            "checkin_id": 11,
+            "business_id": "-0FA-Qdi3SPYIoJz9UQw-A",
+            "dates": [
+                "2018-09-29 18:55:17",
+                "2018-10-20 16:48:05",
+                "2018-10-20 22:20:24"
+            ]
+        },
+        {
+            "checkin_id": 12,
+            "business_id": "-0Hj1hb_XW6ybWq2M7QhGA",
+            "dates": [
+                "2011-04-23 21:11:22",
+                "2014-05-04 19:42:48",
+                "2014-05-11 19:16:08",
+                "2014-06-04 19:14:18",
+                "2015-12-05 19:22:42",
+                "2017-05-15 23:19:00"
+            ]
+        },
+        {
+            "checkin_id": 13,
+            "business_id": "-0KMvRFwDWdVBeTpT11iHw",
+            "dates": [
+                "2012-07-13 21:43:57",
+                "2016-12-24 02:27:31",
+                "2017-08-31 00:35:26"
+            ]
+        },
+        {
+            "checkin_id": 14,
+            "business_id": "-0LPtgJC31FWMrMv317p0Q",
+            "dates": [
+                "2013-04-13 12:35:33",
+                "2013-08-19 23:35:49",
+                "2013-10-04 19:14:56"
+            ]
+        },
+        {
+            "checkin_id": 15,
+            "business_id": "-0M3o2uWBnQZwd3hmfEwuw",
+            "dates": [
+                "2016-09-10 19:26:19",
+                "2018-09-08 14:15:37",
+                "2019-09-13 22:47:25"
+            ]
+        },
+        {
+            "checkin_id": 16,
+            "business_id": "-0RRiWDtfnS16AKCtfvBZg",
+            "dates": [
+                "2017-05-19 14:30:16",
+                "2017-05-19 14:30:25",
+                "2017-08-28 15:49:37",
+                "2017-09-20 20:19:51",
+                "2017-10-01 16:31:05",
+                "2017-10-01 16:56:27",
+                "2017-12-27 23:33:20"
+            ]
+        },
+        {
+            "checkin_id": 17,
+            "business_id": "-0Soj75v-XoRcf2ERr8Bmg",
+            "dates": [
+                "2019-06-05 18:22:49"
+            ]
+        },
+        {
+            "checkin_id": 18,
+            "business_id": "-0ZumLlFjMh4ZW1z2nXGug",
+            "dates": [
+                "2011-09-24 21:37:32",
+                "2014-03-10 20:20:07",
+                "2015-05-27 00:40:24",
+                "2015-08-29 17:58:15",
+                "2018-03-16 15:03:26"
+            ]
+        },
+        {
+            "checkin_id": 19,
+            "business_id": "-0aOudcaAyac0VJbMX-L1g",
+            "dates": [
+                "2015-03-16 23:51:16",
+                "2015-12-21 04:48:01",
+                "2016-10-28 20:22:42",
+                "2016-10-28 20:23:00"
+            ]
+        },
+        {
+            "checkin_id": 20,
+            "business_id": "-0b86isaXMY0v4g-V8GZ9Q",
+            "dates": [
+                "2013-10-22 16:49:21",
+                "2014-11-21 17:39:24"
+            ]
+        },
+        {
+            "checkin_id": 21,
+            "business_id": "-0d-BfFSU0bwLcnMaGRxYw",
+            "dates": [
+                "2014-08-07 18:30:48",
+                "2014-09-16 20:41:45",
+                "2014-10-12 23:22:27",
+                "2015-07-21 20:43:56",
+                "2015-07-21 20:45:07"
+            ]
+        },
+        {
+            "checkin_id": 22,
+            "business_id": "-0jz6c3C6i7RG7Ag22K-Pg",
+            "dates": [
+                "2015-05-02 19:49:05",
+                "2015-05-06 03:52:18",
+                "2015-09-26 01:13:19"
+            ]
+        },
+        {
+            "checkin_id": 23,
+            "business_id": "-0y3MZU2oYP8r1ruDP1bfQ",
+            "dates": [
+                "2015-04-11 13:14:14",
+                "2015-11-21 16:05:56",
+                "2016-05-06 14:10:04",
+                "2017-08-09 15:15:10",
+                "2017-10-21 15:12:56"
+            ]
+        },
+        {
+            "checkin_id": 24,
+            "business_id": "-1BPe8UjF2_l3nVk-DFUjA",
+            "dates": [
+                "2015-12-03 18:44:00",
+                "2016-03-17 18:19:21",
+                "2016-11-02 15:58:38"
+            ]
+        },
+        {
+            "checkin_id": 25,
+            "business_id": "-1E2CQu_38mkghvmZgCCRw",
+            "dates": [
+                "2019-04-04 22:02:37"
+            ]
+        },
+        {
+            "checkin_id": 26,
+            "business_id": "-1wzk43IZ5D9Ysu6kzb5xA",
+            "dates": [
+                "2019-02-27 14:03:08"
+            ]
+        },
+        {
+            "checkin_id": 27,
+            "business_id": "-23R9P2eG7VTc6DVLjFKzA",
+            "dates": [
+                "2011-12-21 19:02:51",
+                "2012-04-15 04:21:39",
+                "2012-04-15 14:23:56",
+                "2013-06-30 22:39:51",
+                "2013-10-04 20:34:13",
+                "2014-07-16 02:28:40"
+            ]
+        },
+        {
+            "checkin_id": 28,
+            "business_id": "-26MGfikhJiTfCI-GqmzhQ",
+            "dates": [
+                "2018-06-13 20:16:07"
+            ]
+        },
+        {
+            "checkin_id": 29,
+            "business_id": "-2bLuJsMZ0WhI9daurVQNQ",
+            "dates": [
+                "2015-05-29 16:46:17",
+                "2015-06-01 15:03:53"
+            ]
+        },
+        {
+            "checkin_id": 30,
+            "business_id": "-2hDBMaza_ldqnZdiU06LQ",
+            "dates": [
+                "2011-10-08 12:02:23",
+                "2014-08-18 02:11:11",
+                "2016-01-07 05:27:51",
+                "2016-10-21 20:15:55",
+                "2016-12-01 03:57:10",
+                "2016-12-29 01:54:42",
+                "2018-07-22 19:55:31",
+                "2018-09-07 01:42:54",
+                "2019-03-08 03:41:06"
+            ]
+        }
+    ]
+);
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.012.get.http
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.012.get.http
index bc1f51c..a55ce93 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.012.get.http
@@ -16,8 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+/connector?dataverseName=TestYelp&datasetName=YelpCheckin
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.013.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.013.query.sqlpp
index bc1f51c..14482f6 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.013.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D > " ";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.014.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.014.query.sqlpp
index bc1f51c..070ed6c 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.014.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D > " ";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.100.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.100.query.sqlpp
index bc1f51c..07bf9df 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.100.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE substring(D, 0, 4) = "2011";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.101.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.101.query.sqlpp
index bc1f51c..90f7854 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.101.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE substring(D, 0, 4) = "2011";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.102.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.102.query.sqlpp
index bc1f51c..ebfdeda 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.102.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE TestYelp;
+SET `compiler.column.filter` "true";
+EXPLAIN
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE substring(D, 0, 4) = "2011";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.103.query.sqlpp
similarity index 82%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.103.query.sqlpp
index bc1f51c..e52c13b 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.103.query.sqlpp
@@ -16,8 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE substring(D, 0, 4) = "2011"
+   OR substring(D, 0, 4) = "2016";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.104.query.sqlpp
similarity index 79%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.104.query.sqlpp
index bc1f51c..b064c42 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.104.query.sqlpp
@@ -16,8 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE substring(D, 0, 4) = "2011"
+   OR substring(D, 0, 4) = "2016";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.105.query.sqlpp
similarity index 78%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.105.query.sqlpp
index 69abb37..71cabb2 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.105.query.sqlpp
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-import org.apache.asterix.om.types.ATypeTag;
-
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
+SET `compiler.column.filter` "true";
+EXPLAIN
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE substring(D, 0, 4) = "2011"
+   OR substring(D, 0, 4) = "2016";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.106.query.sqlpp
similarity index 78%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.106.query.sqlpp
index 69abb37..403a4f1 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.106.query.sqlpp
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
 
-import org.apache.asterix.om.types.ATypeTag;
 
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C
+WHERE (SOME D in C.dates SATISFIES substring(D, 0, 4) = "2011"
+                                OR substring(D, 0, 4) = "2016");
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.107.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.107.query.sqlpp
index 69abb37..42d7d1f 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.107.query.sqlpp
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
+SET `compiler.column.filter` "true";
 
-import org.apache.asterix.om.types.ATypeTag;
-
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C
+WHERE (SOME D in C.dates SATISFIES substring(D, 0, 4) = "2011"
+                                OR substring(D, 0, 4) = "2016");
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.108.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.108.query.sqlpp
index 69abb37..997eb66 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.108.query.sqlpp
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-import org.apache.asterix.om.types.ATypeTag;
-
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
+SET `compiler.column.filter` "true";
+EXPLAIN
+SELECT COUNT(*)
+FROM YelpCheckin C
+WHERE (SOME D in C.dates SATISFIES substring(D, 0, 4) = "2011"
+                                OR substring(D, 0, 4) = "2016");
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.109.query.sqlpp
similarity index 78%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.109.query.sqlpp
index 69abb37..a5c903c 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.109.query.sqlpp
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
 
-import org.apache.asterix.om.types.ATypeTag;
 
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C
+WHERE (SOME D in C.dates SATISFIES D = "2011-01-01 00:00:00"
+                                OR D = "2016-01-01 00:00:00");
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.110.query.sqlpp
similarity index 66%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.110.query.sqlpp
index 62abb92..8622de1 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.110.query.sqlpp
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
+SET `compiler.column.filter` "true";
 
-import java.io.Serializable;
-
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-@FunctionalInterface
-public interface IColumnFilterEvaluatorFactory extends Serializable {
-    IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
-}
+SELECT COUNT(*)
+FROM YelpCheckin C
+-- This should pass the normalized filter, but not the actual filter
+-- the log should show: "Filtered 1 disk mega-leaf nodes out of 1 in total"
+WHERE (SOME D in C.dates SATISFIES D = "2011-01-01 00:00:00"
+                                OR D = "2016-01-01 00:00:00");
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.111.query.sqlpp
similarity index 79%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.111.query.sqlpp
index bc1f51c..6c20890 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.111.query.sqlpp
@@ -16,8 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE starts_with(C.business_id, "-0")
+  AND (substring(D, 0, 4) = "2011"
+    OR substring(D, 0, 4) = "2016");
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.112.query.sqlpp
similarity index 76%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.112.query.sqlpp
index 69abb37..085e295 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.112.query.sqlpp
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
+SET `compiler.column.filter` "true";
 
-import org.apache.asterix.om.types.ATypeTag;
-
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE starts_with(C.business_id, "-0")
+  AND (substring(D, 0, 4) = "2011"
+    OR substring(D, 0, 4) = "2016");
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.113.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.113.query.sqlpp
index 69abb37..024c065 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/004/004.113.query.sqlpp
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-import org.apache.asterix.om.types.ATypeTag;
-
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
+SET `compiler.column.filter` "true";
+EXPLAIN
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE starts_with(C.business_id, "-0")
+  AND (substring(D, 0, 4) = "2011"
+    OR substring(D, 0, 4) = "2016");
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.001.ddl.sqlpp
similarity index 76%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.001.ddl.sqlpp
index 69abb37..ce257e2 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.001.ddl.sqlpp
@@ -16,12 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-import org.apache.asterix.om.types.ATypeTag;
+DROP DATAVERSE TestYelp IF EXISTS;
+CREATE DATAVERSE TestYelp;
+USE TestYelp;
 
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
+CREATE TYPE CheckinType AS {
+    checkin_id: int
+};
 
-    ATypeTag getTypeTag();
-}
+CREATE DATASET YelpCheckin(CheckinType) PRIMARY KEY checkin_id WITH {
+    "storage-format" : {"format" : "column"}
+};
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.002.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.002.update.sqlpp
new file mode 100644
index 0000000..533e69d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.002.update.sqlpp
@@ -0,0 +1,302 @@
+/*
+ * 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.
+ */
+
+USE TestYelp;
+
+INSERT INTO YelpCheckin (
+    [
+        {
+            "checkin_id": 1,
+            "business_id": "--1UhMGODdWsrMastO9DZw",
+            "dates": [
+                2011,
+                2012,
+                2013,
+                2013,
+                2014,
+                2020,
+                2022
+            ]
+        },
+        {
+            "checkin_id": 2,
+            "business_id": "--EF5N7P70J_UYBTPypYlA",
+            "dates": [
+                "2018-05-25 19:52:07",
+                "2018-09-18 16:09:44",
+                "2019-10-18 21:29:09"
+            ]
+        },
+        {
+            "checkin_id": 3,
+            "business_id": "--Ni3oJ4VOqfOEu7Sj2Vzg",
+            "dates": [
+                "2019-06-07 17:54:58"
+            ]
+        },
+        {
+            "checkin_id": 4,
+            "business_id": "--Y1Adl1YUWfYIRSd8vkmA",
+            "dates": [
+                "2011-05-03 20:54:05",
+                "2011-08-23 20:49:45",
+                "2014-12-04 06:13:01",
+                "2016-11-16 19:25:55"
+            ]
+        },
+        {
+            "checkin_id": 5,
+            "business_id": "--YPwqIlRJrhHkJcjY3eiA",
+            "dates": [
+                "2016-06-18 21:35:45",
+                "2016-10-15 18:17:51"
+            ]
+        },
+        {
+            "checkin_id": 6,
+            "business_id": "--e8PjCNhEz32pprnPhCwQ",
+            "dates": [
+                "2015-04-02 21:45:17"
+            ]
+        },
+        {
+            "checkin_id": 7,
+            "business_id": "--kinfHwmtdjz03g8B8z8Q",
+            "dates": [
+                "2014-08-27 17:49:18",
+                "2015-12-19 21:30:31",
+                "2018-11-27 15:53:50"
+            ]
+        },
+        {
+            "checkin_id": 8,
+            "business_id": "--q6datkI-f0EoVheXNEeQ",
+            "dates": [
+                "2014-01-28 20:56:04",
+                "2014-11-16 16:11:58",
+                "2015-11-15 19:21:53",
+                "2015-11-15 19:33:39"
+            ]
+        },
+        {
+            "checkin_id": 9,
+            "business_id": "--qvQS4MigHPykD2GV0-zw",
+            "dates": [
+                "2019-04-11 18:30:12"
+            ]
+        },
+        {
+            "checkin_id": 10,
+            "business_id": "--wIGbLEhlpl_UeAIyDmZQ",
+            "dates": [
+                "2015-06-06 20:01:06",
+                "2019-03-14 22:01:52"
+            ]
+        },
+        {
+            "checkin_id": 11,
+            "business_id": "-0FA-Qdi3SPYIoJz9UQw-A",
+            "dates": [
+                "2018-09-29 18:55:17",
+                "2018-10-20 16:48:05",
+                "2018-10-20 22:20:24"
+            ]
+        },
+        {
+            "checkin_id": 12,
+            "business_id": "-0Hj1hb_XW6ybWq2M7QhGA",
+            "dates": [
+                "2011-04-23 21:11:22",
+                "2014-05-04 19:42:48",
+                "2014-05-11 19:16:08",
+                "2014-06-04 19:14:18",
+                "2015-12-05 19:22:42",
+                "2017-05-15 23:19:00"
+            ]
+        },
+        {
+            "checkin_id": 13,
+            "business_id": "-0KMvRFwDWdVBeTpT11iHw",
+            "dates": [
+                "2012-07-13 21:43:57",
+                "2016-12-24 02:27:31",
+                "2017-08-31 00:35:26"
+            ]
+        },
+        {
+            "checkin_id": 14,
+            "business_id": "-0LPtgJC31FWMrMv317p0Q",
+            "dates": [
+                "2013-04-13 12:35:33",
+                "2013-08-19 23:35:49",
+                "2013-10-04 19:14:56"
+            ]
+        },
+        {
+            "checkin_id": 15,
+            "business_id": "-0M3o2uWBnQZwd3hmfEwuw",
+            "dates": [
+                "2016-09-10 19:26:19",
+                "2018-09-08 14:15:37",
+                "2019-09-13 22:47:25"
+            ]
+        },
+        {
+            "checkin_id": 16,
+            "business_id": "-0RRiWDtfnS16AKCtfvBZg",
+            "dates": [
+                "2017-05-19 14:30:16",
+                "2017-05-19 14:30:25",
+                "2017-08-28 15:49:37",
+                "2017-09-20 20:19:51",
+                "2017-10-01 16:31:05",
+                "2017-10-01 16:56:27",
+                "2017-12-27 23:33:20"
+            ]
+        },
+        {
+            "checkin_id": 17,
+            "business_id": "-0Soj75v-XoRcf2ERr8Bmg",
+            "dates": [
+                "2019-06-05 18:22:49"
+            ]
+        },
+        {
+            "checkin_id": 18,
+            "business_id": "-0ZumLlFjMh4ZW1z2nXGug",
+            "dates": [
+                "2011-09-24 21:37:32",
+                "2014-03-10 20:20:07",
+                "2015-05-27 00:40:24",
+                "2015-08-29 17:58:15",
+                "2018-03-16 15:03:26"
+            ]
+        },
+        {
+            "checkin_id": 19,
+            "business_id": "-0aOudcaAyac0VJbMX-L1g",
+            "dates": [
+                "2015-03-16 23:51:16",
+                "2015-12-21 04:48:01",
+                "2016-10-28 20:22:42",
+                "2016-10-28 20:23:00"
+            ]
+        },
+        {
+            "checkin_id": 20,
+            "business_id": "-0b86isaXMY0v4g-V8GZ9Q",
+            "dates": [
+                "2013-10-22 16:49:21",
+                "2014-11-21 17:39:24"
+            ]
+        },
+        {
+            "checkin_id": 21,
+            "business_id": "-0d-BfFSU0bwLcnMaGRxYw",
+            "dates": [
+                "2014-08-07 18:30:48",
+                "2014-09-16 20:41:45",
+                "2014-10-12 23:22:27",
+                "2015-07-21 20:43:56",
+                "2015-07-21 20:45:07"
+            ]
+        },
+        {
+            "checkin_id": 22,
+            "business_id": "-0jz6c3C6i7RG7Ag22K-Pg",
+            "dates": [
+                "2015-05-02 19:49:05",
+                "2015-05-06 03:52:18",
+                "2015-09-26 01:13:19"
+            ]
+        },
+        {
+            "checkin_id": 23,
+            "business_id": "-0y3MZU2oYP8r1ruDP1bfQ",
+            "dates": [
+                "2015-04-11 13:14:14",
+                "2015-11-21 16:05:56",
+                "2016-05-06 14:10:04",
+                "2017-08-09 15:15:10",
+                "2017-10-21 15:12:56"
+            ]
+        },
+        {
+            "checkin_id": 24,
+            "business_id": "-1BPe8UjF2_l3nVk-DFUjA",
+            "dates": [
+                "2015-12-03 18:44:00",
+                "2016-03-17 18:19:21",
+                "2016-11-02 15:58:38"
+            ]
+        },
+        {
+            "checkin_id": 25,
+            "business_id": "-1E2CQu_38mkghvmZgCCRw",
+            "dates": []
+        },
+        {
+            "checkin_id": 26,
+            "business_id": "-1wzk43IZ5D9Ysu6kzb5xA",
+            "dates": []
+        },
+        {
+            "checkin_id": 27,
+            "business_id": "-23R9P2eG7VTc6DVLjFKzA",
+            "dates": [
+                "2011-12-21 19:02:51",
+                "2012-04-15 04:21:39",
+                "2012-04-15 14:23:56",
+                "2013-06-30 22:39:51",
+                "2013-10-04 20:34:13",
+                "2014-07-16 02:28:40"
+            ]
+        },
+        {
+            "checkin_id": 28,
+            "business_id": "-26MGfikhJiTfCI-GqmzhQ",
+            "dates": [
+                "2018-06-13 20:16:07"
+            ]
+        },
+        {
+            "checkin_id": 29,
+            "business_id": "-2bLuJsMZ0WhI9daurVQNQ",
+            "dates": [
+                "2015-05-29 16:46:17",
+                "2015-06-01 15:03:53"
+            ]
+        },
+        {
+            "checkin_id": 30,
+            "business_id": "-2hDBMaza_ldqnZdiU06LQ",
+            "dates": [
+                "2011-10-08 12:02:23",
+                "2014-08-18 02:11:11",
+                "2016-01-07 05:27:51",
+                "2016-10-21 20:15:55",
+                "2016-12-01 03:57:10",
+                "2016-12-29 01:54:42",
+                "2018-07-22 19:55:31",
+                "2018-09-07 01:42:54",
+                "2019-03-08 03:41:06"
+            ]
+        }
+    ]
+);
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.003.get.http
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.003.get.http
index bc1f51c..a55ce93 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.003.get.http
@@ -16,8 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+/connector?dataverseName=TestYelp&datasetName=YelpCheckin
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.004.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.004.query.sqlpp
index bc1f51c..896ecc7 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.004.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D > 2019;
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.005.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.005.query.sqlpp
index bc1f51c..4cb8257 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.005.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D > 2019;
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.006.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.006.query.sqlpp
index bc1f51c..3452d22 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.006.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D + 1 > 2018;
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.007.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.007.query.sqlpp
index bc1f51c..cb8854d 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.007.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D + 1 > 2018;
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.008.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.008.query.sqlpp
index bc1f51c..721dfb9 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.008.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE TestYelp;
+SET `compiler.column.filter` "true";
+EXPLAIN
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D + 1 > 2018;
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.009.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.009.query.sqlpp
index bc1f51c..97ff3f5 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.009.query.sqlpp
@@ -16,8 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D + 1 > 2018
+   OR substring(D, 0, 4) = "2011";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.010.query.sqlpp
similarity index 80%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.010.query.sqlpp
index bc1f51c..6794433 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.010.query.sqlpp
@@ -16,8 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D + 1 > 2018
+   OR substring(D, 0, 4) = "2011";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.011.query.sqlpp
similarity index 79%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.011.query.sqlpp
index bc1f51c..a3757b2 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/005/005.011.query.sqlpp
@@ -16,8 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE TestYelp;
+SET `rewrite_or_as_join` "false";
+SET `compiler.column.filter` "true";
+EXPLAIN
+SELECT COUNT(*)
+FROM YelpCheckin C, C.dates D
+WHERE D + 1 > 2018
+   OR substring(D, 0, 4) = "2011";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.001.ddl.sqlpp
similarity index 78%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.001.ddl.sqlpp
index 69abb37..06d2d97 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.001.ddl.sqlpp
@@ -16,12 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-import org.apache.asterix.om.types.ATypeTag;
+DROP DATAVERSE test if exists;
+CREATE DATAVERSE test;
+USE test;
 
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
+CREATE TYPE ColumnType AS {
+    id: int
+};
 
-    ATypeTag getTypeTag();
-}
+CREATE DATASET ColumnDataset(ColumnType)
+PRIMARY KEY id WITH {
+    "storage-format": {"format" : "column"}
+};
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.002.update.sqlpp
similarity index 60%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.002.update.sqlpp
index 62abb92..20d76d3 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.002.update.sqlpp
@@ -16,13 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-import java.io.Serializable;
+USE test;
 
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-@FunctionalInterface
-public interface IColumnFilterEvaluatorFactory extends Serializable {
-    IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
-}
+INSERT INTO ColumnDataset (
+    {"id": 1, "geo" : {"coordinates": [{"lon": 1}]}},
+    {"id": 2, "geo" : {"coordinates": [{"lon": 2}]}},
+    {"id": 3, "geo" : {"coordinates": [{"lon": 3}]}},
+    {"id": 4, "geo" : {"coordinates": [{"lon": 4}]}},
+    {"id": 5, "geo" : {"coordinates": [{"lon": [5.1], "lat": 1}]}},
+    {"id": 6, "geo" : {"coordinates": [{"lon": [6], "lat": 2}]}},
+    {"id": 7, "geo" : {"coordinates": [{"lon": 7, "lat": 3}]}},
+    {"id": 8, "geo" : {"coordinates": [{"lat": 4}]}}
+);
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.003.get.http
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.003.get.http
index bc1f51c..57d830a 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.003.get.http
@@ -16,8 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+/connector?dataverseName=test&datasetName=ColumnDataset
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.004.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.004.query.sqlpp
index bc1f51c..a351d7d 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.004.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE test;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM ColumnDataset c
+WHERE (SOME point in c.geo.coordinates SATISFIES point.lon = 4)
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.005.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.005.query.sqlpp
index bc1f51c..caa905d 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.005.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM ColumnDataset c
+WHERE (SOME point in c.geo.coordinates SATISFIES point.lon = 4)
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.006.query.sqlpp
similarity index 85%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.006.query.sqlpp
index bc1f51c..f60de21 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.006.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE test;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM ColumnDataset c
+WHERE (SOME point in c.geo.coordinates SATISFIES point.lon = 7 AND point.lat = 3)
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.007.query.sqlpp
similarity index 82%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.007.query.sqlpp
index bc1f51c..5455f1d 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.007.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM ColumnDataset c
+WHERE (SOME point in c.geo.coordinates SATISFIES point.lon = 7 AND point.lat = 3)
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.008.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.008.query.sqlpp
index bc1f51c..1bdab57 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.008.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE test;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+
+SELECT COUNT(*)
+FROM ColumnDataset c
+WHERE (SOME point in c.geo.coordinates SATISFIES point.lon = [5.1])
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.009.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.009.query.sqlpp
index bc1f51c..afc338a 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.009.query.sqlpp
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+USE test;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+SELECT COUNT(*)
+FROM ColumnDataset c
+WHERE (SOME point in c.geo.coordinates SATISFIES point.lon = [5.1])
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.010.query.sqlpp
similarity index 78%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.010.query.sqlpp
index 69abb37..c46566f 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/006/006.010.query.sqlpp
@@ -16,12 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-import org.apache.asterix.om.types.ATypeTag;
-
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+USE test;
+SET `compiler.column.filter` "true";
+EXPLAIN
+SELECT COUNT(*)
+FROM ColumnDataset c
+-- Filter should not be pushed as we compare nested types
+WHERE (SOME point in c.geo.coordinates SATISFIES point.lon = [5.1])
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.001.ddl.sqlpp
similarity index 61%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.001.ddl.sqlpp
index 62abb92..954294f 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.001.ddl.sqlpp
@@ -16,13 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-import java.io.Serializable;
+/*
+ * Description: Verify the following DML actions for an array->atomic index:
+ *     1) Insert into an empty index (non bulk-load operation).
+ *     2) Delete all-but-one entry from the index.
+ *     3) Upsert all entries into the index.
+ */
 
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+DROP DATAVERSE TestYelp IF EXISTS;
+CREATE DATAVERSE TestYelp;
+USE TestYelp;
 
-@FunctionalInterface
-public interface IColumnFilterEvaluatorFactory extends Serializable {
-    IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
-}
+CREATE TYPE CheckinType AS {
+    business_id: string
+};
+
+CREATE DATASET YelpCheckin(CheckinType) PRIMARY KEY business_id WITH {
+    "storage-format" : {"format" : "column"}
+};
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.002.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.002.update.sqlpp
new file mode 100644
index 0000000..2549e8f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.002.update.sqlpp
@@ -0,0 +1,497 @@
+/*
+ * 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.
+ */
+
+USE TestYelp;
+
+INSERT INTO YelpCheckin (
+    [
+        {
+            "business_id": "--1UhMGODdWsrMastO9DZw",
+            "checkin_times": {
+                "dates": [
+                    "2016-04-26",
+                    "2016-08-30",
+                    "2016-10-15",
+                    "2016-11-18",
+                    "2017-04-20",
+                    "2017-05-03",
+                    "2019-03-19"
+                ],
+                "times": [
+                    "19:49:16",
+                    "18:36:57",
+                    "02:45:18",
+                    "01:54:50",
+                    "18:39:06",
+                    "17:58:02",
+                    "22:04:48"
+                ]
+            }
+        },
+        {
+            "business_id": "--EF5N7P70J_UYBTPypYlA",
+            "checkin_times": {
+                "dates": [
+                    "2018-05-25",
+                    "2018-09-18",
+                    "2019-10-18"
+                ],
+                "times": [
+                    "19:52:07",
+                    "16:09:44",
+                    "21:29:09"
+                ]
+            }
+        },
+        {
+            "business_id": "--Ni3oJ4VOqfOEu7Sj2Vzg",
+            "checkin_times": {
+                "dates": [
+                    "2019-06-07"
+                ],
+                "times": [
+                    "17:54:58"
+                ]
+            }
+        },
+        {
+            "business_id": "--Y1Adl1YUWfYIRSd8vkmA",
+            "checkin_times": {
+                "dates": [
+                    "2011-05-03",
+                    "2011-08-23",
+                    "2014-12-04",
+                    "2016-11-16"
+                ],
+                "times": [
+                    "20:54:05",
+                    "20:49:45",
+                    "06:13:01",
+                    "19:25:55"
+                ]
+            }
+        },
+        {
+            "business_id": "--YPwqIlRJrhHkJcjY3eiA",
+            "checkin_times": {
+                "dates": [
+                    "2016-06-18",
+                    "2016-10-15"
+                ],
+                "times": [
+                    "21:35:45",
+                    "18:17:51"
+                ]
+            }
+        },
+        {
+            "business_id": "--e8PjCNhEz32pprnPhCwQ",
+            "checkin_times": {
+                "dates": [
+                    "2015-04-02"
+                ],
+                "times": [
+                    "21:45:17"
+                ]
+            }
+        },
+        {
+            "business_id": "--kinfHwmtdjz03g8B8z8Q",
+            "checkin_times": {
+                "dates": [
+                    "2014-08-27",
+                    "2015-12-19",
+                    "2018-11-27"
+                ],
+                "times": [
+                    "17:49:18",
+                    "21:30:31",
+                    "15:53:50"
+                ]
+            }
+        },
+        {
+            "business_id": "--q6datkI-f0EoVheXNEeQ",
+            "checkin_times": {
+                "dates": [
+                    "2014-01-28",
+                    "2014-11-16",
+                    "2015-11-15",
+                    "2015-11-15"
+                ],
+                "times": [
+                    "20:56:04",
+                    "16:11:58",
+                    "19:21:53",
+                    "19:33:39"
+                ]
+            }
+        },
+        {
+            "business_id": "--qvQS4MigHPykD2GV0-zw",
+            "checkin_times": {
+                "dates": [
+                    "2019-04-11"
+                ],
+                "times": [
+                    "18:30:12"
+                ]
+            }
+        },
+        {
+            "business_id": "--wIGbLEhlpl_UeAIyDmZQ",
+            "checkin_times": {
+                "dates": [
+                    "2015-06-06",
+                    "2019-03-14"
+                ],
+                "times": [
+                    "20:01:06",
+                    "22:01:52"
+                ]
+            }
+        },
+        {
+            "business_id": "-0FA-Qdi3SPYIoJz9UQw-A",
+            "checkin_times": {
+                "dates": [
+                    "2018-09-29",
+                    "2018-10-20",
+                    "2018-10-20"
+                ],
+                "times": [
+                    "18:55:17",
+                    "16:48:05",
+                    "22:20:24"
+                ]
+            }
+        },
+        {
+            "business_id": "-0Hj1hb_XW6ybWq2M7QhGA",
+            "checkin_times": {
+                "dates": [
+                    "2011-04-23",
+                    "2014-05-04",
+                    "2014-05-11",
+                    "2014-06-04",
+                    "2015-12-05",
+                    "2017-05-15"
+                ],
+                "times": [
+                    "21:11:22",
+                    "19:42:48",
+                    "19:16:08",
+                    "19:14:18",
+                    "19:22:42",
+                    "23:19:00"
+                ]
+            }
+        },
+        {
+            "business_id": "-0KMvRFwDWdVBeTpT11iHw",
+            "checkin_times": {
+                "dates": [
+                    "2012-07-13",
+                    "2016-12-24",
+                    "2017-08-31"
+                ],
+                "times": [
+                    "21:43:57",
+                    "02:27:31",
+                    "00:35:26"
+                ]
+            }
+        },
+        {
+            "business_id": "-0LPtgJC31FWMrMv317p0Q",
+            "checkin_times": {
+                "dates": [
+                    "2013-04-13",
+                    "2013-08-19",
+                    "2013-10-04"
+                ],
+                "times": [
+                    "12:35:33",
+                    "23:35:49",
+                    "19:14:56"
+                ]
+            }
+        },
+        {
+            "business_id": "-0M3o2uWBnQZwd3hmfEwuw",
+            "checkin_times": {
+                "dates": [
+                    "2016-09-10",
+                    "2018-09-08",
+                    "2019-09-13"
+                ],
+                "times": [
+                    "19:26:19",
+                    "14:15:37",
+                    "22:47:25"
+                ]
+            }
+        },
+        {
+            "business_id": "-0RRiWDtfnS16AKCtfvBZg",
+            "checkin_times": {
+                "dates": [
+                    "2017-05-19",
+                    "2017-05-19",
+                    "2017-08-28",
+                    "2017-09-20",
+                    "2017-10-01",
+                    "2017-10-01",
+                    "2017-12-27"
+                ],
+                "times": [
+                    "14:30:16",
+                    "14:30:25",
+                    "15:49:37",
+                    "20:19:51",
+                    "16:31:05",
+                    "16:56:27",
+                    "23:33:20"
+                ]
+            }
+        },
+        {
+            "business_id": "-0Soj75v-XoRcf2ERr8Bmg",
+            "checkin_times": {
+                "dates": [
+                    "2019-06-05"
+                ],
+                "times": [
+                    "18:22:49"
+                ]
+            }
+        },
+        {
+            "business_id": "-0ZumLlFjMh4ZW1z2nXGug",
+            "checkin_times": {
+                "dates": [
+                    "2011-09-24",
+                    "2014-03-10",
+                    "2015-05-27",
+                    "2015-08-29",
+                    "2018-03-16"
+                ],
+                "times": [
+                    "21:37:32",
+                    "20:20:07",
+                    "00:40:24",
+                    "17:58:15",
+                    "15:03:26"
+                ]
+            }
+        },
+        {
+            "business_id": "-0aOudcaAyac0VJbMX-L1g",
+            "checkin_times": {
+                "dates": [
+                    "2015-03-16",
+                    "2015-12-21",
+                    "2016-10-28",
+                    "2016-10-28"
+                ],
+                "times": [
+                    "23:51:16",
+                    "04:48:01",
+                    "20:22:42",
+                    "20:23:00"
+                ]
+            }
+        },
+        {
+            "business_id": "-0b86isaXMY0v4g-V8GZ9Q",
+            "checkin_times": {
+                "dates": [
+                    "2013-10-22",
+                    "2014-11-21"
+                ],
+                "times": [
+                    "16:49:21",
+                    "17:39:24"
+                ]
+            }
+        },
+        {
+            "business_id": "-0d-BfFSU0bwLcnMaGRxYw",
+            "checkin_times": {
+                "dates": [
+                    "2014-08-07",
+                    "2014-09-16",
+                    "2014-10-12",
+                    "2015-07-21",
+                    "2015-07-21"
+                ],
+                "times": [
+                    "18:30:48",
+                    "20:41:45",
+                    "23:22:27",
+                    "20:43:56",
+                    "20:45:07"
+                ]
+            }
+        },
+        {
+            "business_id": "-0jz6c3C6i7RG7Ag22K-Pg",
+            "checkin_times": {
+                "dates": [
+                    "2015-05-02",
+                    "2015-05-06",
+                    "2015-09-26"
+                ],
+                "times": [
+                    "19:49:05",
+                    "03:52:18",
+                    "01:13:19"
+                ]
+            }
+        },
+        {
+            "business_id": "-0y3MZU2oYP8r1ruDP1bfQ",
+            "checkin_times": {
+                "dates": [
+                    "2015-04-11",
+                    "2015-11-21",
+                    "2016-05-06",
+                    "2017-08-09",
+                    "2017-10-21"
+                ],
+                "times": [
+                    "13:14:14",
+                    "16:05:56",
+                    "14:10:04",
+                    "15:15:10",
+                    "15:12:56"
+                ]
+            }
+        },
+        {
+            "business_id": "-1BPe8UjF2_l3nVk-DFUjA",
+            "checkin_times": {
+                "dates": [
+                    "2015-12-03",
+                    "2016-03-17",
+                    "2016-11-02"
+                ],
+                "times": [
+                    "18:44:00",
+                    "18:19:21",
+                    "15:58:38"
+                ]
+            }
+        },
+        {
+            "business_id": "-1E2CQu_38mkghvmZgCCRw",
+            "checkin_times": {
+                "dates": [
+                    "2019-04-04"
+                ],
+                "times": [
+                    "22:02:37"
+                ]
+            }
+        },
+        {
+            "business_id": "-1wzk43IZ5D9Ysu6kzb5xA",
+            "checkin_times": {
+                "dates": [
+                    "2019-02-27"
+                ],
+                "times": [
+                    "14:03:08"
+                ]
+            }
+        },
+        {
+            "business_id": "-23R9P2eG7VTc6DVLjFKzA",
+            "checkin_times": {
+                "dates": [
+                    "2011-12-21",
+                    "2012-04-15",
+                    "2012-04-15",
+                    "2013-06-30",
+                    "2013-10-04",
+                    "2014-07-16"
+                ],
+                "times": [
+                    "19:02:51",
+                    "04:21:39",
+                    "14:23:56",
+                    "22:39:51",
+                    "20:34:13",
+                    "02:28:40"
+                ]
+            }
+        },
+        {
+            "business_id": "-26MGfikhJiTfCI-GqmzhQ",
+            "checkin_times": {
+                "dates": [
+                    "2018-06-13"
+                ],
+                "times": [
+                    "20:16:07"
+                ]
+            }
+        },
+        {
+            "business_id": "-2bLuJsMZ0WhI9daurVQNQ",
+            "checkin_times": {
+                "dates": [
+                    "2015-05-29",
+                    "2015-06-01"
+                ],
+                "times": [
+                    "16:46:17",
+                    "15:03:53"
+                ]
+            }
+        },
+        {
+            "business_id": "-2hDBMaza_ldqnZdiU06LQ",
+            "checkin_times": {
+                "dates": [
+                    "2011-10-08",
+                    "2014-08-18",
+                    "2016-01-07",
+                    "2016-10-21",
+                    "2016-12-01",
+                    "2016-12-29",
+                    "2018-07-22",
+                    "2018-09-07",
+                    "2019-03-08"
+                ],
+                "times": [
+                    "12:02:23",
+                    "02:11:11",
+                    "05:27:51",
+                    "20:15:55",
+                    "03:57:10",
+                    "01:54:42",
+                    "19:55:31",
+                    "01:42:54",
+                    "03:41:06"
+                ]
+            }
+        }
+    ]
+);
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.003.get.http
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.003.get.http
index bc1f51c..a55ce93 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.003.get.http
@@ -16,8 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
-
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+/connector?dataverseName=TestYelp&datasetName=YelpCheckin
\ No newline at end of file
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.004.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.004.query.sqlpp
index bc1f51c..e1fced3 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.004.query.sqlpp
@@ -16,8 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE TestYelp;
+
+
+SELECT COUNT(*)
+FROM YelpCheckin C, C.checkin_times.dates D, C.checkin_times.times T
+WHERE D > " "
+  AND T > " ";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.005.query.sqlpp
similarity index 78%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.005.query.sqlpp
index 69abb37..5f27784 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.005.query.sqlpp
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-import org.apache.asterix.om.types.ATypeTag;
+USE TestYelp;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+SELECT COUNT(*)
+-- only the normalized filter should be applied here
+FROM YelpCheckin C, C.checkin_times.dates D, C.checkin_times.times T
+WHERE D > " "
+  AND T > " ";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.006.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.006.query.sqlpp
index bc1f51c..2601f56 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.006.query.sqlpp
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE TestYelp;
+
+
+SELECT COUNT(*)
+FROM YelpCheckin C, C.checkin_times.dates D, C.checkin_times.times T
+WHERE substring(D, 0, 4) = "2016";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.007.query.sqlpp
similarity index 78%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.007.query.sqlpp
index 69abb37..6ad32d4 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.007.query.sqlpp
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-import org.apache.asterix.om.types.ATypeTag;
+USE TestYelp;
+SET `compiler.column.filter` "true";
 
-public interface IColumnFilterValueAccessor {
-    long getNormalizedValue();
-
-    ATypeTag getTypeTag();
-}
+SELECT COUNT(*)
+-- both filters should be applied
+FROM YelpCheckin C, C.checkin_times.dates D, C.checkin_times.times T
+WHERE substring(D, 0, 4) = "2016";
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.008.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.008.query.sqlpp
index bc1f51c..0a04233 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.008.query.sqlpp
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE TestYelp;
+
+
+SELECT COUNT(*)
+FROM YelpCheckin C
+WHERE array_contains(C.checkin_times.dates, "2018-05-25");
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.009.query.sqlpp
similarity index 80%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.009.query.sqlpp
index bc1f51c..379f7bc 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.009.query.sqlpp
@@ -16,8 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE TestYelp;
+SET `compiler.column.filter` "true";
+
+SELECT COUNT(*)
+-- both filter should not be applied
+FROM YelpCheckin C
+WHERE array_contains(C.checkin_times.dates, "2018-05-25");
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.010.query.sqlpp
similarity index 80%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.010.query.sqlpp
index bc1f51c..10e5e64 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/007/007.010.query.sqlpp
@@ -16,8 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
 
-public interface IColumnFilterEvaluator {
-    boolean evaluate();
-}
+USE TestYelp;
+SET `compiler.column.filter` "true";
+EXPLAIN
+SELECT COUNT(*)
+-- both filter should not be applied
+FROM YelpCheckin C
+WHERE array_contains(C.checkin_times.dates, "2018-05-25");
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.024.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.024.adm
new file mode 100644
index 0000000..90fc33f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.024.adm
@@ -0,0 +1,2 @@
+{ "a": "1", "item": 20 }
+{ "a": "1", "item": 30 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.025.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.025.plan
new file mode 100644
index 0000000..71e57f5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.025.plan
@@ -0,0 +1,36 @@
+distribute result [$$31] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    project ([$$31]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+    -- STREAM_PROJECT  |PARTITIONED|
+      assign [$$31] <- [{"a": $$34, "item": $$item}] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+      -- ASSIGN  |PARTITIONED|
+        project ([$$34, $$item]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+        -- STREAM_PROJECT  |PARTITIONED|
+          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+          -- SORT_MERGE_EXCHANGE [$$35(ASC), $$34(ASC), $$item(ASC) ]  |PARTITIONED|
+            order (ASC, $$35) (ASC, $$34) (ASC, $$item) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+            -- STABLE_SORT [$$35(ASC), $$34(ASC), $$item(ASC)]  |PARTITIONED|
+              exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                select (gt($$item, 10)) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                -- STREAM_SELECT  |PARTITIONED|
+                  project ([$$35, $$34, $$item]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    unnest $$item <- scan-collection($$36) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                    -- UNNEST  |PARTITIONED|
+                      select (eq($$34, "1")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                      -- STREAM_SELECT  |PARTITIONED|
+                        project ([$$35, $$34, $$36]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          assign [$$34, $$36] <- [$$d.getField("a"), $$d.getField("array")] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                          -- ASSIGN  |PARTITIONED|
+                            exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              data-scan []<-[$$35, $$d] <- test.ColumnDataset project ({a:any,array:[any]}) filter on (or(eq($$34, "1"), gt($$item, 10))) [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.026.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.026.adm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.026.adm
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/003/003.005.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/003/003.005.adm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/003/003.005.adm
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.003.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.003.regexadm
new file mode 100644
index 0000000..980ba38
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.003.regexadm
@@ -0,0 +1 @@
+\Q{"keys":"checkin_id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"CheckinType","open":true,"fields":[{"checkin_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/004/004.004.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.004.adm
new file mode 100644
index 0000000..fcc26c8
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.004.adm
@@ -0,0 +1 @@
+{ "$1": 99 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.005.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.005.adm
new file mode 100644
index 0000000..fcc26c8
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.005.adm
@@ -0,0 +1 @@
+{ "$1": 99 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.006.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.006.plan
new file mode 100644
index 0000000..ade1d22
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.006.plan
@@ -0,0 +1,34 @@
+distribute result [$$47] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    project ([$$47]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      assign [$$47] <- [{"$1": $$49}] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+      -- ASSIGN  |UNPARTITIONED|
+        aggregate [$$49] <- [agg-sql-sum($$51)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+        -- AGGREGATE  |UNPARTITIONED|
+          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            aggregate [$$51] <- [agg-sql-count(1)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+            -- AGGREGATE  |PARTITIONED|
+              select (gt($$D, " ")) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+              -- STREAM_SELECT  |PARTITIONED|
+                project ([$$D]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                -- STREAM_PROJECT  |PARTITIONED|
+                  unnest $$D <- scan-collection($$50) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                  -- UNNEST  |PARTITIONED|
+                    project ([$$50]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      assign [$$50] <- [$$C.getField("dates")] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                      -- ASSIGN  |PARTITIONED|
+                        project ([$$C]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            data-scan []<-[$$48, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (gt($$D, " ")) [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+                            -- DATASOURCE_SCAN  |PARTITIONED|
+                              exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.008.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.008.regexadm
new file mode 100644
index 0000000..980ba38
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.008.regexadm
@@ -0,0 +1 @@
+\Q{"keys":"checkin_id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"CheckinType","open":true,"fields":[{"checkin_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/004/004.009.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.009.adm
new file mode 100644
index 0000000..3e1a847
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.009.adm
@@ -0,0 +1 @@
+{ "$1": 7 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.010.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.010.adm
new file mode 100644
index 0000000..3e1a847
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.010.adm
@@ -0,0 +1 @@
+{ "$1": 7 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.012.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.012.regexadm
new file mode 100644
index 0000000..980ba38
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.012.regexadm
@@ -0,0 +1 @@
+\Q{"keys":"checkin_id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"CheckinType","open":true,"fields":[{"checkin_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/004/004.013.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.013.adm
new file mode 100644
index 0000000..dc7ba8b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.013.adm
@@ -0,0 +1 @@
+{ "$1": 101 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.014.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.014.adm
new file mode 100644
index 0000000..dc7ba8b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.014.adm
@@ -0,0 +1 @@
+{ "$1": 101 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.100.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.100.adm
new file mode 100644
index 0000000..0e12992
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.100.adm
@@ -0,0 +1 @@
+{ "$1": 6 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.101.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.101.adm
new file mode 100644
index 0000000..0e12992
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.101.adm
@@ -0,0 +1 @@
+{ "$1": 6 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.102.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.102.plan
new file mode 100644
index 0000000..2e1acc5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.102.plan
@@ -0,0 +1,34 @@
+distribute result [$$48] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    project ([$$48]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      assign [$$48] <- [{"$1": $$50}] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+      -- ASSIGN  |UNPARTITIONED|
+        aggregate [$$50] <- [agg-sql-sum($$52)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+        -- AGGREGATE  |UNPARTITIONED|
+          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            aggregate [$$52] <- [agg-sql-count(1)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+            -- AGGREGATE  |PARTITIONED|
+              select (eq(substring($$D, 0, 4), "2011")) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+              -- STREAM_SELECT  |PARTITIONED|
+                project ([$$D]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                -- STREAM_PROJECT  |PARTITIONED|
+                  unnest $$D <- scan-collection($$51) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                  -- UNNEST  |PARTITIONED|
+                    project ([$$51]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      assign [$$51] <- [$$C.getField("dates")] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                      -- ASSIGN  |PARTITIONED|
+                        project ([$$C]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            data-scan []<-[$$49, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (eq(substring($$D, 0, 4), "2011")) [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+                            -- DATASOURCE_SCAN  |PARTITIONED|
+                              exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.103.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.103.adm
new file mode 100644
index 0000000..7ed187a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.103.adm
@@ -0,0 +1 @@
+{ "$1": 20 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.104.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.104.adm
new file mode 100644
index 0000000..7ed187a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.104.adm
@@ -0,0 +1 @@
+{ "$1": 20 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.105.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.105.plan
new file mode 100644
index 0000000..7a074af
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.105.plan
@@ -0,0 +1,38 @@
+distribute result [$$51] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    project ([$$51]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      assign [$$51] <- [{"$1": $$54}] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+      -- ASSIGN  |UNPARTITIONED|
+        aggregate [$$54] <- [agg-sql-sum($$57)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+        -- AGGREGATE  |UNPARTITIONED|
+          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            aggregate [$$57] <- [agg-sql-count(1)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+            -- AGGREGATE  |PARTITIONED|
+              select (or(eq($$58, "2011"), eq($$58, "2016"))) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+              -- STREAM_SELECT  |PARTITIONED|
+                project ([$$58]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                -- STREAM_PROJECT  |PARTITIONED|
+                  assign [$$58] <- [substring($$D, 0, 4)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                  -- ASSIGN  |PARTITIONED|
+                    project ([$$D]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      unnest $$D <- scan-collection($$55) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                      -- UNNEST  |PARTITIONED|
+                        project ([$$55]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          assign [$$55] <- [$$C.getField("dates")] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                          -- ASSIGN  |PARTITIONED|
+                            project ([$$C]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                data-scan []<-[$$53, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (or(eq(substring($$D, 0, 4), "2011"), eq(substring($$D, 0, 4), "2016"))) [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.106.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.106.adm
new file mode 100644
index 0000000..6988da1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.106.adm
@@ -0,0 +1 @@
+{ "$1": 11 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.107.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.107.adm
new file mode 100644
index 0000000..6988da1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.107.adm
@@ -0,0 +1 @@
+{ "$1": 11 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.108.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.108.plan
new file mode 100644
index 0000000..248598b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.108.plan
@@ -0,0 +1,45 @@
+distribute result [$$52] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    project ([$$52]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      assign [$$52] <- [{"$1": $$55}] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+      -- ASSIGN  |UNPARTITIONED|
+        aggregate [$$55] <- [agg-sql-sum($$58)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+        -- AGGREGATE  |UNPARTITIONED|
+          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            aggregate [$$58] <- [agg-sql-count(1)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+            -- AGGREGATE  |PARTITIONED|
+              select ($$45) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+              -- STREAM_SELECT  |PARTITIONED|
+                project ([$$45]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                -- STREAM_PROJECT  |PARTITIONED|
+                  subplan {
+                            aggregate [$$45] <- [non-empty-stream()] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                            -- AGGREGATE  |LOCAL|
+                              select (or(eq($$59, "2011"), eq($$59, "2016"))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                              -- STREAM_SELECT  |LOCAL|
+                                assign [$$59] <- [substring($$D, 0, 4)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                -- ASSIGN  |LOCAL|
+                                  unnest $$D <- scan-collection($$56) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                  -- UNNEST  |LOCAL|
+                                    nested tuple source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
+                         } [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                  -- SUBPLAN  |PARTITIONED|
+                    project ([$$56]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      assign [$$56] <- [$$C.getField("dates")] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                      -- ASSIGN  |PARTITIONED|
+                        project ([$$C]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            data-scan []<-[$$54, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (or(eq(substring($$D, 0, 4), "2011"), eq(substring($$D, 0, 4), "2016"))) [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+                            -- DATASOURCE_SCAN  |PARTITIONED|
+                              exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.109.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.109.adm
new file mode 100644
index 0000000..267992b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.109.adm
@@ -0,0 +1 @@
+{ "$1": 0 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.110.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.110.adm
new file mode 100644
index 0000000..267992b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.110.adm
@@ -0,0 +1 @@
+{ "$1": 0 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.111.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.111.adm
new file mode 100644
index 0000000..3e1a847
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.111.adm
@@ -0,0 +1 @@
+{ "$1": 7 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.112.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.112.adm
new file mode 100644
index 0000000..3e1a847
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.112.adm
@@ -0,0 +1 @@
+{ "$1": 7 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.113.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.113.plan
new file mode 100644
index 0000000..9d6667c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/004/004.113.plan
@@ -0,0 +1,40 @@
+distribute result [$$54] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    project ([$$54]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      assign [$$54] <- [{"$1": $$57}] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+      -- ASSIGN  |UNPARTITIONED|
+        aggregate [$$57] <- [agg-sql-sum($$61)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+        -- AGGREGATE  |UNPARTITIONED|
+          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            aggregate [$$61] <- [agg-sql-count(1)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+            -- AGGREGATE  |PARTITIONED|
+              select (or(eq($$62, "2011"), eq($$62, "2016"))) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+              -- STREAM_SELECT  |PARTITIONED|
+                project ([$$62]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                -- STREAM_PROJECT  |PARTITIONED|
+                  assign [$$62] <- [substring($$D, 0, 4)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                  -- ASSIGN  |PARTITIONED|
+                    project ([$$D]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      unnest $$D <- scan-collection($$59) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                      -- UNNEST  |PARTITIONED|
+                        project ([$$59]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          select (starts-with($$C.getField("business_id"), "-0")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                          -- STREAM_SELECT  |PARTITIONED|
+                            assign [$$59] <- [$$C.getField("dates")] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                            -- ASSIGN  |PARTITIONED|
+                              project ([$$C]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  data-scan []<-[$$56, $$C] <- TestYelp.YelpCheckin project ({dates:[any],business_id:any}) filter on (or(starts-with($$C.getField("business_id"), "-0"), or(eq(substring($$D, 0, 4), "2011"), eq(substring($$D, 0, 4), "2016")))) [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                    exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.003.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.003.regexadm
new file mode 100644
index 0000000..980ba38
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.003.regexadm
@@ -0,0 +1 @@
+\Q{"keys":"checkin_id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"CheckinType","open":true,"fields":[{"checkin_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/005/005.004.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.004.adm
new file mode 100644
index 0000000..a5593dc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.004.adm
@@ -0,0 +1 @@
+{ "$1": 2 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.005.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.005.adm
new file mode 100644
index 0000000..a5593dc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.005.adm
@@ -0,0 +1 @@
+{ "$1": 2 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.006.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.006.adm
new file mode 100644
index 0000000..a5593dc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.006.adm
@@ -0,0 +1 @@
+{ "$1": 2 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.007.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.007.adm
new file mode 100644
index 0000000..a5593dc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.007.adm
@@ -0,0 +1 @@
+{ "$1": 2 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.008.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.008.plan
new file mode 100644
index 0000000..0a5304b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.008.plan
@@ -0,0 +1,34 @@
+distribute result [$$48] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    project ([$$48]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      assign [$$48] <- [{"$1": $$50}] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+      -- ASSIGN  |UNPARTITIONED|
+        aggregate [$$50] <- [agg-sql-sum($$52)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+        -- AGGREGATE  |UNPARTITIONED|
+          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            aggregate [$$52] <- [agg-sql-count(1)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+            -- AGGREGATE  |PARTITIONED|
+              select (gt(numeric-add($$D, 1), 2018)) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+              -- STREAM_SELECT  |PARTITIONED|
+                project ([$$D]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                -- STREAM_PROJECT  |PARTITIONED|
+                  unnest $$D <- scan-collection($$51) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                  -- UNNEST  |PARTITIONED|
+                    project ([$$51]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      assign [$$51] <- [$$C.getField("dates")] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                      -- ASSIGN  |PARTITIONED|
+                        project ([$$C]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            data-scan []<-[$$49, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (gt(numeric-add($$D, 1), 2018)) [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+                            -- DATASOURCE_SCAN  |PARTITIONED|
+                              exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.009.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.009.adm
new file mode 100644
index 0000000..b62c7dd
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.009.adm
@@ -0,0 +1 @@
+{ "$1": 8 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.010.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.010.adm
new file mode 100644
index 0000000..b62c7dd
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.010.adm
@@ -0,0 +1 @@
+{ "$1": 8 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.011.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.011.plan
new file mode 100644
index 0000000..5048170
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/005/005.011.plan
@@ -0,0 +1,34 @@
+distribute result [$$51] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    project ([$$51]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      assign [$$51] <- [{"$1": $$53}] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+      -- ASSIGN  |UNPARTITIONED|
+        aggregate [$$53] <- [agg-sql-sum($$55)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+        -- AGGREGATE  |UNPARTITIONED|
+          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            aggregate [$$55] <- [agg-sql-count(1)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+            -- AGGREGATE  |PARTITIONED|
+              select (or(gt(numeric-add($$D, 1), 2018), eq(substring($$D, 0, 4), "2011"))) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+              -- STREAM_SELECT  |PARTITIONED|
+                project ([$$D]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                -- STREAM_PROJECT  |PARTITIONED|
+                  unnest $$D <- scan-collection($$54) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                  -- UNNEST  |PARTITIONED|
+                    project ([$$54]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      assign [$$54] <- [$$C.getField("dates")] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                      -- ASSIGN  |PARTITIONED|
+                        project ([$$C]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            data-scan []<-[$$52, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (or(gt(numeric-add($$D, 1), 2018), eq(substring($$D, 0, 4), "2011"))) [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+                            -- DATASOURCE_SCAN  |PARTITIONED|
+                              exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.003.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.003.regexadm
new file mode 100644
index 0000000..81882d4
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.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/006/006.004.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.004.adm
new file mode 100644
index 0000000..7cc3573
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.004.adm
@@ -0,0 +1 @@
+{ "$1": 1 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.005.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.005.adm
new file mode 100644
index 0000000..7cc3573
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.005.adm
@@ -0,0 +1 @@
+{ "$1": 1 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.006.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.006.adm
new file mode 100644
index 0000000..7cc3573
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.006.adm
@@ -0,0 +1 @@
+{ "$1": 1 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.007.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.007.adm
new file mode 100644
index 0000000..7cc3573
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.007.adm
@@ -0,0 +1 @@
+{ "$1": 1 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.008.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.008.adm
new file mode 100644
index 0000000..7cc3573
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.008.adm
@@ -0,0 +1 @@
+{ "$1": 1 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.009.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.009.adm
new file mode 100644
index 0000000..7cc3573
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.009.adm
@@ -0,0 +1 @@
+{ "$1": 1 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.010.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.010.plan
new file mode 100644
index 0000000..a1bba22
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/006/006.010.plan
@@ -0,0 +1,45 @@
+distribute result [$$51] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    project ([$$51]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      assign [$$51] <- [{"$1": $$53}] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+      -- ASSIGN  |UNPARTITIONED|
+        aggregate [$$53] <- [agg-sql-sum($$57)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+        -- AGGREGATE  |UNPARTITIONED|
+          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            aggregate [$$57] <- [agg-sql-count(1)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+            -- AGGREGATE  |PARTITIONED|
+              select ($$44) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+              -- STREAM_SELECT  |PARTITIONED|
+                project ([$$44]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                -- STREAM_PROJECT  |PARTITIONED|
+                  subplan {
+                            aggregate [$$44] <- [non-empty-stream()] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                            -- AGGREGATE  |LOCAL|
+                              select (eq($$55, array: [ 5.1 ])) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                              -- STREAM_SELECT  |LOCAL|
+                                assign [$$55] <- [$$point.getField("lon")] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                -- ASSIGN  |LOCAL|
+                                  unnest $$point <- scan-collection($$54) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                  -- UNNEST  |LOCAL|
+                                    nested tuple source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
+                         } [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                  -- SUBPLAN  |PARTITIONED|
+                    project ([$$54]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      assign [$$54] <- [$$c.getField("geo").getField("coordinates")] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                      -- ASSIGN  |PARTITIONED|
+                        project ([$$c]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            data-scan []<-[$$52, $$c] <- test.ColumnDataset project ({geo:{coordinates:[{lon:any}]}}) [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+                            -- DATASOURCE_SCAN  |PARTITIONED|
+                              exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.003.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.003.regexadm
new file mode 100644
index 0000000..7f7e0cd
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.003.regexadm
@@ -0,0 +1 @@
+\Q{"keys":"business_id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"CheckinType","open":true,"fields":[{"business_id":{"type":"AString"}}]},"splits":[\E.*\Q]}\E
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.004.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.004.adm
new file mode 100644
index 0000000..d369ddd
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.004.adm
@@ -0,0 +1 @@
+{ "$1": 469 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.005.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.005.adm
new file mode 100644
index 0000000..d369ddd
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.005.adm
@@ -0,0 +1 @@
+{ "$1": 469 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.006.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.006.adm
new file mode 100644
index 0000000..fe3f956
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.006.adm
@@ -0,0 +1 @@
+{ "$1": 97 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.007.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.007.adm
new file mode 100644
index 0000000..fe3f956
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.007.adm
@@ -0,0 +1 @@
+{ "$1": 97 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.008.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.008.adm
new file mode 100644
index 0000000..7cc3573
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.008.adm
@@ -0,0 +1 @@
+{ "$1": 1 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.009.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.009.adm
new file mode 100644
index 0000000..7cc3573
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.009.adm
@@ -0,0 +1 @@
+{ "$1": 1 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.010.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.010.plan
new file mode 100644
index 0000000..9620bd0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/007/007.010.plan
@@ -0,0 +1,26 @@
+distribute result [$$37] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    project ([$$37]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      assign [$$37] <- [{"$1": $$39}] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+      -- ASSIGN  |UNPARTITIONED|
+        aggregate [$$39] <- [agg-sql-sum($$42)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+        -- AGGREGATE  |UNPARTITIONED|
+          exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            aggregate [$$42] <- [agg-sql-count(1)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+            -- AGGREGATE  |PARTITIONED|
+              select (array-contains($$C.getField("checkin_times").getField("dates"), "2018-05-25")) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+              -- STREAM_SELECT  |PARTITIONED|
+                project ([$$C]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                -- STREAM_PROJECT  |PARTITIONED|
+                  exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    data-scan []<-[$$38, $$C] <- TestYelp.YelpCheckin project ({checkin_times:{dates:any}}) [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+                    -- DATASOURCE_SCAN  |PARTITIONED|
+                      exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 299e32a..ce4c1bd 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -16206,6 +16206,7 @@
         <output-dir compare="Text">filter/001</output-dir>
         <expected-warn>ASX0051: Incomparable input types: string and bigint (in line 30, at column 23)</expected-warn>
         <expected-warn>ASX0051: Incomparable input types: bigint and string (in line 29, at column 38)</expected-warn>
+        <expected-warn>ASX0051: Incomparable input types: array and bigint (in line 28, at column 15)</expected-warn>
       </compilation-unit>
     </test-case>
     <test-case FilePath="column" check-warnings="true">
@@ -16220,6 +16221,26 @@
       </compilation-unit>
     </test-case>
     <test-case FilePath="column">
+      <compilation-unit name="filter/004">
+        <output-dir compare="Text">filter/004</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="column">
+      <compilation-unit name="filter/005">
+        <output-dir compare="Text">filter/005</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="column">
+      <compilation-unit name="filter/006">
+        <output-dir compare="Text">filter/006</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="column">
+      <compilation-unit name="filter/007">
+        <output-dir compare="Text">filter/007</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="column">
       <compilation-unit name="big-object">
         <output-dir compare="Text">big-object</output-dir>
       </compilation-unit>
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/assembler/AssemblerBuilderVisitor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/assembler/AssemblerBuilderVisitor.java
index 2a29a70..1895404 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/assembler/AssemblerBuilderVisitor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/assembler/AssemblerBuilderVisitor.java
@@ -155,14 +155,17 @@
         AssemblerInfo itemInfo = new AssemblerInfo(itemDeclaredType, arrayAssembler, false);
         itemNode.accept(this, itemInfo);
 
-        // Set repeated assembler as a delegate (responsible for writing null values)
-        delegateAssembler.setAsDelegate();
-        IColumnValuesReader reader = delegateAssembler.getReader();
-        int numberOfDelimiters = reader.getNumberOfDelimiters();
-        // End of group assembler is responsible to finalize array/multiset builders
-        EndOfRepeatedGroupAssembler endOfGroupAssembler =
-                new EndOfRepeatedGroupAssembler(reader, arrayAssembler, numberOfDelimiters - delimiters.size());
-        valueAssemblers.add(endOfGroupAssembler);
+        // if delegateAssembler is null, that means no column will be accessed
+        if (delegateAssembler != null) {
+            // Set repeated assembler as a delegate (responsible for writing null values)
+            delegateAssembler.setAsDelegate();
+            IColumnValuesReader reader = delegateAssembler.getReader();
+            int numberOfDelimiters = reader.getNumberOfDelimiters();
+            // End of group assembler is responsible to finalize array/multiset builders
+            EndOfRepeatedGroupAssembler endOfGroupAssembler =
+                    new EndOfRepeatedGroupAssembler(reader, arrayAssembler, numberOfDelimiters - delimiters.size());
+            valueAssemblers.add(endOfGroupAssembler);
+        }
 
         level--;
         delimiters.removeInt(delimiters.size() - 1);
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/assembler/value/MissingValueGetter.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/assembler/value/MissingValueGetter.java
index 1ae84ee..2de77f4 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/assembler/value/MissingValueGetter.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/assembler/value/MissingValueGetter.java
@@ -25,7 +25,7 @@
 
 public class MissingValueGetter implements IValueGetter {
     public static final IValueGetter INSTANCE = new MissingValueGetter();
-    private static final VoidPointable MISSING;
+    public static final VoidPointable MISSING;
 
     static {
         MISSING = new VoidPointable();
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/FalseColumnFilterEvaluator.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
similarity index 66%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/FalseColumnFilterEvaluator.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
index fccd015..f53208b 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/FalseColumnFilterEvaluator.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
@@ -16,23 +16,33 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.evaluator;
+package org.apache.asterix.column.filter;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
 
-public class FalseColumnFilterEvaluator implements IColumnFilterEvaluator {
-    public static final IColumnFilterEvaluator INSTANCE = new FalseColumnFilterEvaluator();
+public class FalseColumnFilterEvaluator implements IColumnIterableFilterEvaluator {
+    public static final IColumnIterableFilterEvaluator INSTANCE = new FalseColumnFilterEvaluator();
 
     private FalseColumnFilterEvaluator() {
     }
 
     @Override
+    public void reset() {
+
+    }
+
+    @Override
     public boolean evaluate() {
         return false;
     }
 
     @Override
-    public String toString() {
-        return "FALSE";
+    public int getTupleIndex() {
+        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
new file mode 100644
index 0000000..2302aa6
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
@@ -0,0 +1,178 @@
+/*
+ * 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.filter;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.asterix.column.assembler.value.IValueGetter;
+import org.apache.asterix.column.assembler.value.IValueGetterFactory;
+import org.apache.asterix.column.filter.iterable.accessor.ColumnFilterValueAccessorEvaluator;
+import org.apache.asterix.column.filter.iterable.accessor.MissingEvaluator;
+import org.apache.asterix.column.filter.iterable.accessor.UnionColumnFilterValueAccessorEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.accessor.ColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.accessor.NoOpColumnFilterValueAccessor;
+import org.apache.asterix.column.metadata.schema.AbstractSchemaNode;
+import org.apache.asterix.column.metadata.schema.ObjectSchemaNode;
+import org.apache.asterix.column.metadata.schema.primitive.MissingFieldSchemaNode;
+import org.apache.asterix.column.metadata.schema.primitive.PrimitiveSchemaNode;
+import org.apache.asterix.column.metadata.schema.visitor.PathExtractorVisitor;
+import org.apache.asterix.column.metadata.schema.visitor.SchemaClipperVisitor;
+import org.apache.asterix.column.values.IColumnValuesReader;
+import org.apache.asterix.column.values.IColumnValuesReaderFactory;
+import org.apache.asterix.column.values.writer.filters.AbstractColumnFilterWriter;
+import org.apache.asterix.om.types.ARecordType;
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+public class FilterAccessorProvider {
+    public static final String FILTER_ACCESSOR_PROVIDER_KEY = "filter-accessor-provider";
+    private final ObjectSchemaNode root;
+    private final ObjectSchemaNode metaRoot;
+    private final SchemaClipperVisitor clipperVisitor;
+    private final PathExtractorVisitor pathExtractorVisitor;
+    private final Map<ARecordType, PrimitiveSchemaNode> cachedNodes;
+    private final List<IColumnFilterNormalizedValueAccessor> filterAccessors;
+    private final List<IColumnValuesReader> filterColumnReaders;
+    private final IValueGetterFactory valueGetterFactory;
+
+    public FilterAccessorProvider(ObjectSchemaNode root, SchemaClipperVisitor clipperVisitor,
+            IColumnValuesReaderFactory readerFactory, IValueGetterFactory valueGetterFactory) {
+        this(root, null, clipperVisitor, readerFactory, valueGetterFactory);
+    }
+
+    public FilterAccessorProvider(ObjectSchemaNode root, ObjectSchemaNode metaRoot, SchemaClipperVisitor clipperVisitor,
+            IColumnValuesReaderFactory readerFactory, IValueGetterFactory valueGetterFactory) {
+        this.root = root;
+        this.metaRoot = metaRoot;
+        this.clipperVisitor = clipperVisitor;
+        this.valueGetterFactory = valueGetterFactory;
+        pathExtractorVisitor = new PathExtractorVisitor(readerFactory);
+        cachedNodes = new HashMap<>();
+        filterAccessors = new ArrayList<>();
+        filterColumnReaders = new ArrayList<>();
+    }
+
+    public void reset() {
+        cachedNodes.clear();
+    }
+
+    public IColumnFilterNormalizedValueAccessor createColumnFilterNormalizedValueAccessor(ARecordType path, boolean min)
+            throws HyracksDataException {
+        PrimitiveSchemaNode node = cachedNodes.get(path);
+        if (node == null) {
+            AbstractSchemaNode pathNode = getNode(path);
+            node = (PrimitiveSchemaNode) (pathNode.isNested() ? MissingFieldSchemaNode.INSTANCE : pathNode);
+            cachedNodes.put(path, node);
+        }
+
+        ATypeTag typeTag = node.getTypeTag();
+        if (typeTag == ATypeTag.MISSING) {
+            return NoOpColumnFilterValueAccessor.INSTANCE;
+        }
+        IColumnFilterNormalizedValueAccessor accessor =
+                new ColumnFilterNormalizedValueAccessor(node.getColumnIndex(), typeTag, min);
+        filterAccessors.add(accessor);
+        return accessor;
+    }
+
+    public IScalarEvaluator createColumnAccessEvaluator(ARecordType path) throws HyracksDataException {
+        List<IColumnValuesReader> readers = createReaders(path);
+        if (readers.isEmpty()) {
+            return MissingEvaluator.INSTANCE;
+        } else if (readers.size() == 1) {
+            IColumnValuesReader reader = readers.get(0);
+            IValueGetter valueGetter = valueGetterFactory.createValueGetter(reader.getTypeTag());
+            return new ColumnFilterValueAccessorEvaluator(reader, valueGetter);
+        }
+        // Union readers
+        IColumnValuesReader[] unionReaders = new IColumnValuesReader[readers.size()];
+        IValueGetter[] valueGetters = new IValueGetter[readers.size()];
+        for (int i = 0; i < readers.size(); i++) {
+            IColumnValuesReader reader = readers.get(i);
+            unionReaders[i] = reader;
+            valueGetters[i] = valueGetterFactory.createValueGetter(reader.getTypeTag());
+        }
+        return new UnionColumnFilterValueAccessorEvaluator(unionReaders, valueGetters);
+    }
+
+    public List<IColumnFilterNormalizedValueAccessor> getFilterAccessors() {
+        return filterAccessors;
+    }
+
+    public List<IColumnValuesReader> getFilterColumnReaders() {
+        return filterColumnReaders;
+    }
+
+    public static void setFilterValues(List<IColumnFilterNormalizedValueAccessor> filterValueAccessors,
+            ByteBuffer pageZero, int numberOfColumns) {
+        for (int i = 0; i < filterValueAccessors.size(); i++) {
+            ColumnFilterNormalizedValueAccessor accessor =
+                    (ColumnFilterNormalizedValueAccessor) filterValueAccessors.get(i);
+            int columnIndex = accessor.getColumnIndex();
+            long normalizedValue;
+            if (columnIndex < numberOfColumns) {
+                int filterOffset = pageZero.position() + columnIndex * AbstractColumnFilterWriter.FILTER_SIZE;
+                normalizedValue =
+                        accessor.isMin() ? pageZero.getLong(filterOffset) : pageZero.getLong(filterOffset + Long.BYTES);
+            } else {
+                // Column is missing
+                normalizedValue = accessor.isMin() ? Long.MAX_VALUE : Long.MIN_VALUE;
+            }
+            accessor.setNormalizedValue(normalizedValue);
+        }
+    }
+
+    private AbstractSchemaNode getNode(ARecordType path) throws HyracksDataException {
+        ObjectSchemaNode dataPath = (ObjectSchemaNode) path.accept(clipperVisitor, root);
+        AbstractSchemaNode node = dataPath.accept(pathExtractorVisitor, null);
+        if (node.getTypeTag() == ATypeTag.MISSING && metaRoot != null) {
+            //Try meta
+            ObjectSchemaNode metaPath = (ObjectSchemaNode) path.accept(clipperVisitor, metaRoot);
+            node = metaPath.accept(pathExtractorVisitor, null);
+        }
+
+        return node;
+    }
+
+    private List<IColumnValuesReader> createReaders(ARecordType path) throws HyracksDataException {
+        List<IColumnValuesReader> readers = Collections.emptyList();
+        if (!cachedNodes.containsKey(path)) {
+            ObjectSchemaNode dataPath = (ObjectSchemaNode) path.accept(clipperVisitor, root);
+            readers = pathExtractorVisitor.getOrCreateReaders(dataPath, filterColumnReaders);
+            if (readers.isEmpty() && metaRoot != null) {
+                //Try meta
+                ObjectSchemaNode metaPath = (ObjectSchemaNode) path.accept(clipperVisitor, metaRoot);
+                readers = pathExtractorVisitor.getOrCreateReaders(metaPath, filterColumnReaders);
+            }
+
+            if (readers.isEmpty()) {
+                cachedNodes.put(path, (PrimitiveSchemaNode) MissingFieldSchemaNode.INSTANCE);
+            }
+        }
+
+        return readers;
+    }
+}
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/IColumnFilterEvaluator.java
similarity index 61%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
copy to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/IColumnFilterEvaluator.java
index 62abb92..023e04f 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/IColumnFilterEvaluator.java
@@ -16,13 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+package org.apache.asterix.column.filter;
 
-import java.io.Serializable;
-
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-@FunctionalInterface
-public interface IColumnFilterEvaluatorFactory extends Serializable {
-    IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
+/**
+ * An evaluator created by either {@link IColumnNormalizedFilterEvaluatorFactory}
+ * or {@link IColumnIterableFilterEvaluatorFactory}.
+ */
+public interface IColumnFilterEvaluator {
+    /**
+     * @return true or false depend on the evaluated value(s)
+     */
+    boolean evaluate() throws HyracksDataException;
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/IFilterApplier.java
similarity index 61%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
copy to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/IFilterApplier.java
index 62abb92..0285190 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/IFilterApplier.java
@@ -16,13 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+package org.apache.asterix.column.filter;
 
-import java.io.Serializable;
-
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.asterix.om.types.ATypeTag;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IValueReference;
 
+/**
+ * Applies {@link IColumnIterableFilterEvaluator} to filter out tuples that do not satisfy the filter expression
+ */
 @FunctionalInterface
-public interface IColumnFilterEvaluatorFactory extends Serializable {
-    IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
+public interface IFilterApplier {
+    /**
+     * @return the tuple if the filter evaluator returns true or {@link ATypeTag#MISSING} o.w
+     */
+    IValueReference getTuple() throws HyracksDataException;
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/NoOpColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/NoOpColumnFilterEvaluatorFactory.java
new file mode 100644
index 0000000..b14402b
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/NoOpColumnFilterEvaluatorFactory.java
@@ -0,0 +1,53 @@
+/*
+ * 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.filter;
+
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+/**
+ * The factory returns {@link TrueColumnFilterEvaluator#INSTANCE} which evaluates always to true
+ */
+public class NoOpColumnFilterEvaluatorFactory
+        implements IColumnNormalizedFilterEvaluatorFactory, IColumnIterableFilterEvaluatorFactory {
+    private static final long serialVersionUID = -7122361396576592000L;
+    public static final NoOpColumnFilterEvaluatorFactory INSTANCE = new NoOpColumnFilterEvaluatorFactory();
+
+    private NoOpColumnFilterEvaluatorFactory() {
+    }
+
+    @Override
+    public IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException {
+        return TrueColumnFilterEvaluator.INSTANCE;
+    }
+
+    @Override
+    public IColumnIterableFilterEvaluator create(FilterAccessorProvider filterAccessorProvider,
+            IEvaluatorContext context) throws HyracksDataException {
+        return TrueColumnFilterEvaluator.INSTANCE;
+    }
+
+    @Override
+    public String toString() {
+        return "TRUE";
+    }
+}
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/TrueColumnFilterEvaluator.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
similarity index 61%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/TrueColumnFilterEvaluator.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
index 37f1c5c..86ccab3 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/TrueColumnFilterEvaluator.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
@@ -16,26 +16,37 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.evaluator;
+package org.apache.asterix.column.filter;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 /**
  * This evaluator is also used to indicate a NoOp filter
  */
-public class TrueColumnFilterEvaluator implements IColumnFilterEvaluator {
-    public static final IColumnFilterEvaluator INSTANCE = new TrueColumnFilterEvaluator();
+public class TrueColumnFilterEvaluator implements IColumnIterableFilterEvaluator {
+    public static final IColumnIterableFilterEvaluator INSTANCE = new TrueColumnFilterEvaluator();
 
     private TrueColumnFilterEvaluator() {
     }
 
     @Override
-    public boolean evaluate() {
+    public boolean evaluate() throws HyracksDataException {
         return true;
     }
 
     @Override
-    public String toString() {
-        return "TRUE";
+    public void reset() {
+        // NoOp
+    }
+
+    @Override
+    public int getTupleIndex() {
+        return -1;
+    }
+
+    @Override
+    public void setAt(int index) {
+        // NoOp
     }
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
similarity index 74%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
index 62abb92..67eb135 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
@@ -16,13 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+package org.apache.asterix.column.filter.iterable;
 
-import java.io.Serializable;
-
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-@FunctionalInterface
-public interface IColumnFilterEvaluatorFactory extends Serializable {
-    IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
+public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator {
+    void reset();
+
+    int getTupleIndex();
+
+    void setAt(int index) throws HyracksDataException;
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluatorFactory.java
similarity index 68%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
copy to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluatorFactory.java
index 62abb92..99df077 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluatorFactory.java
@@ -16,13 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+package org.apache.asterix.column.filter.iterable;
 
 import java.io.Serializable;
 
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-@FunctionalInterface
-public interface IColumnFilterEvaluatorFactory extends Serializable {
-    IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
+public interface IColumnIterableFilterEvaluatorFactory extends Serializable {
+    IColumnIterableFilterEvaluator create(FilterAccessorProvider filterAccessorProvider, IEvaluatorContext context)
+            throws HyracksDataException;
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/ColumnFilterValueAccessorEvaluator.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/ColumnFilterValueAccessorEvaluator.java
new file mode 100644
index 0000000..57f4db6
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/ColumnFilterValueAccessorEvaluator.java
@@ -0,0 +1,48 @@
+/*
+ * 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.filter.iterable.accessor;
+
+import org.apache.asterix.column.assembler.value.IValueGetter;
+import org.apache.asterix.column.values.IColumnValuesReader;
+import org.apache.asterix.runtime.evaluators.functions.PointableHelper;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class ColumnFilterValueAccessorEvaluator implements IScalarEvaluator {
+    private final IColumnValuesReader reader;
+    private final IValueGetter getter;
+
+    public ColumnFilterValueAccessorEvaluator(IColumnValuesReader reader, IValueGetter getter) {
+        this.reader = reader;
+        this.getter = getter;
+    }
+
+    @Override
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
+        if (reader.isRepeated() && !reader.isRepeatedValue() || reader.isMissing()) {
+            PointableHelper.setMissing(result);
+        } else if (reader.isNull()) {
+            PointableHelper.setNull(result);
+        } else {
+            result.set(getter.getValue(reader));
+        }
+    }
+}
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/ColumnFilterValueAccessorEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/ColumnFilterValueAccessorEvaluatorFactory.java
new file mode 100644
index 0000000..ce26d6b
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/ColumnFilterValueAccessorEvaluatorFactory.java
@@ -0,0 +1,48 @@
+/*
+ * 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.filter.iterable.accessor;
+
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.om.types.ARecordType;
+import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.dataflow.common.utils.TaskUtil;
+
+public class ColumnFilterValueAccessorEvaluatorFactory implements IScalarEvaluatorFactory {
+    private static final long serialVersionUID = -7871899093673316190L;
+    private final ARecordType path;
+
+    public ColumnFilterValueAccessorEvaluatorFactory(ARecordType path) {
+        this.path = path;
+    }
+
+    @Override
+    public IScalarEvaluator createScalarEvaluator(IEvaluatorContext ctx) throws HyracksDataException {
+        IHyracksTaskContext taskContext = ctx.getTaskContext();
+        FilterAccessorProvider provider =
+                TaskUtil.get(FilterAccessorProvider.FILTER_ACCESSOR_PROVIDER_KEY, taskContext);
+        if (provider == null) {
+            throw new IllegalStateException("FILTER_ACCESSOR_PROVIDER_KEY is not set");
+        }
+        return provider.createColumnAccessEvaluator(path);
+    }
+}
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/MissingEvaluator.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/MissingEvaluator.java
new file mode 100644
index 0000000..8cb1211
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/MissingEvaluator.java
@@ -0,0 +1,37 @@
+/*
+ * 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.filter.iterable.accessor;
+
+import org.apache.asterix.column.assembler.value.MissingValueGetter;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class MissingEvaluator implements IScalarEvaluator {
+    public static final IScalarEvaluator INSTANCE = new MissingEvaluator();
+
+    private MissingEvaluator() {
+    }
+
+    @Override
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
+        result.set(MissingValueGetter.MISSING);
+    }
+}
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/UnionColumnFilterValueAccessorEvaluator.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/UnionColumnFilterValueAccessorEvaluator.java
new file mode 100644
index 0000000..48d0f69
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/accessor/UnionColumnFilterValueAccessorEvaluator.java
@@ -0,0 +1,63 @@
+/*
+ * 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.filter.iterable.accessor;
+
+import org.apache.asterix.column.assembler.value.IValueGetter;
+import org.apache.asterix.column.values.IColumnValuesReader;
+import org.apache.asterix.runtime.evaluators.functions.PointableHelper;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class UnionColumnFilterValueAccessorEvaluator implements IScalarEvaluator {
+    private final IColumnValuesReader[] readers;
+    private final IValueGetter[] valueGetters;
+
+    public UnionColumnFilterValueAccessorEvaluator(IColumnValuesReader[] readers, IValueGetter[] valueGetters) {
+        this.readers = readers;
+        this.valueGetters = valueGetters;
+    }
+
+    @Override
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
+        for (int i = 0; i < readers.length; i++) {
+            IColumnValuesReader reader = readers[i];
+            IValueGetter getter = valueGetters[i];
+            if (setValue(reader, getter, result)) {
+                return;
+            }
+        }
+        // All values were missing
+        PointableHelper.setMissing(result);
+    }
+
+    private boolean setValue(IColumnValuesReader reader, IValueGetter getter, IPointable result) {
+        if (reader.isRepeated() && !reader.isRepeatedValue() || reader.isMissing()) {
+            return false;
+        }
+
+        if (reader.isNull()) {
+            PointableHelper.setNull(result);
+        } else {
+            result.set(getter.getValue(reader));
+        }
+        return true;
+    }
+}
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
new file mode 100644
index 0000000..9ebb7b7
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/AbstractIterableFilterEvaluator.java
@@ -0,0 +1,62 @@
+/*
+ * 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.filter.iterable.evaluator;
+
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.asterix.formats.nontagged.BinaryBooleanInspector;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
+
+abstract class AbstractIterableFilterEvaluator implements IColumnIterableFilterEvaluator {
+    protected final IScalarEvaluator evaluator;
+    private final VoidPointable booleanResult;
+    protected int index;
+
+    AbstractIterableFilterEvaluator(IScalarEvaluator evaluator) {
+        this.evaluator = evaluator;
+        this.booleanResult = new VoidPointable();
+        reset();
+    }
+
+    @Override
+    public final void reset() {
+        index = -1;
+    }
+
+    @Override
+    public final int getTupleIndex() {
+        return index;
+    }
+
+    @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);
+    }
+
+    protected abstract void skip(int count) throws HyracksDataException;
+
+    protected final boolean inspect() throws HyracksDataException {
+        evaluator.evaluate(null, booleanResult);
+        return BinaryBooleanInspector.getBooleanValue(booleanResult.getByteArray(), booleanResult.getStartOffset(),
+                booleanResult.getLength());
+    }
+}
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
new file mode 100644
index 0000000..2878429
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluator.java
@@ -0,0 +1,64 @@
+/*
+ * 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.filter.iterable.evaluator;
+
+import java.util.List;
+
+import org.apache.asterix.column.values.IColumnValuesReader;
+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;
+    }
+
+    @Override
+    public boolean evaluate() throws HyracksDataException {
+        boolean result = false;
+        while (!result && next()) {
+            result = inspect();
+            index++;
+        }
+        if (!result) {
+            // Last tuple does not satisfy the condition
+            index++;
+        }
+        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
new file mode 100644
index 0000000..1264c24
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluatorFactory.java
@@ -0,0 +1,50 @@
+/*
+ * 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.filter.iterable.evaluator;
+
+import java.util.List;
+
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.column.values.IColumnValuesReader;
+import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+public class ColumnIterableFilterEvaluatorFactory implements IColumnIterableFilterEvaluatorFactory {
+    private static final long serialVersionUID = 171140626152211361L;
+    private final IScalarEvaluatorFactory evaluatorFactory;
+
+    public ColumnIterableFilterEvaluatorFactory(IScalarEvaluatorFactory evaluatorFactory) {
+        this.evaluatorFactory = evaluatorFactory;
+    }
+
+    @Override
+    public IColumnIterableFilterEvaluator create(FilterAccessorProvider filterAccessorProvider,
+            IEvaluatorContext context) throws HyracksDataException {
+        IScalarEvaluator evaluator = evaluatorFactory.createScalarEvaluator(context);
+        List<IColumnValuesReader> readers = filterAccessorProvider.getFilterColumnReaders();
+        if (readers.stream().anyMatch(IColumnValuesReader::isRepeated)) {
+            return new ColumnarRepeatedIterableFilterEvaluator(evaluator, readers);
+        }
+        return new ColumnIterableFilterEvaluator(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
new file mode 100644
index 0000000..7db9f65
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnarRepeatedIterableFilterEvaluator.java
@@ -0,0 +1,92 @@
+/*
+ * 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.filter.iterable.evaluator;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.asterix.column.values.IColumnValuesReader;
+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;
+        repeatedReaders = new ArrayList<>();
+        for (IColumnValuesReader reader : readers) {
+            if (reader.isRepeated()) {
+                repeatedReaders.add(reader);
+            }
+        }
+    }
+
+    @Override
+    public boolean evaluate() throws HyracksDataException {
+        boolean result = false;
+        while (!result && next()) {
+            // 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++;
+        }
+        return result;
+    }
+
+    private boolean evaluateRepeated() throws HyracksDataException {
+        boolean result = false;
+        boolean doNext;
+        do {
+            doNext = false;
+            result |= inspect();
+            for (int i = 0; i < repeatedReaders.size(); i++) {
+                IColumnValuesReader reader = repeatedReaders.get(i);
+                boolean repeatedValue = reader.isRepeatedValue() && !reader.isLastDelimiter();
+                doNext |= repeatedValue;
+                if (repeatedValue) {
+                    reader.next();
+                }
+            }
+        } 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/values/reader/filter/IColumnFilterValueAccessor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnFilterNormalizedValueAccessor.java
similarity index 76%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
copy to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnFilterNormalizedValueAccessor.java
index 69abb37..99937cc 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnFilterNormalizedValueAccessor.java
@@ -16,12 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+package org.apache.asterix.column.filter.normalized;
 
 import org.apache.asterix.om.types.ATypeTag;
 
-public interface IColumnFilterValueAccessor {
+/**
+ * Creates a normalized value accessor
+ */
+public interface IColumnFilterNormalizedValueAccessor {
+    /**
+     * @return the normalized value
+     */
     long getNormalizedValue();
 
+    /**
+     * @return the type of the normalized value
+     */
     ATypeTag getTypeTag();
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnFilterNormalizedValueAccessorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnFilterNormalizedValueAccessorFactory.java
new file mode 100644
index 0000000..d27718e
--- /dev/null
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnFilterNormalizedValueAccessorFactory.java
@@ -0,0 +1,40 @@
+/*
+ * 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.filter.normalized;
+
+import java.io.Serializable;
+import java.util.PriorityQueue;
+
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.values.IColumnBatchWriter;
+import org.apache.asterix.column.values.IColumnValuesWriter;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+/**
+ * Creates an accessor for a normalized value reside in page0
+ *
+ * @see IColumnValuesWriter#getNormalizedMaxValue()
+ * @see IColumnValuesWriter#getNormalizedMinValue()
+ * @see IColumnBatchWriter#writeColumns(PriorityQueue)
+ */
+@FunctionalInterface
+public interface IColumnFilterNormalizedValueAccessorFactory extends Serializable {
+    IColumnFilterNormalizedValueAccessor create(FilterAccessorProvider filterAccessorProvider)
+            throws HyracksDataException;
+}
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnNormalizedFilterEvaluatorFactory.java
similarity index 61%
copy from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
copy to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnNormalizedFilterEvaluatorFactory.java
index 62abb92..4832d64 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnNormalizedFilterEvaluatorFactory.java
@@ -16,13 +16,25 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter;
+package org.apache.asterix.column.filter.normalized;
 
 import java.io.Serializable;
+import java.util.PriorityQueue;
 
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.values.IColumnBatchWriter;
+import org.apache.asterix.column.values.IColumnValuesWriter;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
+/**
+ * A factory for creating an evaluator for normalized MIN/MAX values
+ *
+ * @see IColumnValuesWriter#getNormalizedMaxValue()
+ * @see IColumnValuesWriter#getNormalizedMinValue()
+ * @see IColumnBatchWriter#writeColumns(PriorityQueue)
+ */
 @FunctionalInterface
-public interface IColumnFilterEvaluatorFactory extends Serializable {
+public interface IColumnNormalizedFilterEvaluatorFactory extends Serializable {
     IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ColumnFilterValueAccessor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessor.java
similarity index 80%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ColumnFilterValueAccessor.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessor.java
index 0aa2b31..da1d176 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessor.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.value;
+package org.apache.asterix.column.filter.normalized.accessor;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
 import org.apache.asterix.om.types.ATypeTag;
 
-public class ColumnFilterValueAccessor implements IColumnFilterValueAccessor {
+public class ColumnFilterNormalizedValueAccessor implements IColumnFilterNormalizedValueAccessor {
     private final int columnIndex;
     private final ATypeTag typeTag;
     private final boolean min;
     private long normalizedValue;
 
-    public ColumnFilterValueAccessor(int columnIndex, ATypeTag typeTag, boolean min) {
+    public ColumnFilterNormalizedValueAccessor(int columnIndex, ATypeTag typeTag, boolean min) {
         this.columnIndex = columnIndex;
         this.typeTag = typeTag;
         this.min = min;
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ColumnFilterValueAccessorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessorFactory.java
similarity index 70%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ColumnFilterValueAccessorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessorFactory.java
index fb02321..8e7c858 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ColumnFilterValueAccessorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessorFactory.java
@@ -16,29 +16,29 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.value;
+package org.apache.asterix.column.filter.normalized.accessor;
 
-import org.apache.asterix.column.values.reader.filter.FilterAccessorProvider;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessorFactory;
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.visitor.PathStringBuilderForIATypeVisitor;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-public class ColumnFilterValueAccessorFactory implements IColumnFilterValueAccessorFactory {
+public class ColumnFilterNormalizedValueAccessorFactory implements IColumnFilterNormalizedValueAccessorFactory {
     private static final long serialVersionUID = -6341611172763952841L;
     private final ARecordType path;
     private final boolean min;
 
-    public ColumnFilterValueAccessorFactory(ARecordType path, boolean min) {
+    public ColumnFilterNormalizedValueAccessorFactory(ARecordType path, boolean min) {
         this.path = path;
         this.min = min;
     }
 
     @Override
-    public IColumnFilterValueAccessor create(FilterAccessorProvider filterAccessorProvider)
+    public IColumnFilterNormalizedValueAccessor create(FilterAccessorProvider filterAccessorProvider)
             throws HyracksDataException {
-        return filterAccessorProvider.createColumnFilterValueAccessor(path, min);
+        return filterAccessorProvider.createColumnFilterNormalizedValueAccessor(path, min);
     }
 
     @Override
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ConstantColumnFilterValueAccessor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessor.java
similarity index 77%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ConstantColumnFilterValueAccessor.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessor.java
index db9ef9c..cca3cab 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ConstantColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessor.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.value;
+package org.apache.asterix.column.filter.normalized.accessor;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
 import org.apache.asterix.om.types.ATypeTag;
 
-public final class ConstantColumnFilterValueAccessor implements IColumnFilterValueAccessor {
+public final class ConstantColumnFilterNormalizedValueAccessor implements IColumnFilterNormalizedValueAccessor {
     private final long normalizedValue;
     private final ATypeTag typeTag;
 
     //TODO add UUID
 
-    public ConstantColumnFilterValueAccessor(long normalizedValue, ATypeTag typeTag) {
+    public ConstantColumnFilterNormalizedValueAccessor(long normalizedValue, ATypeTag typeTag) {
         this.normalizedValue = normalizedValue;
         this.typeTag = typeTag;
     }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ConstantColumnFilterValueAccessorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessorFactory.java
similarity index 73%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ConstantColumnFilterValueAccessorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessorFactory.java
index eeb903d..667a2c3 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/ConstantColumnFilterValueAccessorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessorFactory.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.value;
+package org.apache.asterix.column.filter.normalized.accessor;
 
-import org.apache.asterix.column.values.reader.filter.FilterAccessorProvider;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessorFactory;
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
 import org.apache.asterix.om.base.ADouble;
 import org.apache.asterix.om.base.AInt64;
 import org.apache.asterix.om.base.AString;
@@ -28,19 +28,20 @@
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-public class ConstantColumnFilterValueAccessorFactory implements IColumnFilterValueAccessorFactory {
+public class ConstantColumnFilterNormalizedValueAccessorFactory implements IColumnFilterNormalizedValueAccessorFactory {
     private static final long serialVersionUID = -4835407779342615453L;
     private final long normalizedValue;
     private final ATypeTag typeTag;
     private final String stringValue;
 
-    private ConstantColumnFilterValueAccessorFactory(String stringValue, long normalizedValue, ATypeTag typeTag) {
+    private ConstantColumnFilterNormalizedValueAccessorFactory(String stringValue, long normalizedValue,
+            ATypeTag typeTag) {
         this.stringValue = stringValue;
         this.normalizedValue = normalizedValue;
         this.typeTag = typeTag;
     }
 
-    public static ConstantColumnFilterValueAccessorFactory createFactory(IAObject value) {
+    public static ConstantColumnFilterNormalizedValueAccessorFactory createFactory(IAObject value) {
         String stringValue;
         long normalizedValue;
         ATypeTag typeTag = value.getType().getTypeTag();
@@ -63,13 +64,13 @@
                 return null;
         }
 
-        return new ConstantColumnFilterValueAccessorFactory(stringValue, normalizedValue, typeTag);
+        return new ConstantColumnFilterNormalizedValueAccessorFactory(stringValue, normalizedValue, typeTag);
     }
 
     @Override
-    public IColumnFilterValueAccessor create(FilterAccessorProvider filterAccessorProvider)
+    public IColumnFilterNormalizedValueAccessor create(FilterAccessorProvider filterAccessorProvider)
             throws HyracksDataException {
-        return new ConstantColumnFilterValueAccessor(normalizedValue, typeTag);
+        return new ConstantColumnFilterNormalizedValueAccessor(normalizedValue, typeTag);
     }
 
     @Override
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/NoOpColumnFilterValueAccessor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/NoOpColumnFilterValueAccessor.java
similarity index 80%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/NoOpColumnFilterValueAccessor.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/NoOpColumnFilterValueAccessor.java
index c52eeda..acd3a44 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/value/NoOpColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/NoOpColumnFilterValueAccessor.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.value;
+package org.apache.asterix.column.filter.normalized.accessor;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
 import org.apache.asterix.om.types.ATypeTag;
 
-public class NoOpColumnFilterValueAccessor implements IColumnFilterValueAccessor {
-    public static final IColumnFilterValueAccessor INSTANCE = new NoOpColumnFilterValueAccessor();
+public class NoOpColumnFilterValueAccessor implements IColumnFilterNormalizedValueAccessor {
+    public static final IColumnFilterNormalizedValueAccessor INSTANCE = new NoOpColumnFilterValueAccessor();
 
     private NoOpColumnFilterValueAccessor() {
     }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/AbstractColumnFilterComparatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/AbstractColumnFilterComparatorFactory.java
similarity index 62%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/AbstractColumnFilterComparatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/AbstractColumnFilterComparatorFactory.java
index 8244876..cb63204 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/AbstractColumnFilterComparatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/AbstractColumnFilterComparatorFactory.java
@@ -16,26 +16,26 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.compartor;
+package org.apache.asterix.column.filter.normalized.compartor;
 
-import org.apache.asterix.column.values.reader.filter.FilterAccessorProvider;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessorFactory;
-import org.apache.asterix.column.values.reader.filter.evaluator.FalseColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.evaluator.TrueColumnFilterEvaluator;
+import org.apache.asterix.column.filter.FalseColumnFilterEvaluator;
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.TrueColumnFilterEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-abstract class AbstractColumnFilterComparatorFactory implements IColumnFilterEvaluatorFactory {
+abstract class AbstractColumnFilterComparatorFactory implements IColumnNormalizedFilterEvaluatorFactory {
     private static final long serialVersionUID = 4229059703449173694L;
-    private final IColumnFilterValueAccessorFactory left;
-    private final IColumnFilterValueAccessorFactory right;
+    private final IColumnFilterNormalizedValueAccessorFactory left;
+    private final IColumnFilterNormalizedValueAccessorFactory right;
 
-    AbstractColumnFilterComparatorFactory(IColumnFilterValueAccessorFactory left,
-            IColumnFilterValueAccessorFactory right) {
+    AbstractColumnFilterComparatorFactory(IColumnFilterNormalizedValueAccessorFactory left,
+            IColumnFilterNormalizedValueAccessorFactory right) {
         this.left = left;
         this.right = right;
     }
@@ -43,8 +43,8 @@
     @Override
     public final IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider)
             throws HyracksDataException {
-        IColumnFilterValueAccessor leftAccessor = left.create(filterAccessorProvider);
-        IColumnFilterValueAccessor rightAccessor = right.create(filterAccessorProvider);
+        IColumnFilterNormalizedValueAccessor leftAccessor = left.create(filterAccessorProvider);
+        IColumnFilterNormalizedValueAccessor rightAccessor = right.create(filterAccessorProvider);
 
         ATypeTag leftTypeTag = leftAccessor.getTypeTag();
         ATypeTag rightTypeTag = rightAccessor.getTypeTag();
@@ -61,8 +61,8 @@
         return rightTypeTag == ATypeTag.MISSING || leftTypeTag != rightTypeTag;
     }
 
-    protected abstract IColumnFilterEvaluator createComparator(IColumnFilterValueAccessor left,
-            IColumnFilterValueAccessor right);
+    protected abstract IColumnFilterEvaluator createComparator(IColumnFilterNormalizedValueAccessor left,
+            IColumnFilterNormalizedValueAccessor right);
 
     protected abstract String getOpt();
 
@@ -72,10 +72,10 @@
     }
 
     static abstract class AbstractComparator implements IColumnFilterEvaluator {
-        protected final IColumnFilterValueAccessor left;
-        protected final IColumnFilterValueAccessor right;
+        protected final IColumnFilterNormalizedValueAccessor left;
+        protected final IColumnFilterNormalizedValueAccessor right;
 
-        AbstractComparator(IColumnFilterValueAccessor left, IColumnFilterValueAccessor right) {
+        AbstractComparator(IColumnFilterNormalizedValueAccessor left, IColumnFilterNormalizedValueAccessor right) {
             this.left = left;
             this.right = right;
         }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/GEColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GEColumnFilterEvaluatorFactory.java
similarity index 71%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/GEColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GEColumnFilterEvaluatorFactory.java
index 81d58db..bd880e6 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/GEColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GEColumnFilterEvaluatorFactory.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.compartor;
+package org.apache.asterix.column.filter.normalized.compartor;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessorFactory;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
 
 public class GEColumnFilterEvaluatorFactory extends AbstractColumnFilterComparatorFactory {
     private static final long serialVersionUID = 6879193736347174789L;
 
-    public GEColumnFilterEvaluatorFactory(IColumnFilterValueAccessorFactory left,
-            IColumnFilterValueAccessorFactory right) {
+    public GEColumnFilterEvaluatorFactory(IColumnFilterNormalizedValueAccessorFactory left,
+            IColumnFilterNormalizedValueAccessorFactory right) {
         super(left, right);
     }
 
     @Override
-    protected IColumnFilterEvaluator createComparator(IColumnFilterValueAccessor left,
-            IColumnFilterValueAccessor right) {
+    protected IColumnFilterEvaluator createComparator(IColumnFilterNormalizedValueAccessor left,
+            IColumnFilterNormalizedValueAccessor right) {
         return new AbstractComparator(left, right) {
             @Override
             public boolean evaluate() {
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/GTColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GTColumnFilterEvaluatorFactory.java
similarity index 71%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/GTColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GTColumnFilterEvaluatorFactory.java
index b24e18bf..de8eed0 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/GTColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GTColumnFilterEvaluatorFactory.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.compartor;
+package org.apache.asterix.column.filter.normalized.compartor;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessorFactory;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
 
 public class GTColumnFilterEvaluatorFactory extends AbstractColumnFilterComparatorFactory {
     private static final long serialVersionUID = -3104103170926445020L;
 
-    public GTColumnFilterEvaluatorFactory(IColumnFilterValueAccessorFactory left,
-            IColumnFilterValueAccessorFactory right) {
+    public GTColumnFilterEvaluatorFactory(IColumnFilterNormalizedValueAccessorFactory left,
+            IColumnFilterNormalizedValueAccessorFactory right) {
         super(left, right);
     }
 
     @Override
-    protected IColumnFilterEvaluator createComparator(IColumnFilterValueAccessor left,
-            IColumnFilterValueAccessor right) {
+    protected IColumnFilterEvaluator createComparator(IColumnFilterNormalizedValueAccessor left,
+            IColumnFilterNormalizedValueAccessor right) {
         return new AbstractComparator(left, right) {
             @Override
             public boolean evaluate() {
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/LEColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LEColumnFilterEvaluatorFactory.java
similarity index 71%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/LEColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LEColumnFilterEvaluatorFactory.java
index f195d03..dd43c5a 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/LEColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LEColumnFilterEvaluatorFactory.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.compartor;
+package org.apache.asterix.column.filter.normalized.compartor;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessorFactory;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
 
 public class LEColumnFilterEvaluatorFactory extends AbstractColumnFilterComparatorFactory {
     private static final long serialVersionUID = 1068661809768620550L;
 
-    public LEColumnFilterEvaluatorFactory(IColumnFilterValueAccessorFactory left,
-            IColumnFilterValueAccessorFactory right) {
+    public LEColumnFilterEvaluatorFactory(IColumnFilterNormalizedValueAccessorFactory left,
+            IColumnFilterNormalizedValueAccessorFactory right) {
         super(left, right);
     }
 
     @Override
-    protected IColumnFilterEvaluator createComparator(IColumnFilterValueAccessor left,
-            IColumnFilterValueAccessor right) {
+    protected IColumnFilterEvaluator createComparator(IColumnFilterNormalizedValueAccessor left,
+            IColumnFilterNormalizedValueAccessor right) {
         return new AbstractComparator(left, right) {
             @Override
             public boolean evaluate() {
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/LTColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LTColumnFilterEvaluatorFactory.java
similarity index 71%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/LTColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LTColumnFilterEvaluatorFactory.java
index 41c8018..7896ccf 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/compartor/LTColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LTColumnFilterEvaluatorFactory.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.compartor;
+package org.apache.asterix.column.filter.normalized.compartor;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessorFactory;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
 
 public class LTColumnFilterEvaluatorFactory extends AbstractColumnFilterComparatorFactory {
     private static final long serialVersionUID = -4066709771630858677L;
 
-    public LTColumnFilterEvaluatorFactory(IColumnFilterValueAccessorFactory left,
-            IColumnFilterValueAccessorFactory right) {
+    public LTColumnFilterEvaluatorFactory(IColumnFilterNormalizedValueAccessorFactory left,
+            IColumnFilterNormalizedValueAccessorFactory right) {
         super(left, right);
     }
 
     @Override
-    protected IColumnFilterEvaluator createComparator(IColumnFilterValueAccessor left,
-            IColumnFilterValueAccessor right) {
+    protected IColumnFilterEvaluator createComparator(IColumnFilterNormalizedValueAccessor left,
+            IColumnFilterNormalizedValueAccessor right) {
         return new AbstractComparator(left, right) {
             @Override
             public boolean evaluate() {
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/ANDColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ANDColumnFilterEvaluatorFactory.java
similarity index 78%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/ANDColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ANDColumnFilterEvaluatorFactory.java
index 03ae64e..924cbd6 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/ANDColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ANDColumnFilterEvaluatorFactory.java
@@ -16,17 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.evaluator;
+package org.apache.asterix.column.filter.normalized.evaluator;
 
-import org.apache.asterix.column.values.reader.filter.FilterAccessorProvider;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.FalseColumnFilterEvaluator;
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.TrueColumnFilterEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 public class ANDColumnFilterEvaluatorFactory extends AbstractColumnFilterEvaluatorFactory {
     private static final long serialVersionUID = -7902069740719309586L;
 
-    public ANDColumnFilterEvaluatorFactory(IColumnFilterEvaluatorFactory left, IColumnFilterEvaluatorFactory right) {
+    public ANDColumnFilterEvaluatorFactory(IColumnNormalizedFilterEvaluatorFactory left,
+            IColumnNormalizedFilterEvaluatorFactory right) {
         super(left, right);
     }
 
@@ -53,9 +56,9 @@
     }
 
     private IColumnFilterEvaluator create(IColumnFilterEvaluator left, IColumnFilterEvaluator right) {
-        return new AbstractEvaluator(left, right) {
+        return new AbstractNormalizedEvaluator(left, right) {
             @Override
-            public boolean evaluate() {
+            public boolean evaluate() throws HyracksDataException {
                 return left.evaluate() && right.evaluate();
             }
         };
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/AbstractColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/AbstractColumnFilterEvaluatorFactory.java
similarity index 64%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/AbstractColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/AbstractColumnFilterEvaluatorFactory.java
index d1a53d1..66597db 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/AbstractColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/AbstractColumnFilterEvaluatorFactory.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.evaluator;
+package org.apache.asterix.column.filter.normalized.evaluator;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 
-public abstract class AbstractColumnFilterEvaluatorFactory implements IColumnFilterEvaluatorFactory {
+public abstract class AbstractColumnFilterEvaluatorFactory implements IColumnNormalizedFilterEvaluatorFactory {
     private static final long serialVersionUID = 1436531448052787426L;
 
-    protected final IColumnFilterEvaluatorFactory left;
-    protected final IColumnFilterEvaluatorFactory right;
+    protected final IColumnNormalizedFilterEvaluatorFactory left;
+    protected final IColumnNormalizedFilterEvaluatorFactory right;
 
-    public AbstractColumnFilterEvaluatorFactory(IColumnFilterEvaluatorFactory left,
-            IColumnFilterEvaluatorFactory right) {
+    public AbstractColumnFilterEvaluatorFactory(IColumnNormalizedFilterEvaluatorFactory left,
+            IColumnNormalizedFilterEvaluatorFactory right) {
         this.left = left;
         this.right = right;
     }
@@ -40,11 +40,11 @@
         return left.toString() + " " + getOp() + " " + right.toString();
     }
 
-    static abstract class AbstractEvaluator implements IColumnFilterEvaluator {
+    static abstract class AbstractNormalizedEvaluator implements IColumnFilterEvaluator {
         protected final IColumnFilterEvaluator left;
         protected final IColumnFilterEvaluator right;
 
-        AbstractEvaluator(IColumnFilterEvaluator left, IColumnFilterEvaluator right) {
+        AbstractNormalizedEvaluator(IColumnFilterEvaluator left, IColumnFilterEvaluator right) {
             this.left = left;
             this.right = right;
         }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/ORColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ORColumnFilterEvaluatorFactory.java
similarity index 78%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/ORColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ORColumnFilterEvaluatorFactory.java
index aedc9f4..046f05d 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/ORColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ORColumnFilterEvaluatorFactory.java
@@ -16,17 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.values.reader.filter.evaluator;
+package org.apache.asterix.column.filter.normalized.evaluator;
 
-import org.apache.asterix.column.values.reader.filter.FilterAccessorProvider;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.FalseColumnFilterEvaluator;
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.TrueColumnFilterEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 public class ORColumnFilterEvaluatorFactory extends AbstractColumnFilterEvaluatorFactory {
     private static final long serialVersionUID = 9029706131191375500L;
 
-    public ORColumnFilterEvaluatorFactory(IColumnFilterEvaluatorFactory left, IColumnFilterEvaluatorFactory right) {
+    public ORColumnFilterEvaluatorFactory(IColumnNormalizedFilterEvaluatorFactory left,
+            IColumnNormalizedFilterEvaluatorFactory right) {
         super(left, right);
     }
 
@@ -54,9 +57,9 @@
     }
 
     private IColumnFilterEvaluator create(IColumnFilterEvaluator left, IColumnFilterEvaluator right) {
-        return new AbstractEvaluator(left, right) {
+        return new AbstractNormalizedEvaluator(left, right) {
             @Override
-            public boolean evaluate() {
+            public boolean evaluate() throws HyracksDataException {
                 return left.evaluate() || right.evaluate();
             }
         };
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/metadata/schema/visitor/PathExtractorVisitor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/metadata/schema/visitor/PathExtractorVisitor.java
index 2bd2954..707f5b7 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/metadata/schema/visitor/PathExtractorVisitor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/metadata/schema/visitor/PathExtractorVisitor.java
@@ -18,6 +18,11 @@
  */
 package org.apache.asterix.column.metadata.schema.visitor;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.asterix.column.metadata.schema.AbstractSchemaNode;
 import org.apache.asterix.column.metadata.schema.ISchemaNodeVisitor;
 import org.apache.asterix.column.metadata.schema.ObjectSchemaNode;
@@ -25,11 +30,53 @@
 import org.apache.asterix.column.metadata.schema.collection.AbstractCollectionSchemaNode;
 import org.apache.asterix.column.metadata.schema.primitive.MissingFieldSchemaNode;
 import org.apache.asterix.column.metadata.schema.primitive.PrimitiveSchemaNode;
+import org.apache.asterix.column.values.IColumnValuesReader;
+import org.apache.asterix.column.values.IColumnValuesReaderFactory;
+import org.apache.asterix.om.types.ATypeTag;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
+import it.unimi.dsi.fastutil.ints.IntArrayList;
 import it.unimi.dsi.fastutil.ints.IntList;
 
 public class PathExtractorVisitor implements ISchemaNodeVisitor<AbstractSchemaNode, Void> {
+    private final IColumnValuesReaderFactory readerFactory;
+    private final IntList delimiters;
+    private final Int2ObjectMap<IColumnValuesReader> cachedReaders;
+    private int level;
+
+    public PathExtractorVisitor(IColumnValuesReaderFactory readerFactory) {
+        this.readerFactory = readerFactory;
+        cachedReaders = new Int2ObjectOpenHashMap<>();
+        delimiters = new IntArrayList();
+    }
+
+    public List<IColumnValuesReader> getOrCreateReaders(ObjectSchemaNode path, List<IColumnValuesReader> readers)
+            throws HyracksDataException {
+        level = 0;
+        delimiters.clear();
+        AbstractSchemaNode node = path.accept(this, null);
+        ATypeTag typeTag = node.getTypeTag();
+        if (typeTag == ATypeTag.MISSING) {
+            return Collections.emptyList();
+        } else if (typeTag == ATypeTag.UNION) {
+            UnionSchemaNode unionNode = (UnionSchemaNode) node;
+            Collection<AbstractSchemaNode> children = unionNode.getChildren().values();
+            List<IColumnValuesReader> unionReaders = new ArrayList<>();
+            for (AbstractSchemaNode child : children) {
+                if (child.isNested()) {
+                    // ignore nested nodes as we only compare flat types
+                    continue;
+                }
+                IColumnValuesReader reader = getOrCreate(child, readers);
+                unionReaders.add(reader);
+            }
+            return unionReaders;
+        }
+        return Collections.singletonList(getOrCreate(node, readers));
+    }
+
     @Override
     public AbstractSchemaNode visit(ObjectSchemaNode objectNode, Void arg) throws HyracksDataException {
         IntList fieldNameIndexes = objectNode.getChildrenFieldNameIndexes();
@@ -37,6 +84,7 @@
         if (fieldNameIndex < 0) {
             return MissingFieldSchemaNode.INSTANCE;
         }
+        level++;
         return objectNode.getChild(fieldNameIndex).accept(this, null);
     }
 
@@ -46,16 +94,23 @@
         if (itemNode == null) {
             return MissingFieldSchemaNode.INSTANCE;
         }
+        delimiters.add(level - 1);
+        level++;
         return collectionNode.getItemNode().accept(this, null);
     }
 
     @Override
     public AbstractSchemaNode visit(UnionSchemaNode unionNode, Void arg) throws HyracksDataException {
-        for (AbstractSchemaNode node : unionNode.getChildren().values()) {
-            // Using 'for-loop' is the only get the child out of a collection
-            return node.accept(this, null);
+        Collection<AbstractSchemaNode> children = unionNode.getChildren().values();
+        if (children.size() == 1) {
+            // A specific type was requested. Get the requested type from union
+            for (AbstractSchemaNode node : children) {
+                return node.accept(this, null);
+            }
         }
-        return MissingFieldSchemaNode.INSTANCE;
+
+        // Multiple types were requested, return the union
+        return unionNode;
     }
 
     @Override
@@ -63,4 +118,24 @@
         //Missing column index is -1
         return primitiveNode;
     }
+
+    private IColumnValuesReader getOrCreate(AbstractSchemaNode node, List<IColumnValuesReader> readers) {
+        PrimitiveSchemaNode primitiveNode = (PrimitiveSchemaNode) node;
+        int columnIndex = primitiveNode.getColumnIndex();
+        return cachedReaders.computeIfAbsent(columnIndex, k -> createReader(primitiveNode, readers));
+    }
+
+    private IColumnValuesReader createReader(PrimitiveSchemaNode primitiveNode, List<IColumnValuesReader> readers) {
+        IColumnValuesReader reader;
+        if (delimiters.isEmpty()) {
+            reader = readerFactory.createValueReader(primitiveNode.getTypeTag(), primitiveNode.getColumnIndex(), level,
+                    primitiveNode.isPrimaryKey());
+        } else {
+            // array
+            reader = readerFactory.createValueReader(primitiveNode.getTypeTag(), primitiveNode.getColumnIndex(), level,
+                    delimiters.toIntArray());
+        }
+        readers.add(reader);
+        return reader;
+    }
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/metadata/schema/visitor/SchemaClipperVisitor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/metadata/schema/visitor/SchemaClipperVisitor.java
index 351dcdf..5db01f2 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/metadata/schema/visitor/SchemaClipperVisitor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/metadata/schema/visitor/SchemaClipperVisitor.java
@@ -43,12 +43,18 @@
     private final FieldNamesDictionary fieldNamesDictionary;
     private final IWarningCollector warningCollector;
     private final Map<String, FunctionCallInformation> functionCallInfoMap;
+    private boolean ignoreFlatType;
 
     public SchemaClipperVisitor(FieldNamesDictionary fieldNamesDictionary,
             Map<String, FunctionCallInformation> functionCallInfoMap, IWarningCollector warningCollector) {
         this.fieldNamesDictionary = fieldNamesDictionary;
         this.functionCallInfoMap = functionCallInfoMap;
         this.warningCollector = warningCollector;
+        ignoreFlatType = false;
+    }
+
+    public void setIgnoreFlatType(boolean ignoreFlatType) {
+        this.ignoreFlatType = ignoreFlatType;
     }
 
     @Override
@@ -100,7 +106,7 @@
 
     @Override
     public AbstractSchemaNode visitFlat(IAType flatType, AbstractSchemaNode arg) {
-        if (flatType.getTypeTag() == ATypeTag.ANY) {
+        if (ignoreFlatType || flatType.getTypeTag() == ATypeTag.ANY) {
             return arg;
         } else if (isNotCompatible(flatType, arg)) {
             return getNonCompatibleNumericNodeIfAny(flatType, arg);
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnReadMetadata.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnReadMetadata.java
index 11f3059..a1eff69 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnReadMetadata.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnReadMetadata.java
@@ -89,6 +89,16 @@
     }
 
     @Override
+    public int getFilteredColumnIndex(int ordinal) {
+        return -1;
+    }
+
+    @Override
+    public int getNumberOfFilteredColumns() {
+        return 0;
+    }
+
+    @Override
     public AbstractColumnTupleReader createTupleReader() {
         return new MergeColumnTupleReader(this);
     }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/create/PrimaryScanColumnTupleProjector.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/create/PrimaryScanColumnTupleProjector.java
index b993582..c86318e 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/create/PrimaryScanColumnTupleProjector.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/create/PrimaryScanColumnTupleProjector.java
@@ -22,8 +22,8 @@
 import java.io.IOException;
 import java.util.Collections;
 
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.column.operation.query.QueryColumnTupleProjector;
-import org.apache.asterix.column.values.reader.filter.evaluator.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.common.exceptions.NoOpWarningCollector;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -39,7 +39,8 @@
     public PrimaryScanColumnTupleProjector(ARecordType datasetType, int numberOfPrimaryKeys,
             ARecordType requestedType) {
         projector = new QueryColumnTupleProjector(datasetType, numberOfPrimaryKeys, requestedType,
-                Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE);
+                Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE,
+                NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE, null);
     }
 
     @Override
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/create/PrimaryScanColumnTupleWithMetaProjector.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/create/PrimaryScanColumnTupleWithMetaProjector.java
index 0933049..e7fb31f 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/create/PrimaryScanColumnTupleWithMetaProjector.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/create/PrimaryScanColumnTupleWithMetaProjector.java
@@ -22,8 +22,8 @@
 import java.io.IOException;
 import java.util.Collections;
 
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.column.operation.query.QueryColumnWithMetaTupleProjector;
-import org.apache.asterix.column.values.reader.filter.evaluator.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.common.exceptions.NoOpWarningCollector;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -40,7 +40,7 @@
             int numberOfPrimaryKeys, ARecordType requestedType) {
         projector = new QueryColumnWithMetaTupleProjector(datasetType, metaType, numberOfPrimaryKeys, requestedType,
                 Collections.emptyMap(), metaType, Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE,
-                NoOpWarningCollector.INSTANCE);
+                NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE, null);
     }
 
     @Override
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/upsert/UpsertPreviousColumnTupleProjector.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/upsert/UpsertPreviousColumnTupleProjector.java
index b245785..34b0291 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/upsert/UpsertPreviousColumnTupleProjector.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/upsert/UpsertPreviousColumnTupleProjector.java
@@ -22,8 +22,8 @@
 import java.io.IOException;
 import java.util.Collections;
 
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.column.operation.query.QueryColumnTupleProjector;
-import org.apache.asterix.column.values.reader.filter.evaluator.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.common.exceptions.NoOpWarningCollector;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -41,7 +41,8 @@
             ARecordType requestedType) {
         builder = new ArrayTupleBuilder(numberOfPrimaryKeys + 1);
         projector = new QueryColumnTupleProjector(datasetType, numberOfPrimaryKeys, requestedType,
-                Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE);
+                Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE,
+                NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE, null);
     }
 
     @Override
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/upsert/UpsertPreviousColumnTupleWithMetaProjector.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/upsert/UpsertPreviousColumnTupleWithMetaProjector.java
index d6285dc..2c760bf 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/upsert/UpsertPreviousColumnTupleWithMetaProjector.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/secondary/upsert/UpsertPreviousColumnTupleWithMetaProjector.java
@@ -22,8 +22,8 @@
 import java.io.IOException;
 import java.util.Collections;
 
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.column.operation.query.QueryColumnWithMetaTupleProjector;
-import org.apache.asterix.column.values.reader.filter.evaluator.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.common.exceptions.NoOpWarningCollector;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -43,7 +43,7 @@
         builder = new ArrayTupleBuilder(numberOfPrimaryKeys + 2);
         projector = new QueryColumnWithMetaTupleProjector(datasetType, metaType, numberOfPrimaryKeys, requestedType,
                 Collections.emptyMap(), metaType, Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE,
-                NoOpWarningCollector.INSTANCE);
+                NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE, null);
     }
 
     @Override
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 e86f063..23a7856 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
@@ -92,10 +92,15 @@
         return assemblers.length;
     }
 
-    public void skip(int count) throws HyracksDataException {
+    public int skip(int count) throws HyracksDataException {
         tupleIndex += count;
         for (int i = 0; i < assemblers.length; i++) {
             assemblers[i].skip(count);
         }
+        return tupleIndex;
+    }
+
+    public void setAt(int index) throws HyracksDataException {
+        skip(index - tupleIndex);
     }
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnMetadata.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnMetadata.java
index 54ac60c..77bf945 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnMetadata.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnMetadata.java
@@ -22,31 +22,39 @@
 import java.io.DataInput;
 import java.io.DataInputStream;
 import java.io.IOException;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.asterix.column.assembler.value.IValueGetterFactory;
+import org.apache.asterix.column.filter.FalseColumnFilterEvaluator;
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.TrueColumnFilterEvaluator;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 import org.apache.asterix.column.metadata.AbstractColumnImmutableReadMetadata;
 import org.apache.asterix.column.metadata.FieldNamesDictionary;
 import org.apache.asterix.column.metadata.schema.AbstractSchemaNode;
 import org.apache.asterix.column.metadata.schema.ObjectSchemaNode;
 import org.apache.asterix.column.metadata.schema.visitor.SchemaClipperVisitor;
 import org.apache.asterix.column.util.SchemaStringBuilderVisitor;
+import org.apache.asterix.column.values.IColumnValuesReader;
 import org.apache.asterix.column.values.IColumnValuesReaderFactory;
 import org.apache.asterix.column.values.reader.PrimitiveColumnValuesReader;
-import org.apache.asterix.column.values.reader.filter.FilterAccessorProvider;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
-import org.apache.asterix.column.values.reader.filter.evaluator.FalseColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.evaluator.TrueColumnFilterEvaluator;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.runtime.projection.DataProjectionFiltrationInfo;
 import org.apache.asterix.runtime.projection.FunctionCallInformation;
+import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext;
+import org.apache.hyracks.algebricks.runtime.evaluators.EvaluatorContext;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.exceptions.IWarningCollector;
 import org.apache.hyracks.data.std.api.IValueReference;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
+import org.apache.hyracks.dataflow.common.utils.TaskUtil;
 import org.apache.hyracks.storage.am.lsm.btree.column.api.AbstractColumnTupleReader;
 import org.apache.hyracks.util.LogRedactionUtil;
 import org.apache.logging.log4j.LogManager;
@@ -59,22 +67,28 @@
     private static final Logger LOGGER = LogManager.getLogger();
     private final FieldNamesDictionary fieldNamesDictionary;
     private final PrimitiveColumnValuesReader[] primaryKeyReaders;
-    private final IColumnFilterEvaluator filterEvaluator;
-    private final List<IColumnFilterValueAccessor> filterValueAccessors;
+    private final IColumnFilterEvaluator normalizedFilterEvaluator;
+    private final List<IColumnFilterNormalizedValueAccessor> filterValueAccessors;
+    private final IColumnIterableFilterEvaluator columnFilterEvaluator;
+    private final List<IColumnValuesReader> filterColumnReaders;
 
     protected final ColumnAssembler assembler;
 
     protected QueryColumnMetadata(ARecordType datasetType, ARecordType metaType,
             PrimitiveColumnValuesReader[] primaryKeyReaders, IValueReference serializedMetadata,
             FieldNamesDictionary fieldNamesDictionary, ObjectSchemaNode root, IColumnValuesReaderFactory readerFactory,
-            IValueGetterFactory valueGetterFactory, IColumnFilterEvaluator filterEvaluator,
-            List<IColumnFilterValueAccessor> filterValueAccessors) throws HyracksDataException {
+            IValueGetterFactory valueGetterFactory, IColumnFilterEvaluator normalizedFilterEvaluator,
+            List<IColumnFilterNormalizedValueAccessor> filterValueAccessors,
+            IColumnIterableFilterEvaluator columnFilterEvaluator, List<IColumnValuesReader> filterColumnReaders)
+            throws HyracksDataException {
         super(datasetType, metaType, primaryKeyReaders.length, serializedMetadata, -1);
         this.fieldNamesDictionary = fieldNamesDictionary;
         this.assembler = new ColumnAssembler(root, datasetType, this, readerFactory, valueGetterFactory);
         this.primaryKeyReaders = primaryKeyReaders;
-        this.filterEvaluator = filterEvaluator;
+        this.normalizedFilterEvaluator = normalizedFilterEvaluator;
         this.filterValueAccessors = filterValueAccessors;
+        this.columnFilterEvaluator = columnFilterEvaluator;
+        this.filterColumnReaders = filterColumnReaders;
     }
 
     public final ColumnAssembler getAssembler() {
@@ -89,14 +103,22 @@
         return primaryKeyReaders;
     }
 
-    public IColumnFilterEvaluator getFilterEvaluator() {
-        return filterEvaluator;
+    public final IColumnFilterEvaluator getNormalizedFilterEvaluator() {
+        return normalizedFilterEvaluator;
     }
 
-    public List<IColumnFilterValueAccessor> getFilterValueAccessors() {
+    public final List<IColumnFilterNormalizedValueAccessor> getFilterValueAccessors() {
         return filterValueAccessors;
     }
 
+    public final IColumnIterableFilterEvaluator getColumnFilterEvaluator() {
+        return columnFilterEvaluator;
+    }
+
+    public final List<IColumnValuesReader> getFilterColumnReaders() {
+        return filterColumnReaders;
+    }
+
     /* *****************************************************
      * Non-final methods
      * *****************************************************
@@ -112,11 +134,21 @@
     }
 
     @Override
+    public int getFilteredColumnIndex(int ordinal) {
+        return filterColumnReaders.get(ordinal).getColumnIndex();
+    }
+
+    @Override
     public int getNumberOfProjectedColumns() {
         return assembler.getNumberOfColumns();
     }
 
     @Override
+    public int getNumberOfFilteredColumns() {
+        return filterColumnReaders.size();
+    }
+
+    @Override
     public int getNumberOfColumns() {
         return assembler.getNumberOfColumns();
     }
@@ -141,8 +173,9 @@
             IValueReference serializedMetadata, IColumnValuesReaderFactory readerFactory,
             IValueGetterFactory valueGetterFactory, ARecordType requestedType,
             Map<String, FunctionCallInformation> functionCallInfoMap,
-            IColumnFilterEvaluatorFactory filterEvaluatorFactory, IWarningCollector warningCollector)
-            throws IOException {
+            IColumnNormalizedFilterEvaluatorFactory normalizedEvaluatorFactory,
+            IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory, IWarningCollector warningCollector,
+            IHyracksTaskContext context) throws IOException {
         byte[] bytes = serializedMetadata.getByteArray();
         int offset = serializedMetadata.getStartOffset();
         int length = serializedMetadata.getLength();
@@ -166,16 +199,34 @@
                 new SchemaClipperVisitor(fieldNamesDictionary, functionCallInfoMap, warningCollector);
         ObjectSchemaNode clippedRoot = clip(requestedType, root, clipperVisitor);
 
-        FilterAccessorProvider filterAccessorProvider = new FilterAccessorProvider(root, clipperVisitor);
-        IColumnFilterEvaluator filterEvaluator = filterEvaluatorFactory.create(filterAccessorProvider);
-        List<IColumnFilterValueAccessor> filterValueAccessors = filterAccessorProvider.getFilterAccessors();
+        IColumnFilterEvaluator normalizedFilterEvaluator = TrueColumnFilterEvaluator.INSTANCE;
+        IColumnIterableFilterEvaluator columnFilterEvaluator = TrueColumnFilterEvaluator.INSTANCE;
+        List<IColumnValuesReader> filterColumnReaders = Collections.emptyList();
+        List<IColumnFilterNormalizedValueAccessor> filterValueAccessors = Collections.emptyList();
+        if (context != null) {
+            FilterAccessorProvider filterAccessorProvider =
+                    new FilterAccessorProvider(root, clipperVisitor, readerFactory, valueGetterFactory);
+            TaskUtil.put(FilterAccessorProvider.FILTER_ACCESSOR_PROVIDER_KEY, filterAccessorProvider, context);
+            // Min/Max filters in page0
+            normalizedFilterEvaluator = normalizedEvaluatorFactory.create(filterAccessorProvider);
+            filterValueAccessors = filterAccessorProvider.getFilterAccessors();
 
+            // Filter columns (columns appeared in WHERE clause)
+            IEvaluatorContext evaluatorContext = new EvaluatorContext(context);
+            // ignore atomic (or flat) types information
+            clipperVisitor.setIgnoreFlatType(true);
+            filterAccessorProvider.reset();
+            columnFilterEvaluator = columnFilterEvaluatorFactory.create(filterAccessorProvider, evaluatorContext);
+            filterColumnReaders = filterAccessorProvider.getFilterColumnReaders();
+        }
+
+        // Primary key readers
         PrimitiveColumnValuesReader[] primaryKeyReaders =
                 createPrimaryKeyReaders(input, readerFactory, numberOfPrimaryKeys);
 
-        if (LOGGER.isInfoEnabled() && filterEvaluator != TrueColumnFilterEvaluator.INSTANCE) {
-            String filterString = filterEvaluator == FalseColumnFilterEvaluator.INSTANCE ? "SKIP_ALL"
-                    : LogRedactionUtil.userData(filterEvaluatorFactory.toString());
+        if (LOGGER.isInfoEnabled() && normalizedFilterEvaluator != TrueColumnFilterEvaluator.INSTANCE) {
+            String filterString = normalizedFilterEvaluator == FalseColumnFilterEvaluator.INSTANCE ? "SKIP_ALL"
+                    : LogRedactionUtil.userData(normalizedEvaluatorFactory.toString());
             LOGGER.info("Filter: {}", filterString);
         }
 
@@ -183,7 +234,8 @@
         logSchema(clippedRoot, SchemaStringBuilderVisitor.RECORD_SCHEMA, fieldNamesDictionary);
 
         return new QueryColumnMetadata(datasetType, null, primaryKeyReaders, serializedMetadata, fieldNamesDictionary,
-                clippedRoot, readerFactory, valueGetterFactory, filterEvaluator, filterValueAccessors);
+                clippedRoot, readerFactory, valueGetterFactory, normalizedFilterEvaluator, filterValueAccessors,
+                columnFilterEvaluator, filterColumnReaders);
     }
 
     protected static ObjectSchemaNode clip(ARecordType requestedType, ObjectSchemaNode root,
@@ -211,10 +263,10 @@
 
     protected static void logSchema(ObjectSchemaNode root, String schemaSource,
             FieldNamesDictionary fieldNamesDictionary) throws HyracksDataException {
-        if (LOGGER.isDebugEnabled()) {
+        if (LOGGER.isInfoEnabled()) {
             SchemaStringBuilderVisitor schemaBuilder = new SchemaStringBuilderVisitor(fieldNamesDictionary);
             String schema = LogRedactionUtil.userData(schemaBuilder.build(root));
-            LOGGER.debug("Queried {} schema: \n {}", schemaSource, schema);
+            LOGGER.info("Queried {} schema: \n {}", schemaSource, schema);
         }
     }
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnTupleProjector.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnTupleProjector.java
index 08efc2b..e2a69d6 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnTupleProjector.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnTupleProjector.java
@@ -22,13 +22,16 @@
 import java.io.IOException;
 import java.util.Map;
 
+import org.apache.asterix.column.assembler.value.MissingValueGetter;
 import org.apache.asterix.column.assembler.value.ValueGetterFactory;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 import org.apache.asterix.column.tuple.AssembledTupleReference;
 import org.apache.asterix.column.tuple.QueryColumnTupleReference;
 import org.apache.asterix.column.values.reader.ColumnValueReaderFactory;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.runtime.projection.FunctionCallInformation;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.exceptions.IWarningCollector;
 import org.apache.hyracks.data.std.api.IValueReference;
@@ -43,18 +46,24 @@
     protected final int numberOfPrimaryKeys;
     protected final Map<String, FunctionCallInformation> functionCallInfoMap;
     protected final IWarningCollector warningCollector;
-    protected final IColumnFilterEvaluatorFactory filterEvaluator;
+    protected final IHyracksTaskContext context;
+    protected final IColumnNormalizedFilterEvaluatorFactory normalizedFilterEvaluatorFactory;
+    protected final IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory;
     private final AssembledTupleReference assembledTupleReference;
 
     public QueryColumnTupleProjector(ARecordType datasetType, int numberOfPrimaryKeys, ARecordType requestedType,
-            Map<String, FunctionCallInformation> functionCallInfoMap, IColumnFilterEvaluatorFactory filterEvaluator,
-            IWarningCollector warningCollector) {
+            Map<String, FunctionCallInformation> functionCallInfoMap,
+            IColumnNormalizedFilterEvaluatorFactory normalizedFilterEvaluatorFactory,
+            IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory, IWarningCollector warningCollector,
+            IHyracksTaskContext context) {
         this.datasetType = datasetType;
         this.numberOfPrimaryKeys = numberOfPrimaryKeys;
         this.requestedType = requestedType;
         this.functionCallInfoMap = functionCallInfoMap;
-        this.filterEvaluator = filterEvaluator;
+        this.normalizedFilterEvaluatorFactory = normalizedFilterEvaluatorFactory;
+        this.columnFilterEvaluatorFactory = columnFilterEvaluatorFactory;
         this.warningCollector = warningCollector;
+        this.context = context;
         assembledTupleReference = new AssembledTupleReference(getNumberOfTupleFields());
     }
 
@@ -63,7 +72,7 @@
         try {
             return QueryColumnMetadata.create(datasetType, numberOfPrimaryKeys, serializedMetadata,
                     new ColumnValueReaderFactory(), ValueGetterFactory.INSTANCE, requestedType, functionCallInfoMap,
-                    filterEvaluator, warningCollector);
+                    normalizedFilterEvaluatorFactory, columnFilterEvaluatorFactory, warningCollector, context);
         } catch (IOException e) {
             throw HyracksDataException.create(e);
         }
@@ -78,6 +87,9 @@
         }
         if (isColumnar(tuple)) {
             IValueReference assembledRecord = getAssembledValue(tuple);
+            if (assembledRecord == MissingValueGetter.MISSING) {
+                return null;
+            }
             dos.write(assembledRecord.getByteArray(), assembledRecord.getStartOffset(), assembledRecord.getLength());
         } else {
             dos.write(tuple.getFieldData(numberOfPrimaryKeys), tuple.getFieldStart(numberOfPrimaryKeys),
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnTupleProjectorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnTupleProjectorFactory.java
index 0acad67..f63df95 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnTupleProjectorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnTupleProjectorFactory.java
@@ -20,7 +20,8 @@
 
 import java.util.Map;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.runtime.projection.FunctionCallInformation;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
@@ -38,12 +39,14 @@
     private final ARecordType requestedMetaType;
     private final Map<String, FunctionCallInformation> functionCallInfo;
     private final Map<String, FunctionCallInformation> metaFunctionCallInfo;
-    private final IColumnFilterEvaluatorFactory filterEvaluator;
+    private final IColumnNormalizedFilterEvaluatorFactory normalizedFilterEvaluatorFactory;
+    private final IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory;
 
     public QueryColumnTupleProjectorFactory(ARecordType datasetType, ARecordType metaType, int numberOfPrimaryKeys,
             ARecordType requestedType, Map<String, FunctionCallInformation> functionCallInfo,
             ARecordType requestedMetaType, Map<String, FunctionCallInformation> metaFunctionCallInfo,
-            IColumnFilterEvaluatorFactory filterEvaluator) {
+            IColumnNormalizedFilterEvaluatorFactory normalizedFilterEvaluatorFactory,
+            IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory) {
         this.datasetType = datasetType;
         this.metaType = metaType;
         this.numberOfPrimaryKeys = numberOfPrimaryKeys;
@@ -51,7 +54,8 @@
         this.functionCallInfo = functionCallInfo;
         this.requestedMetaType = requestedMetaType;
         this.metaFunctionCallInfo = metaFunctionCallInfo;
-        this.filterEvaluator = filterEvaluator;
+        this.normalizedFilterEvaluatorFactory = normalizedFilterEvaluatorFactory;
+        this.columnFilterEvaluatorFactory = columnFilterEvaluatorFactory;
     }
 
     @Override
@@ -60,10 +64,11 @@
         if (requestedMetaType == null) {
             // The dataset does not contain a meta part
             return new QueryColumnTupleProjector(datasetType, numberOfPrimaryKeys, requestedType, functionCallInfo,
-                    filterEvaluator, warningCollector);
+                    normalizedFilterEvaluatorFactory, columnFilterEvaluatorFactory, warningCollector, context);
         }
         // The dataset has a meta part
         return new QueryColumnWithMetaTupleProjector(datasetType, metaType, numberOfPrimaryKeys, requestedType,
-                functionCallInfo, requestedMetaType, metaFunctionCallInfo, filterEvaluator, warningCollector);
+                functionCallInfo, requestedMetaType, metaFunctionCallInfo, normalizedFilterEvaluatorFactory,
+                columnFilterEvaluatorFactory, warningCollector, context);
     }
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnWithMetaMetadata.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnWithMetaMetadata.java
index 2896231..e63358b 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnWithMetaMetadata.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnWithMetaMetadata.java
@@ -22,27 +22,36 @@
 import java.io.DataInput;
 import java.io.DataInputStream;
 import java.io.IOException;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.asterix.column.assembler.value.IValueGetterFactory;
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.TrueColumnFilterEvaluator;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 import org.apache.asterix.column.metadata.FieldNamesDictionary;
 import org.apache.asterix.column.metadata.schema.AbstractSchemaNode;
 import org.apache.asterix.column.metadata.schema.ObjectSchemaNode;
 import org.apache.asterix.column.metadata.schema.visitor.SchemaClipperVisitor;
 import org.apache.asterix.column.util.SchemaStringBuilderVisitor;
+import org.apache.asterix.column.values.IColumnValuesReader;
 import org.apache.asterix.column.values.IColumnValuesReaderFactory;
 import org.apache.asterix.column.values.reader.PrimitiveColumnValuesReader;
-import org.apache.asterix.column.values.reader.filter.FilterAccessorProvider;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.runtime.projection.FunctionCallInformation;
+import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext;
+import org.apache.hyracks.algebricks.runtime.evaluators.EvaluatorContext;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.exceptions.IWarningCollector;
 import org.apache.hyracks.data.std.api.IValueReference;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
+import org.apache.hyracks.dataflow.common.utils.TaskUtil;
 import org.apache.hyracks.storage.am.lsm.btree.column.api.AbstractColumnTupleReader;
 
 /**
@@ -55,10 +64,11 @@
             PrimitiveColumnValuesReader[] primaryKeyReaders, IValueReference serializedMetadata,
             FieldNamesDictionary fieldNamesDictionary, ObjectSchemaNode root, ObjectSchemaNode metaRoot,
             IColumnValuesReaderFactory readerFactory, IValueGetterFactory valueGetterFactory,
-            IColumnFilterEvaluator filterEvaluator, List<IColumnFilterValueAccessor> filterValueAccessors)
+            IColumnFilterEvaluator filterEvaluator, List<IColumnFilterNormalizedValueAccessor> filterValueAccessors,
+            IColumnIterableFilterEvaluator columnFilterEvaluator, List<IColumnValuesReader> filterColumnReaders)
             throws HyracksDataException {
         super(datasetType, metaType, primaryKeyReaders, serializedMetadata, fieldNamesDictionary, root, readerFactory,
-                valueGetterFactory, filterEvaluator, filterValueAccessors);
+                valueGetterFactory, filterEvaluator, filterValueAccessors, columnFilterEvaluator, filterColumnReaders);
         metaAssembler = new ColumnAssembler(metaRoot, metaType, this, readerFactory, valueGetterFactory);
     }
 
@@ -112,8 +122,9 @@
             IValueGetterFactory valueGetterFactory, ARecordType requestedType,
             Map<String, FunctionCallInformation> functionCallInfo, ARecordType metaRequestedType,
             Map<String, FunctionCallInformation> metaFunctionCallInfo,
-            IColumnFilterEvaluatorFactory filterEvaluatorFactory, IWarningCollector warningCollector)
-            throws IOException {
+            IColumnNormalizedFilterEvaluatorFactory normalizedEvaluatorFactory,
+            IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory, IWarningCollector warningCollector,
+            IHyracksTaskContext context) throws IOException {
         byte[] bytes = serializedMetadata.getByteArray();
         int offset = serializedMetadata.getStartOffset();
         int length = serializedMetadata.getLength();
@@ -138,10 +149,28 @@
                 new SchemaClipperVisitor(fieldNamesDictionary, metaFunctionCallInfo, warningCollector);
         ObjectSchemaNode metaClippedRoot = clip(metaRequestedType, metaRoot, metaClipperVisitor);
 
-        FilterAccessorProvider filterAccessorProvider = new FilterAccessorProvider(root, metaRoot, clipperVisitor);
-        IColumnFilterEvaluator filterEvaluator = filterEvaluatorFactory.create(filterAccessorProvider);
-        List<IColumnFilterValueAccessor> filterValueAccessors = filterAccessorProvider.getFilterAccessors();
+        IColumnFilterEvaluator normalizedFilterEvaluator = TrueColumnFilterEvaluator.INSTANCE;
+        IColumnIterableFilterEvaluator columnFilterEvaluator = TrueColumnFilterEvaluator.INSTANCE;
+        List<IColumnValuesReader> filterColumnReaders = Collections.emptyList();
+        List<IColumnFilterNormalizedValueAccessor> filterValueAccessors = Collections.emptyList();
+        if (context != null) {
+            FilterAccessorProvider filterAccessorProvider =
+                    new FilterAccessorProvider(root, clipperVisitor, readerFactory, valueGetterFactory);
+            TaskUtil.put(FilterAccessorProvider.FILTER_ACCESSOR_PROVIDER_KEY, filterAccessorProvider, context);
+            // Min/Max filters in page0
+            normalizedFilterEvaluator = normalizedEvaluatorFactory.create(filterAccessorProvider);
+            filterValueAccessors = filterAccessorProvider.getFilterAccessors();
 
+            // Filter columns (columns appeared in WHERE clause)
+            IEvaluatorContext evaluatorContext = new EvaluatorContext(context);
+            // ignore atomic (or flat) types information
+            clipperVisitor.setIgnoreFlatType(true);
+            filterAccessorProvider.reset();
+            columnFilterEvaluator = columnFilterEvaluatorFactory.create(filterAccessorProvider, evaluatorContext);
+            filterColumnReaders = filterAccessorProvider.getFilterColumnReaders();
+        }
+
+        // Primary key readers
         PrimitiveColumnValuesReader[] primaryKeyReaders =
                 createPrimaryKeyReaders(input, readerFactory, numberOfPrimaryKeys);
 
@@ -151,7 +180,7 @@
         logSchema(metaClippedRoot, SchemaStringBuilderVisitor.META_RECORD_SCHEMA, fieldNamesDictionary);
 
         return new QueryColumnWithMetaMetadata(datasetType, metaType, primaryKeyReaders, serializedMetadata,
-                fieldNamesDictionary, clippedRoot, metaClippedRoot, readerFactory, valueGetterFactory, filterEvaluator,
-                filterValueAccessors);
+                fieldNamesDictionary, clippedRoot, metaClippedRoot, readerFactory, valueGetterFactory,
+                normalizedFilterEvaluator, filterValueAccessors, columnFilterEvaluator, filterColumnReaders);
     }
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnWithMetaTupleProjector.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnWithMetaTupleProjector.java
index b3deb46..838973f 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnWithMetaTupleProjector.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/QueryColumnWithMetaTupleProjector.java
@@ -23,11 +23,13 @@
 import java.util.Map;
 
 import org.apache.asterix.column.assembler.value.ValueGetterFactory;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 import org.apache.asterix.column.tuple.QueryColumnWithMetaTupleReference;
 import org.apache.asterix.column.values.reader.ColumnValueReaderFactory;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.runtime.projection.FunctionCallInformation;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.exceptions.IWarningCollector;
 import org.apache.hyracks.data.std.api.IValueReference;
@@ -43,8 +45,11 @@
     public QueryColumnWithMetaTupleProjector(ARecordType datasetType, ARecordType metaType, int numberOfPrimaryKeys,
             ARecordType requestedType, Map<String, FunctionCallInformation> functionCallInfoMap,
             ARecordType requestedMetaType, Map<String, FunctionCallInformation> metaFunctionCallInfoMap,
-            IColumnFilterEvaluatorFactory filterEvaluator, IWarningCollector warningCollector) {
-        super(datasetType, numberOfPrimaryKeys, requestedType, functionCallInfoMap, filterEvaluator, warningCollector);
+            IColumnNormalizedFilterEvaluatorFactory filterEvaluator,
+            IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory, IWarningCollector warningCollector,
+            IHyracksTaskContext context) {
+        super(datasetType, numberOfPrimaryKeys, requestedType, functionCallInfoMap, filterEvaluator,
+                columnFilterEvaluatorFactory, warningCollector, context);
         this.metaType = metaType;
         this.requestedMetaType = requestedMetaType;
         this.metaFunctionCallInfoMap = metaFunctionCallInfoMap;
@@ -55,7 +60,8 @@
         try {
             return QueryColumnWithMetaMetadata.create(datasetType, metaType, numberOfPrimaryKeys, serializedMetadata,
                     new ColumnValueReaderFactory(), ValueGetterFactory.INSTANCE, requestedType, functionCallInfoMap,
-                    requestedMetaType, metaFunctionCallInfoMap, filterEvaluator, warningCollector);
+                    requestedMetaType, metaFunctionCallInfoMap, normalizedFilterEvaluatorFactory,
+                    columnFilterEvaluatorFactory, warningCollector, context);
         } catch (IOException e) {
             throw HyracksDataException.create(e);
         }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/MergeColumnTupleReference.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/MergeColumnTupleReference.java
index 56b0a57..61030e1 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/MergeColumnTupleReference.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/MergeColumnTupleReference.java
@@ -79,6 +79,17 @@
     }
 
     @Override
+    protected void startColumnFilter(IColumnBufferProvider buffersProvider, int ordinal, int numberOfTuples)
+            throws HyracksDataException {
+        // NoOp
+    }
+
+    @Override
+    protected boolean evaluateFilter() throws HyracksDataException {
+        return true;
+    }
+
+    @Override
     public void skip(int count) throws HyracksDataException {
         skipCount += count;
     }
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 b70bddc..32d25e3 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
@@ -21,13 +21,20 @@
 import java.nio.ByteBuffer;
 import java.util.List;
 
+import org.apache.asterix.column.assembler.value.MissingValueGetter;
 import org.apache.asterix.column.bytes.stream.in.AbstractBytesInputStream;
+import org.apache.asterix.column.bytes.stream.in.ByteBufferInputStream;
+import org.apache.asterix.column.bytes.stream.in.MultiByteBufferInputStream;
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.IFilterApplier;
+import org.apache.asterix.column.filter.TrueColumnFilterEvaluator;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
 import org.apache.asterix.column.operation.query.ColumnAssembler;
 import org.apache.asterix.column.operation.query.QueryColumnMetadata;
+import org.apache.asterix.column.values.IColumnValuesReader;
 import org.apache.asterix.column.values.reader.PrimitiveColumnValuesReader;
-import org.apache.asterix.column.values.reader.filter.FilterAccessorProvider;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
 import org.apache.asterix.column.values.writer.filters.AbstractColumnFilterWriter;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IValueReference;
@@ -38,15 +45,34 @@
 
 public final class QueryColumnTupleReference extends AbstractAsterixColumnTupleReference {
     private final ColumnAssembler assembler;
-    private final IColumnFilterEvaluator filterEvaluator;
-    private final List<IColumnFilterValueAccessor> filterValueAccessors;
+    private final IColumnFilterEvaluator normalizedFilterEvaluator;
+    private final List<IColumnFilterNormalizedValueAccessor> filterValueAccessors;
+    private final IColumnIterableFilterEvaluator columnFilterEvaluator;
+    private final IFilterApplier filterApplier;
+    private final List<IColumnValuesReader> filterColumnReaders;
+    private final AbstractBytesInputStream[] filteredColumnStreams;
 
     public QueryColumnTupleReference(int componentIndex, ColumnBTreeReadLeafFrame frame,
             QueryColumnMetadata columnMetadata, IColumnReadMultiPageOp multiPageOp) {
         super(componentIndex, frame, columnMetadata, multiPageOp);
         assembler = columnMetadata.getAssembler();
-        filterEvaluator = columnMetadata.getFilterEvaluator();
+
+        normalizedFilterEvaluator = columnMetadata.getNormalizedFilterEvaluator();
         filterValueAccessors = columnMetadata.getFilterValueAccessors();
+
+        columnFilterEvaluator = columnMetadata.getColumnFilterEvaluator();
+        filterColumnReaders = columnMetadata.getFilterColumnReaders();
+        filterApplier = createFilterApplier();
+
+        int numberOfPrimaryKeys = columnMetadata.getNumberOfPrimaryKeys();
+        filteredColumnStreams = new AbstractBytesInputStream[columnMetadata.getNumberOfFilteredColumns()];
+        for (int i = 0; i < filteredColumnStreams.length; i++) {
+            if (filterColumnReaders.get(i).getColumnIndex() >= numberOfPrimaryKeys) {
+                filteredColumnStreams[i] = new MultiByteBufferInputStream();
+            } else {
+                filteredColumnStreams[i] = new ByteBufferInputStream();
+            }
+        }
     }
 
     @Override
@@ -55,7 +81,8 @@
     }
 
     @Override
-    protected boolean startNewPage(ByteBuffer pageZero, int numberOfColumns, int numberOfTuples) {
+    protected boolean startNewPage(ByteBuffer pageZero, int numberOfColumns, int numberOfTuples)
+            throws HyracksDataException {
         //Skip to filters
         pageZero.position(pageZero.position() + numberOfColumns * Integer.BYTES);
         //Set filters' values
@@ -63,12 +90,26 @@
         //Skip filters
         pageZero.position(pageZero.position() + numberOfColumns * AbstractColumnFilterWriter.FILTER_SIZE);
         //Check if we should read all column pages
-        boolean readColumns = filterEvaluator.evaluate();
+        boolean readColumns = normalizedFilterEvaluator.evaluate();
         assembler.reset(readColumns ? numberOfTuples : 0);
+        columnFilterEvaluator.reset();
         return readColumns;
     }
 
     @Override
+    protected void startColumnFilter(IColumnBufferProvider buffersProvider, int ordinal, int numberOfTuples)
+            throws HyracksDataException {
+        AbstractBytesInputStream columnStream = filteredColumnStreams[ordinal];
+        columnStream.reset(buffersProvider);
+        filterColumnReaders.get(ordinal).reset(columnStream, numberOfTuples);
+    }
+
+    @Override
+    protected boolean evaluateFilter() throws HyracksDataException {
+        return columnFilterEvaluator.evaluate();
+    }
+
+    @Override
     protected void startColumn(IColumnBufferProvider buffersProvider, int ordinal, int numberOfTuples)
             throws HyracksDataException {
         AbstractBytesInputStream columnStream = columnStreams[ordinal];
@@ -78,10 +119,31 @@
 
     @Override
     public void skip(int count) throws HyracksDataException {
-        assembler.skip(count);
+        columnFilterEvaluator.setAt(assembler.skip(count));
     }
 
     public IValueReference getAssembledValue() throws HyracksDataException {
-        return assembler.nextValue();
+        return filterApplier.getTuple();
+    }
+
+    private IFilterApplier createFilterApplier() {
+        if (columnFilterEvaluator == TrueColumnFilterEvaluator.INSTANCE) {
+            return assembler::nextValue;
+        } else {
+            return this::getFilteredAssembledValue;
+        }
+    }
+
+    private IValueReference getFilteredAssembledValue() throws HyracksDataException {
+        int index = columnFilterEvaluator.getTupleIndex();
+        // index == -1 if the normalized filter indicated that a mega leaf node
+        // is filtered
+        if (index == tupleIndex) {
+            assembler.setAt(index);
+            // 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/tuple/QueryColumnWithMetaTupleReference.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnWithMetaTupleReference.java
index 5b7794e..e2858ae 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
@@ -21,14 +21,21 @@
 import java.nio.ByteBuffer;
 import java.util.List;
 
+import org.apache.asterix.column.assembler.value.MissingValueGetter;
 import org.apache.asterix.column.bytes.stream.in.AbstractBytesInputStream;
+import org.apache.asterix.column.bytes.stream.in.ByteBufferInputStream;
+import org.apache.asterix.column.bytes.stream.in.MultiByteBufferInputStream;
+import org.apache.asterix.column.filter.FilterAccessorProvider;
+import org.apache.asterix.column.filter.IColumnFilterEvaluator;
+import org.apache.asterix.column.filter.IFilterApplier;
+import org.apache.asterix.column.filter.TrueColumnFilterEvaluator;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
 import org.apache.asterix.column.operation.query.ColumnAssembler;
 import org.apache.asterix.column.operation.query.QueryColumnMetadata;
 import org.apache.asterix.column.operation.query.QueryColumnWithMetaMetadata;
+import org.apache.asterix.column.values.IColumnValuesReader;
 import org.apache.asterix.column.values.reader.PrimitiveColumnValuesReader;
-import org.apache.asterix.column.values.reader.filter.FilterAccessorProvider;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessor;
 import org.apache.asterix.column.values.writer.filters.AbstractColumnFilterWriter;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IValueReference;
@@ -40,16 +47,35 @@
 public final class QueryColumnWithMetaTupleReference extends AbstractAsterixColumnTupleReference {
     private final ColumnAssembler assembler;
     private final ColumnAssembler metaAssembler;
-    private final IColumnFilterEvaluator filterEvaluator;
-    private final List<IColumnFilterValueAccessor> filterValueAccessors;
+    private final IColumnFilterEvaluator normalizedFilterEvaluator;
+    private final List<IColumnFilterNormalizedValueAccessor> filterValueAccessors;
+    private final IColumnIterableFilterEvaluator columnFilterEvaluator;
+    private final IFilterApplier filterApplier;
+    private final List<IColumnValuesReader> filterColumnReaders;
+    private final AbstractBytesInputStream[] filteredColumnStreams;
 
     public QueryColumnWithMetaTupleReference(int componentIndex, ColumnBTreeReadLeafFrame frame,
             QueryColumnMetadata columnMetadata, IColumnReadMultiPageOp multiPageOp) {
         super(componentIndex, frame, columnMetadata, multiPageOp);
         assembler = columnMetadata.getAssembler();
         metaAssembler = ((QueryColumnWithMetaMetadata) columnMetadata).getMetaAssembler();
-        filterEvaluator = columnMetadata.getFilterEvaluator();
+
+        normalizedFilterEvaluator = columnMetadata.getNormalizedFilterEvaluator();
         filterValueAccessors = columnMetadata.getFilterValueAccessors();
+
+        columnFilterEvaluator = columnMetadata.getColumnFilterEvaluator();
+        filterColumnReaders = columnMetadata.getFilterColumnReaders();
+        filterApplier = createFilterApplier();
+
+        int numberOfPrimaryKeys = columnMetadata.getNumberOfPrimaryKeys();
+        filteredColumnStreams = new AbstractBytesInputStream[columnMetadata.getNumberOfFilteredColumns()];
+        for (int i = 0; i < filteredColumnStreams.length; i++) {
+            if (filterColumnReaders.get(i).getColumnIndex() >= numberOfPrimaryKeys) {
+                filteredColumnStreams[i] = new MultiByteBufferInputStream();
+            } else {
+                filteredColumnStreams[i] = new ByteBufferInputStream();
+            }
+        }
     }
 
     @Override
@@ -58,7 +84,8 @@
     }
 
     @Override
-    protected boolean startNewPage(ByteBuffer pageZero, int numberOfColumns, int numberOfTuples) {
+    protected boolean startNewPage(ByteBuffer pageZero, int numberOfColumns, int numberOfTuples)
+            throws HyracksDataException {
         //Skip to filters
         pageZero.position(pageZero.position() + numberOfColumns * Integer.BYTES);
         //Set filters' values
@@ -66,13 +93,27 @@
         //Skip filters
         pageZero.position(pageZero.position() + numberOfColumns * AbstractColumnFilterWriter.FILTER_SIZE);
         //Check if we should read all column pages
-        boolean readColumns = filterEvaluator.evaluate();
+        boolean readColumns = normalizedFilterEvaluator.evaluate();
         assembler.reset(readColumns ? numberOfTuples : 0);
         metaAssembler.reset(readColumns ? numberOfTuples : 0);
+        columnFilterEvaluator.reset();
         return readColumns;
     }
 
     @Override
+    protected void startColumnFilter(IColumnBufferProvider buffersProvider, int ordinal, int numberOfTuples)
+            throws HyracksDataException {
+        AbstractBytesInputStream columnStream = filteredColumnStreams[ordinal];
+        columnStream.reset(buffersProvider);
+        filterColumnReaders.get(ordinal).reset(columnStream, numberOfTuples);
+    }
+
+    @Override
+    protected boolean evaluateFilter() throws HyracksDataException {
+        return columnFilterEvaluator.evaluate();
+    }
+
+    @Override
     protected void startColumn(IColumnBufferProvider buffersProvider, int ordinal, int numberOfTuples)
             throws HyracksDataException {
         AbstractBytesInputStream columnStream = columnStreams[ordinal];
@@ -88,14 +129,36 @@
     @Override
     public void skip(int count) throws HyracksDataException {
         metaAssembler.skip(count);
-        assembler.skip(count);
+        columnFilterEvaluator.setAt(assembler.skip(count));
     }
 
     public IValueReference getAssembledValue() throws HyracksDataException {
-        return assembler.nextValue();
+        return filterApplier.getTuple();
     }
 
     public IValueReference getMetaAssembledValue() throws HyracksDataException {
         return metaAssembler.nextValue();
     }
+
+    private IFilterApplier createFilterApplier() {
+        if (columnFilterEvaluator == TrueColumnFilterEvaluator.INSTANCE) {
+            return assembler::nextValue;
+        } else {
+            return this::getFilteredAssembledValue;
+        }
+    }
+
+    private IValueReference getFilteredAssembledValue() throws HyracksDataException {
+        int index = columnFilterEvaluator.getTupleIndex();
+        // index == -1 if the normalized filter indicated that a mega leaf node
+        // is filtered
+        if (index == tupleIndex) {
+            assembler.setAt(index);
+            metaAssembler.setAt(index);
+            // 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/reader/filter/FilterAccessorProvider.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/FilterAccessorProvider.java
deleted file mode 100644
index 2c8cf19..0000000
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/FilterAccessorProvider.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * 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.filter;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.asterix.column.metadata.schema.ObjectSchemaNode;
-import org.apache.asterix.column.metadata.schema.primitive.PrimitiveSchemaNode;
-import org.apache.asterix.column.metadata.schema.visitor.PathExtractorVisitor;
-import org.apache.asterix.column.metadata.schema.visitor.SchemaClipperVisitor;
-import org.apache.asterix.column.values.reader.filter.value.ColumnFilterValueAccessor;
-import org.apache.asterix.column.values.reader.filter.value.NoOpColumnFilterValueAccessor;
-import org.apache.asterix.column.values.writer.filters.AbstractColumnFilterWriter;
-import org.apache.asterix.om.types.ARecordType;
-import org.apache.asterix.om.types.ATypeTag;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-public class FilterAccessorProvider {
-    private final ObjectSchemaNode root;
-    private final ObjectSchemaNode metaRoot;
-    private final SchemaClipperVisitor clipperVisitor;
-    private final PathExtractorVisitor pathExtractorVisitor;
-    private final Map<ARecordType, PrimitiveSchemaNode> cachedNodes;
-    private final List<IColumnFilterValueAccessor> filterAccessors;
-
-    public FilterAccessorProvider(ObjectSchemaNode root, SchemaClipperVisitor clipperVisitor) {
-        this(root, null, clipperVisitor);
-    }
-
-    public FilterAccessorProvider(ObjectSchemaNode root, ObjectSchemaNode metaRoot,
-            SchemaClipperVisitor clipperVisitor) {
-        this.root = root;
-        this.metaRoot = metaRoot;
-        this.clipperVisitor = clipperVisitor;
-        this.pathExtractorVisitor = new PathExtractorVisitor();
-        cachedNodes = new HashMap<>();
-        filterAccessors = new ArrayList<>();
-    }
-
-    public IColumnFilterValueAccessor createColumnFilterValueAccessor(ARecordType path, boolean min)
-            throws HyracksDataException {
-        PrimitiveSchemaNode node = getNode(path);
-        ATypeTag typeTag = node.getTypeTag();
-        if (typeTag == ATypeTag.MISSING) {
-            return NoOpColumnFilterValueAccessor.INSTANCE;
-        }
-        IColumnFilterValueAccessor accessor = new ColumnFilterValueAccessor(node.getColumnIndex(), typeTag, min);
-        filterAccessors.add(accessor);
-        return accessor;
-    }
-
-    public List<IColumnFilterValueAccessor> getFilterAccessors() {
-        return filterAccessors;
-    }
-
-    public static void setFilterValues(List<IColumnFilterValueAccessor> filterValueAccessors, ByteBuffer pageZero,
-            int numberOfColumns) {
-        for (int i = 0; i < filterValueAccessors.size(); i++) {
-            ColumnFilterValueAccessor accessor = (ColumnFilterValueAccessor) filterValueAccessors.get(i);
-            int columnIndex = accessor.getColumnIndex();
-            long normalizedValue;
-            if (columnIndex < numberOfColumns) {
-                int filterOffset = pageZero.position() + columnIndex * AbstractColumnFilterWriter.FILTER_SIZE;
-                normalizedValue =
-                        accessor.isMin() ? pageZero.getLong(filterOffset) : pageZero.getLong(filterOffset + Long.BYTES);
-            } else {
-                // Column is missing
-                normalizedValue = accessor.isMin() ? Long.MAX_VALUE : Long.MIN_VALUE;
-            }
-            accessor.setNormalizedValue(normalizedValue);
-        }
-    }
-
-    private PrimitiveSchemaNode getNode(ARecordType path) throws HyracksDataException {
-        PrimitiveSchemaNode node = cachedNodes.get(path);
-        if (node == null) {
-            ObjectSchemaNode dataPath = (ObjectSchemaNode) path.accept(clipperVisitor, root);
-            node = (PrimitiveSchemaNode) dataPath.accept(pathExtractorVisitor, null);
-            if (node.getTypeTag() == ATypeTag.MISSING && metaRoot != null) {
-                //Try meta
-                ObjectSchemaNode metaPath = (ObjectSchemaNode) path.accept(clipperVisitor, metaRoot);
-                node = (PrimitiveSchemaNode) metaPath.accept(pathExtractorVisitor, null);
-            }
-            cachedNodes.put(path, node);
-        }
-        return node;
-    }
-}
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessorFactory.java
deleted file mode 100644
index 9621c02..0000000
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/IColumnFilterValueAccessorFactory.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.filter;
-
-import java.io.Serializable;
-
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-@FunctionalInterface
-public interface IColumnFilterValueAccessorFactory extends Serializable {
-    IColumnFilterValueAccessor create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
-}
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/NoOpColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/NoOpColumnFilterEvaluatorFactory.java
deleted file mode 100644
index 765f3c6..0000000
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/filter/evaluator/NoOpColumnFilterEvaluatorFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.filter.evaluator;
-
-import org.apache.asterix.column.values.reader.filter.FilterAccessorProvider;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-public class NoOpColumnFilterEvaluatorFactory implements IColumnFilterEvaluatorFactory {
-    private static final long serialVersionUID = -7122361396576592000L;
-    public static final IColumnFilterEvaluatorFactory INSTANCE = new NoOpColumnFilterEvaluatorFactory();
-
-    private NoOpColumnFilterEvaluatorFactory() {
-    }
-
-    @Override
-    public IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException {
-        // True is also NoOp
-        return TrueColumnFilterEvaluator.INSTANCE;
-    }
-}
diff --git a/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/FlushLargeTest.java b/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/FlushLargeTest.java
index 398c909..24fbf92 100644
--- a/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/FlushLargeTest.java
+++ b/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/FlushLargeTest.java
@@ -26,10 +26,10 @@
 import org.apache.asterix.column.assembler.value.ValueGetterFactory;
 import org.apache.asterix.column.common.buffer.DummyPage;
 import org.apache.asterix.column.common.test.TestCase;
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.column.operation.lsm.flush.FlushColumnMetadata;
 import org.apache.asterix.column.operation.query.QueryColumnMetadata;
 import org.apache.asterix.column.values.reader.ColumnValueReaderFactory;
-import org.apache.asterix.column.values.reader.filter.evaluator.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.common.exceptions.NoOpWarningCollector;
 import org.apache.asterix.runtime.projection.DataProjectionFiltrationInfo;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -63,11 +63,12 @@
         FlushColumnMetadata columnMetadata = prepareNewFile(fileId);
         List<IValueReference> record = getParsedRecords();
         List<DummyPage> pageZeros = transform(fileId, columnMetadata, record, numberOfTuplesToWrite);
-        QueryColumnMetadata readMetadata = QueryColumnMetadata.create(columnMetadata.getDatasetType(),
-                columnMetadata.getNumberOfPrimaryKeys(), columnMetadata.serializeColumnsMetadata(),
-                new ColumnValueReaderFactory(), ValueGetterFactory.INSTANCE,
-                DataProjectionFiltrationInfo.ALL_FIELDS_TYPE, Collections.emptyMap(),
-                NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE);
+        QueryColumnMetadata readMetadata =
+                QueryColumnMetadata.create(columnMetadata.getDatasetType(), columnMetadata.getNumberOfPrimaryKeys(),
+                        columnMetadata.serializeColumnsMetadata(), new ColumnValueReaderFactory(),
+                        ValueGetterFactory.INSTANCE, DataProjectionFiltrationInfo.ALL_FIELDS_TYPE,
+                        Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE,
+                        NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE, null);
         writeResult(fileId, readMetadata, pageZeros);
         testCase.compareRepeated(numberOfTuplesToWrite);
     }
diff --git a/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/FlushSmallTest.java b/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/FlushSmallTest.java
index 6993478..9164a78 100644
--- a/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/FlushSmallTest.java
+++ b/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/FlushSmallTest.java
@@ -26,10 +26,10 @@
 import org.apache.asterix.column.assembler.value.ValueGetterFactory;
 import org.apache.asterix.column.common.buffer.DummyPage;
 import org.apache.asterix.column.common.test.TestCase;
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.column.operation.lsm.flush.FlushColumnMetadata;
 import org.apache.asterix.column.operation.query.QueryColumnMetadata;
 import org.apache.asterix.column.values.reader.ColumnValueReaderFactory;
-import org.apache.asterix.column.values.reader.filter.evaluator.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.common.exceptions.NoOpWarningCollector;
 import org.apache.asterix.runtime.projection.DataProjectionFiltrationInfo;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -62,11 +62,12 @@
         FlushColumnMetadata columnMetadata = prepareNewFile(fileId);
         List<IValueReference> record = getParsedRecords();
         List<DummyPage> pageZeros = transform(fileId, columnMetadata, record, record.size());
-        QueryColumnMetadata readMetadata = QueryColumnMetadata.create(columnMetadata.getDatasetType(),
-                columnMetadata.getNumberOfPrimaryKeys(), columnMetadata.serializeColumnsMetadata(),
-                new ColumnValueReaderFactory(), ValueGetterFactory.INSTANCE,
-                DataProjectionFiltrationInfo.ALL_FIELDS_TYPE, Collections.emptyMap(),
-                NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE);
+        QueryColumnMetadata readMetadata =
+                QueryColumnMetadata.create(columnMetadata.getDatasetType(), columnMetadata.getNumberOfPrimaryKeys(),
+                        columnMetadata.serializeColumnsMetadata(), new ColumnValueReaderFactory(),
+                        ValueGetterFactory.INSTANCE, DataProjectionFiltrationInfo.ALL_FIELDS_TYPE,
+                        Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE,
+                        NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE, null);
         writeResult(fileId, readMetadata, pageZeros);
         testCase.compare();
     }
diff --git a/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/dummy/AssemblerTest.java b/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/dummy/AssemblerTest.java
index ff088d6..fcb228f 100644
--- a/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/dummy/AssemblerTest.java
+++ b/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/dummy/AssemblerTest.java
@@ -33,11 +33,11 @@
 import org.apache.asterix.column.bytes.stream.in.AbstractBytesInputStream;
 import org.apache.asterix.column.common.buffer.DummyBytesInputStream;
 import org.apache.asterix.column.common.test.TestCase;
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.column.operation.query.ColumnAssembler;
 import org.apache.asterix.column.operation.query.QueryColumnMetadata;
 import org.apache.asterix.column.util.RunLengthIntArray;
 import org.apache.asterix.column.values.reader.DummyColumnValuesReaderFactory;
-import org.apache.asterix.column.values.reader.filter.evaluator.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.column.values.writer.DummyColumnValuesWriter;
 import org.apache.asterix.common.exceptions.NoOpWarningCollector;
 import org.apache.asterix.om.pointables.ARecordVisitablePointable;
@@ -98,7 +98,8 @@
         QueryColumnMetadata queryMetadata = QueryColumnMetadata.create(columnMetadata.getDatasetType(),
                 columnMetadata.getNumberOfPrimaryKeys(), columnMetadata.serializeColumnsMetadata(), readerFactory,
                 DummyValueGetterFactory.INSTANCE, DataProjectionFiltrationInfo.ALL_FIELDS_TYPE, Collections.emptyMap(),
-                NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE);
+                NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpColumnFilterEvaluatorFactory.INSTANCE,
+                NoOpWarningCollector.INSTANCE, null);
         AbstractBytesInputStream[] streams = new AbstractBytesInputStream[columnMetadata.getNumberOfColumns()];
         Arrays.fill(streams, DummyBytesInputStream.INSTANCE);
 
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java
index 89e99fd..9f5437b 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java
@@ -158,7 +158,7 @@
                 }
                 int numberOfPrimaryKeys = dataset.getPrimaryKeys().size();
                 ITupleProjectorFactory tupleProjectorFactory =
-                        IndexUtil.createTupleProjectorFactory(dataset.getDatasetFormatInfo(), projectionInfo,
+                        IndexUtil.createTupleProjectorFactory(context, dataset.getDatasetFormatInfo(), projectionInfo,
                                 metaProjectionInfo, datasetType, metaItemType, numberOfPrimaryKeys);
 
                 int[] minFilterFieldIndexes = createFilterIndexes(minFilterVars, opSchema);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java
index 808b8a4..df9fcec 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java
@@ -26,11 +26,12 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
 import org.apache.asterix.column.operation.lsm.secondary.create.PrimaryScanColumnTupleProjectorFactory;
 import org.apache.asterix.column.operation.lsm.secondary.upsert.UpsertPreviousColumnTupleProjectorFactory;
 import org.apache.asterix.column.operation.query.QueryColumnTupleProjectorFactory;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.evaluator.NoOpColumnFilterEvaluatorFactory;
 import org.apache.asterix.common.config.DatasetConfig;
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
@@ -41,6 +42,8 @@
 import org.apache.asterix.metadata.entities.Dataset;
 import org.apache.asterix.metadata.entities.Index;
 import org.apache.asterix.metadata.entities.InternalDatasetDetails;
+import org.apache.asterix.metadata.utils.filter.ColumnFilterBuilder;
+import org.apache.asterix.metadata.utils.filter.NormalizedColumnFilterBuilder;
 import org.apache.asterix.om.base.AString;
 import org.apache.asterix.om.base.IAObject;
 import org.apache.asterix.om.types.ARecordType;
@@ -53,6 +56,7 @@
 import org.apache.hyracks.algebricks.common.utils.Triple;
 import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
 import org.apache.hyracks.algebricks.core.algebra.metadata.IProjectionFiltrationInfo;
+import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.exceptions.SourceLocation;
 import org.apache.hyracks.api.job.IJobletEventListenerFactory;
@@ -264,9 +268,10 @@
                 MetadataConstants.SAMPLE_INDEX_2_PREFIX + datasetName);
     }
 
-    public static ITupleProjectorFactory createTupleProjectorFactory(DatasetFormatInfo datasetFormatInfo,
-            IProjectionFiltrationInfo<?> projectionInfo, IProjectionFiltrationInfo<?> metaProjectionInfo,
-            ARecordType datasetType, ARecordType metaItemType, int numberOfPrimaryKeys) {
+    public static ITupleProjectorFactory createTupleProjectorFactory(JobGenContext context,
+            DatasetFormatInfo datasetFormatInfo, IProjectionFiltrationInfo<?> projectionInfo,
+            IProjectionFiltrationInfo<?> metaProjectionInfo, ARecordType datasetType, ARecordType metaItemType,
+            int numberOfPrimaryKeys) throws AlgebricksException {
         if (datasetFormatInfo.getFormat() == DatasetConfig.DatasetFormat.ROW) {
             return DefaultTupleProjectorFactory.INSTANCE;
         }
@@ -276,7 +281,8 @@
             ARecordType metaType = metaItemType == null ? null : DataProjectionFiltrationInfo.ALL_FIELDS_TYPE;
             return new QueryColumnTupleProjectorFactory(datasetType, metaItemType, numberOfPrimaryKeys,
                     DataProjectionFiltrationInfo.ALL_FIELDS_TYPE, Collections.emptyMap(), metaType,
-                    Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE);
+                    Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE,
+                    NoOpColumnFilterEvaluatorFactory.INSTANCE);
         }
 
         DataProjectionFiltrationInfo metaDataProjectionInfo = (DataProjectionFiltrationInfo) metaProjectionInfo;
@@ -289,12 +295,17 @@
         Map<String, FunctionCallInformation> metaFunctionCallInfo =
                 metaProjectionInfo == null ? null : metaDataProjectionInfo.getFunctionCallInfoMap();
 
-        ColumnFilterBuilder columnFilterBuilder = new ColumnFilterBuilder(dataProjectionInfo);
-        IColumnFilterEvaluatorFactory filterEvaluator = columnFilterBuilder.build();
+        NormalizedColumnFilterBuilder normalizedColumnFilterBuilder =
+                new NormalizedColumnFilterBuilder(dataProjectionInfo);
+        IColumnNormalizedFilterEvaluatorFactory normalizedFilterEvaluatorFactory =
+                normalizedColumnFilterBuilder.build();
+
+        ColumnFilterBuilder columnFilterBuilder = new ColumnFilterBuilder(dataProjectionInfo, context);
+        IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory = columnFilterBuilder.build();
 
         return new QueryColumnTupleProjectorFactory(datasetType, metaItemType, numberOfPrimaryKeys,
                 datasetRequestedType, datasetFunctionCallInfo, metaRequestedType, metaFunctionCallInfo,
-                filterEvaluator);
+                normalizedFilterEvaluatorFactory, columnFilterEvaluatorFactory);
     }
 
     public static ITupleProjectorFactory createUpsertTupleProjectorFactory(DatasetFormatInfo datasetFormatInfo,
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ArrayPathCheckerVisitor.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ArrayPathCheckerVisitor.java
new file mode 100644
index 0000000..ef1915b
--- /dev/null
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ArrayPathCheckerVisitor.java
@@ -0,0 +1,94 @@
+/*
+ * 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.metadata.utils.filter;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.asterix.column.filter.iterable.evaluator.ColumnarRepeatedIterableFilterEvaluator;
+import org.apache.asterix.om.typecomputer.impl.RecordMergeTypeComputer;
+import org.apache.asterix.om.types.ARecordType;
+import org.apache.asterix.om.types.AUnionType;
+import org.apache.asterix.om.types.AbstractCollectionType;
+import org.apache.asterix.om.types.IAType;
+import org.apache.asterix.om.types.IATypeVisitor;
+import org.apache.asterix.runtime.projection.DataProjectionFiltrationInfo;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+
+/**
+ * TODO this should be removed once we support rewindable readers
+ *
+ * @see ColumnarRepeatedIterableFilterEvaluator#evaluate()
+ */
+public class ArrayPathCheckerVisitor implements IATypeVisitor<Boolean, AbstractCollectionType> {
+    private final Set<Object> seenCollections;
+    private boolean firstPath;
+
+    ArrayPathCheckerVisitor() {
+        seenCollections = new HashSet<>();
+    }
+
+    public boolean containsMultipleArrayPaths(Collection<ARecordType> paths) throws AlgebricksException {
+        ARecordType mergedPaths = DataProjectionFiltrationInfo.EMPTY_TYPE;
+        for (ARecordType path : paths) {
+            mergedPaths = (ARecordType) RecordMergeTypeComputer.merge(mergedPaths, path);
+        }
+        firstPath = true;
+        return !mergedPaths.accept(this, null);
+    }
+
+    @Override
+    public Boolean visit(ARecordType recordType, AbstractCollectionType arg) {
+        for (IAType child : recordType.getFieldTypes()) {
+            if (!child.accept(this, null)) {
+                return Boolean.FALSE;
+            }
+        }
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public Boolean visit(AbstractCollectionType collectionType, AbstractCollectionType arg) {
+        if (firstPath) {
+            seenCollections.add(collectionType);
+        } else if (!seenCollections.contains(collectionType)) {
+            return Boolean.FALSE;
+        }
+        return collectionType.getItemType().accept(this, collectionType);
+    }
+
+    @Override
+    public Boolean visit(AUnionType unionType, AbstractCollectionType arg) {
+        for (IAType child : unionType.getUnionList()) {
+            if (!child.accept(this, arg)) {
+                return Boolean.FALSE;
+            }
+        }
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public Boolean visitFlat(IAType flatType, AbstractCollectionType arg) {
+        if (arg != null) {
+            firstPath = false;
+        }
+        return Boolean.TRUE;
+    }
+}
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ColumnFilterBuilder.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ColumnFilterBuilder.java
new file mode 100644
index 0000000..5c770fd
--- /dev/null
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ColumnFilterBuilder.java
@@ -0,0 +1,162 @@
+/*
+ * 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.metadata.utils.filter;
+
+import static org.apache.asterix.metadata.utils.filter.NormalizedColumnFilterBuilder.NORMALIZED_PUSHABLE_FUNCTIONS;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.iterable.accessor.ColumnFilterValueAccessorEvaluatorFactory;
+import org.apache.asterix.column.filter.iterable.evaluator.ColumnIterableFilterEvaluatorFactory;
+import org.apache.asterix.common.api.IApplicationContext;
+import org.apache.asterix.common.config.CompilerProperties;
+import org.apache.asterix.metadata.declared.MetadataProvider;
+import org.apache.asterix.om.functions.BuiltinFunctions;
+import org.apache.asterix.om.functions.IFunctionDescriptor;
+import org.apache.asterix.om.functions.IFunctionManager;
+import org.apache.asterix.om.functions.IFunctionTypeInferer;
+import org.apache.asterix.om.types.ARecordType;
+import org.apache.asterix.runtime.projection.DataProjectionFiltrationInfo;
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
+import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.exceptions.SourceLocation;
+
+public class ColumnFilterBuilder {
+    private final FilterVariableTypeEnvironment typeEnv;
+    private final Map<ILogicalExpression, ARecordType> filterPaths;
+    private final ILogicalExpression filterExpression;
+    private final JobGenContext context;
+    private final ArrayPathCheckerVisitor checkerVisitor;
+
+    public ColumnFilterBuilder(DataProjectionFiltrationInfo projectionFiltrationInfo, JobGenContext context) {
+        typeEnv = new FilterVariableTypeEnvironment();
+        this.filterPaths = projectionFiltrationInfo.getActualPaths();
+        this.filterExpression = projectionFiltrationInfo.getFilterExpression();
+        this.context = context;
+        checkerVisitor = new ArrayPathCheckerVisitor();
+    }
+
+    public IColumnIterableFilterEvaluatorFactory build() throws AlgebricksException {
+        if (filterExpression == null || filterPaths.isEmpty()
+                || checkerVisitor.containsMultipleArrayPaths(filterPaths.values())) {
+            return NoOpColumnFilterEvaluatorFactory.INSTANCE;
+        }
+        IScalarEvaluatorFactory evalFactory = createEvaluator(filterExpression);
+        if (evalFactory == null) {
+            return NoOpColumnFilterEvaluatorFactory.INSTANCE;
+        }
+        return new ColumnIterableFilterEvaluatorFactory(evalFactory);
+    }
+
+    private IScalarEvaluatorFactory createEvaluator(ILogicalExpression expression) throws AlgebricksException {
+        if (filterPaths.containsKey(expression)) {
+            return createValueAccessor(expression);
+        } else if (expression.getExpressionTag() == LogicalExpressionTag.CONSTANT) {
+            return createConstantAccessor(expression);
+        } else if (expression.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+            return handleFunction(expression);
+        }
+        return null;
+    }
+
+    private IScalarEvaluatorFactory createValueAccessor(ILogicalExpression expression) {
+        ARecordType path = filterPaths.get(expression);
+        return new ColumnFilterValueAccessorEvaluatorFactory(path);
+    }
+
+    private IScalarEvaluatorFactory createConstantAccessor(ILogicalExpression expression) throws AlgebricksException {
+        MetadataProvider metadataProvider = (MetadataProvider) context.getMetadataProvider();
+        ConstantExpression constExpr = (ConstantExpression) expression;
+        return metadataProvider.getDataFormat().getConstantEvalFactory(constExpr.getValue());
+    }
+
+    private IScalarEvaluatorFactory handleFunction(ILogicalExpression expr) throws AlgebricksException {
+        AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
+        IScalarEvaluatorFactory[] args = handleArgs(funcExpr);
+        if (args == null) {
+            return null;
+        }
+
+        IFunctionDescriptor fd = resolveFunction(funcExpr);
+        return fd.createEvaluatorFactory(args);
+    }
+
+    private IScalarEvaluatorFactory[] handleArgs(AbstractFunctionCallExpression funcExpr) throws AlgebricksException {
+        List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
+        IScalarEvaluatorFactory[] argsEvalFactories = new IScalarEvaluatorFactory[args.size()];
+        for (int i = 0; i < args.size(); i++) {
+            ILogicalExpression expr = args.get(i).getValue();
+            IScalarEvaluatorFactory evalFactory = createEvaluator(expr);
+            if (evalFactory == null) {
+                return null;
+            }
+            argsEvalFactories[i] = evalFactory;
+        }
+        return argsEvalFactories;
+    }
+
+    private IFunctionDescriptor resolveFunction(AbstractFunctionCallExpression funcExpr) throws AlgebricksException {
+        MetadataProvider metadataProvider = (MetadataProvider) context.getMetadataProvider();
+        IFunctionManager functionManager = metadataProvider.getFunctionManager();
+        FunctionIdentifier fnId = funcExpr.getFunctionIdentifier();
+        SourceLocation sourceLocation = funcExpr.getSourceLocation();
+        IFunctionDescriptor fd = functionManager.lookupFunction(fnId, sourceLocation);
+        fd.setSourceLocation(sourceLocation);
+        IFunctionTypeInferer fnTypeInfer = functionManager.lookupFunctionTypeInferer(fnId);
+        if (fnTypeInfer != null) {
+            CompilerProperties compilerProps = ((IApplicationContext) context.getAppContext()).getCompilerProperties();
+            fnTypeInfer.infer(funcExpr, fd, typeEnv, compilerProps);
+        }
+        return fd;
+    }
+
+    public static boolean isPushable(FunctionIdentifier fid) {
+        return NORMALIZED_PUSHABLE_FUNCTIONS.contains(fid) || !isNestedFunction(fid) && !isTypeFunction(fid);
+    }
+
+    private static boolean isTypeFunction(FunctionIdentifier fid) {
+        return fid.getName().startsWith("is");
+    }
+
+    private static boolean isNestedFunction(FunctionIdentifier fid) {
+        return isObjectFunction(fid) || isArrayFunction(fid) || BuiltinFunctions.DEEP_EQUAL.equals(fid);
+    }
+
+    private static boolean isObjectFunction(FunctionIdentifier fid) {
+        String functionName = fid.getName();
+        return functionName.contains("object") || BuiltinFunctions.PAIRS.equals(fid);
+    }
+
+    private static boolean isArrayFunction(FunctionIdentifier fid) {
+        String functionName = fid.getName();
+        return functionName.startsWith("array") || functionName.startsWith("strict")
+                || BuiltinFunctions.GET_ITEM.equals(fid);
+    }
+
+}
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/FilterVariableTypeEnvironment.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/FilterVariableTypeEnvironment.java
new file mode 100644
index 0000000..0743b1c
--- /dev/null
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/FilterVariableTypeEnvironment.java
@@ -0,0 +1,56 @@
+/*
+ * 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.metadata.utils.filter;
+
+import java.util.List;
+
+import org.apache.asterix.om.types.BuiltinType;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+
+public class FilterVariableTypeEnvironment implements IVariableTypeEnvironment {
+    @Override
+    public Object getVarType(LogicalVariable var) throws AlgebricksException {
+        throw new IllegalAccessError("Should not be invoked");
+    }
+
+    @Override
+    public Object getVarType(LogicalVariable var, List<LogicalVariable> nonMissableVariables,
+            List<List<LogicalVariable>> correlatedMissableVariableLists, List<LogicalVariable> nonNullableVariables,
+            List<List<LogicalVariable>> correlatedNullableVariableLists) throws AlgebricksException {
+        throw new IllegalAccessError("Should not be invoked");
+    }
+
+    @Override
+    public void setVarType(LogicalVariable var, Object type) {
+        throw new IllegalAccessError("Should not be invoked");
+    }
+
+    @Override
+    public Object getType(ILogicalExpression expr) throws AlgebricksException {
+        return BuiltinType.ANY;
+    }
+
+    @Override
+    public boolean substituteProducedVariable(LogicalVariable v1, LogicalVariable v2) throws AlgebricksException {
+        throw new IllegalAccessError("Should not be invoked");
+    }
+}
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ColumnFilterBuilder.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/NormalizedColumnFilterBuilder.java
similarity index 62%
rename from asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ColumnFilterBuilder.java
rename to asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/NormalizedColumnFilterBuilder.java
index e8c2b7f..d667e68 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ColumnFilterBuilder.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/NormalizedColumnFilterBuilder.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.metadata.utils;
+package org.apache.asterix.metadata.utils.filter;
 
 import static org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions.ComparisonKind;
 
@@ -25,17 +25,17 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.asterix.column.values.reader.filter.IColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.IColumnFilterValueAccessorFactory;
-import org.apache.asterix.column.values.reader.filter.compartor.GEColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.compartor.GTColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.compartor.LEColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.compartor.LTColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.evaluator.ANDColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.evaluator.NoOpColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.evaluator.ORColumnFilterEvaluatorFactory;
-import org.apache.asterix.column.values.reader.filter.value.ColumnFilterValueAccessorFactory;
-import org.apache.asterix.column.values.reader.filter.value.ConstantColumnFilterValueAccessorFactory;
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
+import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.accessor.ColumnFilterNormalizedValueAccessorFactory;
+import org.apache.asterix.column.filter.normalized.accessor.ConstantColumnFilterNormalizedValueAccessorFactory;
+import org.apache.asterix.column.filter.normalized.compartor.GEColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.compartor.GTColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.compartor.LEColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.compartor.LTColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.evaluator.ANDColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.normalized.evaluator.ORColumnFilterEvaluatorFactory;
 import org.apache.asterix.om.base.IAObject;
 import org.apache.asterix.om.constants.AsterixConstantValue;
 import org.apache.asterix.om.functions.BuiltinFunctions;
@@ -49,26 +49,26 @@
 import org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
 import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
 
-public class ColumnFilterBuilder {
+public class NormalizedColumnFilterBuilder {
     public static final Set<FunctionIdentifier> COMPARE_FUNCTIONS = getCompareFunctions();
-    public static final Set<FunctionIdentifier> PUSHABLE_FUNCTIONS = getPushableFunctions();
+    public static final Set<FunctionIdentifier> NORMALIZED_PUSHABLE_FUNCTIONS = getNormalizedPushableFunctions();
 
     private final Map<ILogicalExpression, ARecordType> filterPaths;
     private final ILogicalExpression filterExpression;
 
-    public ColumnFilterBuilder(DataProjectionFiltrationInfo projectionFiltrationInfo) {
-        this.filterPaths = projectionFiltrationInfo.getExpressionToPath();
+    public NormalizedColumnFilterBuilder(DataProjectionFiltrationInfo projectionFiltrationInfo) {
+        this.filterPaths = projectionFiltrationInfo.getNormalizedPaths();
         this.filterExpression = projectionFiltrationInfo.getFilterExpression();
     }
 
-    public IColumnFilterEvaluatorFactory build() {
+    public IColumnNormalizedFilterEvaluatorFactory build() {
         if (filterExpression == null || filterPaths.isEmpty()) {
             return NoOpColumnFilterEvaluatorFactory.INSTANCE;
         }
         return createEvaluator(filterPaths, filterExpression);
     }
 
-    private IColumnFilterEvaluatorFactory createEvaluator(Map<ILogicalExpression, ARecordType> filterPaths,
+    private IColumnNormalizedFilterEvaluatorFactory createEvaluator(Map<ILogicalExpression, ARecordType> filterPaths,
             ILogicalExpression filterExpression) {
         AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) filterExpression;
         FunctionIdentifier fid = funcExpr.getFunctionIdentifier();
@@ -79,7 +79,7 @@
         return createEvaluatorsForArgs(funcExpr, filterPaths);
     }
 
-    private IColumnFilterEvaluatorFactory createComparator(FunctionIdentifier fid,
+    private IColumnNormalizedFilterEvaluatorFactory createComparator(FunctionIdentifier fid,
             List<Mutable<ILogicalExpression>> arguments, Map<ILogicalExpression, ARecordType> filterPaths) {
         ILogicalExpression arg0 = arguments.get(0).getValue();
         ILogicalExpression arg1 = arguments.get(1).getValue();
@@ -95,30 +95,35 @@
         }
     }
 
-    private IColumnFilterEvaluatorFactory createEvaluatorsForArgs(AbstractFunctionCallExpression funcExpr,
+    private IColumnNormalizedFilterEvaluatorFactory createEvaluatorsForArgs(AbstractFunctionCallExpression funcExpr,
             Map<ILogicalExpression, ARecordType> filterPaths) {
         List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
         FunctionIdentifier fid = funcExpr.getFunctionIdentifier();
 
         //AND/OR have at least two arguments
-        IColumnFilterEvaluatorFactory arg0 = createEvaluator(filterPaths, args.get(0).getValue());
-        IColumnFilterEvaluatorFactory arg1 = createEvaluator(filterPaths, args.get(1).getValue());
+        IColumnNormalizedFilterEvaluatorFactory arg0 = createEvaluator(filterPaths, args.get(0).getValue());
+        IColumnNormalizedFilterEvaluatorFactory arg1 = createEvaluator(filterPaths, args.get(1).getValue());
 
-        IColumnFilterEvaluatorFactory left = createEvaluator(fid, arg0, arg1);
+        IColumnNormalizedFilterEvaluatorFactory left = createEvaluator(fid, arg0, arg1);
         for (int i = 2; i < args.size() && left != null; i++) {
-            IColumnFilterEvaluatorFactory right = createEvaluator(filterPaths, args.get(i).getValue());
+            IColumnNormalizedFilterEvaluatorFactory right = createEvaluator(filterPaths, args.get(i).getValue());
             left = createEvaluator(fid, left, right);
         }
         return left;
     }
 
-    private IColumnFilterEvaluatorFactory createComparator(FunctionIdentifier fid, ARecordType path, IAObject constant,
-            boolean leftToRight) {
+    private IColumnNormalizedFilterEvaluatorFactory createComparator(FunctionIdentifier fid, ARecordType path,
+            IAObject constant, boolean leftToRight) {
         ComparisonKind comparisonKind = AlgebricksBuiltinFunctions.getComparisonType(fid);
+        if (path == null) {
+            // skipped path
+            return NoOpColumnFilterEvaluatorFactory.INSTANCE;
+        }
 
-        IColumnFilterValueAccessorFactory constValue = ConstantColumnFilterValueAccessorFactory.createFactory(constant);
-        IColumnFilterValueAccessorFactory min = new ColumnFilterValueAccessorFactory(path, true);
-        IColumnFilterValueAccessorFactory max = new ColumnFilterValueAccessorFactory(path, false);
+        IColumnFilterNormalizedValueAccessorFactory constValue =
+                ConstantColumnFilterNormalizedValueAccessorFactory.createFactory(constant);
+        IColumnFilterNormalizedValueAccessorFactory min = new ColumnFilterNormalizedValueAccessorFactory(path, true);
+        IColumnFilterNormalizedValueAccessorFactory max = new ColumnFilterNormalizedValueAccessorFactory(path, false);
 
         if (leftToRight) {
             return createEvaluator(comparisonKind, min, constValue, max);
@@ -126,8 +131,8 @@
         return createEvaluator(invert(comparisonKind), min, constValue, max);
     }
 
-    private static IColumnFilterEvaluatorFactory createEvaluator(FunctionIdentifier fid,
-            IColumnFilterEvaluatorFactory left, IColumnFilterEvaluatorFactory right) {
+    private static IColumnNormalizedFilterEvaluatorFactory createEvaluator(FunctionIdentifier fid,
+            IColumnNormalizedFilterEvaluatorFactory left, IColumnNormalizedFilterEvaluatorFactory right) {
         if (right == null) {
             return null;
         }
@@ -149,16 +154,16 @@
         return ComparisonKind.LT;
     }
 
-    private static IColumnFilterEvaluatorFactory createEvaluator(ComparisonKind comparisonKind,
-            IColumnFilterValueAccessorFactory min, IColumnFilterValueAccessorFactory constVal,
-            IColumnFilterValueAccessorFactory max) {
+    private static IColumnNormalizedFilterEvaluatorFactory createEvaluator(ComparisonKind comparisonKind,
+            IColumnFilterNormalizedValueAccessorFactory min, IColumnFilterNormalizedValueAccessorFactory constVal,
+            IColumnFilterNormalizedValueAccessorFactory max) {
         if (comparisonKind == ComparisonKind.LT) {
             return new GTColumnFilterEvaluatorFactory(constVal, min);
         } else if (comparisonKind == ComparisonKind.LE) {
             return new GEColumnFilterEvaluatorFactory(constVal, min);
         } else if (comparisonKind == ComparisonKind.EQ) {
-            IColumnFilterEvaluatorFactory minComp = new GEColumnFilterEvaluatorFactory(constVal, min);
-            IColumnFilterEvaluatorFactory maxComp = new LEColumnFilterEvaluatorFactory(constVal, max);
+            IColumnNormalizedFilterEvaluatorFactory minComp = new GEColumnFilterEvaluatorFactory(constVal, min);
+            IColumnNormalizedFilterEvaluatorFactory maxComp = new LEColumnFilterEvaluatorFactory(constVal, max);
             return new ANDColumnFilterEvaluatorFactory(minComp, maxComp);
         } else if (comparisonKind == ComparisonKind.GT) {
             return new LTColumnFilterEvaluatorFactory(constVal, max);
@@ -176,7 +181,7 @@
                 AlgebricksBuiltinFunctions.GT, AlgebricksBuiltinFunctions.EQ);
     }
 
-    private static Set<FunctionIdentifier> getPushableFunctions() {
+    private static Set<FunctionIdentifier> getNormalizedPushableFunctions() {
         Set<FunctionIdentifier> pushableFunctions = new HashSet<>(COMPARE_FUNCTIONS);
         pushableFunctions.add(AlgebricksBuiltinFunctions.AND);
         pushableFunctions.add(AlgebricksBuiltinFunctions.OR);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/projection/DataProjectionFiltrationInfo.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/projection/DataProjectionFiltrationInfo.java
index e625163..de9b852 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/projection/DataProjectionFiltrationInfo.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/projection/DataProjectionFiltrationInfo.java
@@ -37,17 +37,21 @@
     public static final ARecordType ALL_FIELDS_TYPE = createType("");
     //Default open record type when requesting none of the fields
     public static final ARecordType EMPTY_TYPE = createType("{}");
+    public static final String FILTER_VALUE_ACCESSOR = "filter-value-accessor";
 
     private final ARecordType root;
     private final Map<String, FunctionCallInformation> functionCallInfoMap;
-    private final Map<ILogicalExpression, ARecordType> expressionToPath;
+    private final Map<ILogicalExpression, ARecordType> normalizedPaths;
+    private final Map<ILogicalExpression, ARecordType> actualPaths;
     private final ILogicalExpression filterExpression;
 
     public DataProjectionFiltrationInfo(ARecordType root, Map<String, FunctionCallInformation> sourceInformationMap,
-            Map<ILogicalExpression, ARecordType> expressionToPath, ILogicalExpression filterExpression) {
+            Map<ILogicalExpression, ARecordType> normalizedPaths, Map<ILogicalExpression, ARecordType> actualPaths,
+            ILogicalExpression filterExpression) {
         this.root = root;
         this.functionCallInfoMap = sourceInformationMap;
-        this.expressionToPath = expressionToPath;
+        this.normalizedPaths = normalizedPaths;
+        this.actualPaths = actualPaths;
         this.filterExpression = filterExpression;
     }
 
@@ -60,7 +64,8 @@
             root = other.root.deepCopy(other.root);
         }
         functionCallInfoMap = new HashMap<>(other.functionCallInfoMap);
-        expressionToPath = new HashMap<>(other.expressionToPath);
+        normalizedPaths = new HashMap<>(other.normalizedPaths);
+        actualPaths = new HashMap<>(other.actualPaths);
         filterExpression = other.filterExpression;
     }
 
@@ -83,8 +88,12 @@
         return functionCallInfoMap;
     }
 
-    public Map<ILogicalExpression, ARecordType> getExpressionToPath() {
-        return expressionToPath;
+    public Map<ILogicalExpression, ARecordType> getNormalizedPaths() {
+        return normalizedPaths;
+    }
+
+    public Map<ILogicalExpression, ARecordType> getActualPaths() {
+        return actualPaths;
     }
 
     @Override
@@ -98,7 +107,7 @@
         DataProjectionFiltrationInfo otherInfo = (DataProjectionFiltrationInfo) o;
         return root.deepEqual(otherInfo.root) && Objects.equals(functionCallInfoMap, otherInfo.functionCallInfoMap)
                 && Objects.equals(filterExpression, otherInfo.filterExpression)
-                && Objects.equals(expressionToPath, otherInfo.expressionToPath);
+                && Objects.equals(normalizedPaths, otherInfo.normalizedPaths);
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexSearchOperatorNodePushable.java b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexSearchOperatorNodePushable.java
index c3719c7..406dbc6 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexSearchOperatorNodePushable.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexSearchOperatorNodePushable.java
@@ -269,6 +269,9 @@
             // tuple must be written first before the filter is applied to
             // assemble columnar tuples
             tuple = writeTupleToOutput(tuple);
+            if (tuple == null) {
+                continue;
+            }
             if (tupleFilter != null) {
                 referenceFilterTuple.reset(tuple);
                 if (!tupleFilter.accept(referenceFilterTuple)) {
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/projection/IColumnProjectionInfo.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/projection/IColumnProjectionInfo.java
index 1506433..641f704 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/projection/IColumnProjectionInfo.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/projection/IColumnProjectionInfo.java
@@ -37,4 +37,15 @@
      * @return number of primary keys
      */
     int getNumberOfPrimaryKeys();
+
+    /**
+     * @param ordinal position of the filtered column
+     * @return column index given the ordinal number of the filtered column
+     */
+    int getFilteredColumnIndex(int ordinal);
+
+    /**
+     * @return number of filtered columns
+     */
+    int getNumberOfFilteredColumns();
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
index 6f95dbf..310b0b6 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
@@ -38,6 +38,7 @@
     private final int componentIndex;
     private final ColumnBTreeReadLeafFrame frame;
     private final IColumnBufferProvider[] primaryKeyBufferProviders;
+    private final IColumnBufferProvider[] filterBufferProviders;
     private final IColumnBufferProvider[] buffersProviders;
     private final int numberOfPrimaryKeys;
     private int totalNumberOfMegaLeafNodes;
@@ -59,11 +60,21 @@
         numberOfPrimaryKeys = info.getNumberOfPrimaryKeys();
 
         primaryKeyBufferProviders = new IColumnBufferProvider[numberOfPrimaryKeys];
-
         for (int i = 0; i < numberOfPrimaryKeys; i++) {
             primaryKeyBufferProviders[i] = new ColumnSingleBufferProvider(i);
         }
 
+        int numberOfFilteredColumns = info.getNumberOfFilteredColumns();
+        filterBufferProviders = new IColumnBufferProvider[numberOfFilteredColumns];
+        for (int i = 0; i < numberOfFilteredColumns; i++) {
+            int columnIndex = info.getFilteredColumnIndex(i);
+            if (columnIndex >= numberOfPrimaryKeys) {
+                filterBufferProviders[i] = new ColumnMultiBufferProvider(columnIndex, multiPageOp);
+            } else {
+                filterBufferProviders[i] = new ColumnSingleBufferProvider(columnIndex);
+            }
+        }
+
         int numberOfRequestedColumns = info.getNumberOfProjectedColumns();
         buffersProviders = new IColumnBufferProvider[numberOfRequestedColumns];
         for (int i = 0; i < numberOfRequestedColumns; i++) {
@@ -105,6 +116,16 @@
         boolean readColumnPages = startNewPage(pageZero, frame.getNumberOfColumns(), numberOfTuples);
         setPrimaryKeysAt(startIndex, startIndex);
         if (readColumnPages) {
+            for (int i = 0; i < filterBufferProviders.length; i++) {
+                IColumnBufferProvider provider = filterBufferProviders[i];
+                //Release previous pinned pages if any
+                provider.releaseAll();
+                provider.reset(frame);
+                startColumnFilter(provider, i, numberOfTuples);
+            }
+        }
+
+        if (readColumnPages && evaluateFilter()) {
             for (int i = 0; i < buffersProviders.length; i++) {
                 IColumnBufferProvider provider = buffersProviders[i];
                 //Release previous pinned pages if any
@@ -131,7 +152,8 @@
 
     protected abstract void setPrimaryKeysAt(int index, int skipCount) throws HyracksDataException;
 
-    protected abstract boolean startNewPage(ByteBuffer pageZero, int numberOfColumns, int numberOfTuples);
+    protected abstract boolean startNewPage(ByteBuffer pageZero, int numberOfColumns, int numberOfTuples)
+            throws HyracksDataException;
 
     protected abstract void startPrimaryKey(IColumnBufferProvider bufferProvider, int ordinal, int numberOfTuples)
             throws HyracksDataException;
@@ -139,6 +161,11 @@
     protected abstract void startColumn(IColumnBufferProvider buffersProvider, int ordinal, int numberOfTuples)
             throws HyracksDataException;
 
+    protected abstract void startColumnFilter(IColumnBufferProvider buffersProvider, int ordinal, int numberOfTuples)
+            throws HyracksDataException;
+
+    protected abstract boolean evaluateFilter() throws HyracksDataException;
+
     protected abstract void onNext() throws HyracksDataException;
 
     protected final int getTupleCount() {
