This is an automated email from the ASF dual-hosted git repository. imaxon pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 86da3f820f9e59fe5382dc42c54b0828cc9aecb8 Author: Dmitry Lychagin <[email protected]> AuthorDate: Wed May 12 22:25:50 2021 -0700 [ASTERIXDB-2884] Compiler error with nested UDF calls - user model changes: no - storage format changes: no - interface changes: no Details: - Fix invalid plan produced by ExtractBatchableExternalFunctionCallsRule - IntroduceDynamicTypeCastForExternalFunctionRule should not introduce redundant cast if function argument type is ANY - Add testcase Change-Id: I472aa8f828cd548d14d7bda9893984cc4bf25737 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/11445 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Michael Blow <[email protected]> --- .../rules/ExtractBatchableExternalFunctionCallsRule.java | 12 +++++------- .../IntroduceDynamicTypeCastForExternalFunctionRule.java | 4 ++++ .../{mysentiment.0.ddl.sqlpp => toplevel_fn.0.ddl.sqlpp} | 0 .../{mysentiment.1.lib.sqlpp => toplevel_fn.1.lib.sqlpp} | 0 .../{mysentiment.2.ddl.sqlpp => toplevel_fn.2.ddl.sqlpp} | 0 .../{mysentiment.3.query.sqlpp => toplevel_fn.3.query.sqlpp} | 0 .../{mysentiment.3.query.sqlpp => toplevel_fn.4.query.sqlpp} | 7 ++++++- .../{mysentiment.4.ddl.sqlpp => toplevel_fn.5.ddl.sqlpp} | 0 .../toplevel_fn/{toplevel_fn.1.adm => toplevel_fn.3.adm} | 0 .../results/external-library/toplevel_fn/toplevel_fn.4.adm | 1 + 10 files changed, 16 insertions(+), 8 deletions(-) diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractBatchableExternalFunctionCallsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractBatchableExternalFunctionCallsRule.java index 1e5d805..54a1bb7 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractBatchableExternalFunctionCallsRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractBatchableExternalFunctionCallsRule.java @@ -190,13 +190,11 @@ public class ExtractBatchableExternalFunctionCallsRule implements IAlgebraicRewr if (!assignVars.isEmpty()) { usedVarList.clear(); expr.getUsedVariables(usedVarList); - for (int i = 0, ln = assignVars.size(); i < ln; i++) { - List<LogicalVariable> candidateVarList = assignVars.get(i); - if (OperatorPropertiesUtil.disjoint(candidateVarList, usedVarList)) { - assignVarList = candidateVarList; - assignExprList = assignExprs.get(i); - break; - } + int candidateVarListIdx = assignVars.size() - 1; + List<LogicalVariable> candidateVarList = assignVars.get(candidateVarListIdx); + if (OperatorPropertiesUtil.disjoint(candidateVarList, usedVarList)) { + assignVarList = candidateVarList; + assignExprList = assignExprs.get(candidateVarListIdx); } } diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java index 2c5a07d..22d87ac 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java @@ -22,6 +22,7 @@ package org.apache.asterix.optimizer.rules; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.ExternalFunctionInfo; import org.apache.asterix.om.typecomputer.base.TypeCastUtils; +import org.apache.asterix.om.typecomputer.impl.TypeComputeUtils; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.AUnionType; @@ -82,6 +83,9 @@ public class IntroduceDynamicTypeCastForExternalFunctionRule implements IAlgebra if (reqArgType.getTypeTag() == ATypeTag.OBJECT) { castFlag = !IntroduceDynamicTypeCastRule.compatible((ARecordType) reqArgType, inputType, argExpr.getValue().getSourceLocation()); + } else if (reqArgType.getTypeTag() == ATypeTag.ANY) { + IAType inputPrimeType = TypeComputeUtils.getActualType(inputType); + castFlag = inputPrimeType.getTypeTag().isDerivedType(); } else { castFlag = !reqArgType.equals(inputType); } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.0.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.0.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.0.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.0.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.1.lib.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.1.lib.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.1.lib.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.1.lib.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.2.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.2.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.2.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.2.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.3.query.sqlpp similarity index 100% copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.3.query.sqlpp copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.3.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.4.query.sqlpp similarity index 93% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.3.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.4.query.sqlpp index 755d980..7ebfc7a 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.3.query.sqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.4.query.sqlpp @@ -16,7 +16,12 @@ * specific language governing permissions and limitations * under the License. */ + +/* + * Testcase for ASTERIXDB-2884 + */ + use externallibtest; -sqrt(4); +sqrt(sqrt(null)); diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.4.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.5.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/mysentiment.4.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/toplevel_fn/toplevel_fn.5.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/toplevel_fn/toplevel_fn.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/toplevel_fn/toplevel_fn.3.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/toplevel_fn/toplevel_fn.1.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/toplevel_fn/toplevel_fn.3.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/toplevel_fn/toplevel_fn.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/toplevel_fn/toplevel_fn.4.adm new file mode 100644 index 0000000..ec747fa --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/toplevel_fn/toplevel_fn.4.adm @@ -0,0 +1 @@ +null \ No newline at end of file
