Xikui Wang has submitted this change and it was merged.

Change subject: Fix NULL/MISSING field value handing in Java UDF
......................................................................


Fix NULL/MISSING field value handing in Java UDF

Add NULL/MISSING value support in Java UDF. This fixed the NPE when there
is a NULL/MISSING field in a record.

Change-Id: Icf110b2f5b3658847967f5ee7163fb2e47713813
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1695
Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
BAD: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Reviewed-by: Yingyi Bu <buyin...@gmail.com>
---
M 
asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JTypeObjectFactory.java
M 
asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
M 
asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjects.java
3 files changed, 66 insertions(+), 1 deletion(-)

Approvals:
  Yingyi Bu: Looks good to me, approved
  Jenkins: Verified; No violations found; No violations found; Verified



diff --git 
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JTypeObjectFactory.java
 
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JTypeObjectFactory.java
index e2ed092..fb9fd79 100644
--- 
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JTypeObjectFactory.java
+++ 
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JTypeObjectFactory.java
@@ -19,6 +19,7 @@
 package org.apache.asterix.external.library;
 
 import org.apache.asterix.external.api.IJObject;
+import org.apache.asterix.external.library.java.JObjects;
 import org.apache.asterix.external.library.java.JObjects.JBoolean;
 import org.apache.asterix.external.library.java.JObjects.JCircle;
 import org.apache.asterix.external.library.java.JObjects.JDate;
@@ -45,6 +46,7 @@
 import org.apache.asterix.om.types.AUnorderedListType;
 import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.om.util.container.IObjectFactory;
+
 
 public class JTypeObjectFactory implements IObjectFactory<IJObject, IAType> {
 
@@ -108,6 +110,12 @@
             case INT64:
                 retValue = new JLong(0);
                 break;
+            case NULL:
+                retValue = JObjects.JNull.INSTANCE;
+                break;
+            case MISSING:
+                retValue = JObjects.JMissing.INSTANCE;
+                break;
             case ORDEREDLIST:
                 AOrderedListType ot = (AOrderedListType) type;
                 IAType orderedItemType = ot.getItemType();
diff --git 
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
 
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
index f8755b4..a35bc69 100644
--- 
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
+++ 
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
@@ -140,6 +140,12 @@
             case DURATION:
                 accessor = new JDurationAccessor();
                 break;
+            case NULL:
+                accessor = new JNullAccessor();
+                break;
+            case MISSING:
+                accessor = new JMissingAccessor();
+                break;
             default:
                 break;
         }
@@ -189,6 +195,26 @@
         }
     }
 
+    public static class JNullAccessor implements IJObjectAccessor {
+
+        @Override
+        public IJObject access(IVisitablePointable pointable, 
IObjectPool<IJObject, IAType> objPool)
+                throws HyracksDataException {
+            IJObject jObject = objPool.allocate(BuiltinType.ANULL);
+            return jObject;
+        }
+    }
+
+    public static class JMissingAccessor implements  IJObjectAccessor {
+
+        @Override
+        public IJObject access(IVisitablePointable pointable, 
IObjectPool<IJObject, IAType> objPool)
+                throws HyracksDataException {
+            IJObject jObject = objPool.allocate(BuiltinType.AMISSING);
+            return jObject;
+        }
+    }
+
     public static class JInt64Accessor implements IJObjectAccessor {
 
         @Override
diff --git 
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjects.java
 
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjects.java
index 78b14e7..859a327 100644
--- 
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjects.java
+++ 
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjects.java
@@ -61,6 +61,7 @@
 import org.apache.asterix.om.base.AInt32;
 import org.apache.asterix.om.base.AInt64;
 import org.apache.asterix.om.base.AInt8;
+import org.apache.asterix.om.base.AMissing;
 import org.apache.asterix.om.base.AMutableCircle;
 import org.apache.asterix.om.base.AMutableDate;
 import org.apache.asterix.om.base.AMutableDateTime;
@@ -144,7 +145,7 @@
         public void serialize(DataOutput dataOutput, boolean writeTypeTag) 
throws HyracksDataException {
             if (writeTypeTag) {
                 try {
-                    dataOutput.writeByte(ATypeTag.SERIALIZED_MISSING_TYPE_TAG);
+                    dataOutput.writeByte(ATypeTag.SERIALIZED_NULL_TYPE_TAG);
                 } catch (IOException e) {
                     throw new HyracksDataException(e);
                 }
@@ -157,6 +158,36 @@
 
     }
 
+    public static class JMissing implements IJObject {
+        public final static JMissing INSTANCE = new JMissing();
+
+        @Override
+        public ATypeTag getTypeTag() {
+            return ATypeTag.MISSING;
+        }
+
+        @Override
+        public IAObject getIAObject() {
+            return AMissing.MISSING;
+        }
+
+        @Override
+        public void serialize(DataOutput dataOutput, boolean writeTypeTag) 
throws HyracksDataException {
+            if (writeTypeTag) {
+                try {
+                    dataOutput.writeByte(ATypeTag.SERIALIZED_MISSING_TYPE_TAG);
+                } catch (IOException e) {
+                    throw new HyracksDataException(e);
+                }
+            }
+        }
+
+        @Override
+        public void reset() throws HyracksDataException {
+            // no op
+        }
+    }
+
     public static final class JByte extends JObject {
 
         public JByte(byte value) {

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1695
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Icf110b2f5b3658847967f5ee7163fb2e47713813
Gerrit-PatchSet: 5
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Xikui Wang <xkk...@gmail.com>
Gerrit-Reviewer: Ian Maxon <ima...@apache.org>
Gerrit-Reviewer: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Xikui Wang <xkk...@gmail.com>
Gerrit-Reviewer: Yingyi Bu <buyin...@gmail.com>
Gerrit-Reviewer: abdullah alamoudi <bamou...@gmail.com>

Reply via email to