This is an automated email from the ASF dual-hosted git repository.

peeyush pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 1f34d64ac2 [ASTERIXDB-3299][COMP] Out of memory during query 
compilation
1f34d64ac2 is described below

commit 1f34d64ac2a2c2d7549fa16c0013361fb3acb9db
Author: Peeyush Gupta <[email protected]>
AuthorDate: Fri Nov 3 13:32:53 2023 -0700

    [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]>
---
 .../query-ASTERIXDB-3299.1.ddl.sqlpp                   | 11 ++++-------
 .../query-ASTERIXDB-3299.2.update.sqlpp                | 11 ++++-------
 .../query-ASTERIXDB-3299.3.query.sqlpp                 | 10 +++-------
 .../query-ASTERIXDB-3299.4.query.sqlpp                 |  9 ++-------
 .../query-ASTERIXDB-3299.5.query.sqlpp                 |  9 ++-------
 .../query-ASTERIXDB-3299.6.ddl.sqlpp                   |  9 +--------
 .../query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.adm    |  1 +
 .../query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.adm    |  1 +
 .../query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.adm    |  2 ++
 .../src/test/resources/runtimets/sqlpp_queries.xml     |  5 +++++
 .../serde/AOrderedListSerializerDeserializer.java      | 14 ++++++++++----
 .../nontagged/serde/ARecordSerializerDeserializer.java |  7 +++++--
 .../serde/AUnorderedListSerializerDeserializer.java    | 14 ++++++++++----
 .../nontagged/SerializerDeserializerProvider.java      | 18 ++++++++++++++++++
 .../data/ISerializerDeserializerProvider.java          |  7 ++++++-
 15 files changed, 74 insertions(+), 54 deletions(-)

diff --git 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.1.ddl.sqlpp
similarity index 68%
copy from 
hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.1.ddl.sqlpp
index c54cdb2701..ebbe73396e 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.1.ddl.sqlpp
@@ -16,12 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.hyracks.algebricks.data;
 
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+drop dataverse test if exists;
+create dataverse test;
+use test;
 
-public interface ISerializerDeserializerProvider {
-    @SuppressWarnings("unchecked")
-    public ISerializerDeserializer getSerializerDeserializer(Object type) 
throws AlgebricksException;
-}
+create dataset ds primary key (_id:string);
diff --git 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.2.update.sqlpp
similarity index 59%
copy from 
hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.2.update.sqlpp
index c54cdb2701..b4a58a265a 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.2.update.sqlpp
@@ -16,12 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.hyracks.algebricks.data;
 
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+use test;
 
-public interface ISerializerDeserializerProvider {
-    @SuppressWarnings("unchecked")
-    public ISerializerDeserializer getSerializerDeserializer(Object type) 
throws AlgebricksException;
-}
+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/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.query.sqlpp
similarity index 68%
copy from 
hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.query.sqlpp
index c54cdb2701..fc3925c944 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.3.query.sqlpp
@@ -16,12 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.hyracks.algebricks.data;
 
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+use test;
+
+select value s from [{"_id": "2431dfegh2345", "data": 
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{"xaasdasdad": 
1}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]}] s;
 
-public interface ISerializerDeserializerProvider {
-    @SuppressWarnings("unchecked")
-    public ISerializerDeserializer getSerializerDeserializer(Object type) 
throws AlgebricksException;
-}
diff --git 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.query.sqlpp
similarity index 66%
copy from 
hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.query.sqlpp
index c54cdb2701..2410b17483 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.4.query.sqlpp
@@ -16,12 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.hyracks.algebricks.data;
 
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+use test;
 
-public interface ISerializerDeserializerProvider {
-    @SuppressWarnings("unchecked")
-    public ISerializerDeserializer getSerializerDeserializer(Object type) 
throws AlgebricksException;
-}
+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/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.query.sqlpp
similarity index 68%
copy from 
hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.query.sqlpp
index c54cdb2701..51985c00a0 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.5.query.sqlpp
@@ -16,12 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.hyracks.algebricks.data;
 
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+use test;
 
-public interface ISerializerDeserializerProvider {
-    @SuppressWarnings("unchecked")
-    public ISerializerDeserializer getSerializerDeserializer(Object type) 
throws AlgebricksException;
-}
+select value ds from ds order by _id desc
diff --git 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.6.ddl.sqlpp
similarity index 67%
copy from 
hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
copy to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.6.ddl.sqlpp
index c54cdb2701..dc10acd23b 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-data/src/main/java/org/apache/hyracks/algebricks/data/ISerializerDeserializerProvider.java
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-3299/query-ASTERIXDB-3299.6.ddl.sqlpp
@@ -16,12 +16,5 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.hyracks.algebricks.data;
 
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-
-public interface ISerializerDeserializerProvider {
-    @SuppressWarnings("unchecked")
-    public ISerializerDeserializer getSerializerDeserializer(Object type) 
throws AlgebricksException;
-}
+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 0000000000..c452c1fc03
--- /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 0000000000..7693bb216d
--- /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 0000000000..30f2a76b8b
--- /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 b82481d540..66286b04cc 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 e443e132f9..5dffd6015a 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 class AOrderedListSerializerDeserializer implements 
ISerializerDeserializ
     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 3f8102e88d..45b9f7df67 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 @@ public class ARecordSerializerDeserializer implements 
ISerializerDeserializer<AR
             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 b5165d2827..31c1424116 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 class AUnorderedListSerializerDeserializer 
implements ISerializerDeserial
     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 521e52815d..f86f067a9d 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
@@ -101,6 +101,24 @@ public class SerializerDeserializerProvider implements 
ISerializerDeserializerPr
         }
     }
 
+    @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()) {
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 c54cdb2701..9450ffd14e 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 @@ import 
org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 
 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;
+
 }

Reply via email to