From notifications-return-158042-archive-asf-public=cust-asf.ponee.io@asterixdb.apache.org Thu Jun 3 17:51:10 2021 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mxout1-he-de.apache.org (mxout1-he-de.apache.org [95.216.194.37]) by mx-eu-01.ponee.io (Postfix) with ESMTPS id 8FF18180643 for ; Thu, 3 Jun 2021 19:51:10 +0200 (CEST) Received: from mail.apache.org (mailroute1-lw-us.apache.org [207.244.88.153]) by mxout1-he-de.apache.org (ASF Mail Server at mxout1-he-de.apache.org) with SMTP id EAAD65FFCF for ; Thu, 3 Jun 2021 17:51:09 +0000 (UTC) Received: (qmail 41261 invoked by uid 500); 3 Jun 2021 17:51:09 -0000 Mailing-List: contact notifications-help@asterixdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@asterixdb.apache.org Delivered-To: mailing list notifications@asterixdb.apache.org Received: (qmail 41245 invoked by uid 99); 3 Jun 2021 17:51:09 -0000 Received: from spamproc1-he-fi.apache.org (HELO spamproc1-he-fi.apache.org) (95.217.134.168) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 03 Jun 2021 17:51:09 +0000 Received: from localhost (localhost [127.0.0.1]) by spamproc1-he-fi.apache.org (ASF Mail Server at spamproc1-he-fi.apache.org) with ESMTP id 5DBDBC0453 for ; Thu, 3 Jun 2021 17:51:08 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamproc1-he-fi.apache.org X-Spam-Flag: NO X-Spam-Score: 0.213 X-Spam-Level: X-Spam-Status: No, score=0.213 tagged_above=-999 required=6.31 tests=[HTML_MESSAGE=0.2, SPF_NONE=0.001, T_KAM_HTML_FONT_INVALID=0.01, URIBL_BLOCKED=0.001, WEIRD_PORT=0.001] autolearn=disabled Received: from mx1-he-de.apache.org ([116.203.227.195]) by localhost (spamproc1-he-fi.apache.org [95.217.134.168]) (amavisd-new, port 10024) with ESMTP id E8AHgl4Bd7Hb for ; Thu, 3 Jun 2021 17:51:07 +0000 (UTC) Received-SPF: None (mailfrom) identity=mailfrom; client-ip=128.195.1.133; helo=adrian-monk-v3.ics.uci.edu; envelope-from=do-not-reply@asterix-gerrit.ics.uci.edu; receiver= Received: from adrian-monk-v3.ics.uci.edu (adrian-monk-v3.ics.uci.edu [128.195.1.133]) by mx1-he-de.apache.org (ASF Mail Server at mx1-he-de.apache.org) with ESMTPS id E350F7FF8A for ; Thu, 3 Jun 2021 17:51:06 +0000 (UTC) Received: from 7c2109483a62 (vitalstatistix.ics.uci.edu [128.195.52.38]) by adrian-monk-v3.ics.uci.edu (Postfix) with ESMTP id 06401C02E324; Thu, 3 Jun 2021 10:51:02 -0700 (PDT) X-Gerrit-PatchSet: 1 Date: Thu, 3 Jun 2021 17:51:01 +0000 From: AsterixDB Code Review To: Till Westmann Message-ID: Auto-Submitted: auto-generated X-Gerrit-MessageType: newchange Subject: Change in asterixdb[mad-hatter]: [ASTERIXDB-2732][FUN] Support missing and union type in get_object_fi... X-Gerrit-Change-Id: I84355e0ae91afd0328e636aa4f3bed6eeb44e055 X-Gerrit-Change-Number: 11764 X-Gerrit-Project: asterixdb X-Gerrit-ChangeURL: X-Gerrit-Commit: 6d5ef5143a9eb9490659c20c23a7b6d7b5b4a3b4 References: Reply-To: ali.al.solaiman@gmail.com, dmitry.lychagin@couchbase.com, notifications@asterixdb.apache.org, lwhaywhu@gmail.com, tillw@apache.org MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Disposition: inline User-Agent: Gerrit/3.0.12 Content-Type: multipart/alternative; boundary="IRS56BCDoBU="; charset=UTF-8 X-ICS-MailScanner-Information: Please send mail to helpdesk@ics.uci.edu or more information X-ICS-MailScanner-ID: 06401C02E324.A3768 X-ICS-MailScanner: Found to be clean X-ICS-MailScanner-SpamCheck: not spam, SpamAssassin (not cached, score=-0.986, required 5, ALL_TRUSTED -1.00, FSL_HELO_NON_FQDN_1 0.00, HELO_NO_DOMAIN 0.00, HTML_MESSAGE 0.00, T_KAM_HTML_FONT_INVALID 0.01, URIBL_BLOCKED 0.00) X-ICS-MailScanner-From: do-not-reply@asterix-gerrit.ics.uci.edu --IRS56BCDoBU= Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable From Ali Alsuliman : Ali Alsuliman has up= loaded this change for review=2E ( https://asterix-gerrit=2Eics=2Euci=2Eedu= /c/asterixdb/+/11764 ) Change subject: [ASTERIXDB-2732][FUN] Support miss= ing and union type in get_object_field_value =2E=2E=2E=2E=2E=2E=2E=2E=2E=2E= =2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E= =2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E= =2E=2E=2E=2E=2E=2E=2E=2E=2E=2E [ASTERIXDB-2732][FUN] Support missing and u= nion type in get_object_field_value - user model changes: no - storage for= mat changes: no - interface changes: no Change-Id: I84355e0ae91afd0328e636= aa4f3bed6eeb44e055 --- C asterixdb/asterix-app/src/test/resources/runtimets= /queries_sqlpp/null-missing/field-access/field-access=2E1=2Eddl=2Esqlpp C a= sterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missin= g/field-access/field-access=2E2=2Eupdate=2Esqlpp R asterixdb/asterix-app/sr= c/test/resources/runtimets/queries_sqlpp/null-missing/field-access/field-ac= cess=2E3=2Equery=2Esqlpp C asterixdb/asterix-app/src/test/resources/runtime= ts/queries_sqlpp/null-missing/field-access/field-access=2E4=2Equery=2Esqlpp= M asterixdb/asterix-app/src/test/resources/runtimets/results/null-missing/= field-access/field-access=2E1=2Eadm A asterixdb/asterix-app/src/test/resour= ces/runtimets/results/null-missing/field-access/field-access=2E2=2Eadm M as= terixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators= /functions/records/GetRecordFieldValueEvalFactory=2Ejava 7 files changed, 6= 1 insertions(+), 31 deletions(-) git pull ssh://asterix-gerrit=2Eics= =2Euci=2Eedu:29418/asterixdb refs/changes/64/11764/1 diff --git a/asterixd= b/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missing/field= -access/field-access=2E1=2Equery=2Esqlpp b/asterixdb/asterix-app/src/test/r= esources/runtimets/queries_sqlpp/null-missing/field-access/field-access=2E1= =2Eddl=2Esqlpp similarity index 73% copy from asterixdb/asterix-app/src/tes= t/resources/runtimets/queries_sqlpp/null-missing/field-access/field-access= =2E1=2Equery=2Esqlpp copy to asterixdb/asterix-app/src/test/resources/runti= mets/queries_sqlpp/null-missing/field-access/field-access=2E1=2Eddl=2Esqlpp= index 7be4593=2E=2E0d6ab35 100644 --- a/asterixdb/asterix-app/src/test/res= ources/runtimets/queries_sqlpp/null-missing/field-access/field-access=2E1= =2Equery=2Esqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/q= ueries_sqlpp/null-missing/field-access/field-access=2E1=2Eddl=2Esqlpp @@ -1= 7,7 +17,18 @@ * under the License=2E */ -{ - 'null': {'a': null}=2Ea= , - 'missing': {'b': missing}=2Eb -}; \ No newline at end of file +drop da= taverse test if exists; +create dataverse test; +use test; + +drop dataset = samptable if exists; +drop type samptabletype if exists; + +create type sam= ptabletype as closed { + id: tinyint, + mf: tinyint?, + rf: { pid:tinyin= t}? +}; + + +create dataset samptable(samptabletype) primary key id; \ No n= ewline at end of file diff --git a/asterixdb/asterix-app/src/test/resources= /runtimets/queries_sqlpp/null-missing/field-access/field-access=2E1=2Equery= =2Esqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp= /null-missing/field-access/field-access=2E2=2Eupdate=2Esqlpp similarity ind= ex 80% copy from asterixdb/asterix-app/src/test/resources/runtimets/queries= _sqlpp/null-missing/field-access/field-access=2E1=2Equery=2Esqlpp copy to a= sterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missin= g/field-access/field-access=2E2=2Eupdate=2Esqlpp index 7be4593=2E=2E8a7e88b= 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sq= lpp/null-missing/field-access/field-access=2E1=2Equery=2Esqlpp +++ b/asteri= xdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missing/fie= ld-access/field-access=2E2=2Eupdate=2Esqlpp @@ -17,7 +17,7 @@ * under the= License=2E */ -{ - 'null': {'a': null}=2Ea, - 'missing': {'b': missi= ng}=2Eb -}; \ No newline at end of file +use test; +insert into samptable (= {'id' : 0, 'mf':missing, 'rf':{'pid':4}}); +insert into samptable ({'id' : = 1, 'mf':null, 'rf':missing}); +insert into samptable ({'id' : 2, 'mf':5, 'r= f':null}); diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/= queries_sqlpp/null-missing/field-access/field-access=2E1=2Equery=2Esqlpp b/= asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missi= ng/field-access/field-access=2E3=2Equery=2Esqlpp similarity index 82% renam= e from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nul= l-missing/field-access/field-access=2E1=2Equery=2Esqlpp rename to asterixdb= /asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missing/field-= access/field-access=2E3=2Equery=2Esqlpp index 7be4593=2E=2Ebed3710 100644 -= -- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-= missing/field-access/field-access=2E1=2Equery=2Esqlpp +++ b/asterixdb/aster= ix-app/src/test/resources/runtimets/queries_sqlpp/null-missing/field-access= /field-access=2E3=2Equery=2Esqlpp @@ -17,7 +17,9 @@ * under the License= =2E */ -{ - 'null': {'a': null}=2Ea, - 'missing': {'b': missing}=2Eb = -}; \ No newline at end of file +use test; + +from samptable d +select id, = get_object_field_value(d, 'rf') as field_value, + get_object_fiel= d_value(d, 'rf') is missing as is_missing +order by id; diff --git a/asteri= xdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missing/fie= ld-access/field-access=2E1=2Equery=2Esqlpp b/asterixdb/asterix-app/src/test= /resources/runtimets/queries_sqlpp/null-missing/field-access/field-access= =2E4=2Equery=2Esqlpp similarity index 82% copy from asterixdb/asterix-app/s= rc/test/resources/runtimets/queries_sqlpp/null-missing/field-access/field-a= ccess=2E1=2Equery=2Esqlpp copy to asterixdb/asterix-app/src/test/resources/= runtimets/queries_sqlpp/null-missing/field-access/field-access=2E4=2Equery= =2Esqlpp index 7be4593=2E=2E553dc55 100644 --- a/asterixdb/asterix-app/src/= test/resources/runtimets/queries_sqlpp/null-missing/field-access/field-acce= ss=2E1=2Equery=2Esqlpp +++ b/asterixdb/asterix-app/src/test/resources/runti= mets/queries_sqlpp/null-missing/field-access/field-access=2E4=2Equery=2Esql= pp @@ -16,8 +16,9 @@ * specific language governing permissions and limita= tions * under the License=2E */ +use test; -{ - 'null': {'a': null}= =2Ea, - 'missing': {'b': missing}=2Eb -}; \ No newline at end of file +fro= m samptable d +select id, get_object_field_value(d, 'mf') as field_value, += get_object_field_value(d, 'mf') is missing as is_missing +order = by id; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/resu= lts/null-missing/field-access/field-access=2E1=2Eadm b/asterixdb/asterix-ap= p/src/test/resources/runtimets/results/null-missing/field-access/field-acce= ss=2E1=2Eadm index d7a20ef=2E=2Ef157d67 100644 --- a/asterixdb/asterix-app/= src/test/resources/runtimets/results/null-missing/field-access/field-access= =2E1=2Eadm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results= /null-missing/field-access/field-access=2E1=2Eadm @@ -1 +1,3 @@ -{ "null": = null } +{ "id": 0, "field_value": { "pid": 4 }, "is_missing": false } +{ "i= d": 1, "is_missing": true } +{ "id": 2, "field_value": null, "is_missing": = false } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/= test/resources/runtimets/results/null-missing/field-access/field-access=2E2= =2Eadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/null-mi= ssing/field-access/field-access=2E2=2Eadm new file mode 100644 index 000000= 0=2E=2E767c19b --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources= /runtimets/results/null-missing/field-access/field-access=2E2=2Eadm @@ -0,0= +1,3 @@ +{ "id": 0, "is_missing": true } +{ "id": 1, "field_value": null, = "is_missing": false } +{ "id": 2, "field_value": 5, "is_missing": false } \= No newline at end of file diff --git a/asterixdb/asterix-runtime/src/main/= java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordField= ValueEvalFactory=2Ejava b/asterixdb/asterix-runtime/src/main/java/org/apach= e/asterix/runtime/evaluators/functions/records/GetRecordFieldValueEvalFacto= ry=2Ejava index 103a164=2E=2Ed6c0e21 100644 --- a/asterixdb/asterix-runtime= /src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetR= ecordFieldValueEvalFactory=2Ejava +++ b/asterixdb/asterix-runtime/src/main/= java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordField= ValueEvalFactory=2Ejava @@ -27,7 +27,9 @@ import org=2Eapache=2Easterix=2E= om=2Efunctions=2EBuiltinFunctions; import org=2Eapache=2Easterix=2Eom=2Ety= pes=2EARecordType; import org=2Eapache=2Easterix=2Eom=2Etypes=2EATypeTag; = +import org=2Eapache=2Easterix=2Eom=2Etypes=2EAUnionType; import org=2Eapa= che=2Easterix=2Eom=2Etypes=2EEnumDeserializer; +import org=2Eapache=2Easter= ix=2Eom=2Etypes=2EIAType; import org=2Eapache=2Easterix=2Eom=2Etypes=2Erun= time=2ERuntimeRecordTypeInfo; import org=2Eapache=2Easterix=2Eom=2Eutils= =2ENonTaggedFormatUtil; import org=2Eapache=2Easterix=2Eom=2Eutils=2ERecor= dUtil; @@ -93,7 +95,6 @@ if (PointableHelper=2EcheckAn= dSetMissingOrNull(result, inputArg0, inputArg1)) { = return; } - byte[] serFldName = =3D inputArg1=2EgetByteArray(); int serFldNameOffset = =3D inputArg1=2EgetStartOffset(); int serFldNameLen = =3D inputArg1=2EgetLength(); @@ -114,22 +115,32 @@ int= subFieldIndex =3D recTypeInfo=2EgetFieldIndex(serFldName, serFldNameOffset= + 1, serFldNameLen - 1); if (subFieldIndex >=3D 0) { = int nullBitmapSize =3D RecordUtil=2EcomputeNullBit= mapSize(recordType); + subFieldOffset =3D ARecordS= erializerDeserializer=2EgetFieldOffsetById(serRecord, serRecordOffset, = subFieldIndex, nullBitmapSize, recordType=2Eis= Open()); - if (subFieldOffset =3D=3D 0) { - = // the field is null, we checked the null bit map - = out=2EwriteByte(ATypeTag=2ESERIALIZED_NULL_TYPE_TAG)= ; - result=2Eset(resultStorage); - = return; + switch (subFieldOffset) { + = case -1: + out=2E= writeByte(ATypeTag=2ESERIALIZED_MISSING_TYPE_TAG); + = result=2Eset(resultStorage); + retu= rn; + case 0: + o= ut=2EwriteByte(ATypeTag=2ESERIALIZED_NULL_TYPE_TAG); + = result=2Eset(resultStorage); + re= turn; + default: + = IAType fieldType =3D recordType=2EgetFieldTypes()[subFieldIndex]; + = if (fieldType=2EgetTypeTag() =3D=3D ATypeTag=2EUN= ION) { + fieldType =3D ((AUnionType) fie= ldType)=2EgetActualType(); + } + = ATypeTag fieldTypeTag =3D fieldType=2EgetTypeTag(); + = subFieldLength =3D NonTaggedFormatUtil=2EgetF= ieldValueLength(serRecord, subFieldOffset, + = fieldTypeTag, false); + // write re= sult=2E + out=2EwriteByte(fieldTypeTag=2Eser= ialize()); + out=2Ewrite(serRecord, subField= Offset, subFieldLength); + result=2Eset(resu= ltStorage); + return; = } - ATypeTag fieldTypeTag =3D recordType=2EgetFie= ldTypes()[subFieldIndex]=2EgetTypeTag(); - subFieldL= ength =3D - NonTaggedFormatUtil=2EgetFieldVa= lueLength(serRecord, subFieldOffset, fieldTypeTag, false); - = // write result=2E - out=2EwriteByte(fieldT= ypeTag=2Eserialize()); - out=2Ewrite(serRecord, subF= ieldOffset, subFieldLength); - result=2Eset(resultSt= orage); - return; } = // Look at open fields=2E -- To view, visit https://asterix-g= errit=2Eics=2Euci=2Eedu/c/asterixdb/+/11764 To unsubscribe, or for help wri= ting mail filters, visit https://asterix-gerrit=2Eics=2Euci=2Eedu/settings = Gerrit-Project: asterixdb Gerrit-Branch: mad-hatter Gerrit-Change-Id: I843= 55e0ae91afd0328e636aa4f3bed6eeb44e055 Gerrit-Change-Number: 11764 Gerrit-Pa= tchSet: 1 Gerrit-Owner: Ali Alsuliman Ger= rit-MessageType: newchange --IRS56BCDoBU= Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Ali Alsuliman has uploaded this change for review=2E

View Change

[ASTERIXDB-2732][FUN] Support missing and union type in g=
et_object_field_value

- user model changes: no
- storage format c= hanges: no
- interface changes: no

Change-Id: I84355e0ae91afd0328= e636aa4f3bed6eeb44e055
---
C asterixdb/asterix-app/src/test/resources= /runtimets/queries_sqlpp/null-missing/field-access/field-access=2E1=2Eddl= =2Esqlpp
C asterixdb/asterix-app/src/test/resources/runtimets/queries_sq= lpp/null-missing/field-access/field-access=2E2=2Eupdate=2Esqlpp
R asteri= xdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missing/fie= ld-access/field-access=2E3=2Equery=2Esqlpp
C asterixdb/asterix-app/src/t= est/resources/runtimets/queries_sqlpp/null-missing/field-access/field-acces= s=2E4=2Equery=2Esqlpp
M asterixdb/asterix-app/src/test/resources/runtime= ts/results/null-missing/field-access/field-access=2E1=2Eadm
A asterixdb/= asterix-app/src/test/resources/runtimets/results/null-missing/field-access/= field-access=2E2=2Eadm
M asterixdb/asterix-runtime/src/main/java/org/apa= che/asterix/runtime/evaluators/functions/records/GetRecordFieldValueEvalFac= tory=2Ejava
7 files changed, 61 insertions(+), 31 deletions(-)

git pull ssh://asterix-gerrit=2Eics=2Euci=2Eedu:29418/asterixdb refs/chang=
es/64/11764/1
diff --git a/asterixdb/asterix-app/src/test/resources=
/runtimets/queries_sqlpp/null-missing/field-access/field-access=2E1=2Equery=
=2Esqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp=
/null-missing/field-access/field-access=2E1=2Eddl=2Esqlpp
s= imilarity index 73%
copy from asterixdb/asterix-app/src/tes= t/resources/runtimets/queries_sqlpp/null-missing/field-access/field-access= =2E1=2Equery=2Esqlpp
copy to asterixdb/asterix-app/src/test= /resources/runtimets/queries_sqlpp/null-missing/field-access/field-access= =2E1=2Eddl=2Esqlpp
index 7be4593=2E=2E0d6ab35 100644=
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_= sqlpp/null-missing/field-access/field-access=2E1=2Equery=2Esqlpp
= +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlp= p/null-missing/field-access/field-access=2E1=2Eddl=2Esqlpp
= @@ -17,7 +17,18 @@
* under the License=2E
*/

-{
- 'null': = {'a': null}=2Ea,
-};
\ No newline at end of file=
+drop dataverse test= if exists;
+create d= ataverse test;
+use t= est;
+
+drop dataset samptable if exists;<= /span>
+drop type samptablet= ype if exists;
+

+create type samptabletyp= e as closed {
+ id: = tinyint,
+ mf: tinyi= nt?,
+ rf: { pid:tin= yint}?
+};
= +
+
+create dataset samptable(samptabletype) primary key id;
\ No newline at end of file
diff --git a/asterixdb/aste= rix-app/src/test/resources/runtimets/queries_sqlpp/null-missing/field-acces= s/field-access=2E1=2Equery=2Esqlpp b/asterixdb/asterix-app/src/test/resourc= es/runtimets/queries_sqlpp/null-missing/field-access/field-access=2E2=2Eupd= ate=2Esqlpp
similarity index 80%
copy from = asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missi= ng/field-access/field-access=2E1=2Equery=2Esqlpp
copy to as= terixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missing= /field-access/field-access=2E2=2Eupdate=2Esqlpp
index 7be45= 93=2E=2E8a7e88b 100644
--- a/asterixdb/asterix-app/src/test= /resources/runtimets/queries_sqlpp/null-missing/field-access/field-access= =2E1=2Equery=2Esqlpp
+++ b/asterixdb/asterix-app/src/test/r= esources/runtimets/queries_sqlpp/null-missing/field-access/field-access=2E2= =2Eupdate=2Esqlpp
@@ -17,7 +17,7 @@
* und= er the License=2E
*/

-{
- 'null': {'a': null}=2Ea,
- 'missing': {'b': miss= ing}=2Eb
-};
= \ No newline at end of file
+use test;
+insert into samptable ({'id' : 0, 'mf':missing, 'rf= ':{'pid':4}});
+insert into samptable ({'id' : 1, 'mf':null, 'rf= ':missing});
+ins= ert into samptable ({'id' : 2, 'mf':5, 'rf':null});=
diff --git a/asterixdb/asterix-app/src/test/resources/runt= imets/queries_sqlpp/null-missing/field-access/field-access=2E1=2Equery=2Esq= lpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null= -missing/field-access/field-access=2E3=2Equery=2Esqlpp
simi= larity index 82%
rename from asterixdb/asterix-app/src/test= /resources/runtimets/queries_sqlpp/null-missing/field-access/field-access= =2E1=2Equery=2Esqlpp
rename to asterixdb/asterix-app/src/te= st/resources/runtimets/queries_sqlpp/null-missing/field-access/field-access= =2E3=2Equery=2Esqlpp
index 7be4593=2E=2Ebed3710 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/querie= s_sqlpp/null-missing/field-access/field-access=2E1=2Equery=2Esqlpp+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sq= lpp/null-missing/field-access/field-access=2E3=2Equery=2Esqlpp
@@ -17,7 +17,9 @@

* under the License=2E
*/

-{
- 'null'= ;: {'a': null}=2Ea,
- 'missing': {'b': missing}=2Eb
-};
\ No newline at end of f= ile
+use test;=
+
+from samptable d
+select id, get_object_field_value(d, 'rf'= ;) as field_value,
+ = get_object_field_value(d, 'rf') is missing as is_missing<= /span>
+order by id;<= br>diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/qu= eries_sqlpp/null-missing/field-access/field-access=2E1=2Equery=2Esqlpp b/as= terixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-missing= /field-access/field-access=2E4=2Equery=2Esqlpp
similarity i= ndex 82%
copy from asterixdb/asterix-app/src/test/resources= /runtimets/queries_sqlpp/null-missing/field-access/field-access=2E1=2Equery= =2Esqlpp
copy to asterixdb/asterix-app/src/test/resources/r= untimets/queries_sqlpp/null-missing/field-access/field-access=2E4=2Equery= =2Esqlpp
index 7be4593=2E=2E553dc55 100644
= --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null= -missing/field-access/field-access=2E1=2Equery=2Esqlpp
+++ = b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/null-mis= sing/field-access/field-access=2E4=2Equery=2Esqlpp
@@ -16,8= +16,9 @@
* specific language governing permissions and l= imitations
* under the License=2E
*/

+use test;

-{
- 'null': {'a': null= }=2Ea,
- 'missing&= #39;: {'b': missing}=2Eb
-};
\ No newline at end of file
+from samptable d
+select id, get_object_field_value(d, = 9;mf') as field_value,
+ get_object_field_value(d, 'mf') is missing as is_= missing
+order by id;=
diff --git a/asterixdb/asterix-app/src/test/resources/runt= imets/results/null-missing/field-access/field-access=2E1=2Eadm b/asterixdb/= asterix-app/src/test/resources/runtimets/results/null-missing/field-access/= field-access=2E1=2Eadm
index d7a20ef=2E=2Ef157d67 100644

--- a/asterixdb/asterix-app/src/test/resources/runtimets/resu= lts/null-missing/field-access/field-access=2E1=2Eadm
+++ b/= asterixdb/asterix-app/src/test/resources/runtimets/results/null-missing/fie= ld-access/field-access=2E1=2Eadm
@@ -1 +1,3 @@
-{ "null": null }<= br>+{ "id": 0, "= field_value": { "pid": 4 }, "is_missing": false }<= /span>
+{ "id": 1,= "is_missing": true }
+{ "id": 2, "field_value": null, "is_mi= ssing": false }
\ No newline at end of file
= diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/resul= ts/null-missing/field-access/field-access=2E2=2Eadm b/asterixdb/asterix-app= /src/test/resources/runtimets/results/null-missing/field-access/field-acces= s=2E2=2Eadm
new file mode 100644
index 0000= 000=2E=2E767c19b
--- /dev/null
+++ b/asteri= xdb/asterix-app/src/test/resources/runtimets/results/null-missing/field-acc= ess/field-access=2E2=2Eadm
@@ -0,0 +1,3 @@
+{ "id": 0, "is_missin= g": true }
+{ &q= uot;id": 1, "field_value": null, "is_missing": fal= se }
+{ "id"= ;: 2, "field_value": 5, "is_missing": false }\ No newline at end of file
diff --git a/asterixdb/a= sterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/function= s/records/GetRecordFieldValueEvalFactory=2Ejava b/asterixdb/asterix-runtime= /src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetR= ecordFieldValueEvalFactory=2Ejava
index 103a164=2E=2Ed6c0e2= 1 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/= apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueEval= Factory=2Ejava
+++ b/asterixdb/asterix-runtime/src/main/jav= a/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldVal= ueEvalFactory=2Ejava
@@ -27,7 +27,9 @@
imp= ort org=2Eapache=2Easterix=2Eom=2Efunctions=2EBuiltinFunctions;
<= span> import org=2Eapache=2Easterix=2Eom=2Etypes=2EARecordType;

<= span> import org=2Eapache=2Easterix=2Eom=2Etypes=2EATypeTag;
+import org=2Eapache=2Easterix=2Eom= =2Etypes=2EAUnionType;
import org=2Eapache=2Easterix=2Eom= =2Etypes=2EEnumDeserializer;
+import org=2Eapache=2Easterix=2Eom=2Etypes=2EIAType;
import org=2Eapache=2Easterix=2Eom=2Etypes=2Eruntime=2ERuntimeRecordTyp= eInfo;
import org=2Eapache=2Easterix=2Eom=2Eutils=2ENonTag= gedFormatUtil;
import org=2Eapache=2Easterix=2Eom=2Eutils= =2ERecordUtil;
@@ -93,7 +95,6 @@
= if (PointableHelper=2EcheckAndSetMissingOrNull(result, inputArg0= , inputArg1)) {
return;
= }
-
byte[] serFldName =3D inputArg= 1=2EgetByteArray();
int serFldNameOffs= et =3D inputArg1=2EgetStartOffset();
i= nt serFldNameLen =3D inputArg1=2EgetLength();
@@ -114,22 +1= 15,32 @@
int subFieldIndex =3D recType= Info=2EgetFieldIndex(serFldName, serFldNameOffset + 1, serFldNameLen - 1);<= /span>
if (subFieldIndex >=3D 0) {<= br> int nullBitmapSize =3D RecordUtil=2Ecompu= teNullBitmapSize(recordType);
+
subFieldOffset =3D ARec= ordSerializerDeserializer=2EgetFieldOffsetById(serRecord, serRecordOffset,<= /span>
subFieldIndex, nullBitmapS= ize, recordType=2EisOpen());
- if (subFieldOffset =3D=3D 0) {
- // the = field is null, we checked the null bit map

- out=2EwriteByte(ATypeTag= =2ESERIALIZED_NULL_TYPE_TAG);
- result=2Eset(resultStorage);
= - retu= rn;
+ = switch (subFieldOffset) {
+ case -1:
+ out=2EwriteB= yte(ATypeTag=2ESERIALIZED_MISSING_TYPE_TAG);
+ result=2Eset(resul= tStorage);
+ = return;
+ case 0:
+ out=2EwriteByte(= ATypeTag=2ESERIALIZED_NULL_TYPE_TAG);
+ result=2Eset(resultStorag= e);
+ = return;
+ default:
+ IAType fieldType =3D r= ecordType=2EgetFieldTypes()[subFieldIndex];
+ if (fieldType=2Eget= TypeTag() =3D=3D ATypeTag=2EUNION) {
+ fieldType =3D ((AUnion= Type) fieldType)=2EgetActualType();
+ }
+ ATypeTag fiel= dTypeTag =3D fieldType=2EgetTypeTag();
+ subFieldLength =3D NonTa= ggedFormatUtil=2EgetFieldValueLength(serRecord, subFieldOffset,
<= span style=3D"color: hsl(120, 100%, 40%);">+ = fieldTypeTag, false);

+ // write result=2E
+ o= ut=2EwriteByte(fieldTypeTag=2Eserialize());
+ out=2Ewrite(serReco= rd, subFieldOffset, subFieldLength);
+ result=2Eset(resultStorage= );
+ = return;
}- ATypeTa= g fieldTypeTag =3D recordType=2EgetFieldTypes()[subFieldIndex]=2EgetTypeTag= ();
- = subFieldLength =3D
- // write result=2E

- o= ut=2EwriteByte(fieldTypeTag=2Eserialize());
- out=2Ewrite(serRecord, subFie= ldOffset, subFieldLength);
- result=2Eset(resultStorage);
- return;<= br> }

= // Look at open fields=2E

T= o view, visit change 11764=2E To unsubscribe, or for help writing mail fi= lters, visit = settings=2E

Gerrit-Project: asterixdb
Gerrit-Br= anch: mad-hatter
Gerrit-Change-Id: I843= 55e0ae91afd0328e636aa4f3bed6eeb44e055
G= errit-Change-Number: 11764
Gerrit-Patch= Set: 1
Gerrit-Owner: Ali Alsuliman <= ali=2Eal=2Esolaiman@gmail=2Ecom>
Ger= rit-MessageType: newchange
--IRS56BCDoBU=--