>From Michael Blow <[email protected]>:
Michael Blow has submitted this change. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19328 )
Change subject: Merge branch 'gerrit/stabilization-1cffa2bc98' into
'gerrit/goldfish'
......................................................................
Merge branch 'gerrit/stabilization-1cffa2bc98' into 'gerrit/goldfish'
Ext-ref: MB-64561
Change-Id: I5bf1f7bd24a4af26211a3014655b8b712f50db32
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ExpectedSchemaBuilder.java
2 files changed, 20 insertions(+), 73 deletions(-)
Approvals:
Michael Blow: Looks good to me, approved; Verified
Anon. E. Moose #1000171:
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ExpectedSchemaBuilder.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ExpectedSchemaBuilder.java
index fb30faf..f4b6cb0 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ExpectedSchemaBuilder.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ExpectedSchemaBuilder.java
@@ -56,17 +56,10 @@
public boolean setSchemaFromExpression(AbstractFunctionCallExpression
expr, LogicalVariable producedVar,
IVariableTypeEnvironment typeEnv) throws AlgebricksException {
-<<<<<<< HEAD (de0acb Merge branch 'gerrit/trinity' into 'gerrit/goldfish')
- return buildExpectedSchemaNodes(expr, producedVar, typeEnv);
- }
-
- public boolean
setSchemaFromCalculatedExpression(AbstractFunctionCallExpression expr,
LogicalVariable producedVar,
-=======
return buildExpectedSchemaNodes(expr, typeEnv, producedVar);
}
private boolean
setSchemaFromCalculatedExpression(AbstractFunctionCallExpression expr,
LogicalVariable producedVar,
->>>>>>> BRANCH (87f19a [ASTERIXDB-3540][COMP] Fixed calculation of expected
schema )
IVariableTypeEnvironment typeEnv) throws AlgebricksException {
//Parent always nested
AbstractComplexExpectedSchemaNode parent =
(AbstractComplexExpectedSchemaNode) buildNestedNode(expr, typeEnv);
@@ -116,71 +109,6 @@
return varToNode.get(variable);
}
-<<<<<<< HEAD (de0acb Merge branch 'gerrit/trinity' into 'gerrit/goldfish')
- private boolean buildExpectedSchemaNodes(ILogicalExpression expr,
LogicalVariable producedVar,
- IVariableTypeEnvironment typeEnv) throws AlgebricksException {
- return buildNestedNodes(expr, producedVar, typeEnv);
- }
-
- private boolean buildNestedNodes(ILogicalExpression expr, LogicalVariable
producedVar,
- IVariableTypeEnvironment typeEnv) throws AlgebricksException {
- //The current node expression
- boolean changed = false;
- if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
- return false;
- }
- AbstractFunctionCallExpression myExpr =
(AbstractFunctionCallExpression) expr;
- if (!SUPPORTED_FUNCTIONS.contains(myExpr.getFunctionIdentifier()) ||
noArgsOrFirstArgIsConstant(myExpr)) {
- // Check if the function consists of the Supported Functions
- for (Mutable<ILogicalExpression> arg : myExpr.getArguments()) {
- changed |= buildNestedNodes(arg.getValue(), producedVar,
typeEnv);
- }
- return changed;
- }
- // if the child is not a function expression, then just one node.
- if (BuiltinFunctions.ARRAY_STAR.equals(myExpr.getFunctionIdentifier())
- ||
BuiltinFunctions.SCAN_COLLECTION.equals(myExpr.getFunctionIdentifier())) {
- // these supported function won't have second child
- IExpectedSchemaNode expectedSchemaNode = buildNestedNode(expr,
typeEnv);
- if (expectedSchemaNode != null) {
- changed |=
-
setSchemaFromCalculatedExpression((AbstractFunctionCallExpression) expr,
producedVar, typeEnv);
- }
- } else {
- ILogicalExpression childExpr =
myExpr.getArguments().get(1).getValue();
- if (childExpr.getExpressionTag() !=
LogicalExpressionTag.FUNCTION_CALL) {
- // must be a variable or constant
- IExpectedSchemaNode expectedSchemaNode = buildNestedNode(expr,
typeEnv);
- if (expectedSchemaNode != null) {
- changed |=
setSchemaFromCalculatedExpression((AbstractFunctionCallExpression) expr,
producedVar,
- typeEnv);
- }
- } else {
- // as the childExpr is a function.
- // if the function had been evaluated at compile time, it
would have been
- // evaluated at this stage of compilation.
- // eg: field-access(t.r.p, substring("name",2,4))
- // this will be evaluated to field-access(t.r.p, "me") at
compile time itself.
- // since the execution reached this branch, this means the
childExpr
- // need to be evaluated at runtime, hence the childExpr should
also be checked
- // for possible pushdown.
- // eg: field-access(t.r.p, substring(x.y.age_field, 0, 4))
- ILogicalExpression parentExpr =
myExpr.getArguments().get(0).getValue();
- IExpectedSchemaNode parentExpectedNode =
buildNestedNode(parentExpr, typeEnv);
- if (parentExpectedNode != null) {
- changed |=
setSchemaFromCalculatedExpression((AbstractFunctionCallExpression) parentExpr,
- producedVar, typeEnv);
- }
- changed |= buildNestedNodes(childExpr, producedVar, typeEnv);
- }
- }
- return changed;
- }
-
- private boolean noArgsOrFirstArgIsConstant(AbstractFunctionCallExpression
myExpr) {
- List<Mutable<ILogicalExpression>> args = myExpr.getArguments();
- return args.isEmpty() || args.get(0).getValue().getExpressionTag() ==
LogicalExpressionTag.CONSTANT;
-=======
private boolean buildExpectedSchemaNodes(ILogicalExpression expr,
IVariableTypeEnvironment typeEnv,
LogicalVariable producedVar) throws AlgebricksException {
return buildNestedNodes(expr, typeEnv, producedVar);
@@ -243,7 +171,6 @@
}
}
return changed;
->>>>>>> BRANCH (87f19a [ASTERIXDB-3540][COMP] Fixed calculation of expected
schema )
}
private IExpectedSchemaNode buildNestedNode(ILogicalExpression expr,
IVariableTypeEnvironment typeEnv)
@@ -284,6 +211,11 @@
return null;
}
+ private boolean noArgsOrFirstArgIsConstant(AbstractFunctionCallExpression
myExpr) {
+ List<Mutable<ILogicalExpression>> args = myExpr.getArguments();
+ return args.isEmpty() || args.get(0).getValue().getExpressionTag() ==
LogicalExpressionTag.CONSTANT;
+ }
+
private IExpectedSchemaNode changeNodeForVariable(LogicalVariable
sourceVar,
AbstractFunctionCallExpression parentExpression,
ILogicalExpression expression) {
//Get the associated node with the sourceVar (if any)
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19328
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: goldfish
Gerrit-Change-Id: I5bf1f7bd24a4af26211a3014655b8b712f50db32
Gerrit-Change-Number: 19328
Gerrit-PatchSet: 3
Gerrit-Owner: Michael Blow <[email protected]>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Michael Blow <[email protected]>
Gerrit-CC: Jenkins <[email protected]>
Gerrit-MessageType: merged