Hussain Towaileb has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/3201
Change subject: [NO ISSUE][COMP] Optim rules comments + minor changes
......................................................................
[NO ISSUE][COMP] Optim rules comments + minor changes
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- CheckFilterExpressionTypeRule checks if the optimization
context has the output type environment before computing it.
- Minor addition/changes to rule comments.
Change-Id: I6f5cb78125657ff2bb4658af40bfc9d9cbff184e
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
M
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
M
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InferTypesRule.java
3 files changed, 13 insertions(+), 4 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/01/3201/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
index 4839ac3..30a8355 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
@@ -61,7 +61,13 @@
}
SelectOperator select = (SelectOperator) op;
ILogicalExpression condition = select.getCondition().getValue();
- IVariableTypeEnvironment env =
select.computeOutputTypeEnvironment(context);
+
+ // Get the output type environment
+ IVariableTypeEnvironment env =
context.getOutputTypeEnvironment(select);
+ if (env == null) {
+ env = select.computeOutputTypeEnvironment(context);
+ }
+
IAType condType = (IAType) env.getType(condition);
if (condType.getTypeTag() != ATypeTag.BOOLEAN && condType.getTypeTag()
!= ATypeTag.ANY
&& !isPossibleBoolean(condType)) {
diff --git
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
index f1f1be3..e40975b 100644
---
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
+++
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
@@ -84,7 +84,7 @@
inputTypes[index++] = (IAType) env.getType(arg);
}
- // Checks input types and computes result types.
+ // Checks input types.
IAType[] knownInputTypes = TypeComputeUtils.getActualType(inputTypes);
boolean[] unknownable = TypeComputeUtils.isUnknownableType(inputTypes);
for (int argIndex = 0; argIndex < knownInputTypes.length; ++argIndex) {
@@ -97,7 +97,7 @@
}
// Computes the result type.
- byte category = TypeComputeUtils.resolveCateogry(inputTypes);
+ byte category = TypeComputeUtils.resolveCategory(inputTypes);
if (propagateNullAndMissing) {
if (category == MISSING) {
return BuiltinType.AMISSING;
@@ -126,7 +126,7 @@
}
}
- private static byte resolveCateogry(IAType... inputTypes) {
+ private static byte resolveCategory(IAType... inputTypes) {
byte category = CERTAIN;
boolean meetNull = false;
for (IAType inputType : inputTypes) {
diff --git
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InferTypesRule.java
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InferTypesRule.java
index 8d54a67..a17bbf7 100644
---
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InferTypesRule.java
+++
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InferTypesRule.java
@@ -25,6 +25,9 @@
import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+/**
+ * This rule computes and sets the output type environment for each operator
in the plan
+ */
public class InferTypesRule implements IAlgebraicRewriteRule {
@Override
--
To view, visit https://asterix-gerrit.ics.uci.edu/3201
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6f5cb78125657ff2bb4658af40bfc9d9cbff184e
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Hussain Towaileb <[email protected]>