diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ColumnFilterPushdownProcessor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ColumnFilterPushdownProcessor.java
index 8db7969..00b2dc4 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ColumnFilterPushdownProcessor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ColumnFilterPushdownProcessor.java
@@ -30,7 +30,6 @@
 import org.apache.asterix.common.config.DatasetConfig;
 import org.apache.asterix.metadata.entities.Dataset;
 import org.apache.asterix.metadata.utils.DatasetUtil;
-import org.apache.asterix.metadata.utils.filter.ArrayPathCheckerVisitor;
 import org.apache.asterix.om.functions.BuiltinFunctions;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.optimizer.rules.pushdown.PushdownContext;
@@ -39,6 +38,7 @@
 import org.apache.asterix.optimizer.rules.pushdown.schema.AnyExpectedSchemaNode;
 import org.apache.asterix.optimizer.rules.pushdown.schema.ExpectedSchemaNodeType;
 import org.apache.asterix.optimizer.rules.pushdown.schema.IExpectedSchemaNode;
+import org.apache.asterix.optimizer.rules.pushdown.visitor.ArrayPathCheckerVisitor;
 import org.apache.asterix.optimizer.rules.pushdown.visitor.ColumnFilterPathBuilderVisitor;
 import org.apache.asterix.optimizer.rules.pushdown.visitor.ExpressionToExpectedSchemaNodeVisitor;
 import org.apache.commons.lang3.mutable.Mutable;
@@ -131,7 +131,7 @@
             throws AlgebricksException {
         ILogicalExpression filterExpr = scanDefineDescriptor.getFilterExpression();
         if (filterExpr != null) {
-            filterExpr = orExpression(filterExpr, inlinedExpr);
+            filterExpr = andExpression(filterExpr, inlinedExpr);
             scanDefineDescriptor.setFilterExpression(filterExpr);
         } else {
             scanDefineDescriptor.setFilterExpression(inlinedExpr);
@@ -148,7 +148,7 @@
         return true;
     }
 
-    protected final AbstractFunctionCallExpression orExpression(ILogicalExpression filterExpr,
+    protected final AbstractFunctionCallExpression andExpression(ILogicalExpression filterExpr,
             ILogicalExpression inlinedExpr) {
         AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) filterExpr;
         if (!BuiltinFunctions.AND.equals(funcExpr.getFunctionIdentifier())) {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ColumnRangeFilterPushdownProcessor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ColumnRangeFilterPushdownProcessor.java
index 47db154..b01c06f 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ColumnRangeFilterPushdownProcessor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ColumnRangeFilterPushdownProcessor.java
@@ -109,7 +109,7 @@
     protected boolean putFilterInformation(ScanDefineDescriptor scanDefineDescriptor, ILogicalExpression inlinedExpr) {
         ILogicalExpression filterExpr = scanDefineDescriptor.getRangeFilterExpression();
         if (filterExpr != null) {
-            filterExpr = orExpression(filterExpr, inlinedExpr);
+            filterExpr = andExpression(filterExpr, inlinedExpr);
             scanDefineDescriptor.setRangeFilterExpression(filterExpr);
         } else {
             scanDefineDescriptor.setRangeFilterExpression(inlinedExpr);
@@ -131,7 +131,8 @@
         SourceLocation sourceLocation = funcExpr.getSourceLocation();
         FunctionCallInformation functionCallInfo = new FunctionCallInformation(functionName, sourceLocation,
                 ProjectionFiltrationWarningFactoryProvider.getIncomparableTypesFactory(leftConstant));
-        ARecordType path = pathBuilderVisitor.buildPath(node, constantValue, sourceInformationMap, functionCallInfo);
+        ARecordType path =
+                pathBuilderVisitor.buildPath(node, constantValue.getType(), sourceInformationMap, functionCallInfo);
         paths.put(pathExpr, path);
         return true;
     }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ArrayPathCheckerVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ArrayPathCheckerVisitor.java
similarity index 96%
rename from asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ArrayPathCheckerVisitor.java
rename to asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ArrayPathCheckerVisitor.java
index b1ed40b..46a247b 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ArrayPathCheckerVisitor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ArrayPathCheckerVisitor.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.metadata.utils.filter;
+package org.apache.asterix.optimizer.rules.pushdown.visitor;
 
 import static org.apache.asterix.om.utils.ProjectionFiltrationTypeUtil.EMPTY_TYPE;
 
@@ -39,7 +39,7 @@
  * @see ColumnarRepeatedIterableFilterEvaluator#evaluate()
  */
 public class ArrayPathCheckerVisitor implements IATypeVisitor<Boolean, AbstractCollectionType> {
-    private final Set<Object> seenCollections;
+    private final Set<AbstractCollectionType> seenCollections;
     private boolean firstPath;
 
     public ArrayPathCheckerVisitor() {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ColumnFilterPathBuilderVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ColumnFilterPathBuilderVisitor.java
index 94fff57..79bb9b2 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ColumnFilterPathBuilderVisitor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ColumnFilterPathBuilderVisitor.java
@@ -46,16 +46,16 @@
     private int counter = 0;
 
     public ARecordType buildPath(AnyExpectedSchemaNode anyNode) {
-        return buildPath(anyNode, null, null, null);
+        return buildPath(anyNode, BuiltinType.ANY, null, null);
     }
 
-    public ARecordType buildPath(AnyExpectedSchemaNode anyNode, IAObject constant,
+    public ARecordType buildPath(AnyExpectedSchemaNode anyNode, IAType constType,
             Map<String, FunctionCallInformation> sourceInformationMap, FunctionCallInformation compareFunctionInfo) {
 
         this.sourceInformationMap = sourceInformationMap;
-        this.type = BuiltinType.ANY;
+        this.type = constType;
         if (sourceInformationMap != null) {
-            this.type = rename(constant.getType());
+            this.type = rename(constType);
             sourceInformationMap.put(type.getTypeName(), compareFunctionInfo);
         }
         return (ARecordType) anyNode.accept(this, anyNode);
@@ -104,7 +104,7 @@
         IAType[] fieldTypes = { childType };
         String[] fieldNames = { key };
 
-        return new ARecordType(typeName, fieldNames, fieldTypes, false);
+        return new ARecordType(typeName, fieldNames, fieldTypes, true);
     }
 
     private String getTypeName() {
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.016.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.016.query.sqlpp
index 586ec6d..8725175 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.016.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.016.query.sqlpp
@@ -24,7 +24,7 @@
 
 SELECT VALUE d
 FROM ColumnDataset d
--- The filter should bailout as we
+-- The range filter should bailout as we
 -- don't support type promotion/demotion
 -- for filters
 WHERE (SOME a in d.array SATISFIES a < 100.1)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.017.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.017.query.sqlpp
index f6d1155..b20147f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.017.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/001/001.017.query.sqlpp
@@ -24,7 +24,7 @@
 EXPLAIN
 SELECT VALUE d
 FROM ColumnDataset d
--- The filter should bailout as we
+-- The range filter should bailout as we
 -- don't support type promotion/demotion
 -- for filters
 WHERE (SOME a in d.array SATISFIES a < 100.1)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.007.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.007.plan
index df17e28..fb2c537 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.007.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.007.plan
@@ -18,7 +18,7 @@
                 -- ASSIGN  |PARTITIONED|
                   exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    data-scan []<-[$$20, $$d] <- test.ColumnDataset filter on (and(gt($$19, "1"), lt($$19, "3"))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                    data-scan []<-[$$20, $$d] <- test.ColumnDataset filter on: and(gt($$d.getField("a"), "1"), lt($$d.getField("a"), "3")) range-filter on: and(gt($$d.getField("a"), "1"), lt($$d.getField("a"), "3")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                     -- DATASOURCE_SCAN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.009.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.009.plan
index e1d8169..5247f18 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.009.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.009.plan
@@ -18,7 +18,7 @@
                 -- ASSIGN  |PARTITIONED|
                   exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    data-scan []<-[$$20, $$d] <- test.ColumnDataset filter on (and(gt($$19, 1), lt($$19, 3))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                    data-scan []<-[$$20, $$d] <- test.ColumnDataset filter on: and(gt($$d.getField("a"), 1), lt($$d.getField("a"), 3)) range-filter on: and(gt($$d.getField("a"), 1), lt($$d.getField("a"), 3)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                     -- DATASOURCE_SCAN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.011.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.011.plan
index 9bde6f8..c45186a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.011.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.011.plan
@@ -31,7 +31,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on (lt($$a, "100")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on: lt(scan-collection($$d.getField("array")), "100") range-filter on: lt(scan-collection($$d.getField("array")), "100") [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.013.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.013.plan
index 73c0dad..71850ec 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.013.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.013.plan
@@ -31,7 +31,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on (lt($$a, 100)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on: lt(scan-collection($$d.getField("array")), 100) range-filter on: lt(scan-collection($$d.getField("array")), 100) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.015.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.015.plan
index 8081995..a9ae3bb 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.015.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.015.plan
@@ -31,7 +31,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on (eq($$a, 100)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on: eq(scan-collection($$d.getField("array")), 100) range-filter on: eq(scan-collection($$d.getField("array")), 100) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.017.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.017.plan
index 224f230..92a9008 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.017.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.017.plan
@@ -31,7 +31,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on (lt($$a, 100.1)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on: lt(scan-collection($$d.getField("array")), 100.1) range-filter on: lt(scan-collection($$d.getField("array")), 100.1) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.019.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.019.plan
index 39f91fa..4910f04 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.019.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.019.plan
@@ -22,7 +22,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$29, $$d] <- test.ColumnDataset project ({array:[any]}) filter on (and(gt($$item, 60), lt($$item, 100))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                        data-scan []<-[$$29, $$d] <- test.ColumnDataset project ({array:[any]}) filter on: and(gt(scan-collection($$d.getField("array")), 60), lt(scan-collection($$d.getField("array")), 100)) range-filter on: and(gt(scan-collection($$d.getField("array")), 60), lt(scan-collection($$d.getField("array")), 100)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.021.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.021.plan
index 8b4a749..c808095 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.021.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.021.plan
@@ -22,7 +22,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$27, $$d] <- test.ColumnDataset project ({array:[any]}) filter on (eq($$item, 100)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                        data-scan []<-[$$27, $$d] <- test.ColumnDataset project ({array:[any]}) filter on: eq(scan-collection($$d.getField("array")), 100) range-filter on: eq(scan-collection($$d.getField("array")), 100) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.023.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.023.plan
index ea8f045..dac0c41 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.023.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/001/001.023.plan
@@ -22,7 +22,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$27, $$d] <- test.ColumnDataset project ({array:[any]}) filter on (gt($$item, 10000)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                        data-scan []<-[$$27, $$d] <- test.ColumnDataset project ({array:[any]}) filter on: gt(scan-collection($$d.getField("array")), 10000) range-filter on: gt(scan-collection($$d.getField("array")), 10000) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
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
index c5e17a8..b1842ca 100644
--- 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
@@ -28,7 +28,7 @@
                           -- ASSIGN  |PARTITIONED|
                             exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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: 0.0, op-cost: 0.0, total-cost: 0.0]
+                              data-scan []<-[$$35, $$d] <- test.ColumnDataset project ({a:any,array:[any]}) filter on: or(eq($$d.getField("a"), "1"), gt(scan-collection($$d.getField("array")), 10)) range-filter on: or(eq($$d.getField("a"), "1"), gt(scan-collection($$d.getField("array")), 10)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- DATASOURCE_SCAN  |PARTITIONED|
                                 exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
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
index 7742bab..9be2ed6 100644
--- 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
@@ -26,7 +26,7 @@
                         -- STREAM_PROJECT  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            data-scan []<-[$$48, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (gt($$D, " ")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                            data-scan []<-[$$48, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: gt(scan-collection($$C.getField("dates")), " ") range-filter on: gt(scan-collection($$C.getField("dates")), " ") [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
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
index 45aff78..a246dba 100644
--- 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
@@ -26,7 +26,7 @@
                         -- STREAM_PROJECT  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            data-scan []<-[$$49, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (eq(substring($$D, 0, 4), "2011")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                            data-scan []<-[$$49, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2011") [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
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
index a5caa61..dad5f25 100644
--- 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
@@ -30,7 +30,7 @@
                             -- STREAM_PROJECT  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                data-scan []<-[$$53, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: or(eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2011"), eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2016")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                 -- DATASOURCE_SCAN  |PARTITIONED|
                                   exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
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
index 04762cc..7807f1e 100644
--- 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
@@ -37,7 +37,7 @@
                         -- STREAM_PROJECT  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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: 0.0, op-cost: 0.0, total-cost: 0.0]
+                            data-scan []<-[$$54, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: or(eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2011"), eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2016")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
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
index 13e2226..012f2c7 100644
--- 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
@@ -32,7 +32,7 @@
                               -- STREAM_PROJECT  |PARTITIONED|
                                 exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                  data-scan []<-[$$56, $$C] <- TestYelp.YelpCheckin project ({dates:[any],business_id:any}) filter on: or(starts-with($$C.getField("business_id"), "-0"), eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2011"), eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2016")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                   -- DATASOURCE_SCAN  |PARTITIONED|
                                     exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
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
index dc65a11..d517ee0 100644
--- 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
@@ -26,7 +26,7 @@
                         -- STREAM_PROJECT  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            data-scan []<-[$$49, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (gt(numeric-add($$D, 1), 2018)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                            data-scan []<-[$$49, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: gt(numeric-add(scan-collection($$C.getField("dates")), 1), 2018) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
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
index 230a782..54e5fa0 100644
--- 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
@@ -26,7 +26,7 @@
                         -- STREAM_PROJECT  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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: 0.0, op-cost: 0.0, total-cost: 0.0]
+                            data-scan []<-[$$52, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: or(gt(numeric-add(scan-collection($$C.getField("dates")), 1), 2018), eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2011")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.007.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.007.plan
index 57b0572..8550e65 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.007.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.007.plan
@@ -18,7 +18,7 @@
                 -- ASSIGN  |PARTITIONED|
                   exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 1.0]
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    data-scan []<-[$$20, $$d] <- test.ColumnDataset filter on (and(gt($$19, "1"), lt($$19, "3"))) [cardinality: 6.0, op-cost: 1.0, total-cost: 1.0]
+                    data-scan []<-[$$20, $$d] <- test.ColumnDataset filter on: and(gt($$d.getField("a"), "1"), lt($$d.getField("a"), "3")) range-filter on: and(gt($$d.getField("a"), "1"), lt($$d.getField("a"), "3")) [cardinality: 6.0, op-cost: 1.0, total-cost: 1.0]
                     -- DATASOURCE_SCAN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.009.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.009.plan
index 1ed6e29..26029f0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.009.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.009.plan
@@ -18,7 +18,7 @@
                 -- ASSIGN  |PARTITIONED|
                   exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 0.11]
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    data-scan []<-[$$20, $$d] <- test.ColumnDataset filter on (and(gt($$19, 1), lt($$19, 3))) [cardinality: 6.0, op-cost: 0.11, total-cost: 0.11]
+                    data-scan []<-[$$20, $$d] <- test.ColumnDataset filter on: and(gt($$d.getField("a"), 1), lt($$d.getField("a"), 3)) range-filter on: and(gt($$d.getField("a"), 1), lt($$d.getField("a"), 3)) [cardinality: 6.0, op-cost: 0.11, total-cost: 0.11]
                     -- DATASOURCE_SCAN  |PARTITIONED|
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.011.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.011.plan
index 642b823..6b57afe 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.011.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.011.plan
@@ -31,7 +31,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 0.11]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on (lt($$a, "100")) [cardinality: 6.0, op-cost: 0.11, total-cost: 0.11]
+                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on: lt(scan-collection($$d.getField("array")), "100") range-filter on: lt(scan-collection($$d.getField("array")), "100") [cardinality: 6.0, op-cost: 0.11, total-cost: 0.11]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.013.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.013.plan
index 3252e98..821f0bb 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.013.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.013.plan
@@ -31,7 +31,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 3.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on (lt($$a, 100)) [cardinality: 6.0, op-cost: 3.0, total-cost: 3.0]
+                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on: lt(scan-collection($$d.getField("array")), 100) range-filter on: lt(scan-collection($$d.getField("array")), 100) [cardinality: 6.0, op-cost: 3.0, total-cost: 3.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.015.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.015.plan
index 8659d34..c97dc2a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.015.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.015.plan
@@ -31,7 +31,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 1.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on (eq($$a, 100)) [cardinality: 6.0, op-cost: 1.0, total-cost: 1.0]
+                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on: eq(scan-collection($$d.getField("array")), 100) range-filter on: eq(scan-collection($$d.getField("array")), 100) [cardinality: 6.0, op-cost: 1.0, total-cost: 1.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.017.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.017.plan
index 17622bb..8e80f4c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.017.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.017.plan
@@ -31,7 +31,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 4.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on (lt($$a, 100.1)) [cardinality: 6.0, op-cost: 4.0, total-cost: 4.0]
+                        data-scan []<-[$$28, $$d] <- test.ColumnDataset filter on: lt(scan-collection($$d.getField("array")), 100.1) range-filter on: lt(scan-collection($$d.getField("array")), 100.1) [cardinality: 6.0, op-cost: 4.0, total-cost: 4.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.019.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.019.plan
index ee14cae..484d76f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.019.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.019.plan
@@ -22,7 +22,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 3.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$29, $$d] <- test.ColumnDataset project ({array:[any]}) filter on (and(gt($$item, 60), lt($$item, 100))) [cardinality: 6.0, op-cost: 3.0, total-cost: 3.0]
+                        data-scan []<-[$$29, $$d] <- test.ColumnDataset project ({array:[any]}) filter on: and(gt(scan-collection($$d.getField("array")), 60), lt(scan-collection($$d.getField("array")), 100)) range-filter on: and(gt(scan-collection($$d.getField("array")), 60), lt(scan-collection($$d.getField("array")), 100)) [cardinality: 6.0, op-cost: 3.0, total-cost: 3.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.021.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.021.plan
index 3eb5d69..8b3eb88 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.021.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.021.plan
@@ -22,7 +22,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 1.0]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$27, $$d] <- test.ColumnDataset project ({array:[any]}) filter on (eq($$item, 100)) [cardinality: 6.0, op-cost: 1.0, total-cost: 1.0]
+                        data-scan []<-[$$27, $$d] <- test.ColumnDataset project ({array:[any]}) filter on: eq(scan-collection($$d.getField("array")), 100) range-filter on: eq(scan-collection($$d.getField("array")), 100) [cardinality: 6.0, op-cost: 1.0, total-cost: 1.0]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.023.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.023.plan
index 1db3103..7bda2a5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.023.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.023.plan
@@ -22,7 +22,7 @@
                     -- ASSIGN  |PARTITIONED|
                       exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 0.11]
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        data-scan []<-[$$27, $$d] <- test.ColumnDataset project ({array:[any]}) filter on (gt($$item, 10000)) [cardinality: 6.0, op-cost: 0.11, total-cost: 0.11]
+                        data-scan []<-[$$27, $$d] <- test.ColumnDataset project ({array:[any]}) filter on: gt(scan-collection($$d.getField("array")), 10000) range-filter on: gt(scan-collection($$d.getField("array")), 10000) [cardinality: 6.0, op-cost: 0.11, total-cost: 0.11]
                         -- DATASOURCE_SCAN  |PARTITIONED|
                           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.025.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.025.plan
index f249625..ef44ab2 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.025.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/001/001.025.plan
@@ -28,7 +28,7 @@
                           -- ASSIGN  |PARTITIONED|
                             exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 2.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: 6.0, op-cost: 2.0, total-cost: 2.0]
+                              data-scan []<-[$$35, $$d] <- test.ColumnDataset project ({a:any,array:[any]}) filter on: or(eq($$d.getField("a"), "1"), gt(scan-collection($$d.getField("array")), 10)) range-filter on: or(eq($$d.getField("a"), "1"), gt(scan-collection($$d.getField("array")), 10)) [cardinality: 6.0, op-cost: 2.0, total-cost: 2.0]
                               -- DATASOURCE_SCAN  |PARTITIONED|
                                 exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.006.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.006.plan
index a0f80bd..d2c4559 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.006.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.006.plan
@@ -26,7 +26,7 @@
                         -- STREAM_PROJECT  |PARTITIONED|
                           exchange [cardinality: 30.0, op-cost: 0.0, total-cost: 99.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            data-scan []<-[$$48, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (gt($$D, " ")) [cardinality: 30.0, op-cost: 99.0, total-cost: 99.0]
+                            data-scan []<-[$$48, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: gt(scan-collection($$C.getField("dates")), " ") range-filter on: gt(scan-collection($$C.getField("dates")), " ") [cardinality: 30.0, op-cost: 99.0, total-cost: 99.0]
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.102.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.102.plan
index 0a26cc8..fb64b66 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.102.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.102.plan
@@ -26,7 +26,7 @@
                         -- STREAM_PROJECT  |PARTITIONED|
                           exchange [cardinality: 30.0, op-cost: 0.0, total-cost: 6.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            data-scan []<-[$$49, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (eq(substring($$D, 0, 4), "2011")) [cardinality: 30.0, op-cost: 6.0, total-cost: 6.0]
+                            data-scan []<-[$$49, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2011") [cardinality: 30.0, op-cost: 6.0, total-cost: 6.0]
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.105.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.105.plan
index 1c5ee50..317dccc 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.105.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.105.plan
@@ -30,7 +30,7 @@
                             -- STREAM_PROJECT  |PARTITIONED|
                               exchange [cardinality: 30.0, op-cost: 0.0, total-cost: 20.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: 30.0, op-cost: 20.0, total-cost: 20.0]
+                                data-scan []<-[$$53, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: or(eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2011"), eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2016")) [cardinality: 30.0, op-cost: 20.0, total-cost: 20.0]
                                 -- DATASOURCE_SCAN  |PARTITIONED|
                                   exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.108.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.108.plan
index 6c282bb..f541fed 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.108.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.108.plan
@@ -37,7 +37,7 @@
                         -- STREAM_PROJECT  |PARTITIONED|
                           exchange [cardinality: 30.0, op-cost: 0.0, total-cost: 11.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: 30.0, op-cost: 11.0, total-cost: 11.0]
+                            data-scan []<-[$$54, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: or(eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2011"), eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2016")) [cardinality: 30.0, op-cost: 11.0, total-cost: 11.0]
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.113.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.113.plan
index 5c3412b..5433b03 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.113.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/004/004.113.plan
@@ -32,7 +32,7 @@
                               -- STREAM_PROJECT  |PARTITIONED|
                                 exchange [cardinality: 30.0, op-cost: 0.0, total-cost: 7.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: 30.0, op-cost: 7.0, total-cost: 7.0]
+                                  data-scan []<-[$$56, $$C] <- TestYelp.YelpCheckin project ({dates:[any],business_id:any}) filter on: or(starts-with($$C.getField("business_id"), "-0"), eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2011"), eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2016")) [cardinality: 30.0, op-cost: 7.0, total-cost: 7.0]
                                   -- DATASOURCE_SCAN  |PARTITIONED|
                                     exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/005/005.008.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/005/005.008.plan
index 5d7d75c..1e221be 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/005/005.008.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/005/005.008.plan
@@ -26,7 +26,7 @@
                         -- STREAM_PROJECT  |PARTITIONED|
                           exchange [cardinality: 30.0, op-cost: 0.0, total-cost: 2.0]
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            data-scan []<-[$$49, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on (gt(numeric-add($$D, 1), 2018)) [cardinality: 30.0, op-cost: 2.0, total-cost: 2.0]
+                            data-scan []<-[$$49, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: gt(numeric-add(scan-collection($$C.getField("dates")), 1), 2018) [cardinality: 30.0, op-cost: 2.0, total-cost: 2.0]
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/005/005.011.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/005/005.011.plan
index f989fe0..346e3d3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/005/005.011.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/005/005.011.plan
@@ -26,7 +26,7 @@
                         -- STREAM_PROJECT  |PARTITIONED|
                           exchange [cardinality: 30.0, op-cost: 0.0, total-cost: 8.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: 30.0, op-cost: 8.0, total-cost: 8.0]
+                            data-scan []<-[$$52, $$C] <- TestYelp.YelpCheckin project ({dates:[any]}) filter on: or(gt(numeric-add(scan-collection($$C.getField("dates")), 1), 2018), eq(substring(scan-collection($$C.getField("dates")), 0, 4), "2011")) [cardinality: 30.0, op-cost: 8.0, total-cost: 8.0]
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                               -- ONE_TO_ONE_EXCHANGE  |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 5e09fa6..fc0ceca 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -16226,46 +16226,45 @@
         <output-dir compare="Text">upsert/002</output-dir>
       </compilation-unit>
     </test-case>
-    <!--  Disabled until fully merge the remaining filter patches  -->
-<!--    <test-case FilePath="column" check-warnings="true">-->
-<!--      <compilation-unit name="filter/001">-->
-<!--        <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">-->
-<!--      <compilation-unit name="filter/002">-->
-<!--        <output-dir compare="Text">filter/002</output-dir>-->
-<!--        <expected-warn>ASX0051: Incomparable input types: string and bigint (in line 29, at column 23)</expected-warn>-->
-<!--      </compilation-unit>-->
-<!--    </test-case>-->
-<!--    <test-case FilePath="column">-->
-<!--      <compilation-unit name="filter/003">-->
-<!--        <output-dir compare="Text">filter/003</output-dir>-->
-<!--      </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" check-warnings="true">
+      <compilation-unit name="filter/001">
+        <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">
+      <compilation-unit name="filter/002">
+        <output-dir compare="Text">filter/002</output-dir>
+        <expected-warn>ASX0051: Incomparable input types: string and bigint (in line 29, at column 23)</expected-warn>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="column">
+      <compilation-unit name="filter/003">
+        <output-dir compare="Text">filter/003</output-dir>
+      </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>
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
index 2302aa6..12c0078 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
@@ -30,9 +30,9 @@
 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.filter.range.IColumnRangeFilterValueAccessor;
+import org.apache.asterix.column.filter.range.accessor.ColumnRangeFilterValueAccessor;
+import org.apache.asterix.column.filter.range.accessor.NoOpColumnRangeFilterValueAccessor;
 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;
@@ -54,7 +54,7 @@
     private final SchemaClipperVisitor clipperVisitor;
     private final PathExtractorVisitor pathExtractorVisitor;
     private final Map<ARecordType, PrimitiveSchemaNode> cachedNodes;
-    private final List<IColumnFilterNormalizedValueAccessor> filterAccessors;
+    private final List<IColumnRangeFilterValueAccessor> filterAccessors;
     private final List<IColumnValuesReader> filterColumnReaders;
     private final IValueGetterFactory valueGetterFactory;
 
@@ -79,7 +79,7 @@
         cachedNodes.clear();
     }
 
-    public IColumnFilterNormalizedValueAccessor createColumnFilterNormalizedValueAccessor(ARecordType path, boolean min)
+    public IColumnRangeFilterValueAccessor createRangeFilterValueAccessor(ARecordType path, boolean min)
             throws HyracksDataException {
         PrimitiveSchemaNode node = cachedNodes.get(path);
         if (node == null) {
@@ -90,10 +90,10 @@
 
         ATypeTag typeTag = node.getTypeTag();
         if (typeTag == ATypeTag.MISSING) {
-            return NoOpColumnFilterValueAccessor.INSTANCE;
+            return NoOpColumnRangeFilterValueAccessor.INSTANCE;
         }
-        IColumnFilterNormalizedValueAccessor accessor =
-                new ColumnFilterNormalizedValueAccessor(node.getColumnIndex(), typeTag, min);
+        IColumnRangeFilterValueAccessor accessor =
+                new ColumnRangeFilterValueAccessor(node.getColumnIndex(), typeTag, min);
         filterAccessors.add(accessor);
         return accessor;
     }
@@ -118,7 +118,7 @@
         return new UnionColumnFilterValueAccessorEvaluator(unionReaders, valueGetters);
     }
 
-    public List<IColumnFilterNormalizedValueAccessor> getFilterAccessors() {
+    public List<IColumnRangeFilterValueAccessor> getFilterAccessors() {
         return filterAccessors;
     }
 
@@ -126,11 +126,10 @@
         return filterColumnReaders;
     }
 
-    public static void setFilterValues(List<IColumnFilterNormalizedValueAccessor> filterValueAccessors,
-            ByteBuffer pageZero, int numberOfColumns) {
+    public static void setFilterValues(List<IColumnRangeFilterValueAccessor> filterValueAccessors, ByteBuffer pageZero,
+            int numberOfColumns) {
         for (int i = 0; i < filterValueAccessors.size(); i++) {
-            ColumnFilterNormalizedValueAccessor accessor =
-                    (ColumnFilterNormalizedValueAccessor) filterValueAccessors.get(i);
+            ColumnRangeFilterValueAccessor accessor = (ColumnRangeFilterValueAccessor) filterValueAccessors.get(i);
             int columnIndex = accessor.getColumnIndex();
             long normalizedValue;
             if (columnIndex < numberOfColumns) {
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/IColumnFilterEvaluator.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/IColumnFilterEvaluator.java
index 023e04f..f20e4ee 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/IColumnFilterEvaluator.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/IColumnFilterEvaluator.java
@@ -19,11 +19,11 @@
 package org.apache.asterix.column.filter;
 
 import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
-import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterEvaluatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 /**
- * An evaluator created by either {@link IColumnNormalizedFilterEvaluatorFactory}
+ * An evaluator created by either {@link IColumnRangeFilterEvaluatorFactory}
  * or {@link IColumnIterableFilterEvaluatorFactory}.
  */
 public interface IColumnFilterEvaluator {
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
index b14402b..4c649a2 100644
--- 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
@@ -20,7 +20,7 @@
 
 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.asterix.column.filter.range.IColumnRangeFilterEvaluatorFactory;
 import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
@@ -28,7 +28,7 @@
  * The factory returns {@link TrueColumnFilterEvaluator#INSTANCE} which evaluates always to true
  */
 public class NoOpColumnFilterEvaluatorFactory
-        implements IColumnNormalizedFilterEvaluatorFactory, IColumnIterableFilterEvaluatorFactory {
+        implements IColumnRangeFilterEvaluatorFactory, IColumnIterableFilterEvaluatorFactory {
     private static final long serialVersionUID = -7122361396576592000L;
     public static final NoOpColumnFilterEvaluatorFactory INSTANCE = new NoOpColumnFilterEvaluatorFactory();
 
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnNormalizedFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/IColumnRangeFilterEvaluatorFactory.java
similarity index 91%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnNormalizedFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/IColumnRangeFilterEvaluatorFactory.java
index 4832d64..969f114 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnNormalizedFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/IColumnRangeFilterEvaluatorFactory.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized;
+package org.apache.asterix.column.filter.range;
 
 import java.io.Serializable;
 import java.util.PriorityQueue;
@@ -35,6 +35,6 @@
  * @see IColumnBatchWriter#writeColumns(PriorityQueue)
  */
 @FunctionalInterface
-public interface IColumnNormalizedFilterEvaluatorFactory extends Serializable {
+public interface IColumnRangeFilterEvaluatorFactory extends Serializable {
     IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnFilterNormalizedValueAccessor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/IColumnRangeFilterValueAccessor.java
similarity index 87%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnFilterNormalizedValueAccessor.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/IColumnRangeFilterValueAccessor.java
index 99937cc..7ba01b7 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnFilterNormalizedValueAccessor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/IColumnRangeFilterValueAccessor.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized;
+package org.apache.asterix.column.filter.range;
 
 import org.apache.asterix.om.types.ATypeTag;
 
 /**
- * Creates a normalized value accessor
+ * Creates a range value accessor
  */
-public interface IColumnFilterNormalizedValueAccessor {
+public interface IColumnRangeFilterValueAccessor {
     /**
      * @return the normalized value
      */
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/range/IColumnRangeFilterValueAccessorFactory.java
similarity index 83%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/IColumnFilterNormalizedValueAccessorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/IColumnRangeFilterValueAccessorFactory.java
index d27718e..fc97c1a 100644
--- 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/range/IColumnRangeFilterValueAccessorFactory.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized;
+package org.apache.asterix.column.filter.range;
 
 import java.io.Serializable;
 import java.util.PriorityQueue;
@@ -34,7 +34,6 @@
  * @see IColumnBatchWriter#writeColumns(PriorityQueue)
  */
 @FunctionalInterface
-public interface IColumnFilterNormalizedValueAccessorFactory extends Serializable {
-    IColumnFilterNormalizedValueAccessor create(FilterAccessorProvider filterAccessorProvider)
-            throws HyracksDataException;
+public interface IColumnRangeFilterValueAccessorFactory extends Serializable {
+    IColumnRangeFilterValueAccessor create(FilterAccessorProvider filterAccessorProvider) throws HyracksDataException;
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ColumnRangeFilterValueAccessor.java
similarity index 78%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessor.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ColumnRangeFilterValueAccessor.java
index da1d176..de68ab3 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ColumnRangeFilterValueAccessor.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.accessor;
+package org.apache.asterix.column.filter.range.accessor;
 
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessor;
 import org.apache.asterix.om.types.ATypeTag;
 
-public class ColumnFilterNormalizedValueAccessor implements IColumnFilterNormalizedValueAccessor {
+public class ColumnRangeFilterValueAccessor implements IColumnRangeFilterValueAccessor {
     private final int columnIndex;
     private final ATypeTag typeTag;
     private final boolean min;
     private long normalizedValue;
 
-    public ColumnFilterNormalizedValueAccessor(int columnIndex, ATypeTag typeTag, boolean min) {
+    public ColumnRangeFilterValueAccessor(int columnIndex, ATypeTag typeTag, boolean min) {
         this.columnIndex = columnIndex;
         this.typeTag = typeTag;
         this.min = min;
@@ -54,4 +54,9 @@
     public ATypeTag getTypeTag() {
         return typeTag;
     }
+
+    @Override
+    public String toString() {
+        return Long.toString(normalizedValue);
+    }
 }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ColumnRangeFilterValueAccessorFactory.java
similarity index 72%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ColumnRangeFilterValueAccessorFactory.java
index 8e7c858..232484b 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ColumnFilterNormalizedValueAccessorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ColumnRangeFilterValueAccessorFactory.java
@@ -16,29 +16,29 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.accessor;
+package org.apache.asterix.column.filter.range.accessor;
 
 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.column.filter.range.IColumnRangeFilterValueAccessor;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessorFactory;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.visitor.PathStringBuilderForIATypeVisitor;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-public class ColumnFilterNormalizedValueAccessorFactory implements IColumnFilterNormalizedValueAccessorFactory {
+public class ColumnRangeFilterValueAccessorFactory implements IColumnRangeFilterValueAccessorFactory {
     private static final long serialVersionUID = -6341611172763952841L;
     private final ARecordType path;
     private final boolean min;
 
-    public ColumnFilterNormalizedValueAccessorFactory(ARecordType path, boolean min) {
+    public ColumnRangeFilterValueAccessorFactory(ARecordType path, boolean min) {
         this.path = path;
         this.min = min;
     }
 
     @Override
-    public IColumnFilterNormalizedValueAccessor create(FilterAccessorProvider filterAccessorProvider)
+    public IColumnRangeFilterValueAccessor create(FilterAccessorProvider filterAccessorProvider)
             throws HyracksDataException {
-        return filterAccessorProvider.createColumnFilterNormalizedValueAccessor(path, min);
+        return filterAccessorProvider.createRangeFilterValueAccessor(path, min);
     }
 
     @Override
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ConstantColumnRangeFilterValueAccessor.java
similarity index 78%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessor.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ConstantColumnRangeFilterValueAccessor.java
index cca3cab..ae84e35 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ConstantColumnRangeFilterValueAccessor.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.accessor;
+package org.apache.asterix.column.filter.range.accessor;
 
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessor;
 import org.apache.asterix.om.types.ATypeTag;
 
-public final class ConstantColumnFilterNormalizedValueAccessor implements IColumnFilterNormalizedValueAccessor {
+public final class ConstantColumnRangeFilterValueAccessor implements IColumnRangeFilterValueAccessor {
     private final long normalizedValue;
     private final ATypeTag typeTag;
 
     //TODO add UUID
 
-    public ConstantColumnFilterNormalizedValueAccessor(long normalizedValue, ATypeTag typeTag) {
+    public ConstantColumnRangeFilterValueAccessor(long normalizedValue, ATypeTag typeTag) {
         this.normalizedValue = normalizedValue;
         this.typeTag = typeTag;
     }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ConstantColumnRangeFilterValueAccessorFactory.java
similarity index 75%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ConstantColumnRangeFilterValueAccessorFactory.java
index 667a2c3..4d2c198 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/ConstantColumnFilterNormalizedValueAccessorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/ConstantColumnRangeFilterValueAccessorFactory.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.accessor;
+package org.apache.asterix.column.filter.range.accessor;
 
 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.column.filter.range.IColumnRangeFilterValueAccessor;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessorFactory;
 import org.apache.asterix.om.base.ADouble;
 import org.apache.asterix.om.base.AInt64;
 import org.apache.asterix.om.base.AString;
@@ -28,20 +28,19 @@
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-public class ConstantColumnFilterNormalizedValueAccessorFactory implements IColumnFilterNormalizedValueAccessorFactory {
+public class ConstantColumnRangeFilterValueAccessorFactory implements IColumnRangeFilterValueAccessorFactory {
     private static final long serialVersionUID = -4835407779342615453L;
     private final long normalizedValue;
     private final ATypeTag typeTag;
     private final String stringValue;
 
-    private ConstantColumnFilterNormalizedValueAccessorFactory(String stringValue, long normalizedValue,
-            ATypeTag typeTag) {
+    private ConstantColumnRangeFilterValueAccessorFactory(String stringValue, long normalizedValue, ATypeTag typeTag) {
         this.stringValue = stringValue;
         this.normalizedValue = normalizedValue;
         this.typeTag = typeTag;
     }
 
-    public static ConstantColumnFilterNormalizedValueAccessorFactory createFactory(IAObject value) {
+    public static ConstantColumnRangeFilterValueAccessorFactory createFactory(IAObject value) {
         String stringValue;
         long normalizedValue;
         ATypeTag typeTag = value.getType().getTypeTag();
@@ -64,13 +63,13 @@
                 return null;
         }
 
-        return new ConstantColumnFilterNormalizedValueAccessorFactory(stringValue, normalizedValue, typeTag);
+        return new ConstantColumnRangeFilterValueAccessorFactory(stringValue, normalizedValue, typeTag);
     }
 
     @Override
-    public IColumnFilterNormalizedValueAccessor create(FilterAccessorProvider filterAccessorProvider)
+    public IColumnRangeFilterValueAccessor create(FilterAccessorProvider filterAccessorProvider)
             throws HyracksDataException {
-        return new ConstantColumnFilterNormalizedValueAccessor(normalizedValue, typeTag);
+        return new ConstantColumnRangeFilterValueAccessor(normalizedValue, typeTag);
     }
 
     @Override
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/NoOpColumnFilterValueAccessor.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/NoOpColumnRangeFilterValueAccessor.java
similarity index 72%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/NoOpColumnFilterValueAccessor.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/NoOpColumnRangeFilterValueAccessor.java
index acd3a44..5d538c7 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/accessor/NoOpColumnFilterValueAccessor.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/accessor/NoOpColumnRangeFilterValueAccessor.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.accessor;
+package org.apache.asterix.column.filter.range.accessor;
 
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessor;
 import org.apache.asterix.om.types.ATypeTag;
 
-public class NoOpColumnFilterValueAccessor implements IColumnFilterNormalizedValueAccessor {
-    public static final IColumnFilterNormalizedValueAccessor INSTANCE = new NoOpColumnFilterValueAccessor();
+public class NoOpColumnRangeFilterValueAccessor implements IColumnRangeFilterValueAccessor {
+    public static final IColumnRangeFilterValueAccessor INSTANCE = new NoOpColumnRangeFilterValueAccessor();
 
-    private NoOpColumnFilterValueAccessor() {
+    private NoOpColumnRangeFilterValueAccessor() {
     }
 
     @Override
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/AbstractColumnFilterComparatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/AbstractColumnFilterComparatorFactory.java
similarity index 68%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/AbstractColumnFilterComparatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/AbstractColumnFilterComparatorFactory.java
index cb63204..0374a4d 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/AbstractColumnFilterComparatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/AbstractColumnFilterComparatorFactory.java
@@ -16,26 +16,26 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.compartor;
+package org.apache.asterix.column.filter.range.compartor;
 
 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.column.filter.range.IColumnRangeFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessor;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessorFactory;
 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 IColumnNormalizedFilterEvaluatorFactory {
+abstract class AbstractColumnFilterComparatorFactory implements IColumnRangeFilterEvaluatorFactory {
     private static final long serialVersionUID = 4229059703449173694L;
-    private final IColumnFilterNormalizedValueAccessorFactory left;
-    private final IColumnFilterNormalizedValueAccessorFactory right;
+    private final IColumnRangeFilterValueAccessorFactory left;
+    private final IColumnRangeFilterValueAccessorFactory right;
 
-    AbstractColumnFilterComparatorFactory(IColumnFilterNormalizedValueAccessorFactory left,
-            IColumnFilterNormalizedValueAccessorFactory right) {
+    AbstractColumnFilterComparatorFactory(IColumnRangeFilterValueAccessorFactory left,
+            IColumnRangeFilterValueAccessorFactory right) {
         this.left = left;
         this.right = right;
     }
@@ -43,8 +43,8 @@
     @Override
     public final IColumnFilterEvaluator create(FilterAccessorProvider filterAccessorProvider)
             throws HyracksDataException {
-        IColumnFilterNormalizedValueAccessor leftAccessor = left.create(filterAccessorProvider);
-        IColumnFilterNormalizedValueAccessor rightAccessor = right.create(filterAccessorProvider);
+        IColumnRangeFilterValueAccessor leftAccessor = left.create(filterAccessorProvider);
+        IColumnRangeFilterValueAccessor 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(IColumnFilterNormalizedValueAccessor left,
-            IColumnFilterNormalizedValueAccessor right);
+    protected abstract IColumnFilterEvaluator createComparator(IColumnRangeFilterValueAccessor left,
+            IColumnRangeFilterValueAccessor right);
 
     protected abstract String getOpt();
 
@@ -72,10 +72,10 @@
     }
 
     static abstract class AbstractComparator implements IColumnFilterEvaluator {
-        protected final IColumnFilterNormalizedValueAccessor left;
-        protected final IColumnFilterNormalizedValueAccessor right;
+        protected final IColumnRangeFilterValueAccessor left;
+        protected final IColumnRangeFilterValueAccessor right;
 
-        AbstractComparator(IColumnFilterNormalizedValueAccessor left, IColumnFilterNormalizedValueAccessor right) {
+        AbstractComparator(IColumnRangeFilterValueAccessor left, IColumnRangeFilterValueAccessor right) {
             this.left = left;
             this.right = right;
         }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GEColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/GEColumnFilterEvaluatorFactory.java
similarity index 71%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GEColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/GEColumnFilterEvaluatorFactory.java
index bd880e6..0edee65 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GEColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/GEColumnFilterEvaluatorFactory.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.compartor;
+package org.apache.asterix.column.filter.range.compartor;
 
 import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessor;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessorFactory;
 
 public class GEColumnFilterEvaluatorFactory extends AbstractColumnFilterComparatorFactory {
     private static final long serialVersionUID = 6879193736347174789L;
 
-    public GEColumnFilterEvaluatorFactory(IColumnFilterNormalizedValueAccessorFactory left,
-            IColumnFilterNormalizedValueAccessorFactory right) {
+    public GEColumnFilterEvaluatorFactory(IColumnRangeFilterValueAccessorFactory left,
+            IColumnRangeFilterValueAccessorFactory right) {
         super(left, right);
     }
 
     @Override
-    protected IColumnFilterEvaluator createComparator(IColumnFilterNormalizedValueAccessor left,
-            IColumnFilterNormalizedValueAccessor right) {
+    protected IColumnFilterEvaluator createComparator(IColumnRangeFilterValueAccessor left,
+            IColumnRangeFilterValueAccessor right) {
         return new AbstractComparator(left, right) {
             @Override
             public boolean evaluate() {
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GTColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/GTColumnFilterEvaluatorFactory.java
similarity index 71%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GTColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/GTColumnFilterEvaluatorFactory.java
index de8eed0..7a21bd1 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/GTColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/GTColumnFilterEvaluatorFactory.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.compartor;
+package org.apache.asterix.column.filter.range.compartor;
 
 import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessor;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessorFactory;
 
 public class GTColumnFilterEvaluatorFactory extends AbstractColumnFilterComparatorFactory {
     private static final long serialVersionUID = -3104103170926445020L;
 
-    public GTColumnFilterEvaluatorFactory(IColumnFilterNormalizedValueAccessorFactory left,
-            IColumnFilterNormalizedValueAccessorFactory right) {
+    public GTColumnFilterEvaluatorFactory(IColumnRangeFilterValueAccessorFactory left,
+            IColumnRangeFilterValueAccessorFactory right) {
         super(left, right);
     }
 
     @Override
-    protected IColumnFilterEvaluator createComparator(IColumnFilterNormalizedValueAccessor left,
-            IColumnFilterNormalizedValueAccessor right) {
+    protected IColumnFilterEvaluator createComparator(IColumnRangeFilterValueAccessor left,
+            IColumnRangeFilterValueAccessor right) {
         return new AbstractComparator(left, right) {
             @Override
             public boolean evaluate() {
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LEColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/LEColumnFilterEvaluatorFactory.java
similarity index 71%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LEColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/LEColumnFilterEvaluatorFactory.java
index dd43c5a..7cef6ab 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LEColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/LEColumnFilterEvaluatorFactory.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.compartor;
+package org.apache.asterix.column.filter.range.compartor;
 
 import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessor;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessorFactory;
 
 public class LEColumnFilterEvaluatorFactory extends AbstractColumnFilterComparatorFactory {
     private static final long serialVersionUID = 1068661809768620550L;
 
-    public LEColumnFilterEvaluatorFactory(IColumnFilterNormalizedValueAccessorFactory left,
-            IColumnFilterNormalizedValueAccessorFactory right) {
+    public LEColumnFilterEvaluatorFactory(IColumnRangeFilterValueAccessorFactory left,
+            IColumnRangeFilterValueAccessorFactory right) {
         super(left, right);
     }
 
     @Override
-    protected IColumnFilterEvaluator createComparator(IColumnFilterNormalizedValueAccessor left,
-            IColumnFilterNormalizedValueAccessor right) {
+    protected IColumnFilterEvaluator createComparator(IColumnRangeFilterValueAccessor left,
+            IColumnRangeFilterValueAccessor right) {
         return new AbstractComparator(left, right) {
             @Override
             public boolean evaluate() {
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LTColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/LTColumnFilterEvaluatorFactory.java
similarity index 71%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LTColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/LTColumnFilterEvaluatorFactory.java
index 7896ccf..2848d57 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/compartor/LTColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/compartor/LTColumnFilterEvaluatorFactory.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.compartor;
+package org.apache.asterix.column.filter.range.compartor;
 
 import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessor;
-import org.apache.asterix.column.filter.normalized.IColumnFilterNormalizedValueAccessorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessor;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessorFactory;
 
 public class LTColumnFilterEvaluatorFactory extends AbstractColumnFilterComparatorFactory {
     private static final long serialVersionUID = -4066709771630858677L;
 
-    public LTColumnFilterEvaluatorFactory(IColumnFilterNormalizedValueAccessorFactory left,
-            IColumnFilterNormalizedValueAccessorFactory right) {
+    public LTColumnFilterEvaluatorFactory(IColumnRangeFilterValueAccessorFactory left,
+            IColumnRangeFilterValueAccessorFactory right) {
         super(left, right);
     }
 
     @Override
-    protected IColumnFilterEvaluator createComparator(IColumnFilterNormalizedValueAccessor left,
-            IColumnFilterNormalizedValueAccessor right) {
+    protected IColumnFilterEvaluator createComparator(IColumnRangeFilterValueAccessor left,
+            IColumnRangeFilterValueAccessor right) {
         return new AbstractComparator(left, right) {
             @Override
             public boolean evaluate() {
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ANDColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/evaluator/ANDColumnFilterEvaluatorFactory.java
similarity index 88%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ANDColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/evaluator/ANDColumnFilterEvaluatorFactory.java
index 924cbd6..ddc63bd 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ANDColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/evaluator/ANDColumnFilterEvaluatorFactory.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.evaluator;
+package org.apache.asterix.column.filter.range.evaluator;
 
 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.asterix.column.filter.range.IColumnRangeFilterEvaluatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 public class ANDColumnFilterEvaluatorFactory extends AbstractColumnFilterEvaluatorFactory {
     private static final long serialVersionUID = -7902069740719309586L;
 
-    public ANDColumnFilterEvaluatorFactory(IColumnNormalizedFilterEvaluatorFactory left,
-            IColumnNormalizedFilterEvaluatorFactory right) {
+    public ANDColumnFilterEvaluatorFactory(IColumnRangeFilterEvaluatorFactory left,
+            IColumnRangeFilterEvaluatorFactory right) {
         super(left, right);
     }
 
@@ -56,7 +56,7 @@
     }
 
     private IColumnFilterEvaluator create(IColumnFilterEvaluator left, IColumnFilterEvaluator right) {
-        return new AbstractNormalizedEvaluator(left, right) {
+        return new AbstractFilterEvaluator(left, right) {
             @Override
             public boolean evaluate() throws HyracksDataException {
                 return left.evaluate() && right.evaluate();
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/AbstractColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/evaluator/AbstractColumnFilterEvaluatorFactory.java
similarity index 67%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/AbstractColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/evaluator/AbstractColumnFilterEvaluatorFactory.java
index 66597db..35b7fc0 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/AbstractColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/evaluator/AbstractColumnFilterEvaluatorFactory.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.evaluator;
+package org.apache.asterix.column.filter.range.evaluator;
 
 import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterEvaluatorFactory;
 
-public abstract class AbstractColumnFilterEvaluatorFactory implements IColumnNormalizedFilterEvaluatorFactory {
+public abstract class AbstractColumnFilterEvaluatorFactory implements IColumnRangeFilterEvaluatorFactory {
     private static final long serialVersionUID = 1436531448052787426L;
 
-    protected final IColumnNormalizedFilterEvaluatorFactory left;
-    protected final IColumnNormalizedFilterEvaluatorFactory right;
+    protected final IColumnRangeFilterEvaluatorFactory left;
+    protected final IColumnRangeFilterEvaluatorFactory right;
 
-    public AbstractColumnFilterEvaluatorFactory(IColumnNormalizedFilterEvaluatorFactory left,
-            IColumnNormalizedFilterEvaluatorFactory right) {
+    public AbstractColumnFilterEvaluatorFactory(IColumnRangeFilterEvaluatorFactory left,
+            IColumnRangeFilterEvaluatorFactory right) {
         this.left = left;
         this.right = right;
     }
@@ -40,11 +40,11 @@
         return left.toString() + " " + getOp() + " " + right.toString();
     }
 
-    static abstract class AbstractNormalizedEvaluator implements IColumnFilterEvaluator {
+    static abstract class AbstractFilterEvaluator implements IColumnFilterEvaluator {
         protected final IColumnFilterEvaluator left;
         protected final IColumnFilterEvaluator right;
 
-        AbstractNormalizedEvaluator(IColumnFilterEvaluator left, IColumnFilterEvaluator right) {
+        AbstractFilterEvaluator(IColumnFilterEvaluator left, IColumnFilterEvaluator right) {
             this.left = left;
             this.right = right;
         }
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ORColumnFilterEvaluatorFactory.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/evaluator/ORColumnFilterEvaluatorFactory.java
similarity index 88%
rename from asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ORColumnFilterEvaluatorFactory.java
rename to asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/evaluator/ORColumnFilterEvaluatorFactory.java
index 046f05d..5c909e0 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/normalized/evaluator/ORColumnFilterEvaluatorFactory.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/range/evaluator/ORColumnFilterEvaluatorFactory.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.column.filter.normalized.evaluator;
+package org.apache.asterix.column.filter.range.evaluator;
 
 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.asterix.column.filter.range.IColumnRangeFilterEvaluatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 public class ORColumnFilterEvaluatorFactory extends AbstractColumnFilterEvaluatorFactory {
     private static final long serialVersionUID = 9029706131191375500L;
 
-    public ORColumnFilterEvaluatorFactory(IColumnNormalizedFilterEvaluatorFactory left,
-            IColumnNormalizedFilterEvaluatorFactory right) {
+    public ORColumnFilterEvaluatorFactory(IColumnRangeFilterEvaluatorFactory left,
+            IColumnRangeFilterEvaluatorFactory right) {
         super(left, right);
     }
 
@@ -57,7 +57,7 @@
     }
 
     private IColumnFilterEvaluator create(IColumnFilterEvaluator left, IColumnFilterEvaluator right) {
-        return new AbstractNormalizedEvaluator(left, right) {
+        return new AbstractFilterEvaluator(left, right) {
             @Override
             public boolean evaluate() throws HyracksDataException {
                 return left.evaluate() || right.evaluate();
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 e7fb31f..79a1860 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
@@ -39,7 +39,7 @@
     public PrimaryScanColumnTupleWithMetaProjector(ARecordType datasetType, ARecordType metaType,
             int numberOfPrimaryKeys, ARecordType requestedType) {
         projector = new QueryColumnWithMetaTupleProjector(datasetType, metaType, numberOfPrimaryKeys, requestedType,
-                Collections.emptyMap(), metaType, Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE,
+                Collections.emptyMap(), metaType, NoOpColumnFilterEvaluatorFactory.INSTANCE,
                 NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE, null);
     }
 
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 2c760bf..271649a 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
@@ -42,7 +42,7 @@
         // +2 one for the record and one for meta
         builder = new ArrayTupleBuilder(numberOfPrimaryKeys + 2);
         projector = new QueryColumnWithMetaTupleProjector(datasetType, metaType, numberOfPrimaryKeys, requestedType,
-                Collections.emptyMap(), metaType, Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE,
+                Collections.emptyMap(), metaType, NoOpColumnFilterEvaluatorFactory.INSTANCE,
                 NoOpColumnFilterEvaluatorFactory.INSTANCE, NoOpWarningCollector.INSTANCE, null);
     }
 
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 248b5a5..d9071b8 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
@@ -35,8 +35,8 @@
 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.filter.range.IColumnRangeFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessor;
 import org.apache.asterix.column.metadata.AbstractColumnImmutableReadMetadata;
 import org.apache.asterix.column.metadata.FieldNamesDictionary;
 import org.apache.asterix.column.metadata.schema.AbstractSchemaNode;
@@ -69,7 +69,7 @@
     private final FieldNamesDictionary fieldNamesDictionary;
     private final PrimitiveColumnValuesReader[] primaryKeyReaders;
     private final IColumnFilterEvaluator normalizedFilterEvaluator;
-    private final List<IColumnFilterNormalizedValueAccessor> filterValueAccessors;
+    private final List<IColumnRangeFilterValueAccessor> filterValueAccessors;
     private final IColumnIterableFilterEvaluator columnFilterEvaluator;
     private final List<IColumnValuesReader> filterColumnReaders;
 
@@ -79,7 +79,7 @@
             PrimitiveColumnValuesReader[] primaryKeyReaders, IValueReference serializedMetadata,
             FieldNamesDictionary fieldNamesDictionary, ObjectSchemaNode root, IColumnValuesReaderFactory readerFactory,
             IValueGetterFactory valueGetterFactory, IColumnFilterEvaluator normalizedFilterEvaluator,
-            List<IColumnFilterNormalizedValueAccessor> filterValueAccessors,
+            List<IColumnRangeFilterValueAccessor> filterValueAccessors,
             IColumnIterableFilterEvaluator columnFilterEvaluator, List<IColumnValuesReader> filterColumnReaders)
             throws HyracksDataException {
         super(datasetType, metaType, primaryKeyReaders.length, serializedMetadata, -1);
@@ -105,11 +105,11 @@
         return primaryKeyReaders;
     }
 
-    public final IColumnFilterEvaluator getNormalizedFilterEvaluator() {
+    public final IColumnFilterEvaluator getRangeFilterEvaluator() {
         return normalizedFilterEvaluator;
     }
 
-    public final List<IColumnFilterNormalizedValueAccessor> getFilterValueAccessors() {
+    public final List<IColumnRangeFilterValueAccessor> getFilterValueAccessors() {
         return filterValueAccessors;
     }
 
@@ -175,7 +175,7 @@
             IValueReference serializedMetadata, IColumnValuesReaderFactory readerFactory,
             IValueGetterFactory valueGetterFactory, ARecordType requestedType,
             Map<String, FunctionCallInformation> functionCallInfoMap,
-            IColumnNormalizedFilterEvaluatorFactory normalizedEvaluatorFactory,
+            IColumnRangeFilterEvaluatorFactory normalizedEvaluatorFactory,
             IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory, IWarningCollector warningCollector,
             IHyracksTaskContext context) throws IOException {
         byte[] bytes = serializedMetadata.getByteArray();
@@ -204,7 +204,7 @@
         IColumnFilterEvaluator normalizedFilterEvaluator = TrueColumnFilterEvaluator.INSTANCE;
         IColumnIterableFilterEvaluator columnFilterEvaluator = TrueColumnFilterEvaluator.INSTANCE;
         List<IColumnValuesReader> filterColumnReaders = Collections.emptyList();
-        List<IColumnFilterNormalizedValueAccessor> filterValueAccessors = Collections.emptyList();
+        List<IColumnRangeFilterValueAccessor> filterValueAccessors = Collections.emptyList();
         if (context != null) {
             FilterAccessorProvider filterAccessorProvider =
                     new FilterAccessorProvider(root, clipperVisitor, readerFactory, valueGetterFactory);
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 e2a69d6..b7b9745 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
@@ -25,7 +25,7 @@
 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.filter.range.IColumnRangeFilterEvaluatorFactory;
 import org.apache.asterix.column.tuple.AssembledTupleReference;
 import org.apache.asterix.column.tuple.QueryColumnTupleReference;
 import org.apache.asterix.column.values.reader.ColumnValueReaderFactory;
@@ -47,13 +47,13 @@
     protected final Map<String, FunctionCallInformation> functionCallInfoMap;
     protected final IWarningCollector warningCollector;
     protected final IHyracksTaskContext context;
-    protected final IColumnNormalizedFilterEvaluatorFactory normalizedFilterEvaluatorFactory;
+    protected final IColumnRangeFilterEvaluatorFactory normalizedFilterEvaluatorFactory;
     protected final IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory;
     private final AssembledTupleReference assembledTupleReference;
 
     public QueryColumnTupleProjector(ARecordType datasetType, int numberOfPrimaryKeys, ARecordType requestedType,
             Map<String, FunctionCallInformation> functionCallInfoMap,
-            IColumnNormalizedFilterEvaluatorFactory normalizedFilterEvaluatorFactory,
+            IColumnRangeFilterEvaluatorFactory normalizedFilterEvaluatorFactory,
             IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory, IWarningCollector warningCollector,
             IHyracksTaskContext context) {
         this.datasetType = datasetType;
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 f63df95..0265a05 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
@@ -21,7 +21,7 @@
 import java.util.Map;
 
 import org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluatorFactory;
-import org.apache.asterix.column.filter.normalized.IColumnNormalizedFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterEvaluatorFactory;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.runtime.projection.FunctionCallInformation;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
@@ -38,14 +38,12 @@
     private final ARecordType requestedType;
     private final ARecordType requestedMetaType;
     private final Map<String, FunctionCallInformation> functionCallInfo;
-    private final Map<String, FunctionCallInformation> metaFunctionCallInfo;
-    private final IColumnNormalizedFilterEvaluatorFactory normalizedFilterEvaluatorFactory;
+    private final IColumnRangeFilterEvaluatorFactory rangeFilterEvaluatorFactory;
     private final IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory;
 
     public QueryColumnTupleProjectorFactory(ARecordType datasetType, ARecordType metaType, int numberOfPrimaryKeys,
             ARecordType requestedType, Map<String, FunctionCallInformation> functionCallInfo,
-            ARecordType requestedMetaType, Map<String, FunctionCallInformation> metaFunctionCallInfo,
-            IColumnNormalizedFilterEvaluatorFactory normalizedFilterEvaluatorFactory,
+            ARecordType requestedMetaType, IColumnRangeFilterEvaluatorFactory rangeFilterEvaluatorFactory,
             IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory) {
         this.datasetType = datasetType;
         this.metaType = metaType;
@@ -53,8 +51,7 @@
         this.requestedType = requestedType;
         this.functionCallInfo = functionCallInfo;
         this.requestedMetaType = requestedMetaType;
-        this.metaFunctionCallInfo = metaFunctionCallInfo;
-        this.normalizedFilterEvaluatorFactory = normalizedFilterEvaluatorFactory;
+        this.rangeFilterEvaluatorFactory = rangeFilterEvaluatorFactory;
         this.columnFilterEvaluatorFactory = columnFilterEvaluatorFactory;
     }
 
@@ -64,11 +61,11 @@
         if (requestedMetaType == null) {
             // The dataset does not contain a meta part
             return new QueryColumnTupleProjector(datasetType, numberOfPrimaryKeys, requestedType, functionCallInfo,
-                    normalizedFilterEvaluatorFactory, columnFilterEvaluatorFactory, warningCollector, context);
+                    rangeFilterEvaluatorFactory, columnFilterEvaluatorFactory, warningCollector, context);
         }
         // The dataset has a meta part
         return new QueryColumnWithMetaTupleProjector(datasetType, metaType, numberOfPrimaryKeys, requestedType,
-                functionCallInfo, requestedMetaType, metaFunctionCallInfo, normalizedFilterEvaluatorFactory,
-                columnFilterEvaluatorFactory, warningCollector, context);
+                functionCallInfo, requestedMetaType, rangeFilterEvaluatorFactory, 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 c23dbcf..c89a67b 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
@@ -32,8 +32,8 @@
 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.filter.range.IColumnRangeFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessor;
 import org.apache.asterix.column.metadata.FieldNamesDictionary;
 import org.apache.asterix.column.metadata.schema.AbstractSchemaNode;
 import org.apache.asterix.column.metadata.schema.ObjectSchemaNode;
@@ -64,7 +64,7 @@
             PrimitiveColumnValuesReader[] primaryKeyReaders, IValueReference serializedMetadata,
             FieldNamesDictionary fieldNamesDictionary, ObjectSchemaNode root, ObjectSchemaNode metaRoot,
             IColumnValuesReaderFactory readerFactory, IValueGetterFactory valueGetterFactory,
-            IColumnFilterEvaluator filterEvaluator, List<IColumnFilterNormalizedValueAccessor> filterValueAccessors,
+            IColumnFilterEvaluator filterEvaluator, List<IColumnRangeFilterValueAccessor> filterValueAccessors,
             IColumnIterableFilterEvaluator columnFilterEvaluator, List<IColumnValuesReader> filterColumnReaders)
             throws HyracksDataException {
         super(datasetType, metaType, primaryKeyReaders, serializedMetadata, fieldNamesDictionary, root, readerFactory,
@@ -121,8 +121,7 @@
             int numberOfPrimaryKeys, IValueReference serializedMetadata, IColumnValuesReaderFactory readerFactory,
             IValueGetterFactory valueGetterFactory, ARecordType requestedType,
             Map<String, FunctionCallInformation> functionCallInfo, ARecordType metaRequestedType,
-            Map<String, FunctionCallInformation> metaFunctionCallInfo,
-            IColumnNormalizedFilterEvaluatorFactory normalizedEvaluatorFactory,
+            IColumnRangeFilterEvaluatorFactory normalizedEvaluatorFactory,
             IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory, IWarningCollector warningCollector,
             IHyracksTaskContext context) throws IOException {
         byte[] bytes = serializedMetadata.getByteArray();
@@ -139,20 +138,18 @@
         ObjectSchemaNode root = (ObjectSchemaNode) AbstractSchemaNode.deserialize(input, null);
         ObjectSchemaNode metaRoot = (ObjectSchemaNode) AbstractSchemaNode.deserialize(input, null);
 
-        //Clip dataset schema
         SchemaClipperVisitor clipperVisitor =
                 new SchemaClipperVisitor(fieldNamesDictionary, functionCallInfo, warningCollector);
+        //Clip dataset schema
         ObjectSchemaNode clippedRoot = clip(requestedType, root, clipperVisitor);
 
         //Clip meta schema
-        SchemaClipperVisitor metaClipperVisitor =
-                new SchemaClipperVisitor(fieldNamesDictionary, metaFunctionCallInfo, warningCollector);
-        ObjectSchemaNode metaClippedRoot = clip(metaRequestedType, metaRoot, metaClipperVisitor);
+        ObjectSchemaNode metaClippedRoot = clip(metaRequestedType, metaRoot, clipperVisitor);
 
         IColumnFilterEvaluator normalizedFilterEvaluator = TrueColumnFilterEvaluator.INSTANCE;
         IColumnIterableFilterEvaluator columnFilterEvaluator = TrueColumnFilterEvaluator.INSTANCE;
         List<IColumnValuesReader> filterColumnReaders = Collections.emptyList();
-        List<IColumnFilterNormalizedValueAccessor> filterValueAccessors = Collections.emptyList();
+        List<IColumnRangeFilterValueAccessor> filterValueAccessors = Collections.emptyList();
         if (context != null) {
             FilterAccessorProvider filterAccessorProvider =
                     new FilterAccessorProvider(root, clipperVisitor, readerFactory, valueGetterFactory);
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 838973f..f31c7cc 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
@@ -24,7 +24,7 @@
 
 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.filter.range.IColumnRangeFilterEvaluatorFactory;
 import org.apache.asterix.column.tuple.QueryColumnWithMetaTupleReference;
 import org.apache.asterix.column.values.reader.ColumnValueReaderFactory;
 import org.apache.asterix.om.types.ARecordType;
@@ -40,19 +40,16 @@
 public class QueryColumnWithMetaTupleProjector extends QueryColumnTupleProjector {
     private final ARecordType metaType;
     private final ARecordType requestedMetaType;
-    private final Map<String, FunctionCallInformation> metaFunctionCallInfoMap;
 
     public QueryColumnWithMetaTupleProjector(ARecordType datasetType, ARecordType metaType, int numberOfPrimaryKeys,
             ARecordType requestedType, Map<String, FunctionCallInformation> functionCallInfoMap,
-            ARecordType requestedMetaType, Map<String, FunctionCallInformation> metaFunctionCallInfoMap,
-            IColumnNormalizedFilterEvaluatorFactory filterEvaluator,
+            ARecordType requestedMetaType, IColumnRangeFilterEvaluatorFactory 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;
     }
 
     @Override
@@ -60,8 +57,8 @@
         try {
             return QueryColumnWithMetaMetadata.create(datasetType, metaType, numberOfPrimaryKeys, serializedMetadata,
                     new ColumnValueReaderFactory(), ValueGetterFactory.INSTANCE, requestedType, functionCallInfoMap,
-                    requestedMetaType, metaFunctionCallInfoMap, normalizedFilterEvaluatorFactory,
-                    columnFilterEvaluatorFactory, warningCollector, context);
+                    requestedMetaType, 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/QueryColumnTupleReference.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnTupleReference.java
index c9b1eac..71497f5 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
@@ -30,7 +30,7 @@
 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.filter.range.IColumnRangeFilterValueAccessor;
 import org.apache.asterix.column.operation.query.ColumnAssembler;
 import org.apache.asterix.column.operation.query.QueryColumnMetadata;
 import org.apache.asterix.column.values.IColumnValuesReader;
@@ -46,8 +46,8 @@
 
 public final class QueryColumnTupleReference extends AbstractAsterixColumnTupleReference {
     private final ColumnAssembler assembler;
-    private final IColumnFilterEvaluator normalizedFilterEvaluator;
-    private final List<IColumnFilterNormalizedValueAccessor> filterValueAccessors;
+    private final IColumnFilterEvaluator rangeFilterEvaluator;
+    private final List<IColumnRangeFilterValueAccessor> filterValueAccessors;
     private final IColumnIterableFilterEvaluator columnFilterEvaluator;
     private final IFilterApplier filterApplier;
     private final List<IColumnValuesReader> filterColumnReaders;
@@ -58,7 +58,7 @@
         super(componentIndex, frame, columnMetadata, multiPageOp);
         assembler = columnMetadata.getAssembler();
 
-        normalizedFilterEvaluator = columnMetadata.getNormalizedFilterEvaluator();
+        rangeFilterEvaluator = columnMetadata.getRangeFilterEvaluator();
         filterValueAccessors = columnMetadata.getFilterValueAccessors();
 
         columnFilterEvaluator = columnMetadata.getColumnFilterEvaluator();
@@ -91,7 +91,7 @@
         //Skip filters
         pageZero.position(pageZero.position() + numberOfColumns * AbstractColumnFilterWriter.FILTER_SIZE);
         //Check if we should read all column pages
-        boolean readColumns = normalizedFilterEvaluator.evaluate();
+        boolean readColumns = rangeFilterEvaluator.evaluate();
         assembler.reset(readColumns ? numberOfTuples : 0);
         columnFilterEvaluator.reset();
         return readColumns;
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 ea3b4b7..798c15f 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
@@ -30,7 +30,7 @@
 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.filter.range.IColumnRangeFilterValueAccessor;
 import org.apache.asterix.column.operation.query.ColumnAssembler;
 import org.apache.asterix.column.operation.query.QueryColumnMetadata;
 import org.apache.asterix.column.operation.query.QueryColumnWithMetaMetadata;
@@ -48,8 +48,8 @@
 public final class QueryColumnWithMetaTupleReference extends AbstractAsterixColumnTupleReference {
     private final ColumnAssembler assembler;
     private final ColumnAssembler metaAssembler;
-    private final IColumnFilterEvaluator normalizedFilterEvaluator;
-    private final List<IColumnFilterNormalizedValueAccessor> filterValueAccessors;
+    private final IColumnFilterEvaluator rangeFilterEvaluator;
+    private final List<IColumnRangeFilterValueAccessor> filterValueAccessors;
     private final IColumnIterableFilterEvaluator columnFilterEvaluator;
     private final IFilterApplier filterApplier;
     private final List<IColumnValuesReader> filterColumnReaders;
@@ -61,7 +61,7 @@
         assembler = columnMetadata.getAssembler();
         metaAssembler = ((QueryColumnWithMetaMetadata) columnMetadata).getMetaAssembler();
 
-        normalizedFilterEvaluator = columnMetadata.getNormalizedFilterEvaluator();
+        rangeFilterEvaluator = columnMetadata.getRangeFilterEvaluator();
         filterValueAccessors = columnMetadata.getFilterValueAccessors();
 
         columnFilterEvaluator = columnMetadata.getColumnFilterEvaluator();
@@ -94,7 +94,7 @@
         //Skip filters
         pageZero.position(pageZero.position() + numberOfColumns * AbstractColumnFilterWriter.FILTER_SIZE);
         //Check if we should read all column pages
-        boolean readColumns = normalizedFilterEvaluator.evaluate();
+        boolean readColumns = rangeFilterEvaluator.evaluate();
         assembler.reset(readColumns ? numberOfTuples : 0);
         metaAssembler.reset(readColumns ? numberOfTuples : 0);
         columnFilterEvaluator.reset();
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 46b4a7b..6a67313 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
@@ -29,7 +29,7 @@
 
 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.filter.range.IColumnRangeFilterEvaluatorFactory;
 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;
@@ -44,7 +44,7 @@
 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.metadata.utils.filter.ColumnRangeFilterBuilder;
 import org.apache.asterix.om.base.AString;
 import org.apache.asterix.om.base.IAObject;
 import org.apache.asterix.om.types.ARecordType;
@@ -283,7 +283,7 @@
             // pushdown is disabled
             ARecordType metaType = metaItemType == null ? null : ALL_FIELDS_TYPE;
             return new QueryColumnTupleProjectorFactory(datasetType, metaItemType, numberOfPrimaryKeys, ALL_FIELDS_TYPE,
-                    Collections.emptyMap(), metaType, Collections.emptyMap(), NoOpColumnFilterEvaluatorFactory.INSTANCE,
+                    Collections.emptyMap(), metaType, NoOpColumnFilterEvaluatorFactory.INSTANCE,
                     NoOpColumnFilterEvaluatorFactory.INSTANCE);
         }
         ColumnDatasetProjectionFiltrationInfo columnInfo =
@@ -293,15 +293,14 @@
         ARecordType metaRequestedType = columnInfo.getMetaProjectedType();
         Map<String, FunctionCallInformation> callInfo = columnInfo.getFunctionCallInfoMap();
 
-        NormalizedColumnFilterBuilder normalizedColumnFilterBuilder = new NormalizedColumnFilterBuilder(columnInfo);
-        IColumnNormalizedFilterEvaluatorFactory normalizedFilterEvaluatorFactory =
-                normalizedColumnFilterBuilder.build();
+        ColumnRangeFilterBuilder columnRangeFilterBuilder = new ColumnRangeFilterBuilder(columnInfo);
+        IColumnRangeFilterEvaluatorFactory rangeFilterEvaluatorFactory = columnRangeFilterBuilder.build();
 
-        ColumnFilterBuilder columnFilterBuilder = new ColumnFilterBuilder(columnInfo, context);
+        ColumnFilterBuilder columnFilterBuilder = new ColumnFilterBuilder(columnInfo, context, typeEnv);
         IColumnIterableFilterEvaluatorFactory columnFilterEvaluatorFactory = columnFilterBuilder.build();
 
         return new QueryColumnTupleProjectorFactory(datasetType, metaItemType, numberOfPrimaryKeys, recordRequestedType,
-                callInfo, metaRequestedType, callInfo, normalizedFilterEvaluatorFactory, columnFilterEvaluatorFactory);
+                callInfo, metaRequestedType, rangeFilterEvaluatorFactory, columnFilterEvaluatorFactory);
     }
 
     public static ITupleProjectorFactory createUpsertTupleProjectorFactory(DatasetFormatInfo datasetFormatInfo,
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/AbstractFilterBuilder.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/AbstractFilterBuilder.java
new file mode 100644
index 0000000..ce39220
--- /dev/null
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/AbstractFilterBuilder.java
@@ -0,0 +1,117 @@
+/*
+ * 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 java.util.Map;
+
+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.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.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.expressions.IVariableTypeEnvironment;
+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;
+
+abstract class AbstractFilterBuilder {
+
+    protected final Map<ILogicalExpression, ARecordType> filterPaths;
+    protected final ILogicalExpression filterExpression;
+    protected final JobGenContext context;
+    protected final IVariableTypeEnvironment typeEnv;
+
+    AbstractFilterBuilder(Map<ILogicalExpression, ARecordType> filterPaths, ILogicalExpression filterExpression,
+            JobGenContext context, IVariableTypeEnvironment typeEnv) {
+        this.filterPaths = filterPaths;
+        this.filterExpression = filterExpression;
+        this.context = context;
+        this.typeEnv = typeEnv;
+    }
+
+    protected IScalarEvaluatorFactory createEvaluator(ILogicalExpression expression) throws AlgebricksException {
+        if (filterPaths.containsKey(expression)) {
+            // Path expression, create a value accessor (i.e., a column reader)
+            return createValueAccessor(expression);
+        } else if (expression.getExpressionTag() == LogicalExpressionTag.CONSTANT) {
+            return createConstantAccessor(expression);
+        } else if (expression.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+            return handleFunction(expression);
+        }
+
+        /*
+         * A variable expression: This should not happen as the provided filter expression is inlined.
+         * If a variable was encountered for some reason, it should only be the record variable. If the record variable
+         * was encountered, that means there's a missing value path the compiler didn't provide.
+         */
+        throw new IllegalStateException(
+                "Unsupported expression " + expression + ". the provided paths are: " + filterPaths);
+    }
+
+    protected abstract IScalarEvaluatorFactory createValueAccessor(ILogicalExpression expression);
+
+    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);
+        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);
+            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;
+    }
+}
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
index 2b8847b..a89193b 100644
--- 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
@@ -18,53 +18,28 @@
  */
 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.ColumnDatasetProjectionFiltrationInfo;
-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.algebra.expressions.IVariableTypeEnvironment;
 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 class ColumnFilterBuilder extends AbstractFilterBuilder {
 
-    public ColumnFilterBuilder(ColumnDatasetProjectionFiltrationInfo projectionFiltrationInfo, JobGenContext context) {
-        typeEnv = new FilterVariableTypeEnvironment();
-        this.filterPaths = projectionFiltrationInfo.getFilterPaths();
-        this.filterExpression = projectionFiltrationInfo.getFilterExpression();
-        this.context = context;
-        checkerVisitor = new ArrayPathCheckerVisitor();
+    public ColumnFilterBuilder(ColumnDatasetProjectionFiltrationInfo projectionFiltrationInfo, JobGenContext context,
+            IVariableTypeEnvironment typeEnv) {
+        super(projectionFiltrationInfo.getFilterPaths(), projectionFiltrationInfo.getFilterExpression(), context,
+                typeEnv);
     }
 
     public IColumnIterableFilterEvaluatorFactory build() throws AlgebricksException {
-        if (filterExpression == null || filterPaths.isEmpty()
-                || checkerVisitor.containsMultipleArrayPaths(filterPaths.values())) {
+        if (filterExpression == null || filterPaths.isEmpty()) {
             return NoOpColumnFilterEvaluatorFactory.INSTANCE;
         }
         IScalarEvaluatorFactory evalFactory = createEvaluator(filterExpression);
@@ -74,89 +49,9 @@
         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) {
+    @Override
+    protected 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/ColumnRangeFilterBuilder.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ColumnRangeFilterBuilder.java
new file mode 100644
index 0000000..be05381
--- /dev/null
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/ColumnRangeFilterBuilder.java
@@ -0,0 +1,189 @@
+/*
+ * 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.PushdownUtil.isCompare;
+import static org.apache.asterix.metadata.utils.PushdownUtil.isConstant;
+import static org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions.ComparisonKind;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.asterix.column.filter.NoOpColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.IColumnRangeFilterValueAccessorFactory;
+import org.apache.asterix.column.filter.range.accessor.ColumnRangeFilterValueAccessorFactory;
+import org.apache.asterix.column.filter.range.accessor.ConstantColumnRangeFilterValueAccessorFactory;
+import org.apache.asterix.column.filter.range.compartor.GEColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.compartor.GTColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.compartor.LEColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.compartor.LTColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.evaluator.ANDColumnFilterEvaluatorFactory;
+import org.apache.asterix.column.filter.range.evaluator.ORColumnFilterEvaluatorFactory;
+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.om.types.ATypeTag;
+import org.apache.asterix.om.utils.NonTaggedFormatUtil;
+import org.apache.asterix.runtime.projection.ColumnDatasetProjectionFiltrationInfo;
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+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.AlgebricksBuiltinFunctions;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+
+public class ColumnRangeFilterBuilder {
+
+    private final Map<ILogicalExpression, ARecordType> filterPaths;
+    private final ILogicalExpression filterExpression;
+
+    public ColumnRangeFilterBuilder(ColumnDatasetProjectionFiltrationInfo projectionFiltrationInfo) {
+        this.filterPaths = projectionFiltrationInfo.getFilterPaths();
+        this.filterExpression = projectionFiltrationInfo.getRangeFilterExpression();
+    }
+
+    public IColumnRangeFilterEvaluatorFactory build() {
+        if (filterExpression == null || filterPaths.isEmpty()) {
+            return NoOpColumnFilterEvaluatorFactory.INSTANCE;
+        }
+        return createEvaluator(filterPaths, filterExpression);
+    }
+
+    private IColumnRangeFilterEvaluatorFactory createEvaluator(Map<ILogicalExpression, ARecordType> filterPaths,
+            ILogicalExpression filterExpression) {
+        AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) filterExpression;
+
+        if (isCompare(funcExpr)) {
+            return createComparator(funcExpr.getFunctionIdentifier(), funcExpr.getArguments(), filterPaths);
+        }
+        return createEvaluatorsForArgs(funcExpr, filterPaths);
+    }
+
+    private IColumnRangeFilterEvaluatorFactory createComparator(FunctionIdentifier fid,
+            List<Mutable<ILogicalExpression>> arguments, Map<ILogicalExpression, ARecordType> filterPaths) {
+        ILogicalExpression left = arguments.get(0).getValue();
+        ILogicalExpression right = arguments.get(1).getValue();
+
+        if (isConstant(right)) {
+            ARecordType path = filterPaths.get(left);
+            IAObject constant = getConstant(right);
+            return createComparator(fid, path, constant, true);
+        } else {
+            ARecordType path = filterPaths.get(right);
+            IAObject constant = getConstant(left);
+            return createComparator(fid, path, constant, false);
+        }
+    }
+
+    private IColumnRangeFilterEvaluatorFactory createEvaluatorsForArgs(AbstractFunctionCallExpression funcExpr,
+            Map<ILogicalExpression, ARecordType> filterPaths) {
+        List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
+        FunctionIdentifier fid = funcExpr.getFunctionIdentifier();
+
+        //AND/OR have at least two arguments
+        IColumnRangeFilterEvaluatorFactory arg0 = createEvaluator(filterPaths, args.get(0).getValue());
+        IColumnRangeFilterEvaluatorFactory arg1 = createEvaluator(filterPaths, args.get(1).getValue());
+
+        IColumnRangeFilterEvaluatorFactory left = createEvaluator(fid, arg0, arg1);
+        for (int i = 2; i < args.size(); i++) {
+            IColumnRangeFilterEvaluatorFactory right = createEvaluator(filterPaths, args.get(i).getValue());
+            left = createEvaluator(fid, left, right);
+        }
+        return left;
+    }
+
+    private IColumnRangeFilterEvaluatorFactory createComparator(FunctionIdentifier fid, ARecordType path,
+            IAObject constant, boolean rightConstant) {
+        if (path == null) {
+            // skipped path
+            return NoOpColumnFilterEvaluatorFactory.INSTANCE;
+        }
+
+        ComparisonKind comparisonKind = getComparisonKind(fid, constant.getType().getTypeTag());
+        IColumnRangeFilterValueAccessorFactory constValue =
+                ConstantColumnRangeFilterValueAccessorFactory.createFactory(constant);
+        IColumnRangeFilterValueAccessorFactory min = new ColumnRangeFilterValueAccessorFactory(path, true);
+        IColumnRangeFilterValueAccessorFactory max = new ColumnRangeFilterValueAccessorFactory(path, false);
+
+        if (rightConstant) {
+            return createEvaluator(comparisonKind, min, constValue, max);
+        }
+        return createEvaluator(invert(comparisonKind), min, constValue, max);
+    }
+
+    private ComparisonKind getComparisonKind(FunctionIdentifier fid, ATypeTag typeTag) {
+        ComparisonKind comparisonKind = AlgebricksBuiltinFunctions.getComparisonType(fid);
+
+        if (!NonTaggedFormatUtil.isFixedSizedCollection(typeTag)) {
+            // For variable-length values, we include equal as their filters are not decisive.
+            if (comparisonKind == ComparisonKind.LT) {
+                return ComparisonKind.LE;
+            } else if (comparisonKind == ComparisonKind.GT) {
+                return ComparisonKind.GE;
+            }
+        }
+
+        return comparisonKind;
+    }
+
+    private static IColumnRangeFilterEvaluatorFactory createEvaluator(FunctionIdentifier fid,
+            IColumnRangeFilterEvaluatorFactory left, IColumnRangeFilterEvaluatorFactory right) {
+        if (BuiltinFunctions.AND.equals(fid)) {
+            return new ANDColumnFilterEvaluatorFactory(left, right);
+        }
+        return new ORColumnFilterEvaluatorFactory(left, right);
+    }
+
+    private static ComparisonKind invert(ComparisonKind comparisonKind) {
+        if (comparisonKind == ComparisonKind.LT) {
+            return ComparisonKind.GE;
+        } else if (comparisonKind == ComparisonKind.LE) {
+            return ComparisonKind.GT;
+        } else if (comparisonKind == ComparisonKind.GT) {
+            return ComparisonKind.LE;
+        }
+        //ComparisonKind.GE
+        return ComparisonKind.LT;
+    }
+
+    private static IColumnRangeFilterEvaluatorFactory createEvaluator(ComparisonKind comparisonKind,
+            IColumnRangeFilterValueAccessorFactory min, IColumnRangeFilterValueAccessorFactory constVal,
+            IColumnRangeFilterValueAccessorFactory 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) {
+            IColumnRangeFilterEvaluatorFactory minComp = new GEColumnFilterEvaluatorFactory(constVal, min);
+            IColumnRangeFilterEvaluatorFactory maxComp = new LEColumnFilterEvaluatorFactory(constVal, max);
+            return new ANDColumnFilterEvaluatorFactory(minComp, maxComp);
+        } else if (comparisonKind == ComparisonKind.GT) {
+            return new LTColumnFilterEvaluatorFactory(constVal, max);
+        }
+        //ComparisonKind.GE
+        return new LEColumnFilterEvaluatorFactory(constVal, max);
+    }
+
+    private static IAObject getConstant(ILogicalExpression expr) {
+        return ((AsterixConstantValue) ((ConstantExpression) expr).getValue()).getObject();
+    }
+
+}
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
deleted file mode 100644
index 0743b1c..0000000
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/FilterVariableTypeEnvironment.java
+++ /dev/null
@@ -1,56 +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.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/filter/NormalizedColumnFilterBuilder.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/NormalizedColumnFilterBuilder.java
deleted file mode 100644
index 0994664..0000000
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/filter/NormalizedColumnFilterBuilder.java
+++ /dev/null
@@ -1,191 +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.metadata.utils.filter;
-
-import static org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions.ComparisonKind;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-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;
-import org.apache.asterix.om.types.ARecordType;
-import org.apache.asterix.runtime.projection.ColumnDatasetProjectionFiltrationInfo;
-import org.apache.commons.lang3.mutable.Mutable;
-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.AlgebricksBuiltinFunctions;
-import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-
-public class NormalizedColumnFilterBuilder {
-    public static final Set<FunctionIdentifier> COMPARE_FUNCTIONS = getCompareFunctions();
-    public static final Set<FunctionIdentifier> NORMALIZED_PUSHABLE_FUNCTIONS = getNormalizedPushableFunctions();
-
-    private final Map<ILogicalExpression, ARecordType> filterPaths;
-    private final ILogicalExpression filterExpression;
-
-    public NormalizedColumnFilterBuilder(ColumnDatasetProjectionFiltrationInfo projectionFiltrationInfo) {
-        this.filterPaths = projectionFiltrationInfo.getFilterPaths();
-        this.filterExpression = projectionFiltrationInfo.getFilterExpression();
-    }
-
-    public IColumnNormalizedFilterEvaluatorFactory build() {
-        if (filterExpression == null || filterPaths.isEmpty()) {
-            return NoOpColumnFilterEvaluatorFactory.INSTANCE;
-        }
-        return createEvaluator(filterPaths, filterExpression);
-    }
-
-    private IColumnNormalizedFilterEvaluatorFactory createEvaluator(Map<ILogicalExpression, ARecordType> filterPaths,
-            ILogicalExpression filterExpression) {
-        AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) filterExpression;
-        FunctionIdentifier fid = funcExpr.getFunctionIdentifier();
-
-        if (COMPARE_FUNCTIONS.contains(fid)) {
-            return createComparator(fid, funcExpr.getArguments(), filterPaths);
-        }
-        return createEvaluatorsForArgs(funcExpr, filterPaths);
-    }
-
-    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();
-
-        if (arg1.getExpressionTag() == LogicalExpressionTag.CONSTANT) {
-            ARecordType path = filterPaths.get(arg0);
-            IAObject constant = getConstant(arg1);
-            return createComparator(fid, path, constant, true);
-        } else {
-            ARecordType path = filterPaths.get(arg1);
-            IAObject constant = getConstant(arg0);
-            return createComparator(fid, path, constant, false);
-        }
-    }
-
-    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
-        IColumnNormalizedFilterEvaluatorFactory arg0 = createEvaluator(filterPaths, args.get(0).getValue());
-        IColumnNormalizedFilterEvaluatorFactory arg1 = createEvaluator(filterPaths, args.get(1).getValue());
-
-        IColumnNormalizedFilterEvaluatorFactory left = createEvaluator(fid, arg0, arg1);
-        for (int i = 2; i < args.size() && left != null; i++) {
-            IColumnNormalizedFilterEvaluatorFactory right = createEvaluator(filterPaths, args.get(i).getValue());
-            left = createEvaluator(fid, left, right);
-        }
-        return left;
-    }
-
-    private IColumnNormalizedFilterEvaluatorFactory createComparator(FunctionIdentifier fid, ARecordType path,
-            IAObject constant, boolean leftToRight) {
-        ComparisonKind comparisonKind = AlgebricksBuiltinFunctions.getComparisonType(fid);
-        if (path == null) {
-            // skipped path
-            return NoOpColumnFilterEvaluatorFactory.INSTANCE;
-        }
-
-        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);
-        }
-        return createEvaluator(invert(comparisonKind), min, constValue, max);
-    }
-
-    private static IColumnNormalizedFilterEvaluatorFactory createEvaluator(FunctionIdentifier fid,
-            IColumnNormalizedFilterEvaluatorFactory left, IColumnNormalizedFilterEvaluatorFactory right) {
-        if (right == null) {
-            return null;
-        }
-        if (BuiltinFunctions.AND.equals(fid)) {
-            return new ANDColumnFilterEvaluatorFactory(left, right);
-        }
-        return new ORColumnFilterEvaluatorFactory(left, right);
-    }
-
-    private static ComparisonKind invert(ComparisonKind comparisonKind) {
-        if (comparisonKind == ComparisonKind.LT) {
-            return ComparisonKind.GE;
-        } else if (comparisonKind == ComparisonKind.LE) {
-            return ComparisonKind.GT;
-        } else if (comparisonKind == ComparisonKind.GT) {
-            return ComparisonKind.LE;
-        }
-        //ComparisonKind.GE
-        return ComparisonKind.LT;
-    }
-
-    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) {
-            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);
-        }
-        //ComparisonKind.GE
-        return new LEColumnFilterEvaluatorFactory(constVal, max);
-    }
-
-    private static IAObject getConstant(ILogicalExpression expr) {
-        return ((AsterixConstantValue) ((ConstantExpression) expr).getValue()).getObject();
-    }
-
-    private static Set<FunctionIdentifier> getCompareFunctions() {
-        return Set.of(AlgebricksBuiltinFunctions.LE, AlgebricksBuiltinFunctions.GE, AlgebricksBuiltinFunctions.LT,
-                AlgebricksBuiltinFunctions.GT, AlgebricksBuiltinFunctions.EQ);
-    }
-
-    private static Set<FunctionIdentifier> getNormalizedPushableFunctions() {
-        Set<FunctionIdentifier> pushableFunctions = new HashSet<>(COMPARE_FUNCTIONS);
-        pushableFunctions.add(AlgebricksBuiltinFunctions.AND);
-        pushableFunctions.add(AlgebricksBuiltinFunctions.OR);
-        return pushableFunctions;
-    }
-
-}
