[ASTERIXDB-3229][RT] Part 4: Re-enable columnar filters
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
This patch re-enable columnar filters (range and value).
It also re-enable the filters' tests.
Change-Id: Iea3a8a3fb0e9b4fa446d112f4776a2a7ff134ab4
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17695
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Wail Alkowaileet <wael.y.k@gmail.com>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
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;
- }
-
-}