This is an automated email from the ASF dual-hosted git repository. dlych pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 86e5ff3bfcdfcf4589197d21722e9924e9d654fc Author: Ali Alsuliman <[email protected]> AuthorDate: Fri Dec 4 11:20:02 2020 -0800 [ASTERIXDB-2704][FUN] Field access on a non-object value should give warning - user model changes: no - storage format changes: no - interface changes: no Details: Field access on a non-object value should give warning instead of error and return MISSING. - change sugar-01-negative since it was not doing the intended test. - remove the type check from the type computer and defer the check to runtime. Change-Id: I90b23ba8cb6838f78645982f26cf8b0cf7dadb4c Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/9147 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> --- .../rules/ByNameToByIndexFieldAccessRule.java | 29 +++---------- .../field-access/field-access.01.ddl.sqlpp} | 10 ++--- .../field-access/field-access.02.update.sqlpp} | 4 +- .../field-access/field-access.03.query.sqlpp} | 16 +++---- .../field-access/field-access.04.query.sqlpp} | 10 +++-- .../field-access/field-access.99.ddl.sqlpp} | 2 +- .../numeric_fun_001/numeric_fun_001.01.ddl.sqlpp | 0 .../numeric_fun_001.02.update.sqlpp | 0 .../numeric_fun_001/numeric_fun_001.03.query.sqlpp | 0 .../numeric_fun_001/numeric_fun_001.04.ddl.sqlpp | 0 .../numeric_fun_002/numeric_fun_002.01.ddl.sqlpp | 0 .../numeric_fun_002.02.update.sqlpp | 0 .../numeric_fun_002/numeric_fun_002.03.query.sqlpp | 0 .../numeric_fun_002/numeric_fun_002.04.ddl.sqlpp | 0 .../numeric_fun_003/numeric_fun_003.01.ddl.sqlpp | 0 .../numeric_fun_003.02.update.sqlpp | 0 .../numeric_fun_003/numeric_fun_003.03.query.sqlpp | 0 .../numeric_fun_003/numeric_fun_003.04.ddl.sqlpp | 0 .../string_fun_001/string_fun_001.01.ddl.sqlpp | 0 .../string_fun_001/string_fun_001.02.update.sqlpp | 0 .../string_fun_001/string_fun_001.03.query.sqlpp | 0 .../string_fun_001/string_fun_001.04.query.sqlpp | 0 .../string_fun_001/string_fun_001.05.query.sqlpp | 0 .../string_fun_001/string_fun_001.06.query.sqlpp | 0 .../string_fun_001/string_fun_001.07.query.sqlpp | 0 .../string_fun_001/string_fun_001.08.query.sqlpp | 0 .../string_fun_001/string_fun_001.09.ddl.sqlpp | 0 .../string_fun_002/string_fun_002.01.query.sqlpp | 0 .../string_fun_003/string_fun_003.01.ddl.sqlpp | 0 .../string_fun_003/string_fun_003.02.update.sqlpp | 0 .../string_fun_003/string_fun_003.03.query.sqlpp | 0 .../string_fun_003/string_fun_003.04.query.sqlpp | 0 .../string_fun_003/string_fun_003.05.query.sqlpp | 0 .../string_fun_003/string_fun_003.06.ddl.sqlpp | 0 .../string_fun_004/string_fun_004.01.ddl.sqlpp | 0 .../string_fun_004/string_fun_004.02.update.sqlpp | 0 .../string_fun_004/string_fun_004.03.query.sqlpp | 0 .../string_fun_004/string_fun_004.04.query.sqlpp | 0 .../string_fun_004/string_fun_004.05.query.sqlpp | 0 .../string_fun_004/string_fun_004.06.ddl.sqlpp | 0 .../sugar-01-negative.3.query.sqlpp | 2 +- .../sugar-01-negative.99.ddl.sqlpp} | 2 +- .../field-access/field-access.03.adm | 1 + .../field-access/field-access.04.adm | 1 + .../numeric_fun_001/numeric_fun_001.03.adm | 0 .../numeric_fun_002/numeric_fun_002.03.adm | 0 .../numeric_fun_003/numeric_fun_003.03.adm | 0 .../string_fun_001/string_fun_001.03.adm | 0 .../string_fun_001/string_fun_001.04.adm | 0 .../string_fun_001/string_fun_001.05.adm | 0 .../string_fun_001/string_fun_001.06.adm | 0 .../string_fun_001/string_fun_001.07.adm | 0 .../string_fun_001/string_fun_001.08.adm | 0 .../string_fun_002/string_fun_002.01.adm | 0 .../string_fun_003/string_fun_003.01.adm | 0 .../string_fun_003/string_fun_003.02.adm | 0 .../string_fun_003/string_fun_003.03.adm | 0 .../string_fun_004/string_fun_004.03.adm | 0 .../string_fun_004/string_fun_004.04.adm | 0 .../string_fun_004/string_fun_004.05.adm | 0 .../test/resources/runtimets/testsuite_sqlpp.xml | 41 ++++++++++-------- .../impl/FieldAccessByNameResultType.java | 15 ------- .../records/FieldAccessByNameDescriptor.java | 2 +- .../records/FieldAccessByNameEvalFactory.java | 50 ++++++++++++++-------- 64 files changed, 90 insertions(+), 95 deletions(-) diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java index 9c478ee..abc434f 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java @@ -23,13 +23,12 @@ import java.util.ArrayList; import java.util.Collections; import org.apache.asterix.algebra.base.OperatorAnnotation; -import org.apache.asterix.lang.common.util.FunctionUtil; import org.apache.asterix.om.base.AInt32; import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.functions.BuiltinFunctions; +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; import org.apache.asterix.om.types.IAType; import org.apache.asterix.om.utils.ConstantExpressionUtil; import org.apache.commons.lang3.mutable.Mutable; @@ -77,20 +76,19 @@ public class ByNameToByIndexFieldAccessRule implements IAlgebraicRewriteRule { return false; } boolean changed = false; - AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr; - for (Mutable<ILogicalExpression> funcArgRef : funcExpr.getArguments()) { + AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr; + for (Mutable<ILogicalExpression> funcArgRef : fce.getArguments()) { if (rewriteExpressionReference(op, funcArgRef, context)) { changed = true; } } - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr; if (fce.getFunctionIdentifier() != BuiltinFunctions.FIELD_ACCESS_BY_NAME) { return changed; } changed |= extractFirstArg(fce, op, context); IVariableTypeEnvironment env = context.getOutputTypeEnvironment(op.getInputs().get(0).getValue()); IAType t = (IAType) env.getType(fce.getArguments().get(0).getValue()); - changed |= rewriteFieldAccess(exprRef, fce, getActualType(t)); + changed |= rewriteFieldAccess(exprRef, fce, TypeComputeUtils.getActualType(t)); return changed; } @@ -117,7 +115,7 @@ public class ByNameToByIndexFieldAccessRule implements IAlgebraicRewriteRule { // Rewrites field-access-by-name into field-access-by-index if possible. private boolean rewriteFieldAccess(Mutable<ILogicalExpression> exprRef, AbstractFunctionCallExpression fce, - IAType t) throws AlgebricksException { + IAType t) { if (t.getTypeTag() != ATypeTag.OBJECT) { return false; } @@ -129,20 +127,6 @@ public class ByNameToByIndexFieldAccessRule implements IAlgebraicRewriteRule { return changed; } - // Gets the actual type of a given type. - private IAType getActualType(IAType t) throws AlgebricksException { - switch (t.getTypeTag()) { - case ANY: - case OBJECT: - return t; - case UNION: - return ((AUnionType) t).getActualType(); - default: - throw new AlgebricksException("Cannot call field-access on data of type " + t); - } - } - - @SuppressWarnings("unchecked") private static ILogicalExpression createFieldAccessByIndex(ARecordType recType, AbstractFunctionCallExpression fce) { String s = ConstantExpressionUtil.getStringArgument(fce, 1); @@ -154,7 +138,8 @@ public class ByNameToByIndexFieldAccessRule implements IAlgebraicRewriteRule { return null; } ScalarFunctionCallExpression faExpr = new ScalarFunctionCallExpression( - FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX), fce.getArguments().get(0), + BuiltinFunctions.getBuiltinFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX), + fce.getArguments().get(0), new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AInt32(k))))); faExpr.setSourceLocation(fce.getSourceLocation()); return faExpr; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.01.ddl.sqlpp similarity index 87% copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.01.ddl.sqlpp copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.01.ddl.sqlpp index dd607f7..aa4fd86 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.01.ddl.sqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.01.ddl.sqlpp @@ -17,13 +17,13 @@ * under the License. */ -drop dataverse test if exists; -create dataverse test; -use test; +DROP DATAVERSE test IF EXISTS; +CREATE DATAVERSE test; +USE test; -create type t1 as { +CREATE TYPE t1 AS { id: int, str1: string }; -create dataset ds1(t1) primary key id; \ No newline at end of file +CREATE DATASET ds1(t1) PRIMARY KEY id; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.02.update.sqlpp similarity index 91% copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.02.update.sqlpp index 548e632..c78eeb5 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.02.update.sqlpp @@ -17,4 +17,6 @@ * under the License. */ -drop dataverse test if exists; \ No newline at end of file +USE test; + +INSERT INTO ds1([{"id": 1, "str1": "text", "str2": "text"}]); \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.03.query.sqlpp similarity index 79% copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.01.ddl.sqlpp copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.03.query.sqlpp index dd607f7..6832a64 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.01.ddl.sqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.03.query.sqlpp @@ -17,13 +17,13 @@ * under the License. */ -drop dataverse test if exists; -create dataverse test; -use test; +/* + * Description: tests reporting invalid argument type for field-access function + */ +// requesttype=application/json +// param max-warnings:json=1000 -create type t1 as { -id: int, -str1: string -}; +USE test; -create dataset ds1(t1) primary key id; \ No newline at end of file +FROM ds1 AS ds1 +SELECT ds1.str1.x, ds1.str2.y; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.02.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.04.query.sqlpp similarity index 83% copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.02.update.sqlpp copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.04.query.sqlpp index 05c78d2..bb65e36 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.02.update.sqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.04.query.sqlpp @@ -17,8 +17,10 @@ * under the License. */ -use test; +/* + * Description: tests reporting invalid argument type for field-access function + */ +// requesttype=application/json +// param max-warnings:json=1000 -insert into ds1([ -{"id": 1, "str1": "text", "str2": "text"} -]); \ No newline at end of file +SELECT "x".y; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.99.ddl.sqlpp similarity index 96% copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.99.ddl.sqlpp index 548e632..36b2bab 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/field-access/field-access.99.ddl.sqlpp @@ -17,4 +17,4 @@ * under the License. */ -drop dataverse test if exists; \ No newline at end of file +DROP DATAVERSE test IF EXISTS; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_001/numeric_fun_001.01.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.01.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_001/numeric_fun_001.01.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.02.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_001/numeric_fun_001.02.update.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.02.update.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_001/numeric_fun_001.02.update.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.03.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_001/numeric_fun_001.03.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.03.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_001/numeric_fun_001.03.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp similarity index 100% copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_002/numeric_fun_002.01.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.01.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_002/numeric_fun_002.01.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.02.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_002/numeric_fun_002.02.update.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.02.update.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_002/numeric_fun_002.02.update.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.03.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_002/numeric_fun_002.03.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.03.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_002/numeric_fun_002.03.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.04.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_002/numeric_fun_002.04.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.04.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_002/numeric_fun_002.04.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_003/numeric_fun_003.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_003/numeric_fun_003.01.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_003/numeric_fun_003.01.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_003/numeric_fun_003.01.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_003/numeric_fun_003.02.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_003/numeric_fun_003.02.update.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_003/numeric_fun_003.02.update.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_003/numeric_fun_003.02.update.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_003/numeric_fun_003.03.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_003/numeric_fun_003.03.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_003/numeric_fun_003.03.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_003/numeric_fun_003.03.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_003/numeric_fun_003.04.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_003/numeric_fun_003.04.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_003/numeric_fun_003.04.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/numeric_fun/numeric_fun_003/numeric_fun_003.04.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.01.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.01.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.01.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.02.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.02.update.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.02.update.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.02.update.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.03.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.03.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.03.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.03.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.04.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.04.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.04.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.04.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.05.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.05.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.05.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.05.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.06.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.06.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.06.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.06.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.07.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.07.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.07.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.07.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.08.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.08.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.08.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.08.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.09.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.09.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_001/string_fun_001.09.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.09.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_002/string_fun_002.01.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_002/string_fun_002.01.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_002/string_fun_002.01.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_002/string_fun_002.01.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.01.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.01.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.01.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.02.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.02.update.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.02.update.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.02.update.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.03.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.03.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.03.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.03.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.04.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.04.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.04.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.04.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.05.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.05.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.05.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.05.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.06.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.06.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_003/string_fun_003.06.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.06.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.01.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.01.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.01.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.02.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.02.update.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.02.update.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.02.update.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.03.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.03.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.03.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.03.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.04.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.04.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.04.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.04.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.05.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.05.query.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.05.query.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.05.query.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.06.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.06.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/string_fun/string_fun_004/string_fun_004.06.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.06.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp index 0218637..523e8ed 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp @@ -23,5 +23,5 @@ USE gby; // cannot be used like a SQL-92 sugar, e.g., AVG. Its input must be a collection. FROM Employee e GROUP BY e.deptno AS deptno GROUP AS g -SELECT deptno AS deptno, STRICT_AVG(g.e.salary) AS avgpay, +SELECT deptno AS deptno, STRICT_AVG(g[0].e.salary) AS avgpay, (SELECT i.e.name AS name, i.e.salary AS salary FROM g AS i) AS workers; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.99.ddl.sqlpp similarity index 96% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.99.ddl.sqlpp index 548e632..9293a16 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.04.ddl.sqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.99.ddl.sqlpp @@ -17,4 +17,4 @@ * under the License. */ -drop dataverse test if exists; \ No newline at end of file +DROP DATAVERSE gby IF EXISTS; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/field-access/field-access.03.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/field-access/field-access.03.adm new file mode 100644 index 0000000..f7bcb87 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/field-access/field-access.03.adm @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/field-access/field-access.04.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/field-access/field-access.04.adm new file mode 100644 index 0000000..f7bcb87 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/field-access/field-access.04.adm @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.03.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/numeric_fun/numeric_fun_001/numeric_fun_001.03.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/numeric_fun/numeric_fun_001/numeric_fun_001.03.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/numeric_fun/numeric_fun_001/numeric_fun_001.03.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.03.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/numeric_fun/numeric_fun_002/numeric_fun_002.03.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/numeric_fun/numeric_fun_002/numeric_fun_002.03.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/numeric_fun/numeric_fun_002/numeric_fun_002.03.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/numeric_fun/numeric_fun_003/numeric_fun_003.03.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/numeric_fun/numeric_fun_003/numeric_fun_003.03.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/numeric_fun/numeric_fun_003/numeric_fun_003.03.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/numeric_fun/numeric_fun_003/numeric_fun_003.03.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.03.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.03.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.03.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.03.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.04.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.04.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.04.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.04.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.05.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.05.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.05.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.05.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.06.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.06.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.06.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.06.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.07.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.07.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.07.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.07.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.08.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.08.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_001/string_fun_001.08.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_001/string_fun_001.08.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_002/string_fun_002.01.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_002/string_fun_002.01.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_002/string_fun_002.01.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_002/string_fun_002.01.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_003/string_fun_003.01.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.01.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_003/string_fun_003.01.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.01.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_003/string_fun_003.02.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.02.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_003/string_fun_003.02.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.02.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_003/string_fun_003.03.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.03.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_003/string_fun_003.03.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_003/string_fun_003.03.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_004/string_fun_004.03.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.03.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_004/string_fun_004.03.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.03.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_004/string_fun_004.04.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.04.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_004/string_fun_004.04.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.04.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_004/string_fun_004.05.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.05.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null/string_fun/string_fun_004/string_fun_004.05.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fun_return_null_missing/string_fun/string_fun_004/string_fun_004.05.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml index ed5399d..b75da14 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -5639,7 +5639,7 @@ <test-case FilePath="group-by"> <compilation-unit name="sugar-01-negative"> <output-dir compare="Text">core-01</output-dir> - <expected-error>ASX1091: Type mismatch: expected value of type object, but got the value of type array (in line 26, at column 38)</expected-error> + <expected-error>ASX0037: Type mismatch: expected value of type array or multiset, but got the value of type bigint (in line 26, at column 26)</expected-error> </compilation-unit> </test-case> <test-case FilePath="group-by"> @@ -13375,6 +13375,11 @@ <output-dir compare="Clean-JSON">issue-ASTERIXDB-1165</output-dir> </compilation-unit> </test-case> + <test-case FilePath="json"> + <compilation-unit name="int01"> + <output-dir compare="Clean-JSON">int01-cleanjson</output-dir> + </compilation-unit> + </test-case> </test-group> <test-group name="materialization"> <test-case FilePath="materialization"> @@ -13492,13 +13497,6 @@ </compilation-unit> </test-case> </test-group> - <test-group name="cleanjson"> - <test-case FilePath="json"> - <compilation-unit name="int01"> - <output-dir compare="Clean-JSON">int01-cleanjson</output-dir> - </compilation-unit> - </test-case> - </test-group> <test-group name="csv"> <test-case FilePath="csv"> <compilation-unit name="basic-types"> @@ -14159,8 +14157,8 @@ </compilation-unit> </test-case> </test-group> - <test-group name="fun_return_null/string_fun"> - <test-case FilePath="fun_return_null/string_fun" check-warnings="true"> + <test-group name="fun_return_null_missing/string_fun"> + <test-case FilePath="fun_return_null_missing/string_fun" check-warnings="true"> <compilation-unit name="string_fun_001"> <output-dir compare="Text">string_fun_001</output-dir> <expected-warn>Type mismatch: function trim expects its 1st input parameter to be of type string, but the actual input type is bigint (in line 41, at column 1)</expected-warn> @@ -14260,7 +14258,7 @@ <expected-warn>Type mismatch: function ends-with expects its 1st input parameter to be of type string, but the actual input type is bigint (in line 33, at column 1)</expected-warn> </compilation-unit> </test-case> - <test-case FilePath="fun_return_null/string_fun" check-warnings="true"> + <test-case FilePath="fun_return_null_missing/string_fun" check-warnings="true"> <compilation-unit name="string_fun_002"> <output-dir compare="Text">string_fun_002</output-dir> <expected-warn>Type mismatch: function rtrim expects its 1st input parameter to be of type string, but the actual input type is bigint (in line 42, at column 1)</expected-warn> @@ -14295,7 +14293,7 @@ <expected-warn>Type mismatch: function regexp-position expects its 1st input parameter to be of type string, but the actual input type is integer (in line 50, at column 1)</expected-warn> </compilation-unit> </test-case> - <test-case FilePath="fun_return_null/string_fun" check-warnings="true"> + <test-case FilePath="fun_return_null_missing/string_fun" check-warnings="true"> <compilation-unit name="string_fun_003"> <output-dir compare="Text">string_fun_003</output-dir> <expected-warn>Invalid value: function repeat expects its 2nd input parameter to be an integer value, got 5.3 (in line 31, at column 1)</expected-warn> @@ -14320,7 +14318,7 @@ <expected-warn>Invalid value: function substring expects its 2nd input parameter to be an integer value, got Infinity (in line 34, at column 1)</expected-warn> </compilation-unit> </test-case> - <test-case FilePath="fun_return_null/string_fun" check-warnings="true"> + <test-case FilePath="fun_return_null_missing/string_fun" check-warnings="true"> <compilation-unit name="string_fun_004"> <output-dir compare="Text">string_fun_004</output-dir> <expected-warn>Type mismatch: function string-concat expects its 2nd input parameter to be of type string, but the actual input type is tinyint (in line 30, at column 1)</expected-warn> @@ -14346,8 +14344,8 @@ </compilation-unit> </test-case> </test-group> - <test-group name="fun_return_null/numeric_fun" > - <test-case FilePath="fun_return_null/numeric_fun" check-warnings="true"> + <test-group name="fun_return_null_missing/numeric_fun" > + <test-case FilePath="fun_return_null_missing/numeric_fun" check-warnings="true"> <compilation-unit name="numeric_fun_001"> <output-dir compare="Text">numeric_fun_001</output-dir> <expected-warn>Type mismatch: function abs expects its 1st input parameter to be of type tinyint, smallint, integer, bigint, float or double, but the actual input type is string</expected-warn> @@ -14424,7 +14422,7 @@ <source-location>false</source-location> </compilation-unit> </test-case> - <test-case FilePath="fun_return_null/numeric_fun" check-warnings="true"> + <test-case FilePath="fun_return_null_missing/numeric_fun" check-warnings="true"> <compilation-unit name="numeric_fun_002"> <output-dir compare="Text">numeric_fun_002</output-dir> <expected-warn>Type mismatch: function round expects its 1st input parameter to be of type tinyint, smallint, integer, bigint, float or double, but the actual input type is string</expected-warn> @@ -14451,7 +14449,7 @@ <source-location>false</source-location> </compilation-unit> </test-case> - <test-case FilePath="fun_return_null/numeric_fun" check-warnings="true"> + <test-case FilePath="fun_return_null_missing/numeric_fun" check-warnings="true"> <compilation-unit name="numeric_fun_003"> <output-dir compare="Text">numeric_fun_003</output-dir> <expected-warn>Type mismatch: function numeric-add expects its 2nd input parameter to be of type tinyint, smallint, integer, bigint, float, double, date, time, datetime, duration, yearmonthduration or daytimeduration, but the actual input type is string</expected-warn> @@ -14495,6 +14493,15 @@ <source-location>false</source-location> </compilation-unit> </test-case> + <test-case FilePath="fun_return_null_missing" check-warnings="true"> + <compilation-unit name="field-access"> + <output-dir compare="Text">field-access</output-dir> + <expected-warn>Type mismatch: function field-access-by-name expects its 1st input parameter to be of type object, but the actual input type is string</expected-warn> + <expected-warn>Type mismatch: function field-access-by-name expects its 1st input parameter to be of type object, but the actual input type is string</expected-warn> + <expected-warn>Type mismatch: function field-access-by-name expects its 1st input parameter to be of type object, but the actual input type is string</expected-warn> + <source-location>false</source-location> + </compilation-unit> + </test-case> </test-group> <test-group name="window"> <test-case FilePath="window"> diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java index c5373bc..1c4939a 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java @@ -18,7 +18,6 @@ */ package org.apache.asterix.om.typecomputer.impl; -import org.apache.asterix.om.exceptions.TypeMismatchException; import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; @@ -28,8 +27,6 @@ import org.apache.asterix.om.utils.ConstantExpressionUtil; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; -import org.apache.hyracks.api.exceptions.SourceLocation; public class FieldAccessByNameResultType extends AbstractResultTypeComputer { @@ -39,18 +36,6 @@ public class FieldAccessByNameResultType extends AbstractResultTypeComputer { } @Override - protected void checkArgType(FunctionIdentifier funcId, int argIndex, IAType type, SourceLocation sourceLoc) - throws AlgebricksException { - ATypeTag actualTypeTag = type.getTypeTag(); - if (argIndex == 0 && actualTypeTag != ATypeTag.OBJECT) { - throw new TypeMismatchException(sourceLoc, actualTypeTag, ATypeTag.OBJECT); - } - if (argIndex == 1 && actualTypeTag != ATypeTag.STRING) { - throw new TypeMismatchException(sourceLoc, actualTypeTag, ATypeTag.STRING); - } - } - - @Override protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException { IAType firstArgType = strippedInputTypes[0]; if (firstArgType.getTypeTag() != ATypeTag.OBJECT) { diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameDescriptor.java index 4b24f4e..c5c7c97 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameDescriptor.java @@ -43,7 +43,7 @@ public class FieldAccessByNameDescriptor extends AbstractScalarFunctionDynamicDe @Override public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) { - return new FieldAccessByNameEvalFactory(args[0], args[1], sourceLoc); + return new FieldAccessByNameEvalFactory(args[0], args[1], sourceLoc, getIdentifier()); } } diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameEvalFactory.java index 0d68785..8549292 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameEvalFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameEvalFactory.java @@ -24,11 +24,12 @@ import java.io.IOException; import org.apache.asterix.dataflow.data.nontagged.serde.ARecordSerializerDeserializer; import org.apache.asterix.formats.nontagged.BinaryComparatorFactoryProvider; import org.apache.asterix.formats.nontagged.BinaryHashFunctionFactoryProvider; +import org.apache.asterix.om.exceptions.ExceptionUtil; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.EnumDeserializer; import org.apache.asterix.om.utils.NonTaggedFormatUtil; import org.apache.asterix.runtime.evaluators.functions.PointableHelper; -import org.apache.asterix.runtime.exceptions.TypeMismatchException; +import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -45,15 +46,17 @@ public class FieldAccessByNameEvalFactory implements IScalarEvaluatorFactory { private static final long serialVersionUID = 1L; - private IScalarEvaluatorFactory recordEvalFactory; - private IScalarEvaluatorFactory fldNameEvalFactory; + private final IScalarEvaluatorFactory recordEvalFactory; + private final IScalarEvaluatorFactory fldNameEvalFactory; private final SourceLocation sourceLoc; + private final FunctionIdentifier funID; public FieldAccessByNameEvalFactory(IScalarEvaluatorFactory recordEvalFactory, - IScalarEvaluatorFactory fldNameEvalFactory, SourceLocation sourceLoc) { + IScalarEvaluatorFactory fldNameEvalFactory, SourceLocation sourceLoc, FunctionIdentifier funID) { this.recordEvalFactory = recordEvalFactory; this.fldNameEvalFactory = fldNameEvalFactory; this.sourceLoc = sourceLoc; + this.funID = funID; } @Override @@ -64,16 +67,13 @@ public class FieldAccessByNameEvalFactory implements IScalarEvaluatorFactory { BinaryHashFunctionFactoryProvider.UTF8STRING_POINTABLE_INSTANCE.createBinaryHashFunction(); private final IBinaryComparator fieldNameComparator = BinaryComparatorFactoryProvider.UTF8STRING_POINTABLE_INSTANCE.createBinaryComparator(); - private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage(); - private DataOutput out = resultStorage.getDataOutput(); + private final ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage(); + private final DataOutput out = resultStorage.getDataOutput(); - private IPointable inputArg0 = new VoidPointable(); - private IPointable inputArg1 = new VoidPointable(); - private IScalarEvaluator eval0 = recordEvalFactory.createScalarEvaluator(ctx); - private IScalarEvaluator eval1 = fldNameEvalFactory.createScalarEvaluator(ctx); - private int fieldValueOffset; - private int fieldValueLength; - private ATypeTag fieldValueTypeTag; + private final IPointable inputArg0 = new VoidPointable(); + private final IPointable inputArg1 = new VoidPointable(); + private final IScalarEvaluator eval0 = recordEvalFactory.createScalarEvaluator(ctx); + private final IScalarEvaluator eval1 = fldNameEvalFactory.createScalarEvaluator(ctx); @Override public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException { @@ -91,21 +91,33 @@ public class FieldAccessByNameEvalFactory implements IScalarEvaluatorFactory { int serRecordLen = inputArg0.getLength(); if (serRecord[serRecordOffset] != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) { - throw new TypeMismatchException(sourceLoc, serRecord[serRecordOffset], - ATypeTag.SERIALIZED_RECORD_TYPE_TAG); + ExceptionUtil.warnTypeMismatch(ctx, sourceLoc, funID, serRecord[serRecordOffset], 0, + ATypeTag.OBJECT); + out.writeByte(ATypeTag.SERIALIZED_MISSING_TYPE_TAG); + result.set(resultStorage); + return; } byte[] serFldName = inputArg1.getByteArray(); int serFldNameOffset = inputArg1.getStartOffset(); - fieldValueOffset = ARecordSerializerDeserializer.getFieldOffsetByName(serRecord, serRecordOffset, - serRecordLen, serFldName, serFldNameOffset, fieldNameHashFunction, fieldNameComparator); + if (serFldName[serFldNameOffset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) { + ExceptionUtil.warnTypeMismatch(ctx, sourceLoc, funID, serFldName[serFldNameOffset], 1, + ATypeTag.STRING); + out.writeByte(ATypeTag.SERIALIZED_MISSING_TYPE_TAG); + result.set(resultStorage); + return; + } + int fieldValueOffset = + ARecordSerializerDeserializer.getFieldOffsetByName(serRecord, serRecordOffset, serRecordLen, + serFldName, serFldNameOffset, fieldNameHashFunction, fieldNameComparator); if (fieldValueOffset < 0) { out.writeByte(ATypeTag.SERIALIZED_MISSING_TYPE_TAG); result.set(resultStorage); return; } - fieldValueTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serRecord[fieldValueOffset]); - fieldValueLength = NonTaggedFormatUtil.getFieldValueLength(serRecord, fieldValueOffset, + ATypeTag fieldValueTypeTag = + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serRecord[fieldValueOffset]); + int fieldValueLength = NonTaggedFormatUtil.getFieldValueLength(serRecord, fieldValueOffset, fieldValueTypeTag, true) + 1; result.set(serRecord, fieldValueOffset, fieldValueLength); } catch (IOException e) {
