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;
+
}