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>