Tracks the variables coming from the outer branch of loj to later decide whether they are still nullable
Change-Id: I65ef3ec64e231d4ee4b9cb18ac3292f126ee16f8
Reviewed-on: http://fulliautomatix.ics.uci.edu:8443/209
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Yingyi Bu <buyingyi@gmail.com>
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
index a42507c..51a9dc4 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
@@ -75,8 +75,9 @@
public class ConstantFoldingRule implements IAlgebraicRewriteRule {
- private ConstantFoldingVisitor cfv = new ConstantFoldingVisitor();
+ private final ConstantFoldingVisitor cfv = new ConstantFoldingVisitor();
+ /** Throws exceptions in substituiteProducedVariable, setVarType, and one getVarType method. */
private static final IVariableTypeEnvironment _emptyTypeEnv = new IVariableTypeEnvironment() {
@Override
@@ -90,8 +91,8 @@
}
@Override
- public Object getVarType(LogicalVariable var, List<LogicalVariable> nonNullVariables)
- throws AlgebricksException {
+ public Object getVarType(LogicalVariable var, List<LogicalVariable> nonNullVariables,
+ List<List<LogicalVariable>> correlatedNullableVariableLists) throws AlgebricksException {
throw new IllegalStateException();
}
@@ -135,9 +136,9 @@
private class ConstantFoldingVisitor implements ILogicalExpressionVisitor<Pair<Boolean, ILogicalExpression>, Void>,
ILogicalExpressionReferenceTransform {
- private IPointable p = VoidPointable.FACTORY.createPointable();
- private ByteBufferInputStream bbis = new ByteBufferInputStream();
- private DataInputStream dis = new DataInputStream(bbis);
+ private final IPointable p = VoidPointable.FACTORY.createPointable();
+ private final ByteBufferInputStream bbis = new ByteBufferInputStream();
+ private final DataInputStream dis = new DataInputStream(bbis);
@Override
public boolean transform(Mutable<ILogicalExpression> exprRef) throws AlgebricksException {
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlNullableTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlNullableTypeComputer.java
index f71fcf4..40c515f 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlNullableTypeComputer.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlNullableTypeComputer.java
@@ -37,4 +37,15 @@
}
}
+ @Override
+ public boolean canBeNull(Object type) {
+ IAType t = (IAType) type;
+ return TypeHelper.canBeNull(t);
+ }
+
+ @Override
+ public Object getNonOptionalType(Object type) {
+ IAType t = (IAType) type;
+ return TypeHelper.getNonOptionalType(t);
+ }
}