You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Ali Alsuliman (Code Review)" <do...@asterixdb.incubator.apache.org> on 2019/02/26 06:12:21 UTC

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Ali Alsuliman has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/3228

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................

[NO ISSUE][OTH] Make IAType IJsonSerializable

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

Details:
This change is to make Asterix types IJsonSerializable.

Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
---
M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
9 files changed, 374 insertions(+), 3 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/28/3228/1

diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
index d4c217b..11d1b26 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
@@ -59,6 +59,11 @@
 import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
 import org.apache.asterix.om.pointables.nonvisitor.AListPointable;
 import org.apache.asterix.om.pointables.nonvisitor.ARecordPointable;
+import org.apache.asterix.om.types.AOrderedListType;
+import org.apache.asterix.om.types.ARecordType;
+import org.apache.asterix.om.types.AUnionType;
+import org.apache.asterix.om.types.AUnorderedListType;
+import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.runtime.compression.CompressionManager;
 import org.apache.asterix.runtime.utils.RuntimeComponentsProvider;
 import org.apache.asterix.transaction.management.opcallbacks.PrimaryIndexOperationTrackerFactory;
@@ -250,6 +255,13 @@
         REGISTERED_CLASSES.put("UTF8WordTokenFactory", UTF8WordTokenFactory.class);
         REGISTERED_CLASSES.put("RTreePolicyType", RTreePolicyType.class);
 
+        // IAType
+        REGISTERED_CLASSES.put("BuiltinType", BuiltinType.class);
+        REGISTERED_CLASSES.put("AOrderedListType", AOrderedListType.class);
+        REGISTERED_CLASSES.put("ARecordType", ARecordType.class);
+        REGISTERED_CLASSES.put("AUnionType", AUnionType.class);
+        REGISTERED_CLASSES.put("AUnorderedListType", AUnorderedListType.class);
+
         //ICompressorDecompressorFactory
         CompressionManager.registerCompressorDecompressorsFactoryClasses(REGISTERED_CLASSES);
     }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
index 7cb383f..097b4a7 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
@@ -19,7 +19,11 @@
 package org.apache.asterix.om.types;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
@@ -84,4 +88,14 @@
         type.set("item-type", itemType.toJSON());
         return type;
     }
+
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws HyracksDataException {
+        return convertToJson(registry, getClass(), serialVersionUID);
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json)
+            throws HyracksDataException {
+        return convertToObject(registry, json, true);
+    }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
index 1c04986..b91b4ae 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
@@ -33,7 +33,12 @@
 import org.apache.asterix.om.base.IAObject;
 import org.apache.asterix.om.utils.NonTaggedFormatUtil;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -47,6 +52,11 @@
 public class ARecordType extends AbstractComplexType {
 
     private static final long serialVersionUID = 1L;
+    private static final JavaType SET = OBJECT_MAPPER.getTypeFactory().constructCollectionType(Set.class, String.class);
+    private static final String IS_OPEN = "isOpen";
+    private static final String FIELD_NAMES = "fieldNames";
+    private static final String FIELD_TYPES = "fieldTypes";
+    private static final String ADDITIONAL_FIELDS = "additionalFieldNames";
     private final String[] fieldNames;
     private final IAType[] fieldTypes;
     private final Map<String, Integer> fieldNameToIndexMap = new HashMap<>();
@@ -372,6 +382,35 @@
         return type;
     }
 
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws HyracksDataException {
+        final ObjectNode jsonObject = registry.getClassIdentifier(getClass(), serialVersionUID);
+        addToJson(jsonObject);
+        jsonObject.put(IS_OPEN, isOpen);
+        jsonObject.putPOJO(FIELD_NAMES, fieldNames);
+        jsonObject.putPOJO(ADDITIONAL_FIELDS, allPossibleAdditionalFieldNames);
+        ArrayNode fieldTypesArray = OBJECT_MAPPER.createArrayNode();
+        for (int i = 0; i < fieldTypes.length; i++) {
+            fieldTypesArray.add(fieldTypes[i].toJson(registry));
+        }
+        jsonObject.set(FIELD_TYPES, fieldTypesArray);
+        return jsonObject;
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json)
+            throws HyracksDataException {
+        String typeName = json.get(TYPE_NAME_FIELD).asText();
+        boolean isOpen = json.get(IS_OPEN).asBoolean();
+        String[] fieldNames = OBJECT_MAPPER.convertValue(json.get(FIELD_NAMES), String[].class);
+        Set<String> additionalFields = OBJECT_MAPPER.convertValue(json.get(ADDITIONAL_FIELDS), SET);
+        ArrayNode fieldTypesNode = (ArrayNode) json.get(FIELD_TYPES);
+        IAType[] fieldTypes = new IAType[fieldTypesNode.size()];
+        for (int i = 0; i < fieldTypesNode.size(); i++) {
+            fieldTypes[i] = (IAType) registry.deserialize(fieldTypesNode.get(i));
+        }
+        return new ARecordType(typeName, fieldNames, fieldTypes, isOpen, additionalFields);
+    }
+
     public List<IAType> getFieldTypes(List<List<String>> fields) throws AlgebricksException {
         List<IAType> typeList = new ArrayList<>();
         for (List<String> field : fields) {
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
index f8ae7f8..7ef18d4 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
@@ -23,7 +23,11 @@
 import java.util.List;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -32,6 +36,7 @@
 
     private static final long serialVersionUID = 1L;
     private static final int OPTIONAL_TYPE_INDEX_IN_UNION_LIST = 0;
+    private static final String UNION_LIST_FIELD = "unionList";
     private final List<IAType> unionList;
 
     public AUnionType(List<IAType> unionList, String typeName) {
@@ -223,4 +228,27 @@
         type.set("fields", fields);
         return type;
     }
+
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws HyracksDataException {
+        final ObjectNode jsonObject = registry.getClassIdentifier(getClass(), serialVersionUID);
+        addToJson(jsonObject);
+        ArrayNode fieldTypesArray = OBJECT_MAPPER.createArrayNode();
+        for (int i = 0; i < unionList.size(); i++) {
+            fieldTypesArray.add(unionList.get(i).toJson(registry));
+        }
+        jsonObject.set(UNION_LIST_FIELD, fieldTypesArray);
+        return jsonObject;
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json)
+            throws HyracksDataException {
+        String typeName = json.get(TYPE_NAME_FIELD).asText();
+        ArrayNode unionListJson = (ArrayNode) json.get(UNION_LIST_FIELD);
+        List<IAType> unionList = new ArrayList<>();
+        for (int i = 0; i < unionListJson.size(); i++) {
+            unionList.add((IAType) registry.deserialize(unionListJson.get(i)));
+        }
+        return new AUnionType(unionList, typeName);
+    }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
index 8d088f7..0b458dd 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
@@ -19,7 +19,11 @@
 package org.apache.asterix.om.types;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
@@ -84,4 +88,14 @@
         type.set("item-type", itemType.toJSON());
         return type;
     }
+
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws HyracksDataException {
+        return convertToJson(registry, getClass(), serialVersionUID);
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json)
+            throws HyracksDataException {
+        return convertToObject(registry, json, false);
+    }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
index f6f10f4..1b2b8fe 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
@@ -18,10 +18,17 @@
  */
 package org.apache.asterix.om.types;
 
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
 public abstract class AbstractCollectionType extends AbstractComplexType {
 
     private static final long serialVersionUID = 1L;
-
+    private static final String ITEM_TYPE_FIELD = "itemType";
     protected IAType itemType;
 
     AbstractCollectionType(IAType itemType, String typeName) {
@@ -59,4 +66,20 @@
     public boolean containsType(IAType type) {
         return isTyped() && itemType.getTypeName().equals(type.getTypeName());
     }
+
+    protected JsonNode convertToJson(IPersistedResourceRegistry registry, Class<? extends IJsonSerializable> clazz,
+            long version) throws HyracksDataException {
+        final ObjectNode jsonObject = registry.getClassIdentifier(clazz, version);
+        addToJson(jsonObject);
+        jsonObject.set(ITEM_TYPE_FIELD, itemType.toJson(registry));
+        return jsonObject;
+    }
+
+    protected static IJsonSerializable convertToObject(IPersistedResourceRegistry registry, JsonNode json,
+            boolean ordered) throws HyracksDataException {
+        String typeName = json.get(TYPE_NAME_FIELD).asText();
+        JsonNode itemTypeJson = json.get(ITEM_TYPE_FIELD);
+        IAType itemType = (IAType) registry.deserialize(itemTypeJson);
+        return ordered ? new AOrderedListType(itemType, typeName) : new AUnorderedListType(itemType, typeName);
+    }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
index f8b1d60..16f83f5 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
@@ -20,9 +20,14 @@
 
 import org.apache.asterix.om.base.IAObject;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
 public abstract class AbstractComplexType implements IAType {
 
     private static final long serialVersionUID = 1L;
+    protected static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    protected static final String TYPE_NAME_FIELD = "typeName";
     protected String typeName;
 
     public AbstractComplexType(String typeName) {
@@ -45,5 +50,9 @@
         return object instanceof IAObject && deepEqual((IAObject) object);
     }
 
+    protected void addToJson(final ObjectNode json) {
+        json.put(TYPE_NAME_FIELD, typeName);
+    }
+
     public abstract boolean containsType(IAType type);
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
index 2e48127..4fc146f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
@@ -18,14 +18,20 @@
  */
 package org.apache.asterix.om.types;
 
-import org.apache.asterix.om.base.IAObject;
+import static org.apache.asterix.om.types.ATypeTag.VALUE_TYPE_MAPPING;
 
+import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public abstract class BuiltinType implements IAType {
 
     private static final long serialVersionUID = 1L;
+    private static final String TAG_FIELD = "tag";
 
     public abstract static class LowerCaseConstructorType extends BuiltinType {
         private static final long serialVersionUID = 1L;
@@ -62,6 +68,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -87,6 +98,11 @@
         @Override
         public String getTypeName() {
             return "int8";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -118,6 +134,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -143,6 +164,11 @@
         @Override
         public String getTypeName() {
             return "int32";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -174,6 +200,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -199,6 +230,11 @@
         @Override
         public String getTypeName() {
             return "binary";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -230,6 +266,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -255,6 +296,11 @@
         @Override
         public String getTypeName() {
             return "double";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -286,6 +332,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -311,6 +362,11 @@
         @Override
         public String getTypeName() {
             return "missing";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -342,6 +398,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -367,6 +428,11 @@
         @Override
         public String getTypeName() {
             return "boolean";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -398,6 +464,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -423,6 +494,11 @@
         @Override
         public String getTypeName() {
             return "date";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -454,6 +530,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -479,6 +560,11 @@
         @Override
         public String getTypeName() {
             return "duration";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -510,6 +596,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -535,6 +626,11 @@
         @Override
         public String getTypeName() {
             return "day-time-duration";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -566,6 +662,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             return null;
         }
@@ -588,6 +689,11 @@
         @Override
         public String getTypeName() {
             return "point";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -619,6 +725,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -644,6 +755,11 @@
         @Override
         public String getTypeName() {
             return "line";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -675,6 +791,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -703,6 +824,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectNode type = new ObjectMapper().createObjectNode();
             type.put("type", "AGEOMETRY");
@@ -727,6 +853,11 @@
         @Override
         public String getTypeName() {
             return "circle";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -758,6 +889,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -786,6 +922,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -810,6 +951,11 @@
         @Override
         public String getTypeName() {
             return "uuid";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -846,6 +992,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -876,6 +1027,11 @@
         @Override
         public String getConstructor() {
             return null;
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -925,4 +1081,79 @@
         return getType().getTypeTag().serialize();
     }
 
+    private static JsonNode convertToJson(IPersistedResourceRegistry registry, short tag, long version) {
+        ObjectNode jsonNode = registry.getClassIdentifier(BuiltinType.class, version);
+        jsonNode.put(TAG_FIELD, tag);
+        return jsonNode;
+    }
+
+    @SuppressWarnings("squid:S1172") // unused parameter
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json) {
+        byte tag = (byte) json.get(TAG_FIELD).shortValue();
+        ATypeTag typeTag = VALUE_TYPE_MAPPING[tag];
+        switch (typeTag) {
+            case TYPE:
+                return ALL_TYPE;
+            case TINYINT:
+                return AINT8;
+            case SMALLINT:
+                return AINT16;
+            case INTEGER:
+                return AINT32;
+            case BIGINT:
+                return AINT64;
+            case FLOAT:
+                return AFLOAT;
+            case DOUBLE:
+                return ADOUBLE;
+            case STRING:
+                return ASTRING;
+            case BINARY:
+                return ABINARY;
+            case MISSING:
+                return AMISSING;
+            case NULL:
+                return ANULL;
+            case BOOLEAN:
+                return ABOOLEAN;
+            case TIME:
+                return ATIME;
+            case DATE:
+                return ADATE;
+            case DATETIME:
+                return ADATETIME;
+            case DURATION:
+                return ADURATION;
+            case YEARMONTHDURATION:
+                return AYEARMONTHDURATION;
+            case DAYTIMEDURATION:
+                return ADAYTIMEDURATION;
+            case INTERVAL:
+                return AINTERVAL;
+            case POINT:
+                return APOINT;
+            case POINT3D:
+                return APOINT3D;
+            case LINE:
+                return ALINE;
+            case POLYGON:
+                return APOLYGON;
+            case GEOMETRY:
+                return AGEOMETRY;
+            case CIRCLE:
+                return ACIRCLE;
+            case RECTANGLE:
+                return ARECTANGLE;
+            case BITARRAY:
+                return ABITARRAY;
+            case UUID:
+                return AUUID;
+            case ANY:
+                return ANY;
+            case SHORTWITHOUTTYPEINFO:
+                return SHORTWITHOUTTYPEINFO;
+            default:
+                throw new IllegalStateException();
+        }
+    }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
index aa9ce99..0e6cc4f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
@@ -21,8 +21,9 @@
 import java.io.Serializable;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.io.IJsonSerializable;
 
-public interface IAType extends IAObject, Serializable {
+public interface IAType extends IAObject, Serializable, IJsonSerializable {
 
     public ATypeTag getTypeTag();
 

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Ali Alsuliman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Ali Alsuliman has submitted this change and it was merged.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


[NO ISSUE][OTH] Make IAType IJsonSerializable

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

Details:
This change is to make Asterix types IJsonSerializable.

Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Reviewed-on: https://asterix-gerrit.ics.uci.edu/3228
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mh...@apache.org>
---
M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
9 files changed, 374 insertions(+), 3 deletions(-)

Approvals:
  Jenkins: Verified; ; Verified
  Murtadha Hubail: Looks good to me, approved

Objections:
  Anon. E. Moose #1000171: Violations found
  Jenkins: Violations found



diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
index d4c217b..11d1b26 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
@@ -59,6 +59,11 @@
 import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
 import org.apache.asterix.om.pointables.nonvisitor.AListPointable;
 import org.apache.asterix.om.pointables.nonvisitor.ARecordPointable;
+import org.apache.asterix.om.types.AOrderedListType;
+import org.apache.asterix.om.types.ARecordType;
+import org.apache.asterix.om.types.AUnionType;
+import org.apache.asterix.om.types.AUnorderedListType;
+import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.runtime.compression.CompressionManager;
 import org.apache.asterix.runtime.utils.RuntimeComponentsProvider;
 import org.apache.asterix.transaction.management.opcallbacks.PrimaryIndexOperationTrackerFactory;
@@ -250,6 +255,13 @@
         REGISTERED_CLASSES.put("UTF8WordTokenFactory", UTF8WordTokenFactory.class);
         REGISTERED_CLASSES.put("RTreePolicyType", RTreePolicyType.class);
 
+        // IAType
+        REGISTERED_CLASSES.put("BuiltinType", BuiltinType.class);
+        REGISTERED_CLASSES.put("AOrderedListType", AOrderedListType.class);
+        REGISTERED_CLASSES.put("ARecordType", ARecordType.class);
+        REGISTERED_CLASSES.put("AUnionType", AUnionType.class);
+        REGISTERED_CLASSES.put("AUnorderedListType", AUnorderedListType.class);
+
         //ICompressorDecompressorFactory
         CompressionManager.registerCompressorDecompressorsFactoryClasses(REGISTERED_CLASSES);
     }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
index 7cb383f..097b4a7 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
@@ -19,7 +19,11 @@
 package org.apache.asterix.om.types;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
@@ -84,4 +88,14 @@
         type.set("item-type", itemType.toJSON());
         return type;
     }
+
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws HyracksDataException {
+        return convertToJson(registry, getClass(), serialVersionUID);
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json)
+            throws HyracksDataException {
+        return convertToObject(registry, json, true);
+    }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
index 1c04986..b91b4ae 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
@@ -33,7 +33,12 @@
 import org.apache.asterix.om.base.IAObject;
 import org.apache.asterix.om.utils.NonTaggedFormatUtil;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -47,6 +52,11 @@
 public class ARecordType extends AbstractComplexType {
 
     private static final long serialVersionUID = 1L;
+    private static final JavaType SET = OBJECT_MAPPER.getTypeFactory().constructCollectionType(Set.class, String.class);
+    private static final String IS_OPEN = "isOpen";
+    private static final String FIELD_NAMES = "fieldNames";
+    private static final String FIELD_TYPES = "fieldTypes";
+    private static final String ADDITIONAL_FIELDS = "additionalFieldNames";
     private final String[] fieldNames;
     private final IAType[] fieldTypes;
     private final Map<String, Integer> fieldNameToIndexMap = new HashMap<>();
@@ -372,6 +382,35 @@
         return type;
     }
 
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws HyracksDataException {
+        final ObjectNode jsonObject = registry.getClassIdentifier(getClass(), serialVersionUID);
+        addToJson(jsonObject);
+        jsonObject.put(IS_OPEN, isOpen);
+        jsonObject.putPOJO(FIELD_NAMES, fieldNames);
+        jsonObject.putPOJO(ADDITIONAL_FIELDS, allPossibleAdditionalFieldNames);
+        ArrayNode fieldTypesArray = OBJECT_MAPPER.createArrayNode();
+        for (int i = 0; i < fieldTypes.length; i++) {
+            fieldTypesArray.add(fieldTypes[i].toJson(registry));
+        }
+        jsonObject.set(FIELD_TYPES, fieldTypesArray);
+        return jsonObject;
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json)
+            throws HyracksDataException {
+        String typeName = json.get(TYPE_NAME_FIELD).asText();
+        boolean isOpen = json.get(IS_OPEN).asBoolean();
+        String[] fieldNames = OBJECT_MAPPER.convertValue(json.get(FIELD_NAMES), String[].class);
+        Set<String> additionalFields = OBJECT_MAPPER.convertValue(json.get(ADDITIONAL_FIELDS), SET);
+        ArrayNode fieldTypesNode = (ArrayNode) json.get(FIELD_TYPES);
+        IAType[] fieldTypes = new IAType[fieldTypesNode.size()];
+        for (int i = 0; i < fieldTypesNode.size(); i++) {
+            fieldTypes[i] = (IAType) registry.deserialize(fieldTypesNode.get(i));
+        }
+        return new ARecordType(typeName, fieldNames, fieldTypes, isOpen, additionalFields);
+    }
+
     public List<IAType> getFieldTypes(List<List<String>> fields) throws AlgebricksException {
         List<IAType> typeList = new ArrayList<>();
         for (List<String> field : fields) {
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
index f8ae7f8..7ef18d4 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
@@ -23,7 +23,11 @@
 import java.util.List;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -32,6 +36,7 @@
 
     private static final long serialVersionUID = 1L;
     private static final int OPTIONAL_TYPE_INDEX_IN_UNION_LIST = 0;
+    private static final String UNION_LIST_FIELD = "unionList";
     private final List<IAType> unionList;
 
     public AUnionType(List<IAType> unionList, String typeName) {
@@ -223,4 +228,27 @@
         type.set("fields", fields);
         return type;
     }
+
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws HyracksDataException {
+        final ObjectNode jsonObject = registry.getClassIdentifier(getClass(), serialVersionUID);
+        addToJson(jsonObject);
+        ArrayNode fieldTypesArray = OBJECT_MAPPER.createArrayNode();
+        for (int i = 0; i < unionList.size(); i++) {
+            fieldTypesArray.add(unionList.get(i).toJson(registry));
+        }
+        jsonObject.set(UNION_LIST_FIELD, fieldTypesArray);
+        return jsonObject;
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json)
+            throws HyracksDataException {
+        String typeName = json.get(TYPE_NAME_FIELD).asText();
+        ArrayNode unionListJson = (ArrayNode) json.get(UNION_LIST_FIELD);
+        List<IAType> unionList = new ArrayList<>();
+        for (int i = 0; i < unionListJson.size(); i++) {
+            unionList.add((IAType) registry.deserialize(unionListJson.get(i)));
+        }
+        return new AUnionType(unionList, typeName);
+    }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
index 8d088f7..0b458dd 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
@@ -19,7 +19,11 @@
 package org.apache.asterix.om.types;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
@@ -84,4 +88,14 @@
         type.set("item-type", itemType.toJSON());
         return type;
     }
+
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws HyracksDataException {
+        return convertToJson(registry, getClass(), serialVersionUID);
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json)
+            throws HyracksDataException {
+        return convertToObject(registry, json, false);
+    }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
index f6f10f4..1b2b8fe 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
@@ -18,10 +18,17 @@
  */
 package org.apache.asterix.om.types;
 
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
 public abstract class AbstractCollectionType extends AbstractComplexType {
 
     private static final long serialVersionUID = 1L;
-
+    private static final String ITEM_TYPE_FIELD = "itemType";
     protected IAType itemType;
 
     AbstractCollectionType(IAType itemType, String typeName) {
@@ -59,4 +66,20 @@
     public boolean containsType(IAType type) {
         return isTyped() && itemType.getTypeName().equals(type.getTypeName());
     }
+
+    protected JsonNode convertToJson(IPersistedResourceRegistry registry, Class<? extends IJsonSerializable> clazz,
+            long version) throws HyracksDataException {
+        final ObjectNode jsonObject = registry.getClassIdentifier(clazz, version);
+        addToJson(jsonObject);
+        jsonObject.set(ITEM_TYPE_FIELD, itemType.toJson(registry));
+        return jsonObject;
+    }
+
+    protected static IJsonSerializable convertToObject(IPersistedResourceRegistry registry, JsonNode json,
+            boolean ordered) throws HyracksDataException {
+        String typeName = json.get(TYPE_NAME_FIELD).asText();
+        JsonNode itemTypeJson = json.get(ITEM_TYPE_FIELD);
+        IAType itemType = (IAType) registry.deserialize(itemTypeJson);
+        return ordered ? new AOrderedListType(itemType, typeName) : new AUnorderedListType(itemType, typeName);
+    }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
index f8b1d60..16f83f5 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
@@ -20,9 +20,14 @@
 
 import org.apache.asterix.om.base.IAObject;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
 public abstract class AbstractComplexType implements IAType {
 
     private static final long serialVersionUID = 1L;
+    protected static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    protected static final String TYPE_NAME_FIELD = "typeName";
     protected String typeName;
 
     public AbstractComplexType(String typeName) {
@@ -45,5 +50,9 @@
         return object instanceof IAObject && deepEqual((IAObject) object);
     }
 
+    protected void addToJson(final ObjectNode json) {
+        json.put(TYPE_NAME_FIELD, typeName);
+    }
+
     public abstract boolean containsType(IAType type);
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
index 2e48127..4fc146f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
@@ -18,14 +18,20 @@
  */
 package org.apache.asterix.om.types;
 
-import org.apache.asterix.om.base.IAObject;
+import static org.apache.asterix.om.types.ATypeTag.VALUE_TYPE_MAPPING;
 
+import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public abstract class BuiltinType implements IAType {
 
     private static final long serialVersionUID = 1L;
+    private static final String TAG_FIELD = "tag";
 
     public abstract static class LowerCaseConstructorType extends BuiltinType {
         private static final long serialVersionUID = 1L;
@@ -62,6 +68,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -87,6 +98,11 @@
         @Override
         public String getTypeName() {
             return "int8";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -118,6 +134,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -143,6 +164,11 @@
         @Override
         public String getTypeName() {
             return "int32";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -174,6 +200,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -199,6 +230,11 @@
         @Override
         public String getTypeName() {
             return "binary";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -230,6 +266,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -255,6 +296,11 @@
         @Override
         public String getTypeName() {
             return "double";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -286,6 +332,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -311,6 +362,11 @@
         @Override
         public String getTypeName() {
             return "missing";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -342,6 +398,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -367,6 +428,11 @@
         @Override
         public String getTypeName() {
             return "boolean";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -398,6 +464,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -423,6 +494,11 @@
         @Override
         public String getTypeName() {
             return "date";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -454,6 +530,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -479,6 +560,11 @@
         @Override
         public String getTypeName() {
             return "duration";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -510,6 +596,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -535,6 +626,11 @@
         @Override
         public String getTypeName() {
             return "day-time-duration";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -566,6 +662,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             return null;
         }
@@ -588,6 +689,11 @@
         @Override
         public String getTypeName() {
             return "point";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -619,6 +725,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -644,6 +755,11 @@
         @Override
         public String getTypeName() {
             return "line";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -675,6 +791,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -703,6 +824,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectNode type = new ObjectMapper().createObjectNode();
             type.put("type", "AGEOMETRY");
@@ -727,6 +853,11 @@
         @Override
         public String getTypeName() {
             return "circle";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -758,6 +889,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -786,6 +922,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -810,6 +951,11 @@
         @Override
         public String getTypeName() {
             return "uuid";
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -846,6 +992,11 @@
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -876,6 +1027,11 @@
         @Override
         public String getConstructor() {
             return null;
+        }
+
+        @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), serialVersionUID);
         }
 
         @Override
@@ -925,4 +1081,79 @@
         return getType().getTypeTag().serialize();
     }
 
+    private static JsonNode convertToJson(IPersistedResourceRegistry registry, short tag, long version) {
+        ObjectNode jsonNode = registry.getClassIdentifier(BuiltinType.class, version);
+        jsonNode.put(TAG_FIELD, tag);
+        return jsonNode;
+    }
+
+    @SuppressWarnings("squid:S1172") // unused parameter
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json) {
+        byte tag = (byte) json.get(TAG_FIELD).shortValue();
+        ATypeTag typeTag = VALUE_TYPE_MAPPING[tag];
+        switch (typeTag) {
+            case TYPE:
+                return ALL_TYPE;
+            case TINYINT:
+                return AINT8;
+            case SMALLINT:
+                return AINT16;
+            case INTEGER:
+                return AINT32;
+            case BIGINT:
+                return AINT64;
+            case FLOAT:
+                return AFLOAT;
+            case DOUBLE:
+                return ADOUBLE;
+            case STRING:
+                return ASTRING;
+            case BINARY:
+                return ABINARY;
+            case MISSING:
+                return AMISSING;
+            case NULL:
+                return ANULL;
+            case BOOLEAN:
+                return ABOOLEAN;
+            case TIME:
+                return ATIME;
+            case DATE:
+                return ADATE;
+            case DATETIME:
+                return ADATETIME;
+            case DURATION:
+                return ADURATION;
+            case YEARMONTHDURATION:
+                return AYEARMONTHDURATION;
+            case DAYTIMEDURATION:
+                return ADAYTIMEDURATION;
+            case INTERVAL:
+                return AINTERVAL;
+            case POINT:
+                return APOINT;
+            case POINT3D:
+                return APOINT3D;
+            case LINE:
+                return ALINE;
+            case POLYGON:
+                return APOLYGON;
+            case GEOMETRY:
+                return AGEOMETRY;
+            case CIRCLE:
+                return ACIRCLE;
+            case RECTANGLE:
+                return ARECTANGLE;
+            case BITARRAY:
+                return ABITARRAY;
+            case UUID:
+                return AUUID;
+            case ANY:
+                return ANY;
+            case SHORTWITHOUTTYPEINFO:
+                return SHORTWITHOUTTYPEINFO;
+            default:
+                throw new IllegalStateException();
+        }
+    }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
index aa9ce99..0e6cc4f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
@@ -21,8 +21,9 @@
 import java.io.Serializable;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.io.IJsonSerializable;
 
-public interface IAType extends IAObject, Serializable {
+public interface IAType extends IAObject, Serializable, IJsonSerializable {
 
     public ATypeTag getTypeTag();
 

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-stabilization-f69489-compat/561/ (13/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-verify-storage/5828/ (4/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-source-assemblies/5472/ (11/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1: Contrib+1

BAD Compatibility Tests Successful

https://asterix-jenkins.ics.uci.edu/job/asterixbad-compat/4006/ : SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-spidersilk-tests/244/ (2/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-ssl-compression/75/ (16/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/10733/ (10/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-ensure-ancestor/3262/ (7/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Murtadha Hubail (Code Review)" <do...@asterixdb.incubator.apache.org>.
Murtadha Hubail has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1: Code-Review+2

(1 comment)

https://asterix-gerrit.ics.uci.edu/#/c/3228/1/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java:

Line 1156:                 throw new IllegalStateException();
unrecognized type tag + typeTag


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-HasComments: Yes

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

BAD Compatibility Tests Started https://asterix-jenkins.ics.uci.edu/job/asterixbad-compat/4006/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Integration Tests Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/8034/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-cancellation-test/5251/ (9/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Anon. E. Moose (Code Review)" <do...@asterixdb.incubator.apache.org>.
Anon. E. Moose #1000171 has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Analytics Compatibility Compilation Successful
https://goo.gl/XqvUDo : SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1: Integration-Tests+1

Integration Tests Successful

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/8034/ : SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-verify-no-installer-app/5470/ (6/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-verify-txnlog/417/ (1/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-asterix-app-sql-execution/5248/ (15/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/5158/ (14/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-asterix-app-openjdk11/625/ (8/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Anon. E. Moose (Code Review)" <do...@asterixdb.incubator.apache.org>.
Anon. E. Moose #1000171 has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1: Contrib-2

Analytics Compatibility Tests Failed
https://goo.gl/EGNeq6 : UNSTABLE

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-source-format/5213/ (12/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-verify-asterix-app/5620/ (3/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: [NO ISSUE][OTH] Make IAType IJsonSerializable

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: [NO ISSUE][OTH] Make IAType IJsonSerializable
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-sonar/9204/ (5/16)

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3228
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No