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) {

Reply via email to