>From Ali Alsuliman <[email protected]>:
Ali Alsuliman has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19635 )
Change subject: WIP: columnar filter
......................................................................
WIP: columnar filter
Change-Id: Ie11d88c6ace3dcc08744d3b04add679a6206a41c
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/AbstractFilterPushdownProcessor.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/DeltaTableFilterPushdownProcessor.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ColumnFilterPushdownProcessor.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ColumnRangeFilterPushdownProcessor.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ExternalDatasetFilterPushdownProcessor.java
5 files changed, 51 insertions(+), 14 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/35/19635/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/AbstractFilterPushdownProcessor.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/AbstractFilterPushdownProcessor.java
index 7d4f7a5..92436c7 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/AbstractFilterPushdownProcessor.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/AbstractFilterPushdownProcessor.java
@@ -40,6 +40,7 @@
import org.apache.asterix.optimizer.rules.pushdown.descriptor.DefineDescriptor;
import
org.apache.asterix.optimizer.rules.pushdown.descriptor.ScanDefineDescriptor;
import org.apache.asterix.optimizer.rules.pushdown.descriptor.UseDescriptor;
+import org.apache.asterix.optimizer.rules.pushdown.schema.IExpectedSchemaNode;
import
org.apache.asterix.optimizer.rules.pushdown.visitor.FilterExpressionInlineVisitor;
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -133,7 +134,26 @@
* @param expression path expression
* @return true if the pushdown should continue, false otherwise
*/
- protected abstract boolean handlePath(AbstractFunctionCallExpression
expression) throws AlgebricksException;
+ protected final boolean handlePath(AbstractFunctionCallExpression
expression) throws AlgebricksException {
+ IExpectedSchemaNode node = getPathNode(expression);
+ if (node == null) {
+ return false;
+ }
+ return handlePath(expression, node);
+ }
+
+ /**
+ * Handle a value access path expression
+ *
+ * @param expression path expression
+ * @param node expected schema node (never null)
+ * @return true if the pushdown should continue, false otherwise
+ */
+ protected abstract boolean handlePath(AbstractFunctionCallExpression
expression, IExpectedSchemaNode node)
+ throws AlgebricksException;
+
+ protected abstract IExpectedSchemaNode
getPathNode(AbstractFunctionCallExpression expression)
+ throws AlgebricksException;
/**
* Put the filter expression to data-scan
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 1ec64d5..08c3add 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
@@ -117,9 +117,9 @@
}
@Override
- protected boolean handlePath(AbstractFunctionCallExpression expression)
throws AlgebricksException {
- IExpectedSchemaNode node = expression.accept(exprToNodeVisitor, null);
- if (node == null || node.getType() != ExpectedSchemaNodeType.ANY) {
+ protected boolean handlePath(AbstractFunctionCallExpression expression,
IExpectedSchemaNode node)
+ throws AlgebricksException {
+ if (node.getType() != ExpectedSchemaNodeType.ANY) {
return false;
}
paths.put(expression,
pathBuilderVisitor.buildPath((AnyExpectedSchemaNode) node));
@@ -154,6 +154,11 @@
scanDefineDescriptor.getFilterPaths().putAll(paths);
}
+ @Override
+ protected IExpectedSchemaNode getPathNode(AbstractFunctionCallExpression
expression) throws AlgebricksException {
+ return expression.accept(exprToNodeVisitor, null);
+ }
+
protected final AbstractFunctionCallExpression
andExpression(ILogicalExpression filterExpr,
ILogicalExpression inlinedExpr) {
AbstractFunctionCallExpression funcExpr =
(AbstractFunctionCallExpression) filterExpr;
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 75a7608..030fb6e 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
@@ -102,16 +102,19 @@
}
@Override
- protected boolean handlePath(AbstractFunctionCallExpression expression)
throws AlgebricksException {
+ protected boolean handlePath(AbstractFunctionCallExpression expression,
IExpectedSchemaNode node)
+ throws AlgebricksException {
// This means we got something like WHERE $r.getField("isVerified") --
where isVerified is a boolean field.
- AnyExpectedSchemaNode node = getNode(expression);
+ if (node.getType() != ExpectedSchemaNodeType.ANY) {
+ return false;
+ }
IAObject constantValue = ABoolean.TRUE;
String functionName = expression.getFunctionIdentifier().getName();
SourceLocation sourceLocation = expression.getSourceLocation();
FunctionCallInformation functionCallInfo = new
FunctionCallInformation(functionName, sourceLocation,
ProjectionFiltrationWarningFactoryProvider.getIncomparableTypesFactory(false));
- ARecordType path =
- pathBuilderVisitor.buildPath(node, constantValue.getType(),
sourceInformationMap, functionCallInfo);
+ ARecordType path =
pathBuilderVisitor.buildPath((AnyExpectedSchemaNode) node,
constantValue.getType(),
+ sourceInformationMap, functionCallInfo);
paths.put(expression, path);
return true;
}
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/DeltaTableFilterPushdownProcessor.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/DeltaTableFilterPushdownProcessor.java
index 8e5bf5b..38dfde8 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/DeltaTableFilterPushdownProcessor.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/DeltaTableFilterPushdownProcessor.java
@@ -50,9 +50,9 @@
}
@Override
- protected boolean handlePath(AbstractFunctionCallExpression expression)
throws AlgebricksException {
- IExpectedSchemaNode node = expression.accept(exprToNodeVisitor, null);
- if (node == null || node.getType() != ExpectedSchemaNodeType.ANY) {
+ protected boolean handlePath(AbstractFunctionCallExpression expression,
IExpectedSchemaNode node)
+ throws AlgebricksException {
+ if (node.getType() != ExpectedSchemaNodeType.ANY) {
return false;
}
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ExternalDatasetFilterPushdownProcessor.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ExternalDatasetFilterPushdownProcessor.java
index 1007313..37a0128 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ExternalDatasetFilterPushdownProcessor.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/processor/ExternalDatasetFilterPushdownProcessor.java
@@ -73,9 +73,9 @@
}
@Override
- protected boolean handlePath(AbstractFunctionCallExpression expression)
throws AlgebricksException {
- IExpectedSchemaNode node = expression.accept(exprToNodeVisitor, null);
- if (node == null || node.getType() != ExpectedSchemaNodeType.ANY) {
+ protected boolean handlePath(AbstractFunctionCallExpression expression,
IExpectedSchemaNode node)
+ throws AlgebricksException {
+ if (node.getType() != ExpectedSchemaNodeType.ANY) {
return false;
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19635
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: ionic
Gerrit-Change-Id: Ie11d88c6ace3dcc08744d3b04add679a6206a41c
Gerrit-Change-Number: 19635
Gerrit-PatchSet: 1
Gerrit-Owner: Ali Alsuliman <[email protected]>
Gerrit-MessageType: newchange