>From Peeyush Gupta <[email protected]>:

Peeyush Gupta has submitted this change. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17925 )

Change subject: [ASTERIXDB-3299][COMP] Out of memory during query compilation
......................................................................

[ASTERIXDB-3299][COMP] Out of memory during query compilation

- user model changes: no
- storage format changes: no
- interface changes: yes

Details:
In case of deeply nested object or list is used in an upsert
statement or query, the compilation either fails with out of
memory error or takes a long time to complete. The issue is
with the recursive calls to getSerializerDeserializer in
ARecordSerializerDeserializer, AOrderedListSerializerDeserializer
and AUnorderdListSerializerDeserializer.

Change-Id: Iea45c4f77b30b6ca4de7f8355be3a135c6c87460
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17925
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Peeyush Gupta <[email protected]>
Reviewed-by: Murtadha Hubail <[email protected]>
Tested-by: Peeyush Gupta <[email protected]>
---
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.adm
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.2.update.sqlpp
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.1.ddl.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.6.ddl.sqlpp
M asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.adm
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
M 
hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.adm
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.query.sqlpp
15 files changed, 219 insertions(+), 11 deletions(-)

Approvals:
  Murtadha Hubail: Looks good to me, approved
  Peeyush Gupta: Looks good to me, but someone else must approve; Verified
  Anon. E. Moose #1000171:
  Jenkins: Verified




diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.1.ddl.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.1.ddl.sqlpp
new file mode 100644
index 0000000..ebbe733
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.1.ddl.sqlpp
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use test;
+
+create dataset ds primary key (_id:string);
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.2.update.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.2.update.sqlpp
new file mode 100644
index 0000000..b4a58a2
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.2.update.sqlpp
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+upsert into ds {"_id": "123", "data": 
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{"xaasdasdad": 
1}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]};
+
+upsert into ds {"_id": "234", "level_24": {"level_23": {"level_22": 
{"level_21": {"level_20": {"level_19": {"level_18": {"level_17": {"level_16": 
{"level_15": {"level_14": {"level_13": {"level_12": {"level_11": {"level_10": 
{"level_9": {"level_8": {"level_7": {"level_6": {"level_5": {"level_4": 
{"level_3": {"level_2": {"level_1": {"level_0": {"leaf": [1, 
2]}}}}}}}}}}}}}}}}}}}}}}}}}};
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.query.sqlpp
new file mode 100644
index 0000000..fc3925c
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.query.sqlpp
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+select value s from [{"_id": "2431dfegh2345", "data": 
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{"xaasdasdad": 
1}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]}] s;
+
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.query.sqlpp
new file mode 100644
index 0000000..2410b17
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.query.sqlpp
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+select value s from [{"_id": "2431dfegh2345", "level_24": {"level_23": 
{"level_22": {"level_21": {"level_20": {"level_19": {"level_18": {"level_17": 
{"level_16": {"level_15": {"level_14": {"level_13": {"level_12": {"level_11": 
{"level_10": {"level_9": {"level_8": {"level_7": {"level_6": {"level_5": 
{"level_4": {"level_3": {"level_2": {"level_1": {"level_0": {"leaf": [1, 
2]}}}}}}}}}}}}}}}}}}}}}}}}}}] s;
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.query.sqlpp
new file mode 100644
index 0000000..51985c0
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.query.sqlpp
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+select value ds from ds order by _id desc
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.6.ddl.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.6.ddl.sqlpp
new file mode 100644
index 0000000..dc10acd
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.6.ddl.sqlpp
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop dataverse test if exists;
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.adm
new file mode 100644
index 0000000..c452c1f
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.adm
@@ -0,0 +1 @@
+{ "_id": "2431dfegh2345", "data": [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 
[ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ { "xaasdasdad": 1 } ] ] 
] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] 
] ] ] ] ] ] ] ] }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.adm
new file mode 100644
index 0000000..7693bb2
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.adm
@@ -0,0 +1 @@
+{ "_id": "2431dfegh2345", "level_24": { "level_23": { "level_22": { 
"level_21": { "level_20": { "level_19": { "level_18": { "level_17": { 
"level_16": { "level_15": { "level_14": { "level_13": { "level_12": { 
"level_11": { "level_10": { "level_9": { "level_8": { "level_7": { "level_6": { 
"level_5": { "level_4": { "level_3": { "level_2": { "level_1": { "level_0": { 
"leaf": [ 1, 2 ] } } } } } } } } } } } } } } } } } } } } } } } } } }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.adm
new file mode 100644
index 0000000..30f2a76
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.adm
@@ -0,0 +1,2 @@
+{ "_id": "234", "level_24": { "level_23": { "level_22": { "level_21": { 
"level_20": { "level_19": { "level_18": { "level_17": { "level_16": { 
"level_15": { "level_14": { "level_13": { "level_12": { "level_11": { 
"level_10": { "level_9": { "level_8": { "level_7": { "level_6": { "level_5": { 
"level_4": { "level_3": { "level_2": { "level_1": { "level_0": { "leaf": [ 1, 2 
] } } } } } } } } } } } } } } } } } } } } } } } } } }
+{ "_id": "123", "data": [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 
[ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ { "xaasdasdad": 1 } ] ] ] ] ] ] ] 
] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] 
] ] ] }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml 
b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
index b82481d..66286b0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
@@ -7350,6 +7350,11 @@
         <output-dir compare="Text">serialized_size_fun</output-dir>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="misc">
+      <compilation-unit name="query-ASTERIXDB-3299">
+        <output-dir compare="Text">query-ASTERIXDB-3299</output-dir>
+      </compilation-unit>
+    </test-case>
   </test-group>
   <test-group name="multipart-dataverse">
     <test-case FilePath="multipart-dataverse">
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
index e443e13..5dffd60 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
@@ -59,10 +59,16 @@
     public AOrderedListSerializerDeserializer(AOrderedListType 
orderedlistType) {
         this.orderedlistType = orderedlistType;
         this.itemType = orderedlistType.getItemType();
-        serializer = 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType);
-        deserializer = itemType.getTypeTag() == ATypeTag.ANY
-                ? 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType)
-                : 
SerializerDeserializerProvider.INSTANCE.getNonTaggedSerializerDeserializer(itemType);
+        if (itemType.getTypeTag() == ATypeTag.ANY) {
+            serializer = 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType);
+            deserializer = 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType);
+        } else {
+            ISerializerDeserializer nonTaggedSerializerDeserializer =
+                    
SerializerDeserializerProvider.INSTANCE.getNonTaggedSerializerDeserializer(itemType);
+            serializer = 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType,
+                    nonTaggedSerializerDeserializer);
+            deserializer = nonTaggedSerializerDeserializer;
+        }
     }

     @Override
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
index 3f8102e..45b9f7d 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
@@ -73,8 +73,11 @@
             for (int i = 0; i < numberOfSchemaFields; i++) {
                 IAType t = recordType.getFieldTypes()[i];
                 IAType t2 = (t.getTypeTag() == ATypeTag.UNION) ? ((AUnionType) 
t).getActualType() : t;
-                serializers[i] = 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(t2);
-                deserializers[i] = 
SerializerDeserializerProvider.INSTANCE.getNonTaggedSerializerDeserializer(t2);
+                ISerializerDeserializer nonTaggedSerelaizerDeserializer =
+                        
SerializerDeserializerProvider.INSTANCE.getNonTaggedSerializerDeserializer(t2);
+                serializers[i] = 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(t2,
+                        nonTaggedSerelaizerDeserializer);
+                deserializers[i] = nonTaggedSerelaizerDeserializer;
             }
         } else {
             this.recordType = null;
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
index b5165d2..31c1424 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
@@ -60,10 +60,16 @@
     public AUnorderedListSerializerDeserializer(AUnorderedListType 
unorderedlistType) {
         this.unorderedlistType = unorderedlistType;
         this.itemType = unorderedlistType.getItemType();
-        serializer = 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType);
-        deserializer = itemType.getTypeTag() == ATypeTag.ANY
-                ? 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType)
-                : 
SerializerDeserializerProvider.INSTANCE.getNonTaggedSerializerDeserializer(itemType);
+        if (itemType.getTypeTag() == ATypeTag.ANY) {
+            serializer = 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType);
+            deserializer = 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType);
+        } else {
+            ISerializerDeserializer nonTaggedSerializerDeserializer =
+                    
SerializerDeserializerProvider.INSTANCE.getNonTaggedSerializerDeserializer(itemType);
+            serializer = 
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType,
+                    nonTaggedSerializerDeserializer);
+            deserializer = nonTaggedSerializerDeserializer;
+        }
     }

     @Override
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java
index 521e528..f86f067 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java
@@ -102,6 +102,24 @@
     }

     @SuppressWarnings("rawtypes")
+    @Override
+    public ISerializerDeserializer getSerializerDeserializer(Object typeInfo,
+            ISerializerDeserializer nonTaggedSerializerDeserializer) {
+        IAType type = (IAType) typeInfo;
+        if (type == null) {
+            return null;
+        }
+        switch (type.getTypeTag()) {
+            case ANY:
+            case UNION:
+                // we could do smth better for nullable fields
+                return AObjectSerializerDeserializer.INSTANCE;
+            default:
+                return addTag(nonTaggedSerializerDeserializer);
+        }
+    }
+
+    @SuppressWarnings("rawtypes")
     public ISerializerDeserializer getNonTaggedSerializerDeserializer(IAType 
type) {
         switch (type.getTypeTag()) {
             case CIRCLE:
diff --git 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
 
b/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
index c54cdb2..9450ffd 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
@@ -23,5 +23,10 @@

 public interface ISerializerDeserializerProvider {
     @SuppressWarnings("unchecked")
-    public ISerializerDeserializer getSerializerDeserializer(Object type) 
throws AlgebricksException;
+    ISerializerDeserializer getSerializerDeserializer(Object type) throws 
AlgebricksException;
+
+    @SuppressWarnings("unchecked")
+    ISerializerDeserializer getSerializerDeserializer(Object type,
+            ISerializerDeserializer nonTaggedSerializerDeserializer) throws 
AlgebricksException;
+
 }

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17925
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Iea45c4f77b30b6ca4de7f8355be3a135c6c87460
Gerrit-Change-Number: 17925
Gerrit-PatchSet: 4
Gerrit-Owner: Peeyush Gupta <[email protected]>
Gerrit-Reviewer: Ali Alsuliman <[email protected]>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <[email protected]>
Gerrit-Reviewer: Murtadha Hubail <[email protected]>
Gerrit-Reviewer: Peeyush Gupta <[email protected]>
Gerrit-MessageType: merged

Reply via email to