diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java
index 3d7ba34..4e3ae55 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java
@@ -171,7 +171,7 @@
                         "Cannot use " + numSecondaryKeys + " fields as a key for an inverted index. "
                                 + "There can be only one field as a key for the inverted index index.");
             }
-            if (itemType.getTypeTag() != ATypeTag.RECORD) {
+            if (itemType.getTypeTag() != ATypeTag.OBJECT) {
                 throw new AlgebricksException("Only record types can be indexed.");
             }
             ARecordType recordType = (ARecordType) itemType;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java
index f888ee0..503a631 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java
@@ -50,8 +50,8 @@
         switch (inputTag) {
             case STRING:
                 return BuiltinFunctions.COUNTHASHED_WORD_TOKENS;
-            case UNORDEREDLIST:
-            case ORDEREDLIST:
+            case MULTISET:
+            case ARRAY:
             case ANY:
                 return null;
             default:
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
index c7d5ad2..b3b0ad7 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
@@ -113,7 +113,7 @@
     // Rewrites field-access-by-name into field-access-by-index if possible.
     private boolean rewriteFieldAccess(Mutable<ILogicalExpression> exprRef, AbstractFunctionCallExpression fce,
             IAType t) throws AlgebricksException {
-        if (t.getTypeTag() != ATypeTag.RECORD) {
+        if (t.getTypeTag() != ATypeTag.OBJECT) {
             return false;
         }
         ILogicalExpression fai = createFieldAccessByIndex((ARecordType) t, fce);
@@ -128,7 +128,7 @@
     private IAType getActualType(IAType t) throws AlgebricksException {
         switch (t.getTypeTag()) {
             case ANY:
-            case RECORD:
+            case OBJECT:
                 return t;
             case UNION:
                 return ((AUnionType) t).getActualType();
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FullTextContainsParameterCheckRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FullTextContainsParameterCheckRule.java
index 20c043a..42cea34 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FullTextContainsParameterCheckRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FullTextContainsParameterCheckRule.java
@@ -172,8 +172,8 @@
             ATypeTag exprTypeTag = ConstantExpressionUtil.getConstantIaObjectType(secondExpr);
             switch (exprTypeTag) {
                 case STRING:
-                case UNORDEREDLIST:
-                case ORDEREDLIST:
+                case MULTISET:
+                case ARRAY:
                     break;
                 default:
                     throw new AlgebricksException("The second expression of " + functionName
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
index 535edbe..075a65c 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
@@ -248,7 +248,7 @@
         if (inputType.getTypeTag() == ATypeTag.ANY) {
             return false;
         }
-        if (inputType.getTypeTag() != ATypeTag.RECORD) {
+        if (inputType.getTypeTag() != ATypeTag.OBJECT) {
             throw new AlgebricksException("The input type " + inputType + " is not a valid record type!");
         }
         ARecordType inputRecType = (ARecordType) inputType;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
index 949786a..e322e9e 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
@@ -156,7 +156,7 @@
         // Create operators for secondary index insert / delete.
         String itemTypeName = dataset.getItemTypeName();
         IAType itemType = mp.findType(dataset.getItemTypeDataverseName(), itemTypeName);
-        if (itemType.getTypeTag() != ATypeTag.RECORD) {
+        if (itemType.getTypeTag() != ATypeTag.OBJECT) {
             throw new AlgebricksException("Only record types can be indexed.");
         }
         ARecordType recType = (ARecordType) itemType;
@@ -206,7 +206,7 @@
         ReplicateOperator replicateOp = null;
         if (secondaryIndexTotalCnt > 1 && primaryIndexModificationOp.isBulkload()) {
             // Split the logical plan into "each secondary index update branch"
-            // to replicate each <PK,RECORD> pair.
+            // to replicate each <PK,OBJECT> pair.
             replicateOp = new ReplicateOperator(secondaryIndexTotalCnt);
             replicateOp.getInputs().add(new MutableObject<ILogicalOperator>(currentTop));
             replicateOp.setExecutionMode(ExecutionMode.PARTITIONED);
@@ -531,7 +531,7 @@
             throws AlgebricksException {
         if (recordExpr.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
             IAType type = (IAType) typeEnvironment.getType(recordExpr);
-            return type != null && type.getTypeTag() == ATypeTag.RECORD;
+            return type != null && type.getTypeTag() == ATypeTag.OBJECT;
         }
         return false;
     }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java
index 4343e69..f0917af 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java
@@ -276,7 +276,7 @@
         IAType fieldNameType = fieldNameValue.getObject().getType();
         FunctionIdentifier functionIdentifier;
         switch (fieldNameType.getTypeTag()) {
-            case ORDEREDLIST:
+            case ARRAY:
                 // Field access nested
                 functionIdentifier = BuiltinFunctions.FIELD_ACCESS_NESTED;
                 break;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java
index 6ca822a..e0fb1db 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java
@@ -136,7 +136,7 @@
         if (pos != null) {
             String tName = dataset.getItemTypeName();
             IAType t = mp.findType(dataset.getItemTypeDataverseName(), tName);
-            if (t.getTypeTag() != ATypeTag.RECORD) {
+            if (t.getTypeTag() != ATypeTag.OBJECT) {
                 return false;
             }
             ARecordType rt = (ARecordType) t;
@@ -322,7 +322,7 @@
                                 int pos = ((AInt32) obj).getIntegerValue();
                                 String tName = dataset.getItemTypeName();
                                 IAType t = mp.findType(dataset.getItemTypeDataverseName(), tName);
-                                if (t.getTypeTag() != ATypeTag.RECORD) {
+                                if (t.getTypeTag() != ATypeTag.OBJECT) {
                                     return false;
                                 }
                                 ARecordType rt = (ARecordType) t;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java
index 4ae26fc..2d7695f 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java
@@ -231,7 +231,7 @@
             path.add(unresolvedVarName);
             varAccessCandidates.add(new Pair<>(expr, path));
         }
-        if (tag == ATypeTag.RECORD) {
+        if (tag == ATypeTag.OBJECT) {
             ARecordType recordType = (ARecordType) type;
             if (recordType.canContainField(unresolvedVarName)) {
                 // If the field name is possible.
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SimilarityCheckRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SimilarityCheckRule.java
index 46e0f7e..585bc71 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SimilarityCheckRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SimilarityCheckRule.java
@@ -288,7 +288,7 @@
         if (funcExpr.getFunctionIdentifier() == BuiltinFunctions.EDIT_DISTANCE) {
             AInt32 aInt = new AInt32(0);
             try {
-                aInt = (AInt32) ATypeHierarchy.convertNumericTypeObject(constVal.getObject(), ATypeTag.INT32);
+                aInt = (AInt32) ATypeHierarchy.convertNumericTypeObject(constVal.getObject(), ATypeTag.INTEGER);
             } catch (AsterixException e) {
                 throw new AlgebricksException(e);
             }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
index 5179adc..86d2b9f 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
@@ -304,8 +304,8 @@
                             || optFuncExpr.getFuncExpr()
                                     .getFunctionIdentifier() == BuiltinFunctions.FULLTEXT_CONTAINS_WO_OPTION) {
                         for (int j = 0; j < matchedTypes.size(); j++) {
-                            if (matchedTypes.get(j).getTypeTag() == ATypeTag.ORDEREDLIST
-                                    || matchedTypes.get(j).getTypeTag() == ATypeTag.UNORDEREDLIST) {
+                            if (matchedTypes.get(j).getTypeTag() == ATypeTag.ARRAY
+                                    || matchedTypes.get(j).getTypeTag() == ATypeTag.MULTISET) {
                                 elementTypes.set(j, ((AbstractCollectionType) matchedTypes.get(j)).getItemType());
                             }
                         }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
index e059574..c3b6473 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
@@ -245,11 +245,11 @@
                 arg2Value = ConstantExpressionUtil.getStringConstant(objectFromExpr);
                 checkAndGenerateFTSearchExceptionForStringPhrase(arg2Value);
                 break;
-            case ORDEREDLIST:
+            case ARRAY:
                 oListCursor = ConstantExpressionUtil.getOrderedListConstant(objectFromExpr).getCursor();
                 checkEachElementInFTSearchListPredicate(oListCursor);
                 break;
-            case UNORDEREDLIST:
+            case MULTISET:
                 oListCursor = ConstantExpressionUtil.getUnorderedListConstant(objectFromExpr).getCursor();
                 checkEachElementInFTSearchListPredicate(oListCursor);
                 break;
@@ -434,10 +434,10 @@
                     case DOUBLE:
                     case FLOAT:
                         switch (fieldType.getTypeTag()) {
-                            case INT8:
-                            case INT16:
-                            case INT32:
-                            case INT64:
+                            case TINYINT:
+                            case SMALLINT:
+                            case INTEGER:
+                            case BIGINT:
                                 realTypeConvertedToIntegerType = true;
                                 break;
                             default:
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java
index 18641e5..c7401b2 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java
@@ -94,7 +94,7 @@
             filterFieldName = DatasetUtil.getFilterField(dataset);
             IAType itemType = ((MetadataProvider) context.getMetadataProvider())
                     .findType(dataset.getItemTypeDataverseName(), dataset.getItemTypeName());
-            if (itemType.getTypeTag() == ATypeTag.RECORD) {
+            if (itemType.getTypeTag() == ATypeTag.OBJECT) {
                 recType = (ARecordType) itemType;
             }
         }
@@ -457,7 +457,7 @@
                 }
                 returnList.add(recType.getFieldNames()[fieldIndex]);
                 IAType subType = recType.getFieldTypes()[fieldIndex];
-                if (subType.getTypeTag() == ATypeTag.RECORD) {
+                if (subType.getTypeTag() == ATypeTag.OBJECT) {
                     recType = (ARecordType) subType;
                 }
                 return new Pair<>(recType, returnList);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
index a02679d..0752979 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
@@ -764,8 +764,8 @@
                         isFilterableArgs);
                 break;
             }
-            case UNORDEREDLIST:
-            case ORDEREDLIST: {
+            case MULTISET:
+            case ARRAY:
                 List<Mutable<ILogicalExpression>> isFilterableArgs = new ArrayList<Mutable<ILogicalExpression>>(2);
                 isFilterableArgs
                         .add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(inputSearchVar)));
@@ -775,10 +775,8 @@
                         FunctionUtil.getFunctionInfo(BuiltinFunctions.EDIT_DISTANCE_LIST_IS_FILTERABLE),
                         isFilterableArgs);
                 break;
-            }
-            default: {
+            default:
                 throw CompilationException.create(ErrorCode.NO_SUPPORTED_TYPE);
-            }
         }
 
         SelectOperator isFilterableSelectOp = new SelectOperator(
@@ -829,7 +827,7 @@
                 // If this is a nullable field, then we need to get the actual type tag.
                 typeTag = ((AUnionType) type).getActualType().getTypeTag();
             }
-            if (typeTag != ATypeTag.ORDEREDLIST && typeTag != ATypeTag.STRING && typeTag != ATypeTag.UNORDEREDLIST) {
+            if (typeTag != ATypeTag.ARRAY && typeTag != ATypeTag.STRING && typeTag != ATypeTag.MULTISET) {
                 throw CompilationException.create(ErrorCode.NO_SUPPORTED_TYPE);
             }
         }
@@ -962,7 +960,7 @@
             return true;
         }
         // We can only optimize edit distance on lists using a word index.
-        if ((typeTag == ATypeTag.ORDEREDLIST) && (indexType == IndexType.SINGLE_PARTITION_WORD_INVIX
+        if ((typeTag == ATypeTag.ARRAY) && (indexType == IndexType.SINGLE_PARTITION_WORD_INVIX
                 || indexType == IndexType.LENGTH_PARTITIONED_WORD_INVIX)) {
             return true;
         }
@@ -988,9 +986,9 @@
         IAObject intObj = intConstVal.getObject();
 
         AInt32 edThresh = null;
-        // Apply type casting based on numeric types of the input to INT32 type.
+        // Apply type casting based on numeric types of the input to INTEGER type.
         try {
-            edThresh = (AInt32) ATypeHierarchy.convertNumericTypeObject(intObj, ATypeTag.INT32);
+            edThresh = (AInt32) ATypeHierarchy.convertNumericTypeObject(intObj, ATypeTag.INTEGER);
         } catch (AsterixException e) {
             throw new AlgebricksException(e);
         }
@@ -1008,7 +1006,7 @@
             }
         }
 
-        if ((typeTag == ATypeTag.ORDEREDLIST) && (index.getIndexType() == IndexType.SINGLE_PARTITION_WORD_INVIX
+        if ((typeTag == ATypeTag.ARRAY) && (index.getIndexType() == IndexType.SINGLE_PARTITION_WORD_INVIX
                 || index.getIndexType() == IndexType.LENGTH_PARTITIONED_WORD_INVIX)) {
             IACollection alist = (IACollection) listOrStrObj;
             // Compute merge threshold.
@@ -1066,7 +1064,7 @@
 
     private boolean isFullTextContainsFuncCompatible(ATypeTag typeTag, IndexType indexType) {
         //We can only optimize contains with full-text indexes.
-        return (typeTag == ATypeTag.STRING || typeTag == ATypeTag.ORDEREDLIST || typeTag == ATypeTag.UNORDEREDLIST)
+        return (typeTag == ATypeTag.STRING || typeTag == ATypeTag.ARRAY || typeTag == ATypeTag.MULTISET)
                 && indexType == IndexType.SINGLE_PARTITION_WORD_INVIX;
     }
 
@@ -1080,7 +1078,7 @@
     }
 
     // Checks whether the given index is compatible with full-text search and
-    // the type of the constant search predicate is STRING, ORDEREDLIST, or UNORDEREDLIST
+    // the type of the constant search predicate is STRING, ARRAY, or MULTISET
     private boolean isFullTextContainsFuncSelectOptimizable(Index index, IOptimizableFuncExpr optFuncExpr) {
         AsterixConstantValue strConstVal =
                 (AsterixConstantValue) ((ConstantExpression) optFuncExpr.getConstantExpr(0)).getValue();
@@ -1156,15 +1154,11 @@
             }
         }
 
-        if (nonConstArg.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
-            if ((typeTag == ATypeTag.ORDEREDLIST || typeTag == ATypeTag.UNORDEREDLIST)
-                    && (indexType == IndexType.SINGLE_PARTITION_WORD_INVIX
-                            || indexType == IndexType.LENGTH_PARTITIONED_WORD_INVIX)) {
-                return true;
-            }
-            // We assume that the given list variable doesn't have ngram list in it since it is unrealistic.
-        }
-        return false;
+        // We assume that the given list variable doesn't have ngram list in it since it is unrealistic.
+        boolean isVar = nonConstArg.getExpressionTag() == LogicalExpressionTag.VARIABLE;
+        return isVar && (typeTag == ATypeTag.ARRAY || typeTag == ATypeTag.MULTISET)
+                && (indexType == IndexType.SINGLE_PARTITION_WORD_INVIX
+                        || indexType == IndexType.LENGTH_PARTITIONED_WORD_INVIX);
     }
 
     private boolean isContainsFuncOptimizable(Index index, IOptimizableFuncExpr optFuncExpr) {
@@ -1247,7 +1241,7 @@
             case CONJUNCTIVE_EDIT_DISTANCE:
                 int edThresh = 0;
                 try {
-                    edThresh = ((AInt32) ATypeHierarchy.convertNumericTypeObject(simThresh, ATypeTag.INT32))
+                    edThresh = ((AInt32) ATypeHierarchy.convertNumericTypeObject(simThresh, ATypeTag.INTEGER))
                             .getIntegerValue();
                 } catch (AsterixException e) {
                     throw new AlgebricksException(e);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
index 7eae931..18358c6 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
@@ -291,7 +291,7 @@
             }
             // Get the record type for that dataset.
             IAType itemType = metadataProvider.findType(ds.getItemTypeDataverseName(), ds.getItemTypeName());
-            if (itemType.getTypeTag() != ATypeTag.RECORD) {
+            if (itemType.getTypeTag() != ATypeTag.OBJECT) {
                 if (i == 0) {
                     return false;
                 } else {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
index 2a569b9..efea208 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
@@ -148,7 +148,7 @@
             }
             return rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType,
                     env);
-        } else if (inputType.getTypeTag().equals(ATypeTag.RECORD)) {
+        } else if (inputType.getTypeTag().equals(ATypeTag.OBJECT)) {
             if (reqType.equals(BuiltinType.ANY)) {
                 reqType = DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE;
             }
@@ -456,13 +456,13 @@
             IAType reqFieldType = inputFieldType;
             // do not enforce nested type in the case of no-used variables
             switch (inputFieldType.getTypeTag()) {
-                case RECORD:
+                case OBJECT:
                     reqFieldType = DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE;
                     break;
-                case ORDEREDLIST:
+                case ARRAY:
                     reqFieldType = DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE;
                     break;
-                case UNORDEREDLIST:
+                case MULTISET:
                     reqFieldType = DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE;
                     break;
                 default:
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
index 477d596..285a35e 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
@@ -254,7 +254,7 @@
         ILogicalOperator unnestOp;
         if (fromTerm.hasPositionalVariable()) {
             LogicalVariable pVar = context.newVarFromExpression(fromTerm.getPositionalVariable());
-            // We set the positional variable type as INT64 type.
+            // We set the positional variable type as BIGINT type.
             unnestOp =
                     new UnnestOperator(fromVar, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)),
                             pVar, BuiltinType.AINT64, new PositionWriter());
@@ -454,7 +454,7 @@
         ILogicalOperator unnestOp;
         if (binaryCorrelate.hasPositionalVariable()) {
             LogicalVariable pVar = context.newVarFromExpression(binaryCorrelate.getPositionalVariable());
-            // We set the positional variable type as INT64 type.
+            // We set the positional variable type as BIGINT type.
             unnestOp = innerUnnest
                     ? new UnnestOperator(rightVar, new MutableObject<>(makeUnnestExpression(eo.first)), pVar,
                             BuiltinType.AINT64, new PositionWriter())
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
index 3d0315c..d262bb8 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
@@ -63,10 +63,10 @@
                     RecordUtil.toFullyQualifiedName(filterField));
         }
         switch (fieldType.getTypeTag()) {
-            case INT8:
-            case INT16:
-            case INT32:
-            case INT64:
+            case TINYINT:
+            case SMALLINT:
+            case INTEGER:
+            case BIGINT:
             case FLOAT:
             case DOUBLE:
             case STRING:
@@ -134,10 +134,10 @@
                             RecordUtil.toFullyQualifiedName(partitioningExprs.get(fidx)));
                 }
                 switch (fieldType.getTypeTag()) {
-                    case INT8:
-                    case INT16:
-                    case INT32:
-                    case INT64:
+                    case TINYINT:
+                    case SMALLINT:
+                    case INTEGER:
+                    case BIGINT:
                     case FLOAT:
                     case DOUBLE:
                     case STRING:
@@ -154,7 +154,7 @@
                                 RecordUtil.toFullyQualifiedName(partitioningExprs.get(fidx)));
                     default:
                         throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_PRIMARY_KEY_TYPE,
-                                fieldType.getTypeTag().name());
+                                fieldType.getTypeTag());
                 }
             }
         }
@@ -200,10 +200,10 @@
             switch (indexType) {
                 case BTREE:
                     switch (fieldType.getTypeTag()) {
-                        case INT8:
-                        case INT16:
-                        case INT32:
-                        case INT64:
+                        case TINYINT:
+                        case SMALLINT:
+                        case INTEGER:
+                        case BIGINT:
                         case FLOAT:
                         case DOUBLE:
                         case STRING:
@@ -249,8 +249,8 @@
                 case LENGTH_PARTITIONED_WORD_INVIX:
                     switch (fieldType.getTypeTag()) {
                         case STRING:
-                        case UNORDEREDLIST:
-                        case ORDEREDLIST:
+                        case MULTISET:
+                        case ARRAY:
                         case UNION:
                             break;
                         default:
@@ -272,8 +272,8 @@
                 case SINGLE_PARTITION_WORD_INVIX:
                     switch (fieldType.getTypeTag()) {
                         case STRING:
-                        case UNORDEREDLIST:
-                        case ORDEREDLIST:
+                        case MULTISET:
+                        case ARRAY:
                         case UNION:
                             break;
                         default:
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index e97a7e1..d37de0d 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -548,7 +548,7 @@
             switch (dd.getDatasetType()) {
                 case INTERNAL:
                     IAType itemType = dt.getDatatype();
-                    if (itemType.getTypeTag() != ATypeTag.RECORD) {
+                    if (itemType.getTypeTag() != ATypeTag.OBJECT) {
                         throw new AlgebricksException("Dataset type has to be a record type.");
                     }
 
@@ -556,7 +556,7 @@
                     if (metaItemTypeDataverseName != null && metaItemTypeName != null) {
                         metaItemType = metadataProvider.findType(metaItemTypeDataverseName, metaItemTypeName);
                     }
-                    if (metaItemType != null && metaItemType.getTypeTag() != ATypeTag.RECORD) {
+                    if (metaItemType != null && metaItemType.getTypeTag() != ATypeTag.OBJECT) {
                         throw new AlgebricksException("Dataset meta type has to be a record type.");
                     }
                     ARecordType metaRecType = (ARecordType) metaItemType;
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/data/gen/ARecordValueGenerator.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/data/gen/ARecordValueGenerator.java
index df717e9..cd4de62 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/data/gen/ARecordValueGenerator.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/data/gen/ARecordValueGenerator.java
@@ -56,10 +56,10 @@
                 case DOUBLE:
                     generators[i] = new ADoubleFieldValueGenerator(generationFunctions[i], uniques[i], true);
                     break;
-                case INT32:
+                case INTEGER:
                     generators[i] = new AInt32FieldValueGenerator(generationFunctions[i], uniques[i], true);
                     break;
-                case INT64:
+                case BIGINT:
                     generators[i] = new AInt64FieldValueGenerator(generationFunctions[i], uniques[i], true);
                     break;
                 case STRING:
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/data/gen/TupleGenerator.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/data/gen/TupleGenerator.java
index 98c57a0..0469349 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/data/gen/TupleGenerator.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/data/gen/TupleGenerator.java
@@ -115,8 +115,8 @@
         switch (field.getTypeTag()) {
             case BOOLEAN:
             case DOUBLE:
-            case INT32:
-            case INT64:
+            case INTEGER:
+            case BIGINT:
             case STRING:
                 break;
             default:
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml b/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml
index 0b93b96..02efe62 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml
+++ b/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml
@@ -423,7 +423,7 @@
     <test-case FilePath="exception">
       <compilation-unit name="issue_255_create_dataset_error_2">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>Field of type RECORD cannot be used as a primary key field</expected-error>
+        <expected-error>Field of type object cannot be used as a primary key field</expected-error>
       </compilation-unit>
     </test-case>
     <!-- Feed datasets are not supported anymore
@@ -455,7 +455,7 @@
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_2">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>Error: The field "[age]" which is of type int32 cannot be indexed using the RTree index.</expected-error>
+        <expected-error>Error: The field "[age]" which is of type integer cannot be indexed using the RTree index.</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
index d28371d..a69d313 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
@@ -2672,7 +2672,7 @@
     <test-case FilePath="fuzzyjoin">
       <compilation-unit name="dblp-aqlplus_2">
         <output-dir compare="Text">dblp-aqlplus_2</output-dir>
-        <expected-error>Type mismatch: function similarity-jaccard expects its 1st input parameter to be type orderedlist or unorderedlist, but the actual input type is string</expected-error>
+        <expected-error>Type mismatch: function similarity-jaccard expects its 1st input parameter to be type array or multiset, but the actual input type is string</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="fuzzyjoin">
@@ -3452,13 +3452,13 @@
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="index-type-collision">
           <output-dir compare="Text">index-type-collision</output-dir>
-          <expected-error>Cannot create index testIdx2 , enforced index testIdx1 on field "[value]" is already defined with type "[int32]"</expected-error>
+          <expected-error>Cannot create index testIdx2 , enforced index testIdx1 on field "[value]" is already defined with type "[integer]"</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="index-type-promotion-collision">
           <output-dir compare="Text">index-type-promotion-collision</output-dir>
-          <expected-error>Cannot create index testIdx2 , enforced index testIdx1 on field "[value]" is already defined with type "[int64]"</expected-error>
+          <expected-error>Cannot create index testIdx2 , enforced index testIdx1 on field "[value]" is already defined with type "[bigint]"</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
@@ -6962,10 +6962,10 @@
     <test-case FilePath="types">
       <compilation-unit name="domain_boundaries_error">
         <output-dir compare="Text">domain_boundaries_error</output-dir>
-        <expected-error>ASX0006: Invalid format for int8 in int8</expected-error>
-        <expected-error>ASX0006: Invalid format for int16 in int16</expected-error>
-        <expected-error>ASX0006: Invalid format for int32 in int32</expected-error>
-        <expected-error>ASX0006: Invalid format for int64 in int64</expected-error>
+        <expected-error>ASX0006: Invalid format for int8 in tinyint</expected-error>
+        <expected-error>ASX0006: Invalid format for int16 in smallint</expected-error>
+        <expected-error>ASX0006: Invalid format for int32 in integer</expected-error>
+        <expected-error>ASX0006: Invalid format for int64 in bigint</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="types">
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 3931601..8f7ffc3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -2592,13 +2592,13 @@
     <test-case FilePath="global-aggregate">
       <compilation-unit name="q05_error">
         <output-dir compare="Text">q01</output-dir>
-        <expected-error>Type mismatch: function field-access-by-name expects its 1st input parameter to be type record, but the actual input type is orderedlist</expected-error>
+        <expected-error>Type mismatch: function field-access-by-name expects its 1st input parameter to be type object, but the actual input type is array</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="global-aggregate">
       <compilation-unit name="q06_error">
         <output-dir compare="Text">q01</output-dir>
-        <expected-error>Type mismatch: function scan-collection expects its 1st input parameter to be type orderedlist or unorderedlist, but the actual input type is string</expected-error>
+        <expected-error>Type mismatch: function scan-collection expects its 1st input parameter to be type array or multiset, but the actual input type is string</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="global-aggregate">
@@ -2683,7 +2683,7 @@
     <test-case FilePath="group-by">
       <compilation-unit name="sugar-01-negative">
         <output-dir compare="Text">core-01</output-dir>
-        <expected-error>Type mismatch: function field-access-by-name expects its 1st input parameter to be type record, but the actual input type is orderedlist</expected-error>
+        <expected-error>Type mismatch: function field-access-by-name expects its 1st input parameter to be type object, but the actual input type is array</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="group-by">
@@ -3319,7 +3319,7 @@
     <test-case FilePath="misc">
       <compilation-unit name="query-ASTERIXDB-1577">
         <output-dir compare="Text">query-ASTERIXDB-1577</output-dir>
-        <expected-error>Type mismatch: function field-access-by-name expects its 1st input parameter to be type record, but the actual input type is orderedlist</expected-error>
+        <expected-error>Type mismatch: function field-access-by-name expects its 1st input parameter to be type object, but the actual input type is array</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="misc">
@@ -6075,7 +6075,7 @@
     <test-case FilePath="subquery">
       <compilation-unit name="query-ASTERIXDB-1574">
         <output-dir compare="Text">query-ASTERIXDB-1574</output-dir>
-        <expected-error>Type mismatch: function scan-collection expects its 1st input parameter to be type unorderedlist or orderedlist, but the actual input type is record</expected-error>
+        <expected-error>Type mismatch: function scan-collection expects its 1st input parameter to be type multiset or array, but the actual input type is object</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="subquery">
@@ -7429,7 +7429,7 @@
         <output-dir compare="Text">cross-dv07</output-dir>
       </compilation-unit>
     </test-case>
-    <!--NotImplementedException: No binary comparator factory implemented for type RECORD.
+    <!--NotImplementedException: No binary comparator factory implemented for type OBJECT.
         <test-case FilePath="cross-dataverse">
           <compilation-unit name="cross-dv08">
             <output-dir compare="Text">cross-dv08</output-dir>
@@ -7473,14 +7473,14 @@
         <expected-error>Recursive invocation testdv1.fun04@0</expected-error>
       </compilation-unit>
     </test-case>
-    <!--NotImplementedException: No binary comparator factory implemented for type RECORD.
+    <!--NotImplementedException: No binary comparator factory implemented for type OBJECT.
         <test-case FilePath="cross-dataverse">
           <compilation-unit name="cross-dv17">
             <output-dir compare="Text">cross-dv17</output-dir>
           </compilation-unit>
         </test-case>
         -->
-    <!--NotImplementedException: No binary comparator factory implemented for type RECORD.
+    <!--NotImplementedException: No binary comparator factory implemented for type OBJECT.
         <test-case FilePath="cross-dataverse">
           <compilation-unit name="cross-dv18">
             <output-dir compare="Text">cross-dv18</output-dir>
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IDataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IDataParser.java
index 7b936a9..f3d8c89 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IDataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IDataParser.java
@@ -60,7 +60,7 @@
     @SuppressWarnings("unchecked")
     public static void writeObject(IAObject obj, DataOutput dataOutput) throws HyracksDataException {
         switch (obj.getType().getTypeTag()) {
-            case RECORD: {
+            case OBJECT: {
                 IARecordBuilder recordBuilder = new RecordBuilder();
                 recordBuilder.reset((ARecordType) obj.getType());
                 recordBuilder.init();
@@ -68,7 +68,7 @@
                 break;
             }
 
-            case ORDEREDLIST: {
+            case ARRAY: {
                 OrderedListBuilder listBuilder = new OrderedListBuilder();
                 listBuilder.reset((AOrderedListType) ((AMutableOrderedList) obj).getType());
                 IACursor cursor = ((AMutableOrderedList) obj).getCursor();
@@ -83,7 +83,7 @@
                 break;
             }
 
-            case UNORDEREDLIST: {
+            case MULTISET: {
                 UnorderedListBuilder listBuilder = new UnorderedListBuilder();
                 listBuilder.reset((AUnorderedListType) ((AMutableUnorderedList) obj).getType());
                 IACursor cursor = ((AMutableUnorderedList) obj).getCursor();
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JTypeObjectFactory.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JTypeObjectFactory.java
index fb9fd79..916e668 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JTypeObjectFactory.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JTypeObjectFactory.java
@@ -59,7 +59,7 @@
     public IJObject create(IAType type) {
         IJObject retValue = null;
         switch (type.getTypeTag()) {
-            case INT32:
+            case INTEGER:
                 retValue = new JInt(0);
                 break;
             case STRING:
@@ -107,7 +107,7 @@
             case TIME:
                 retValue = new JTime(0);
                 break;
-            case INT64:
+            case BIGINT:
                 retValue = new JLong(0);
                 break;
             case NULL:
@@ -116,19 +116,19 @@
             case MISSING:
                 retValue = JObjects.JMissing.INSTANCE;
                 break;
-            case ORDEREDLIST:
+            case ARRAY:
                 AOrderedListType ot = (AOrderedListType) type;
                 IAType orderedItemType = ot.getItemType();
                 IJObject orderedItemObject = create(orderedItemType);
                 retValue = new JOrderedList(orderedItemObject);
                 break;
-            case UNORDEREDLIST:
+            case MULTISET:
                 AUnorderedListType ut = (AUnorderedListType) type;
                 IAType unorderedItemType = ut.getItemType();
                 IJObject unorderedItemObject = create(unorderedItemType);
                 retValue = new JUnorderedList(unorderedItemObject);
                 break;
-            case RECORD:
+            case OBJECT:
                 IAType[] fieldTypes = ((ARecordType) type).getFieldTypes();
                 IJObject[] fieldObjects = new IJObject[fieldTypes.length];
                 int index = 0;
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JavaFunctionHelper.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JavaFunctionHelper.java
index c1b22dc..3006454 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JavaFunctionHelper.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/JavaFunctionHelper.java
@@ -107,13 +107,13 @@
         IJObject jObject = null;
         IAType type = finfo.getParamList().get(index);
         switch (type.getTypeTag()) {
-            case RECORD:
+            case OBJECT:
                 pointable = pointableAllocator.allocateRecordValue(type);
                 pointable.set(valueReference);
                 jObject = pointableVisitor.visit((ARecordVisitablePointable) pointable, getTypeInfo(index, type));
                 break;
-            case ORDEREDLIST:
-            case UNORDEREDLIST:
+            case ARRAY:
+            case MULTISET:
                 pointable = pointableAllocator.allocateListValue(type);
                 pointable.set(valueReference);
                 jObject = pointableVisitor.visit((AListVisitablePointable) pointable, getTypeInfo(index, type));
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/ResultCollector.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/ResultCollector.java
index 43e4e09..7d8b504 100755
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/ResultCollector.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/ResultCollector.java
@@ -54,7 +54,7 @@
 
     private IAObject allocateResultObjectHolder(IAType type) {
         switch (type.getTypeTag()) {
-            case INT32:
+            case INTEGER:
                 return new AMutableInt32(0);
             case FLOAT:
                 return new AMutableFloat(0f);
@@ -62,9 +62,9 @@
                 return new AMutableDouble(0);
             case STRING:
                 return new AMutableString("");
-            case ORDEREDLIST:
+            case ARRAY:
                 return new AMutableOrderedList((AOrderedListType) type);
-            case RECORD:
+            case OBJECT:
                 IAType[] fieldType = ((ARecordType) type).getFieldTypes();
                 IAObject[] fieldObjects = new IAObject[fieldType.length];
                 for (int i = 0; i < fieldType.length; i++) {
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/RuntimeExternalFunctionUtil.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/RuntimeExternalFunctionUtil.java
index 8cd157c..8b7b06e 100755
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/RuntimeExternalFunctionUtil.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/RuntimeExternalFunctionUtil.java
@@ -77,7 +77,7 @@
 
     public static ByteBuffer allocateArgumentBuffers(IAType type) {
         switch (type.getTypeTag()) {
-            case INT32:
+            case INTEGER:
                 return ByteBuffer.allocate(4);
             case STRING:
                 return ByteBuffer.allocate(32 * 1024);
@@ -88,7 +88,7 @@
 
     public static IAObject allocateArgumentObjects(IAType type) {
         switch (type.getTypeTag()) {
-            case INT32:
+            case INTEGER:
                 return new AMutableInt32(0);
             case STRING:
                 return new AMutableString("");
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
index a35bc69..0d485924 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
@@ -101,16 +101,16 @@
             case BOOLEAN:
                 accessor = new JBooleanAccessor();
                 break;
-            case INT8:
+            case TINYINT:
                 accessor = new JInt8Accessor();
                 break;
-            case INT16:
+            case SMALLINT:
                 accessor = new JInt16Accessor();
                 break;
-            case INT32:
+            case INTEGER:
                 accessor = new JInt32Accessor();
                 break;
-            case INT64:
+            case BIGINT:
                 accessor = new JInt64Accessor();
                 break;
             case FLOAT:
@@ -507,11 +507,11 @@
                     IVisitablePointable fieldName = fieldNames.get(index);
                     typeInfo.reset(fieldType, typeTag);
                     switch (typeTag) {
-                        case RECORD:
+                        case OBJECT:
                             fieldObject = pointableVisitor.visit((ARecordVisitablePointable) fieldPointable, typeInfo);
                             break;
-                        case ORDEREDLIST:
-                        case UNORDEREDLIST:
+                        case ARRAY:
+                        case MULTISET:
                             if (fieldPointable instanceof AFlatValuePointable) {
                                 // value is null
                                 fieldObject = null;
@@ -577,11 +577,11 @@
                     fieldType = TypeTagUtil.getBuiltinTypeByTag(itemTypeTag);
                     typeInfo.reset(fieldType, itemTypeTag);
                     switch (itemTypeTag) {
-                        case RECORD:
+                        case OBJECT:
                             listItem = pointableVisitor.visit((ARecordVisitablePointable) itemPointable, typeInfo);
                             break;
-                        case UNORDEREDLIST:
-                        case ORDEREDLIST:
+                        case MULTISET:
+                        case ARRAY:
                             listItem = pointableVisitor.visit((AListVisitablePointable) itemPointable, typeInfo);
                             break;
                         case ANY:
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectUtil.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectUtil.java
index a107421..5bc1ec2 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectUtil.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectUtil.java
@@ -94,7 +94,7 @@
 
         switch (typeTag) {
 
-            case INT32: {
+            case INTEGER: {
                 int v = dis.readInt();
                 jObject = objectPool.allocate(BuiltinType.AINT32);
                 ((JInt) jObject).setValue(v);
@@ -234,7 +234,7 @@
                 break;
             }
 
-            case UNORDEREDLIST: {
+            case MULTISET: {
                 AUnorderedListType listType = (AUnorderedListType) type;
                 IAType elementType = listType.getItemType();
                 jObject = objectPool.allocate(listType);
@@ -243,9 +243,9 @@
                 ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(dis.readByte());
                 switch (tag) {
                     case STRING:
-                    case RECORD:
-                    case ORDEREDLIST:
-                    case UNORDEREDLIST:
+                    case OBJECT:
+                    case ARRAY:
+                    case MULTISET:
                     case ANY:
                         fixedSize = false;
                         break;
@@ -270,7 +270,7 @@
                 }
                 break;
             }
-            case ORDEREDLIST: {
+            case ARRAY: {
                 AOrderedListType listType = (AOrderedListType) type;
                 IAType elementType = listType.getItemType();
                 jObject = objectPool.allocate(listType);
@@ -278,9 +278,9 @@
                 ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(dis.readByte());
                 switch (tag) {
                     case STRING:
-                    case RECORD:
-                    case ORDEREDLIST:
-                    case UNORDEREDLIST:
+                    case OBJECT:
+                    case ARRAY:
+                    case MULTISET:
                     case ANY:
                         fixedSize = false;
                         break;
@@ -306,7 +306,7 @@
                 }
                 break;
             }
-            case RECORD:
+            case OBJECT:
                 ARecordType recordType = (ARecordType) type;
                 int numberOfSchemaFields = recordType.getFieldTypes().length;
                 byte[] recordBits = dis.getInputStream().getArray();
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjects.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjects.java
index 859a327..6226192 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjects.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjects.java
@@ -906,7 +906,7 @@
 
         @Override
         public ATypeTag getTypeTag() {
-            return ATypeTag.ORDEREDLIST;
+            return ATypeTag.ARRAY;
         }
 
         @Override
@@ -966,7 +966,7 @@
 
         @Override
         public ATypeTag getTypeTag() {
-            return ATypeTag.UNORDEREDLIST;
+            return ATypeTag.MULTISET;
         }
 
         @Override
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
index d1a3ad1..18bf52c 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
@@ -226,33 +226,33 @@
                 parseConstructor(ATypeTag.FLOAT, objectType, out);
                 break;
             case AdmLexer.TOKEN_INT8_LITERAL:
-                parseAndCastNumeric(ATypeTag.INT8, objectType, out);
+                parseAndCastNumeric(ATypeTag.TINYINT, objectType, out);
                 break;
             case AdmLexer.TOKEN_INT8_CONS:
-                parseConstructor(ATypeTag.INT8, objectType, out);
+                parseConstructor(ATypeTag.TINYINT, objectType, out);
                 break;
             case AdmLexer.TOKEN_INT16_LITERAL:
-                parseAndCastNumeric(ATypeTag.INT16, objectType, out);
+                parseAndCastNumeric(ATypeTag.SMALLINT, objectType, out);
                 break;
             case AdmLexer.TOKEN_INT16_CONS:
-                parseConstructor(ATypeTag.INT16, objectType, out);
+                parseConstructor(ATypeTag.SMALLINT, objectType, out);
                 break;
             case AdmLexer.TOKEN_INT_LITERAL:
-                // For an INT value without any suffix, we return it as INT64 type value since it is
+                // For an INT value without any suffix, we return it as BIGINT type value since it is
                 // the default integer type.
-                parseAndCastNumeric(ATypeTag.INT64, objectType, out);
+                parseAndCastNumeric(ATypeTag.BIGINT, objectType, out);
                 break;
             case AdmLexer.TOKEN_INT32_LITERAL:
-                parseAndCastNumeric(ATypeTag.INT32, objectType, out);
+                parseAndCastNumeric(ATypeTag.INTEGER, objectType, out);
                 break;
             case AdmLexer.TOKEN_INT32_CONS:
-                parseConstructor(ATypeTag.INT32, objectType, out);
+                parseConstructor(ATypeTag.INTEGER, objectType, out);
                 break;
             case AdmLexer.TOKEN_INT64_LITERAL:
-                parseAndCastNumeric(ATypeTag.INT64, objectType, out);
+                parseAndCastNumeric(ATypeTag.BIGINT, objectType, out);
                 break;
             case AdmLexer.TOKEN_INT64_CONS:
-                parseConstructor(ATypeTag.INT64, objectType, out);
+                parseConstructor(ATypeTag.BIGINT, objectType, out);
                 break;
             case AdmLexer.TOKEN_STRING_LITERAL:
                 if (checkType(ATypeTag.STRING, objectType)) {
@@ -334,8 +334,8 @@
                 parseConstructor(ATypeTag.POLYGON, objectType, out);
                 break;
             case AdmLexer.TOKEN_START_UNORDERED_LIST:
-                if (checkType(ATypeTag.UNORDEREDLIST, objectType)) {
-                    objectType = getComplexType(objectType, ATypeTag.UNORDEREDLIST);
+                if (checkType(ATypeTag.MULTISET, objectType)) {
+                    objectType = getComplexType(objectType, ATypeTag.MULTISET);
                     parseUnorderedList((AUnorderedListType) objectType, out);
                 } else {
                     throw new ParseException(ErrorCode.PARSER_ADM_DATA_PARSER_TYPE_MISMATCH,
@@ -343,8 +343,8 @@
                 }
                 break;
             case AdmLexer.TOKEN_START_ORDERED_LIST:
-                if (checkType(ATypeTag.ORDEREDLIST, objectType)) {
-                    objectType = getComplexType(objectType, ATypeTag.ORDEREDLIST);
+                if (checkType(ATypeTag.ARRAY, objectType)) {
+                    objectType = getComplexType(objectType, ATypeTag.ARRAY);
                     parseOrderedList((AOrderedListType) objectType, out);
                 } else {
                     throw new ParseException(ErrorCode.PARSER_ADM_DATA_PARSER_TYPE_MISMATCH,
@@ -352,8 +352,8 @@
                 }
                 break;
             case AdmLexer.TOKEN_START_RECORD:
-                if (checkType(ATypeTag.RECORD, objectType)) {
-                    objectType = getComplexType(objectType, ATypeTag.RECORD);
+                if (checkType(ATypeTag.OBJECT, objectType)) {
+                    objectType = getComplexType(objectType, ATypeTag.OBJECT);
                     parseRecord((ARecordType) objectType, out);
                 } else {
                     throw new ParseException(ErrorCode.PARSER_ADM_DATA_PARSER_TYPE_MISMATCH,
@@ -790,15 +790,15 @@
     }
 
     private IARecordBuilder getRecordBuilder() {
-        return recordBuilderPool.allocate(ATypeTag.RECORD);
+        return recordBuilderPool.allocate(ATypeTag.OBJECT);
     }
 
     private IAsterixListBuilder getOrderedListBuilder() {
-        return listBuilderPool.allocate(ATypeTag.ORDEREDLIST);
+        return listBuilderPool.allocate(ATypeTag.ARRAY);
     }
 
     private IAsterixListBuilder getUnorderedListBuilder() {
-        return listBuilderPool.allocate(ATypeTag.UNORDEREDLIST);
+        return listBuilderPool.allocate(ATypeTag.MULTISET);
     }
 
     private ArrayBackedValueStorage getTempBuffer() {
@@ -907,16 +907,16 @@
             case BOOLEAN:
                 parseBoolean(unquoted, out);
                 return true;
-            case INT8:
+            case TINYINT:
                 parseInt8(unquoted, out);
                 return true;
-            case INT16:
+            case SMALLINT:
                 parseInt16(unquoted, out);
                 return true;
-            case INT32:
+            case INTEGER:
                 parseInt32(unquoted, out);
                 return true;
-            case INT64:
+            case BIGINT:
                 parseInt64(unquoted, out);
                 return true;
             case FLOAT:
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/HiveRecordParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/HiveRecordParser.java
index 5e6e288..ffeb941 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/HiveRecordParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/HiveRecordParser.java
@@ -156,28 +156,28 @@
                 case FLOAT:
                     parseFloat(value, (FloatObjectInspector) foi, dataOutput);
                     break;
-                case INT8:
+                case TINYINT:
                     parseInt8(value, (ByteObjectInspector) foi, dataOutput);
                     break;
-                case INT16:
+                case SMALLINT:
                     parseInt16(value, (ShortObjectInspector) foi, dataOutput);
                     break;
-                case INT32:
+                case INTEGER:
                     parseInt32(value, (IntObjectInspector) foi, dataOutput);
                     break;
-                case INT64:
+                case BIGINT:
                     parseInt64(value, (LongObjectInspector) foi, dataOutput);
                     break;
                 case STRING:
                     parseString(value, (StringObjectInspector) foi, dataOutput);
                     break;
-                case ORDEREDLIST:
+                case ARRAY:
                     if (primitiveOnly) {
                         throw new RuntimeDataException(ErrorCode.PARSER_HIVE_NON_PRIMITIVE_LIST_NOT_SUPPORT);
                     }
                     parseOrderedList((AOrderedListType) itemType, value, (ListObjectInspector) foi);
                     break;
-                case UNORDEREDLIST:
+                case MULTISET:
                     if (primitiveOnly) {
                         throw new RuntimeDataException(ErrorCode.PARSER_HIVE_NON_PRIMITIVE_LIST_NOT_SUPPORT);
                     }
@@ -239,21 +239,21 @@
                 return Constants.DOUBLE_TYPE_NAME;
             case FLOAT:
                 return Constants.FLOAT_TYPE_NAME;
-            case INT16:
+            case SMALLINT:
                 return Constants.SMALLINT_TYPE_NAME;
-            case INT32:
+            case INTEGER:
                 return Constants.INT_TYPE_NAME;
-            case INT64:
+            case BIGINT:
                 return Constants.BIGINT_TYPE_NAME;
-            case INT8:
+            case TINYINT:
                 return Constants.TINYINT_TYPE_NAME;
-            case ORDEREDLIST:
+            case ARRAY:
                 return Constants.LIST_TYPE_NAME;
             case STRING:
                 return Constants.STRING_TYPE_NAME;
             case TIME:
                 return Constants.DATETIME_TYPE_NAME;
-            case UNORDEREDLIST:
+            case MULTISET:
                 return Constants.LIST_TYPE_NAME;
             default:
                 throw new RuntimeDataException(ErrorCode.PARSER_HIVE_FIELD_TYPE, tag);
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/TweetParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/TweetParser.java
index bb0b136..1b29c887 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/TweetParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/TweetParser.java
@@ -84,11 +84,11 @@
                     out.write(BuiltinType.ASTRING.getTypeTag().serialize());
                     utf8Writer.writeUTF8(fieldObj.asText(), out);
                     break;
-                case INT64:
+                case BIGINT:
                     aInt64.setValue(fieldObj.asLong());
                     int64Serde.serialize(aInt64, out);
                     break;
-                case INT32:
+                case INTEGER:
                     out.write(BuiltinType.AINT32.getTypeTag().serialize());
                     out.writeInt(fieldObj.asInt());
                     break;
@@ -100,7 +100,7 @@
                     out.write(BuiltinType.ABOOLEAN.getTypeTag().serialize());
                     out.writeBoolean(fieldObj.asBoolean());
                     break;
-                case RECORD:
+                case OBJECT:
                     writeRecord(fieldObj, out, (ARecordType) fieldType);
                     break;
                 default:
@@ -227,11 +227,11 @@
     }
 
     private IARecordBuilder getRecordBuilder() {
-        return recordBuilderPool.allocate(ATypeTag.RECORD);
+        return recordBuilderPool.allocate(ATypeTag.OBJECT);
     }
 
     private IAsterixListBuilder getUnorderedListBuilder() {
-        return listBuilderPool.allocate(ATypeTag.UNORDEREDLIST);
+        return listBuilderPool.allocate(ATypeTag.MULTISET);
     }
 
     private ArrayBackedValueStorage getTempBuffer() {
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java
index a09ff9b..692ba2e 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java
@@ -163,10 +163,10 @@
 
     private static Map<ATypeTag, IValueParserFactory> initializeValueParserFactoryMap() {
         Map<ATypeTag, IValueParserFactory> m = new EnumMap<>(ATypeTag.class);
-        m.put(ATypeTag.INT32, IntegerParserFactory.INSTANCE);
+        m.put(ATypeTag.INTEGER, IntegerParserFactory.INSTANCE);
         m.put(ATypeTag.FLOAT, FloatParserFactory.INSTANCE);
         m.put(ATypeTag.DOUBLE, DoubleParserFactory.INSTANCE);
-        m.put(ATypeTag.INT64, LongParserFactory.INSTANCE);
+        m.put(ATypeTag.BIGINT, LongParserFactory.INSTANCE);
         m.put(ATypeTag.STRING, UTF8StringParserFactory.INSTANCE);
         return m;
     }
diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/library/ClassAdParser.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/library/ClassAdParser.java
index 93b01f1..e86f86ab 100644
--- a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/library/ClassAdParser.java
+++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/library/ClassAdParser.java
@@ -408,8 +408,8 @@
                 }
                 break;
             case CLASSAD_VALUE:
-                if (checkType(ATypeTag.RECORD, fieldType)) {
-                    IAType objectType = getComplexType(fieldType, ATypeTag.RECORD);
+                if (checkType(ATypeTag.OBJECT, fieldType)) {
+                    IAType objectType = getComplexType(fieldType, ATypeTag.OBJECT);
                     ClassAd classad = val.getClassadVal();
                     parseRecord((ARecordType) objectType, classad, out);
                 } else {
@@ -426,20 +426,20 @@
                 }
                 break;
             case INTEGER_VALUE:
-                if (checkType(ATypeTag.INT64, fieldType)) {
-                    if (fieldType == null || fieldType.getTypeTag() == ATypeTag.INT64) {
+                if (checkType(ATypeTag.BIGINT, fieldType)) {
+                    if (fieldType == null || fieldType.getTypeTag() == ATypeTag.BIGINT) {
                         aInt64.setValue(val.getLongVal());
                         int64Serde.serialize(aInt64, out);
-                    } else if (fieldType.getTypeTag() == ATypeTag.INT32) {
+                    } else if (fieldType.getTypeTag() == ATypeTag.INTEGER) {
                         aInt32.setValue((int) val.getLongVal());
                         int32Serde.serialize(aInt32, out);
                     } else if (fieldType.getTypeTag() == ATypeTag.DOUBLE) {
                         aDouble.setValue(val.getLongVal());
                         doubleSerde.serialize(aDouble, out);
-                    } else if (fieldType.getTypeTag() == ATypeTag.INT16) {
+                    } else if (fieldType.getTypeTag() == ATypeTag.SMALLINT) {
                         aInt16.setValue((short) val.getLongVal());
                         int16Serde.serialize(aInt16, out);
-                    } else if (fieldType.getTypeTag() == ATypeTag.INT8) {
+                    } else if (fieldType.getTypeTag() == ATypeTag.TINYINT) {
                         aInt8.setValue((byte) val.getLongVal());
                         int8Serde.serialize(aInt8, out);
                     } else if (fieldType.getTypeTag() == ATypeTag.FLOAT) {
@@ -454,7 +454,7 @@
                     // Classad uses Linux Timestamps (s instead of ms)
                     aDuration.setValue(0, val.getLongVal() * 1000);
                     durationSerde.serialize(aDuration, out);
-                } else if (checkType(ATypeTag.INT32, fieldType)) {
+                } else if (checkType(ATypeTag.INTEGER, fieldType)) {
                     aInt32.setValue((int) val.getLongVal());
                     int32Serde.serialize(aInt32, out);
                 } else if (checkType(ATypeTag.DOUBLE, fieldType)) {
@@ -467,11 +467,11 @@
             case LIST_VALUE:
             case SLIST_VALUE:
                 IAType objectType;
-                if (checkType(ATypeTag.UNORDEREDLIST, fieldType)) {
-                    objectType = getComplexType(fieldType, ATypeTag.UNORDEREDLIST);
+                if (checkType(ATypeTag.MULTISET, fieldType)) {
+                    objectType = getComplexType(fieldType, ATypeTag.MULTISET);
                     parseUnorderedList((AUnorderedListType) objectType, val, out);
-                } else if (checkType(ATypeTag.ORDEREDLIST, fieldType)) {
-                    objectType = getComplexType(fieldType, ATypeTag.ORDEREDLIST);
+                } else if (checkType(ATypeTag.ARRAY, fieldType)) {
+                    objectType = getComplexType(fieldType, ATypeTag.ARRAY);
                     parseOrderedList((AOrderedListType) objectType, val, out);
                 } else {
                     throw new HyracksDataException(mismatchErrorMessage + fieldType.getTypeTag());
@@ -482,26 +482,26 @@
                     if (fieldType == null || fieldType.getTypeTag() == ATypeTag.DOUBLE) {
                         aDouble.setValue(val.getDoubleVal());
                         doubleSerde.serialize(aDouble, out);
-                    } else if (fieldType.getTypeTag() == ATypeTag.INT32) {
+                    } else if (fieldType.getTypeTag() == ATypeTag.INTEGER) {
                         aInt32.setValue((int) val.getDoubleVal());
                         int32Serde.serialize(aInt32, out);
-                    } else if (fieldType.getTypeTag() == ATypeTag.INT64) {
+                    } else if (fieldType.getTypeTag() == ATypeTag.BIGINT) {
                         aInt64.setValue((long) val.getDoubleVal());
                         int64Serde.serialize(aInt64, out);
-                    } else if (fieldType.getTypeTag() == ATypeTag.INT16) {
+                    } else if (fieldType.getTypeTag() == ATypeTag.SMALLINT) {
                         aInt16.setValue((short) val.getDoubleVal());
                         int16Serde.serialize(aInt16, out);
-                    } else if (fieldType.getTypeTag() == ATypeTag.INT8) {
+                    } else if (fieldType.getTypeTag() == ATypeTag.TINYINT) {
                         aInt8.setValue((byte) val.getDoubleVal());
                         int8Serde.serialize(aInt8, out);
                     } else if (fieldType.getTypeTag() == ATypeTag.FLOAT) {
                         aFloat.setValue((float) val.getDoubleVal());
                         floatSerde.serialize(aFloat, out);
                     }
-                } else if (checkType(ATypeTag.INT32, fieldType)) {
+                } else if (checkType(ATypeTag.INTEGER, fieldType)) {
                     aInt32.setValue((int) val.getDoubleVal());
                     int32Serde.serialize(aInt32, out);
-                } else if (checkType(ATypeTag.INT64, fieldType)) {
+                } else if (checkType(ATypeTag.BIGINT, fieldType)) {
                     aInt64.setValue((long) val.getDoubleVal());
                     int64Serde.serialize(aInt64, out);
                 } else if (checkType(ATypeTag.DATETIME, fieldType)) {
@@ -643,15 +643,15 @@
     }
 
     private IARecordBuilder getRecordBuilder() {
-        return recordBuilderPool.allocate(ATypeTag.RECORD);
+        return recordBuilderPool.allocate(ATypeTag.OBJECT);
     }
 
     private IAsterixListBuilder getOrderedListBuilder() {
-        return listBuilderPool.allocate(ATypeTag.ORDEREDLIST);
+        return listBuilderPool.allocate(ATypeTag.ARRAY);
     }
 
     private IAsterixListBuilder getUnorderedListBuilder() {
-        return listBuilderPool.allocate(ATypeTag.UNORDEREDLIST);
+        return listBuilderPool.allocate(ATypeTag.MULTISET);
     }
 
     private ArrayBackedValueStorage getTempBuffer() {
@@ -669,16 +669,16 @@
             case BOOLEAN_VALUE:
                 return ATypeTag.BOOLEAN;
             case CLASSAD_VALUE:
-                return ATypeTag.RECORD;
+                return ATypeTag.OBJECT;
             case ERROR_VALUE:
             case STRING_VALUE:
             case UNDEFINED_VALUE:
                 return ATypeTag.STRING;
             case INTEGER_VALUE:
-                return ATypeTag.INT64;
+                return ATypeTag.BIGINT;
             case LIST_VALUE:
             case SLIST_VALUE:
-                return ATypeTag.UNORDEREDLIST;
+                return ATypeTag.MULTISET;
             case NULL_VALUE:
                 return ATypeTag.MISSING;
             case REAL_VALUE:
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java
index 8907a72..080e2c4 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java
@@ -206,9 +206,9 @@
         switch (aObj.getType().getTypeTag()) {
             case DOUBLE:
                 return Double.toString(((ADouble) aObj).getDoubleValue());
-            case INT64:
+            case BIGINT:
                 return Long.toString(((AInt64) aObj).getLongValue());
-            case ORDEREDLIST:
+            case ARRAY:
                 return aOrderedListToString((AOrderedList) aObj);
             case STRING:
                 return ((AString) aObj).getStringValue();
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
index 2f30ff1..d929eda 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
@@ -950,7 +950,7 @@
         Datatype parentType = getDatatype(jobId, dataverseName, datatypeName);
 
         List<IAType> subTypes = null;
-        if (parentType.getDatatype().getTypeTag() == ATypeTag.RECORD) {
+        if (parentType.getDatatype().getTypeTag() == ATypeTag.OBJECT) {
             ARecordType recType = (ARecordType) parentType.getDatatype();
             subTypes = Arrays.asList(recType.getFieldTypes());
         } else if (parentType.getDatatype().getTypeTag() == ATypeTag.UNION) {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/LoadableDataSource.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/LoadableDataSource.java
index cdf699d..9b2d4c4 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/LoadableDataSource.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/LoadableDataSource.java
@@ -83,7 +83,7 @@
         for (int i = 0; i < recType.getFieldNames().length; i++) {
             IAType fieldType;
             if (partitioningKeys.get(0).equals(recType.getFieldNames()[j])) {
-                if (recType.getFieldTypes()[j].getTypeTag() == ATypeTag.RECORD) {
+                if (recType.getFieldTypes()[j].getTypeTag() == ATypeTag.OBJECT) {
                     if (j != 0) {
                         throw new AsterixException("Autogenerated key " + StringUtils.join(partitioningKeys, '.')
                                 + " should be a first field of the type " + recType.getTypeName());
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
index d111eb2..508f4d0 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
@@ -1140,7 +1140,7 @@
     public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildExternalDatasetDataScannerRuntime(
             JobSpecification jobSpec, IAType itemType, IAdapterFactory adapterFactory, IDataFormat format)
             throws AlgebricksException {
-        if (itemType.getTypeTag() != ATypeTag.RECORD) {
+        if (itemType.getTypeTag() != ATypeTag.OBJECT) {
             throw new AlgebricksException("Can only scan datasets of records.");
         }
 
@@ -1946,7 +1946,7 @@
             itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataset.getItemTypeDataverseName(), itemTypeName)
                     .getDatatype();
 
-            if (itemType.getTypeTag() != ATypeTag.RECORD) {
+            if (itemType.getTypeTag() != ATypeTag.OBJECT) {
                 throw new AlgebricksException("Only record types can be tokenized.");
             }
 
@@ -2050,7 +2050,7 @@
     }
 
     private void validateRecordType(IAType itemType) throws AlgebricksException {
-        if (itemType.getTypeTag() != ATypeTag.RECORD) {
+        if (itemType.getTypeTag() != ATypeTag.OBJECT) {
             throw new AlgebricksException("Only record types can be indexed.");
         }
     }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
index d202e1a..44b5548 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
@@ -234,13 +234,13 @@
         IARecordBuilder derivedRecordBuilder = new RecordBuilder();
         ArrayBackedValueStorage fieldValue = new ArrayBackedValueStorage();
         switch (derivedDatatype.getTypeTag()) {
-            case ORDEREDLIST:
+            case ARRAY:
                 tag = DerivedTypeTag.ORDEREDLIST;
                 break;
-            case UNORDEREDLIST:
+            case MULTISET:
                 tag = DerivedTypeTag.UNORDEREDLIST;
                 break;
-            case RECORD:
+            case OBJECT:
                 tag = DerivedTypeTag.RECORD;
                 break;
             default:
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/feeds/FeedMetadataUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/feeds/FeedMetadataUtil.java
index 18e4676..94b36ed 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/feeds/FeedMetadataUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/feeds/FeedMetadataUtil.java
@@ -296,7 +296,7 @@
         try {
             ctx = MetadataManager.INSTANCE.beginTransaction();
             Datatype t = MetadataManager.INSTANCE.getDatatype(ctx, dataverseName, datatypeName);
-            if (t == null || t.getDatatype().getTypeTag() != ATypeTag.RECORD) {
+            if (t == null || t.getDatatype().getTypeTag() != ATypeTag.OBJECT) {
                 throw new MetadataException(ErrorCode.FEED_METADATA_UTIL_UNEXPECTED_FEED_DATATYPE, datatypeName);
             }
             outputType = (ARecordType) t.getDatatype();
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtil.java
index dcc1837..9cc9d4a 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtil.java
@@ -133,7 +133,7 @@
 
         final IAType type = getTypeInfo(function.getReturnType(), txnCtx, function);
         switch (type.getTypeTag()) {
-            case INT32:
+            case INTEGER:
                 return AInt32TypeComputer.INSTANCE;
             case FLOAT:
                 return AFloatTypeComputer.INSTANCE;
@@ -143,7 +143,7 @@
                 return ABinaryTypeComputer.INSTANCE;
             case STRING:
                 return AStringTypeComputer.INSTANCE;
-            case ORDEREDLIST:
+            case ARRAY:
                 return new ExternalTypeComputer() {
                     private static final long serialVersionUID = 1L;
 
@@ -156,7 +156,7 @@
                     }
 
                 };
-            case UNORDEREDLIST:
+            case MULTISET:
                 return new ExternalTypeComputer() {
                     private static final long serialVersionUID = 1L;
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/ListBuilderFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/ListBuilderFactory.java
index a5bcbc8..56cc6ca 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/ListBuilderFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/ListBuilderFactory.java
@@ -25,7 +25,7 @@
 
     @Override
     public IAsterixListBuilder create(ATypeTag typeTag) {
-        if (typeTag == ATypeTag.ORDEREDLIST) {
+        if (typeTag == ATypeTag.ARRAY) {
             return new OrderedListBuilder();
         } else {
             return new UnorderedListBuilder();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/OrderedListBuilder.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/OrderedListBuilder.java
index dc98c59..03d2840 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/OrderedListBuilder.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/OrderedListBuilder.java
@@ -26,7 +26,7 @@
 public class OrderedListBuilder extends AbstractListBuilder {
 
     public OrderedListBuilder() {
-        super(ATypeTag.ORDEREDLIST);
+        super(ATypeTag.ARRAY);
     }
 
     public void addItem(IToken token) throws IOException {
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/UnorderedListBuilder.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/UnorderedListBuilder.java
index 93f3f10..bd8f112 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/UnorderedListBuilder.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/UnorderedListBuilder.java
@@ -23,6 +23,6 @@
 public class UnorderedListBuilder extends AbstractListBuilder {
 
     public UnorderedListBuilder() {
-        super(ATypeTag.UNORDEREDLIST);
+        super(ATypeTag.MULTISET);
     }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/TypeResolverUtil.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/TypeResolverUtil.java
index 6d66073..4f60c7f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/TypeResolverUtil.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/TypeResolverUtil.java
@@ -74,7 +74,7 @@
         }
         // Casts are only needed when the original return type is a complex type.
         // (In the runtime, there is already a type tag for scalar types.)
-        if (tag != ATypeTag.RECORD && tag != ATypeTag.UNORDEREDLIST && tag != ATypeTag.ORDEREDLIST) {
+        if (tag != ATypeTag.OBJECT && tag != ATypeTag.MULTISET && tag != ATypeTag.ARRAY) {
             return false;
         }
         return !TypeComputeUtils.getActualType(reqType).equals(TypeComputeUtils.getActualType(inputType));
@@ -121,11 +121,11 @@
     // Generalizes two complex types, e.g., record, ordered list and unordered list.
     private static IAType generalizeComplexTypes(ATypeTag typeTag, IAType leftType, IAType rightType) {
         switch (typeTag) {
-            case RECORD:
+            case OBJECT:
                 return generalizeRecordTypes((ARecordType) leftType, (ARecordType) rightType);
-            case ORDEREDLIST:
+            case ARRAY:
                 return generalizeOrderedListTypes((AOrderedListType) leftType, (AOrderedListType) rightType);
-            case UNORDEREDLIST:
+            case MULTISET:
                 return generalizeUnorderedListTypes((AUnorderedListType) leftType, (AUnorderedListType) rightType);
             default:
                 return BuiltinType.ANY;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
index e7a6b77..e74d5ec 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
@@ -56,16 +56,16 @@
 
             // BOOLEAN
             final IBinaryComparator ascBoolComp = BooleanBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-            // INT8
+            // TINYINT
             final IBinaryComparator ascByteComp = new PointableBinaryComparatorFactory(BytePointable.FACTORY)
                     .createBinaryComparator();
-            // INT16
+            // SMALLINT
             final IBinaryComparator ascShortComp = new PointableBinaryComparatorFactory(ShortPointable.FACTORY)
                     .createBinaryComparator();
-            // INT32
+            // INTEGER
             final IBinaryComparator ascIntComp = new PointableBinaryComparatorFactory(IntegerPointable.FACTORY)
                     .createBinaryComparator();
-            // INT64
+            // BIGINT
             final IBinaryComparator ascLongComp = LongBinaryComparatorFactory.INSTANCE.createBinaryComparator();
             // STRING
             final IBinaryComparator ascStrComp = new PointableBinaryComparatorFactory(UTF8StringPointable.FACTORY)
@@ -150,13 +150,13 @@
                 boolean leftValueChanged = false;
 
                 if (tag1 != tag2) {
-                    // tag1 can be promoted to tag2 (e.g. tag1: INT16, tag2: INT32)
+                    // tag1 can be promoted to tag2 (e.g. tag1: SMALLINT, tag2: INTEGER)
                     if (ATypeHierarchy.canPromote(tag1, tag2)) {
                         sourceTypeTag = tag1;
                         targetTypeTag = tag2;
                         typePromotionApplied = true;
                         leftValueChanged = true;
-                        // or tag2 can be promoted to tag1 (e.g. tag2: INT32, tag1: DOUBLE)
+                        // or tag2 can be promoted to tag1 (e.g. tag2: INTEGER, tag1: DOUBLE)
                     } else if (ATypeHierarchy.canPromote(tag2, tag1)) {
                         sourceTypeTag = tag2;
                         targetTypeTag = tag1;
@@ -206,11 +206,11 @@
                     case BOOLEAN: {
                         return ascBoolComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
                     }
-                    case INT8: {
-                        // No type promotion from another type to the INT8 can happen
+                    case TINYINT: {
+                        // No type promotion from another type to the TINYINT can happen
                         return ascByteComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
                     }
-                    case INT16: {
+                    case SMALLINT: {
                         if (!typePromotionApplied) {
                             // No type promotion case
                             return ascShortComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
@@ -227,7 +227,7 @@
                     case TIME:
                     case DATE:
                     case YEARMONTHDURATION:
-                    case INT32: {
+                    case INTEGER: {
                         if (!typePromotionApplied) {
                             // No type promotion case
                             return ascIntComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
@@ -243,7 +243,7 @@
                     }
                     case DATETIME:
                     case DAYTIMEDURATION:
-                    case INT64: {
+                    case BIGINT: {
                         if (!typePromotionApplied) {
                             // No type promotion case
                             return ascLongComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ListItemBinaryComparatorFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ListItemBinaryComparatorFactory.java
index c4a82ee..09db0ba 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ListItemBinaryComparatorFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ListItemBinaryComparatorFactory.java
@@ -124,12 +124,12 @@
                     case TIME:
                     case DATE:
                     case YEARMONTHDURATION:
-                    case INT32: {
+                    case INTEGER: {
                         return ascIntComp.compare(b1, s1 + skip1, l1 - skip1, b2, s2 + skip2, l2 - skip2);
                     }
                     case DATETIME:
                     case DAYTIMEDURATION:
-                    case INT64: {
+                    case BIGINT: {
                         return ascLongComp.compare(b1, s1 + skip1, l1 - skip1, b2, s2 + skip2, l2 - skip2);
                     }
                     case FLOAT: {
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/hash/AMurmurHash3BinaryHashFunctionFamily.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/hash/AMurmurHash3BinaryHashFunctionFamily.java
index f63c95b..5a43d21 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/hash/AMurmurHash3BinaryHashFunctionFamily.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/hash/AMurmurHash3BinaryHashFunctionFamily.java
@@ -61,10 +61,10 @@
                 sourceTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[offset]);
 
                 switch (sourceTag) {
-                    case INT8:
-                    case INT16:
-                    case INT32:
-                    case INT64:
+                    case TINYINT:
+                    case SMALLINT:
+                    case INTEGER:
+                    case BIGINT:
                         try {
                             IntegerToDoubleTypeConvertComputer.INSTANCE.convertType(bytes, offset + 1, length - 1,
                                     fieldValueBufferOutput);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinterFactory.java
index db3480d..bb33fba 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinterFactory.java
@@ -41,16 +41,16 @@
     public static boolean printFlatValue(ATypeTag typeTag, byte[] b, int s, int l, PrintStream ps)
             throws HyracksDataException {
         switch (typeTag) {
-            case INT8:
+            case TINYINT:
                 AInt8PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT16:
+            case SMALLINT:
                 AInt16PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT32:
+            case INTEGER:
                 AInt32PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT64:
+            case BIGINT:
                 AInt64PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
             case MISSING:
@@ -141,15 +141,15 @@
                 streamTag.second = typeTag;
                 try {
                     switch (typeTag) {
-                        case RECORD:
+                        case OBJECT:
                             rPointable.set(b, s, l);
                             visitor.visit(rPointable, streamTag);
                             break;
-                        case ORDEREDLIST:
+                        case ARRAY:
                             olPointable.set(b, s, l);
                             visitor.visit(olPointable, streamTag);
                             break;
-                        case UNORDEREDLIST:
+                        case MULTISET:
                             ulPointable.set(b, s, l);
                             visitor.visit(ulPointable, streamTag);
                             break;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AOrderedlistPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AOrderedlistPrinterFactory.java
index 36cab4e..c71225f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AOrderedlistPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AOrderedlistPrinterFactory.java
@@ -46,7 +46,7 @@
     public IPrinter createPrinter() {
         final PointableAllocator allocator = new PointableAllocator();
         final IAType inputType = orderedlistType == null
-                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.ORDEREDLIST) : orderedlistType;
+                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.ARRAY) : orderedlistType;
         final IVisitablePointable listAccessor = allocator.allocateListValue(inputType);
         final APrintVisitor printVisitor = new APrintVisitor();
         final Pair<PrintStream, ATypeTag> arg = new Pair<>(null, null);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/ARecordPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/ARecordPrinterFactory.java
index 6d5180e..4e54d3f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/ARecordPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/ARecordPrinterFactory.java
@@ -45,7 +45,7 @@
     @Override
     public IPrinter createPrinter() {
         final PointableAllocator allocator = new PointableAllocator();
-        final IAType inputType = recType == null ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.RECORD)
+        final IAType inputType = recType == null ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.OBJECT)
                 : recType;
         final IVisitablePointable recAccessor = allocator.allocateRecordValue(inputType);
         final APrintVisitor printVisitor = new APrintVisitor();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AUnorderedlistPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AUnorderedlistPrinterFactory.java
index 7d4c18a..d38faf9 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AUnorderedlistPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AUnorderedlistPrinterFactory.java
@@ -46,7 +46,7 @@
     public IPrinter createPrinter() {
         final PointableAllocator allocator = new PointableAllocator();
         final IAType inputType = unorderedlistType == null
-                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.UNORDEREDLIST) : unorderedlistType;
+                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.MULTISET) : unorderedlistType;
         final IVisitablePointable listAccessor = allocator.allocateListValue(inputType);
         final APrintVisitor printVisitor = new APrintVisitor();
         final Pair<PrintStream, ATypeTag> arg = new Pair<>(null, null);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AObjectPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AObjectPrinterFactory.java
index 55c6fd4..4018c58 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AObjectPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AObjectPrinterFactory.java
@@ -40,16 +40,16 @@
     public static boolean printFlatValue(ATypeTag typeTag, byte[] b, int s, int l, PrintStream ps)
             throws HyracksDataException {
         switch (typeTag) {
-            case INT8:
+            case TINYINT:
                 AInt8PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT16:
+            case SMALLINT:
                 AInt16PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT32:
+            case INTEGER:
                 AInt32PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT64:
+            case BIGINT:
                 AInt64PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
             case MISSING:
@@ -133,7 +133,7 @@
                 streamTag.second = typeTag;
                 try {
                     switch (typeTag) {
-                        case RECORD:
+                        case OBJECT:
                             rPointable.set(b, s, l);
                             visitor.visit(rPointable, streamTag);
                             break;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/ARecordPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/ARecordPrinterFactory.java
index baeb526..3c4cf3e 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/ARecordPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/ARecordPrinterFactory.java
@@ -45,7 +45,7 @@
     @Override
     public IPrinter createPrinter() {
         final PointableAllocator allocator = new PointableAllocator();
-        final IAType inputType = recType == null ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.RECORD)
+        final IAType inputType = recType == null ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.OBJECT)
                 : recType;
         final IVisitablePointable recAccessor = allocator.allocateRecordValue(inputType);
         final APrintVisitor printVisitor = new APrintVisitor();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinterFactory.java
index 8ef4a83..fe089f9 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinterFactory.java
@@ -41,16 +41,16 @@
     public static boolean printFlatValue(ATypeTag typeTag, byte[] b, int s, int l, PrintStream ps)
             throws HyracksDataException {
         switch (typeTag) {
-            case INT8:
+            case TINYINT:
                 AInt8PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT16:
+            case SMALLINT:
                 AInt16PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT32:
+            case INTEGER:
                 AInt32PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT64:
+            case BIGINT:
                 AInt64PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
             case MISSING:
@@ -138,15 +138,15 @@
                 streamTag.second = typeTag;
                 try {
                     switch (typeTag) {
-                        case RECORD:
+                        case OBJECT:
                             rPointable.set(b, s, l);
                             visitor.visit(rPointable, streamTag);
                             break;
-                        case ORDEREDLIST:
+                        case ARRAY:
                             olPointable.set(b, s, l);
                             visitor.visit(olPointable, streamTag);
                             break;
-                        case UNORDEREDLIST:
+                        case MULTISET:
                             ulPointable.set(b, s, l);
                             visitor.visit(ulPointable, streamTag);
                             break;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AOrderedlistPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AOrderedlistPrinterFactory.java
index f517009..5638909 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AOrderedlistPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AOrderedlistPrinterFactory.java
@@ -46,7 +46,7 @@
     public IPrinter createPrinter() {
         final PointableAllocator allocator = new PointableAllocator();
         final IAType inputType = orderedlistType == null
-                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.ORDEREDLIST) : orderedlistType;
+                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.ARRAY) : orderedlistType;
         final IVisitablePointable listAccessor = allocator.allocateListValue(inputType);
         final APrintVisitor printVisitor = new APrintVisitor();
         final Pair<PrintStream, ATypeTag> arg = new Pair<>(null, null);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/ARecordPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/ARecordPrinterFactory.java
index af2dff3..bfad4ab 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/ARecordPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/ARecordPrinterFactory.java
@@ -45,7 +45,7 @@
     @Override
     public IPrinter createPrinter() {
         final PointableAllocator allocator = new PointableAllocator();
-        final IAType inputType = recType == null ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.RECORD)
+        final IAType inputType = recType == null ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.OBJECT)
                 : recType;
         final IVisitablePointable recAccessor = allocator.allocateRecordValue(inputType);
         final APrintVisitor printVisitor = new APrintVisitor();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AUnorderedlistPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AUnorderedlistPrinterFactory.java
index a5c9d00..ec15236 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AUnorderedlistPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AUnorderedlistPrinterFactory.java
@@ -45,7 +45,7 @@
     public IPrinter createPrinter() {
         PointableAllocator allocator = new PointableAllocator();
         final IAType inputType = unorderedlistType == null
-                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.UNORDEREDLIST) : unorderedlistType;
+                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.MULTISET) : unorderedlistType;
         final IVisitablePointable listAccessor = allocator.allocateListValue(inputType);
         final APrintVisitor printVisitor = new APrintVisitor();
         final Pair<PrintStream, ATypeTag> arg = new Pair<>(null, null);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AObjectPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AObjectPrinterFactory.java
index 20a89bd..653e483 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AObjectPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AObjectPrinterFactory.java
@@ -41,16 +41,16 @@
     public static boolean printFlatValue(ATypeTag typeTag, byte[] b, int s, int l, PrintStream ps)
             throws HyracksDataException {
         switch (typeTag) {
-            case INT8:
+            case TINYINT:
                 AInt8PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT16:
+            case SMALLINT:
                 AInt16PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT32:
+            case INTEGER:
                 AInt32PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
-            case INT64:
+            case BIGINT:
                 AInt64PrinterFactory.PRINTER.print(b, s, l, ps);
                 return true;
             case MISSING:
@@ -138,15 +138,15 @@
                 streamTag.second = typeTag;
                 try {
                     switch (typeTag) {
-                        case RECORD:
+                        case OBJECT:
                             rPointable.set(b, s, l);
                             visitor.visit(rPointable, streamTag);
                             break;
-                        case ORDEREDLIST:
+                        case ARRAY:
                             olPointable.set(b, s, l);
                             visitor.visit(olPointable, streamTag);
                             break;
-                        case UNORDEREDLIST:
+                        case MULTISET:
                             ulPointable.set(b, s, l);
                             visitor.visit(ulPointable, streamTag);
                             break;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AOrderedlistPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AOrderedlistPrinterFactory.java
index 54092f8..5f51110 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AOrderedlistPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AOrderedlistPrinterFactory.java
@@ -46,7 +46,7 @@
     public IPrinter createPrinter() {
         PointableAllocator allocator = new PointableAllocator();
         final IAType inputType = orderedlistType == null
-                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.ORDEREDLIST) : orderedlistType;
+                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.ARRAY) : orderedlistType;
         final IVisitablePointable listAccessor = allocator.allocateListValue(inputType);
         final APrintVisitor printVisitor = new APrintVisitor();
         final Pair<PrintStream, ATypeTag> arg = new Pair<>(null, null);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/ARecordPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/ARecordPrinterFactory.java
index e2ffa2c..19a03b2 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/ARecordPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/ARecordPrinterFactory.java
@@ -45,7 +45,7 @@
     @Override
     public IPrinter createPrinter() {
         final PointableAllocator allocator = new PointableAllocator();
-        final IAType inputType = recType == null ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.RECORD)
+        final IAType inputType = recType == null ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.OBJECT)
                 : recType;
         final IVisitablePointable recAccessor = allocator.allocateRecordValue(inputType);
         final APrintVisitor printVisitor = new APrintVisitor();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AUnorderedlistPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AUnorderedlistPrinterFactory.java
index 8251f45..1121075 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AUnorderedlistPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AUnorderedlistPrinterFactory.java
@@ -45,7 +45,7 @@
     public IPrinter createPrinter() {
         PointableAllocator allocator = new PointableAllocator();
         final IAType inputType = unorderedlistType == null
-                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.UNORDEREDLIST) : unorderedlistType;
+                ? DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.MULTISET) : unorderedlistType;
         final IVisitablePointable listAccessor = allocator.allocateListValue(inputType);
         final APrintVisitor printVisitor = new APrintVisitor();
         final Pair<PrintStream, ATypeTag> arg = new Pair<>(null, null);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java
index 3994d6d..eb02a99 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java
@@ -72,13 +72,13 @@
                 return ANullSerializerDeserializer.INSTANCE.deserialize(in);
             case BOOLEAN:
                 return ABooleanSerializerDeserializer.INSTANCE.deserialize(in);
-            case INT8:
+            case TINYINT:
                 return AInt8SerializerDeserializer.INSTANCE.deserialize(in);
-            case INT16:
+            case SMALLINT:
                 return AInt16SerializerDeserializer.INSTANCE.deserialize(in);
-            case INT32:
+            case INTEGER:
                 return AInt32SerializerDeserializer.INSTANCE.deserialize(in);
-            case INT64:
+            case BIGINT:
                 return AInt64SerializerDeserializer.INSTANCE.deserialize(in);
             case FLOAT:
                 return AFloatSerializerDeserializer.INSTANCE.deserialize(in);
@@ -114,11 +114,11 @@
                 return APolygonSerializerDeserializer.INSTANCE.deserialize(in);
             case CIRCLE:
                 return ACircleSerializerDeserializer.INSTANCE.deserialize(in);
-            case RECORD:
+            case OBJECT:
                 return ARecordSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in);
-            case ORDEREDLIST:
+            case ARRAY:
                 return AOrderedListSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in);
-            case UNORDEREDLIST:
+            case MULTISET:
                 return AUnorderedListSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in);
             default:
                 throw new NotImplementedException("No serializer/deserializer implemented for type " + typeTag + " .");
@@ -144,16 +144,16 @@
             case BOOLEAN:
                 ABooleanSerializerDeserializer.INSTANCE.serialize((ABoolean) instance, out);
                 break;
-            case INT8:
+            case TINYINT:
                 AInt8SerializerDeserializer.INSTANCE.serialize((AInt8) instance, out);
                 break;
-            case INT16:
+            case SMALLINT:
                 AInt16SerializerDeserializer.INSTANCE.serialize((AInt16) instance, out);
                 break;
-            case INT32:
+            case INTEGER:
                 AInt32SerializerDeserializer.INSTANCE.serialize((AInt32) instance, out);
                 break;
-            case INT64:
+            case BIGINT:
                 AInt64SerializerDeserializer.INSTANCE.serialize((AInt64) instance, out);
                 break;
             case FLOAT:
@@ -201,13 +201,13 @@
             case CIRCLE:
                 ACircleSerializerDeserializer.INSTANCE.serialize((ACircle) instance, out);
                 break;
-            case RECORD:
+            case OBJECT:
                 ARecordSerializerDeserializer.SCHEMALESS_INSTANCE.serialize((ARecord) instance, out);
                 break;
-            case ORDEREDLIST:
+            case ARRAY:
                 AOrderedListSerializerDeserializer.SCHEMALESS_INSTANCE.serialize((AOrderedList) instance, out);
                 break;
-            case UNORDEREDLIST:
+            case MULTISET:
                 AUnorderedListSerializerDeserializer.SCHEMALESS_INSTANCE.serialize((AUnorderedList) instance, out);
                 break;
             case TYPE:
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 437958c..da95091 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
@@ -119,7 +119,7 @@
     }
 
     public static int getNumberOfItems(byte[] serOrderedList, int offset) {
-        if (serOrderedList[offset] == ATypeTag.ORDEREDLIST.serialize())
+        if (serOrderedList[offset] == ATypeTag.ARRAY.serialize())
             // 6 = tag (1) + itemTag (1) + list size (4)
             return AInt32SerializerDeserializer.getInt(serOrderedList, offset + 6);
         else
@@ -127,7 +127,7 @@
     }
 
     public static int getItemOffset(byte[] serOrderedList, int offset, int itemIndex) throws AsterixException {
-        if (serOrderedList[offset] == ATypeTag.ORDEREDLIST.serialize()) {
+        if (serOrderedList[offset] == ATypeTag.ARRAY.serialize()) {
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serOrderedList[offset + 1]);
             if (NonTaggedFormatUtil.isFixedSizedCollection(typeTag)) {
                 int length = NonTaggedFormatUtil.getFieldValueLength(serOrderedList, offset + 1, typeTag, true);
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 02b662e..dd95586 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
@@ -121,7 +121,7 @@
     }
 
     public static int getNumberOfItems(byte[] serOrderedList, int offset) {
-        if (serOrderedList[offset] == ATypeTag.UNORDEREDLIST.serialize())
+        if (serOrderedList[offset] == ATypeTag.MULTISET.serialize())
             // 6 = tag (1) + itemTag (1) + list size (4)
             return AInt32SerializerDeserializer.getInt(serOrderedList, offset + 6);
         else
@@ -129,7 +129,7 @@
     }
 
     public static int getItemOffset(byte[] serOrderedList, int offset, int itemIndex) throws AsterixException {
-        if (serOrderedList[offset] == ATypeTag.UNORDEREDLIST.serialize()) {
+        if (serOrderedList[offset] == ATypeTag.MULTISET.serialize()) {
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serOrderedList[offset + 1]);
             if (NonTaggedFormatUtil.isFixedSizedCollection(typeTag)) {
                 int length = NonTaggedFormatUtil.getFieldValueLength(serOrderedList, offset + 1, typeTag, true);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/PrimitiveValueProviderFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/PrimitiveValueProviderFactory.java
index 62f3312..1a7810e 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/PrimitiveValueProviderFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/valueproviders/PrimitiveValueProviderFactory.java
@@ -50,7 +50,7 @@
             public double getValue(byte[] bytes, int offset) {
                 ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[offset]);
                 switch (tag) {
-                    case INT32:
+                    case INTEGER:
                         return intProvider.getValue(bytes, offset + 1);
                     case FLOAT:
                         return floatProvider.getValue(bytes, offset + 1);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/ADMPrinterFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/ADMPrinterFactoryProvider.java
index 6b723e3..14c773d 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/ADMPrinterFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/ADMPrinterFactoryProvider.java
@@ -70,13 +70,13 @@
 
         if (aqlType != null) {
             switch (aqlType.getTypeTag()) {
-                case INT8:
+                case TINYINT:
                     return AInt8PrinterFactory.INSTANCE;
-                case INT16:
+                case SMALLINT:
                     return AInt16PrinterFactory.INSTANCE;
-                case INT32:
+                case INTEGER:
                     return AInt32PrinterFactory.INSTANCE;
-                case INT64:
+                case BIGINT:
                     return AInt64PrinterFactory.INSTANCE;
                 case MISSING:
                 case NULL:
@@ -117,11 +117,11 @@
                     return AStringPrinterFactory.INSTANCE;
                 case BINARY:
                     return ABinaryHexPrinterFactory.INSTANCE;
-                case RECORD:
+                case OBJECT:
                     return new ARecordPrinterFactory((ARecordType) aqlType);
-                case ORDEREDLIST:
+                case ARRAY:
                     return new AOrderedlistPrinterFactory((AOrderedListType) aqlType);
-                case UNORDEREDLIST:
+                case MULTISET:
                     return new AUnorderedlistPrinterFactory((AUnorderedListType) aqlType);
                 case UNION:
                     if (((AUnionType) aqlType).isUnknownableType()) {
@@ -136,7 +136,7 @@
                 case ANY:
                 case BITARRAY:
                 case ENUM:
-                case SPARSERECORD:
+                case SPARSOBJECT:
                 case SYSTEM_NULL:
                 case TYPE:
                 case UINT16:
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java
index 677c004..362db4dd 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java
@@ -130,18 +130,18 @@
                 };
             case BOOLEAN:
                 return addOffset(BooleanBinaryComparatorFactory.INSTANCE, ascending);
-            case INT8:
+            case TINYINT:
                 return addOffset(BYTE_POINTABLE_INSTANCE, ascending);
-            case INT16:
+            case SMALLINT:
                 return addOffset(SHORT_POINTABLE_INSTANCE, ascending);
             case DATE:
             case TIME:
             case YEARMONTHDURATION:
-            case INT32:
+            case INTEGER:
                 return addOffset(INTEGER_POINTABLE_INSTANCE, ascending);
             case DATETIME:
             case DAYTIMEDURATION:
-            case INT64:
+            case BIGINT:
                 return addOffset(LONG_POINTABLE_INSTANCE, ascending);
             case FLOAT:
                 return addOffset(FLOAT_POINTABLE_INSTANCE, ascending);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryHashFunctionFamilyProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryHashFunctionFamilyProvider.java
index 35d9316..761d1a3 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryHashFunctionFamilyProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryHashFunctionFamilyProvider.java
@@ -27,7 +27,8 @@
 import org.apache.hyracks.api.dataflow.value.IBinaryHashFunctionFamily;
 
 /**
- * We use a binary hash function that promotes numeric types (INT8,INT16,INT32,INT64,FLOAT) to DOUBLE if requested.
+ * We use a binary hash function that promotes numeric types (tinyint,smallint,integer,bigint,float) to double
+ * if requested.
  * Non-numeric types will be hashed without type promotion.
  */
 public class BinaryHashFunctionFamilyProvider implements IBinaryHashFunctionFamilyProvider, Serializable {
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryTokenizerFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryTokenizerFactoryProvider.java
index 084a811..b5fd171 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryTokenizerFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryTokenizerFactoryProvider.java
@@ -40,7 +40,7 @@
 
     private static final IBinaryTokenizerFactory aqlStringNoTypeTagTokenizer =
             new DelimitedUTF8StringBinaryTokenizerFactory(true, false,
-                    new UTF8WordTokenFactory(ATypeTag.STRING.serialize(), ATypeTag.INT32.serialize()));
+                    new UTF8WordTokenFactory(ATypeTag.STRING.serialize(), ATypeTag.INTEGER.serialize()));
 
     private static final IBinaryTokenizerFactory aqlHashingStringTokenizer =
             new DelimitedUTF8StringBinaryTokenizerFactory(true, true, new HashedUTF8WordTokenFactory(
@@ -64,9 +64,9 @@
                 } else {
                     return aqlStringNoTypeTagTokenizer;
                 }
-            case ORDEREDLIST:
+            case ARRAY:
                 return orderedListTokenizer;
-            case UNORDEREDLIST:
+            case MULTISET:
                 return unorderedListTokenizer;
             default:
                 return null;
@@ -85,9 +85,9 @@
                             new UTF8NGramTokenFactory(ATypeTag.SERIALIZED_STRING_TYPE_TAG,
                                     ATypeTag.SERIALIZED_INT32_TYPE_TAG));
                 }
-            case ORDEREDLIST:
+            case ARRAY:
                 return orderedListTokenizer;
-            case UNORDEREDLIST:
+            case MULTISET:
                 return unorderedListTokenizer;
             default:
                 return null;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CSVPrinterFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CSVPrinterFactoryProvider.java
index e510442..e8a2ae7 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CSVPrinterFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CSVPrinterFactoryProvider.java
@@ -66,13 +66,13 @@
 
         if (aqlType != null) {
             switch (aqlType.getTypeTag()) {
-                case INT8:
+                case TINYINT:
                     return AInt8PrinterFactory.INSTANCE;
-                case INT16:
+                case SMALLINT:
                     return AInt16PrinterFactory.INSTANCE;
-                case INT32:
+                case INTEGER:
                     return AInt32PrinterFactory.INSTANCE;
-                case INT64:
+                case BIGINT:
                     return AInt64PrinterFactory.INSTANCE;
                 case MISSING:
                 case NULL:
@@ -111,11 +111,11 @@
                     return ARectanglePrinterFactory.INSTANCE;
                 case STRING:
                     return AStringPrinterFactory.INSTANCE;
-                case RECORD:
+                case OBJECT:
                     return new ARecordPrinterFactory((ARecordType) aqlType);
-                case ORDEREDLIST:
+                case ARRAY:
                     throw new NotImplementedException("'Orderedlist' type unsupported for CSV output");
-                case UNORDEREDLIST:
+                case MULTISET:
                     throw new NotImplementedException("'Unorderedlist' type unsupported for CSV output");
                 case UNION:
                     if (((AUnionType) aqlType).isUnknownableType()) {
@@ -131,7 +131,7 @@
                 case BINARY:
                 case BITARRAY:
                 case ENUM:
-                case SPARSERECORD:
+                case SPARSOBJECT:
                 case SYSTEM_NULL:
                 case TYPE:
                 case UINT16:
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CleanJSONPrinterFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CleanJSONPrinterFactoryProvider.java
index 03fa666..949f11f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CleanJSONPrinterFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CleanJSONPrinterFactoryProvider.java
@@ -70,13 +70,13 @@
 
         if (aqlType != null) {
             switch (aqlType.getTypeTag()) {
-                case INT8:
+                case TINYINT:
                     return AInt8PrinterFactory.INSTANCE;
-                case INT16:
+                case SMALLINT:
                     return AInt16PrinterFactory.INSTANCE;
-                case INT32:
+                case INTEGER:
                     return AInt32PrinterFactory.INSTANCE;
-                case INT64:
+                case BIGINT:
                     return AInt64PrinterFactory.INSTANCE;
                 case MISSING:
                 case NULL:
@@ -117,11 +117,11 @@
                     return AStringPrinterFactory.INSTANCE;
                 case BINARY:
                     return ABinaryHexPrinterFactory.INSTANCE;
-                case RECORD:
+                case OBJECT:
                     return new ARecordPrinterFactory((ARecordType) aqlType);
-                case ORDEREDLIST:
+                case ARRAY:
                     return new AOrderedlistPrinterFactory((AOrderedListType) aqlType);
-                case UNORDEREDLIST:
+                case MULTISET:
                     return new AUnorderedlistPrinterFactory((AUnorderedListType) aqlType);
                 case UNION:
                     if (((AUnionType) aqlType).isUnknownableType()) {
@@ -136,7 +136,7 @@
                 case ANY:
                 case BITARRAY:
                 case ENUM:
-                case SPARSERECORD:
+                case SPARSOBJECT:
                 case SYSTEM_NULL:
                 case TYPE:
                 case UINT16:
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/LinearizeComparatorFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/LinearizeComparatorFactoryProvider.java
index 33b32d8..3e54e99 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/LinearizeComparatorFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/LinearizeComparatorFactoryProvider.java
@@ -48,8 +48,8 @@
             return addOffset(new HilbertDoubleComparatorFactory(2), ascending);
         } else if (typeTag == ATypeTag.DOUBLE) {
             return addOffset(new ZCurveDoubleComparatorFactory(dimension), ascending);
-        } else if (typeTag == ATypeTag.INT8 || typeTag == ATypeTag.INT16 || typeTag == ATypeTag.INT32
-                || typeTag == ATypeTag.INT64) {
+        } else if (typeTag == ATypeTag.TINYINT || typeTag == ATypeTag.SMALLINT || typeTag == ATypeTag.INTEGER
+                || typeTag == ATypeTag.BIGINT) {
             return addOffset(new ZCurveIntComparatorFactory(dimension), ascending);
         } else {
             throw new AlgebricksException("Cannot propose linearizer for key with type " + typeTag + " and dimension "
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/LosslessJSONPrinterFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/LosslessJSONPrinterFactoryProvider.java
index c508fe6..3edaa75 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/LosslessJSONPrinterFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/LosslessJSONPrinterFactoryProvider.java
@@ -70,13 +70,13 @@
 
         if (aqlType != null) {
             switch (aqlType.getTypeTag()) {
-                case INT8:
+                case TINYINT:
                     return AInt8PrinterFactory.INSTANCE;
-                case INT16:
+                case SMALLINT:
                     return AInt16PrinterFactory.INSTANCE;
-                case INT32:
+                case INTEGER:
                     return AInt32PrinterFactory.INSTANCE;
-                case INT64:
+                case BIGINT:
                     return AInt64PrinterFactory.INSTANCE;
                 case MISSING:
                 case NULL:
@@ -117,11 +117,11 @@
                     return AStringPrinterFactory.INSTANCE;
                 case BINARY:
                     return ABinaryHexPrinterFactory.INSTANCE;
-                case RECORD:
+                case OBJECT:
                     return new ARecordPrinterFactory((ARecordType) aqlType);
-                case ORDEREDLIST:
+                case ARRAY:
                     return new AOrderedlistPrinterFactory((AOrderedListType) aqlType);
-                case UNORDEREDLIST:
+                case MULTISET:
                     return new AUnorderedlistPrinterFactory((AUnorderedListType) aqlType);
                 case UNION:
                     if (((AUnionType) aqlType).isUnknownableType()) {
@@ -136,7 +136,7 @@
                 case ANY:
                 case BITARRAY:
                 case ENUM:
-                case SPARSERECORD:
+                case SPARSOBJECT:
                 case SYSTEM_NULL:
                 case TYPE:
                 case UINT16:
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/NormalizedKeyComputerFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/NormalizedKeyComputerFactoryProvider.java
index 3d04265..d17fc5a 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/NormalizedKeyComputerFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/NormalizedKeyComputerFactoryProvider.java
@@ -45,11 +45,11 @@
                 case DATE:
                 case TIME:
                 case YEARMONTHDURATION:
-                case INT32:
+                case INTEGER:
                     return new AWrappedAscNormalizedKeyComputerFactory(new IntegerNormalizedKeyComputerFactory());
                 case DATETIME:
                 case DAYTIMEDURATION:
-                case INT64:
+                case BIGINT:
                     return new AWrappedAscNormalizedKeyComputerFactory(new Integer64NormalizedKeyComputerFactory());
                 case FLOAT:
                     return new AWrappedAscNormalizedKeyComputerFactory(new FloatNormalizedKeyComputerFactory());
@@ -67,11 +67,11 @@
                 case DATE:
                 case TIME:
                 case YEARMONTHDURATION:
-                case INT32:
+                case INTEGER:
                     return new AWrappedDescNormalizedKeyComputerFactory(new IntegerNormalizedKeyComputerFactory());
                 case DATETIME:
                 case DAYTIMEDURATION:
-                case INT64:
+                case BIGINT:
                     return new AWrappedDescNormalizedKeyComputerFactory(new Integer64NormalizedKeyComputerFactory());
                 case FLOAT:
                     return new AWrappedDescNormalizedKeyComputerFactory(new FloatNormalizedKeyComputerFactory());
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 95937e2..6f281bd 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
@@ -116,13 +116,13 @@
                 return AFloatSerializerDeserializer.INSTANCE;
             case BOOLEAN:
                 return ABooleanSerializerDeserializer.INSTANCE;
-            case INT8:
+            case TINYINT:
                 return AInt8SerializerDeserializer.INSTANCE;
-            case INT16:
+            case SMALLINT:
                 return AInt16SerializerDeserializer.INSTANCE;
-            case INT32:
+            case INTEGER:
                 return AInt32SerializerDeserializer.INSTANCE;
-            case INT64:
+            case BIGINT:
                 return AInt64SerializerDeserializer.INSTANCE;
             case LINE:
                 return ALineSerializerDeserializer.INSTANCE;
@@ -144,7 +144,7 @@
                 return ADayTimeDurationSerializerDeserializer.INSTANCE;
             case INTERVAL:
                 return AIntervalSerializerDeserializer.INSTANCE;
-            case ORDEREDLIST:
+            case ARRAY:
                 return new AOrderedListSerializerDeserializer((AOrderedListType) aqlType);
             case POINT:
                 return APointSerializerDeserializer.INSTANCE;
@@ -154,9 +154,9 @@
                 return ARectangleSerializerDeserializer.INSTANCE;
             case POLYGON:
                 return APolygonSerializerDeserializer.INSTANCE;
-            case RECORD:
+            case OBJECT:
                 return new ARecordSerializerDeserializer((ARecordType) aqlType);
-            case UNORDEREDLIST:
+            case MULTISET:
                 return new AUnorderedListSerializerDeserializer((AUnorderedListType) aqlType);
             case UUID:
                 return AUUIDSerializerDeserializer.INSTANCE;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/TypeTraitProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/TypeTraitProvider.java
index 81bd060..9ec5a08 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/TypeTraitProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/TypeTraitProvider.java
@@ -48,16 +48,16 @@
         }
         switch (aqlType.getTypeTag()) {
             case BOOLEAN:
-            case INT8:
+            case TINYINT:
                 return ONEBYTETYPETRAIT;
-            case INT16:
+            case SMALLINT:
                 return TWOBYTETYPETRAIT;
-            case INT32:
+            case INTEGER:
             case FLOAT:
             case DATE:
             case TIME:
                 return FOURBYTETYPETRAIT;
-            case INT64:
+            case BIGINT:
             case DOUBLE:
             case DATETIME:
             case DURATION:
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/PointableAllocator.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/PointableAllocator.java
index c88b95c..3322924 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/PointableAllocator.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/PointableAllocator.java
@@ -81,9 +81,9 @@
     public IVisitablePointable allocateFieldValue(IAType type) {
         if (type == null)
             return flatValueAllocator.allocate(null);
-        else if (type.getTypeTag().equals(ATypeTag.RECORD))
+        else if (type.getTypeTag().equals(ATypeTag.OBJECT))
             return recordValueAllocator.allocate(type);
-        else if (type.getTypeTag().equals(ATypeTag.UNORDEREDLIST) || type.getTypeTag().equals(ATypeTag.ORDEREDLIST))
+        else if (type.getTypeTag().equals(ATypeTag.MULTISET) || type.getTypeTag().equals(ATypeTag.ARRAY))
             return listValueAllocator.allocate(type);
         else
             return flatValueAllocator.allocate(null);
@@ -98,9 +98,9 @@
     public IVisitablePointable allocateFieldValue(ATypeTag typeTag, byte[] b, int offset) throws AsterixException {
         if (typeTag == null)
             return flatValueAllocator.allocate(null);
-        else if (typeTag.equals(ATypeTag.RECORD))
+        else if (typeTag.equals(ATypeTag.OBJECT))
             return recordValueAllocator.allocate(DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE);
-        else if (typeTag.equals(ATypeTag.UNORDEREDLIST)) {
+        else if (typeTag.equals(ATypeTag.MULTISET)) {
             ATypeTag listItemType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b[offset]);
             if (listItemType == ATypeTag.ANY)
                 return listValueAllocator.allocate(DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE);
@@ -111,7 +111,7 @@
                     return listValueAllocator.allocate(
                             unorederedListTypeAllocator.allocate(TypeTagUtil.getBuiltinTypeByTag(listItemType)));
             }
-        } else if (typeTag.equals(ATypeTag.ORDEREDLIST)) {
+        } else if (typeTag.equals(ATypeTag.ARRAY)) {
             ATypeTag listItemType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b[offset]);
             if (listItemType == ATypeTag.ANY)
                 return listValueAllocator.allocate(DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/base/DefaultOpenFieldType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/base/DefaultOpenFieldType.java
index cf1dfe4..3b8f233 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/base/DefaultOpenFieldType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/base/DefaultOpenFieldType.java
@@ -50,11 +50,11 @@
             "nested-unordered-list");
 
     public static IAType getDefaultOpenFieldType(ATypeTag tag) {
-        if (tag.equals(ATypeTag.RECORD))
+        if (tag.equals(ATypeTag.OBJECT))
             return NESTED_OPEN_RECORD_TYPE;
-        if (tag.equals(ATypeTag.ORDEREDLIST))
+        if (tag.equals(ATypeTag.ARRAY))
             return NESTED_OPEN_AORDERED_LIST_TYPE;
-        if (tag.equals(ATypeTag.UNORDEREDLIST))
+        if (tag.equals(ATypeTag.MULTISET))
             return NESTED_OPEN_AUNORDERED_LIST_TYPE;
         else
             return null;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/cast/AListCaster.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/cast/AListCaster.java
index 94cfe75..52d5b9f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/cast/AListCaster.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/cast/AListCaster.java
@@ -58,11 +58,11 @@
 
     public void castList(AListVisitablePointable listAccessor, IVisitablePointable resultAccessor,
             AbstractCollectionType reqType, ACastVisitor visitor) throws IOException, AsterixException {
-        if (reqType.getTypeTag().equals(ATypeTag.UNORDEREDLIST)) {
+        if (reqType.getTypeTag().equals(ATypeTag.MULTISET)) {
             unOrderedListBuilder.reset(reqType);
             reqItemType = reqType.getItemType();
         }
-        if (reqType.getTypeTag().equals(ATypeTag.ORDEREDLIST)) {
+        if (reqType.getTypeTag().equals(ATypeTag.ARRAY)) {
             orderedListBuilder.reset(reqType);
             reqItemType = reqType.getItemType();
         }
@@ -83,17 +83,17 @@
                 itemVisitorArg.second = reqItemType;
             }
             item.accept(visitor, itemVisitorArg);
-            if (reqType.getTypeTag().equals(ATypeTag.ORDEREDLIST)) {
+            if (reqType.getTypeTag().equals(ATypeTag.ARRAY)) {
                 orderedListBuilder.addItem(itemVisitorArg.first);
             }
-            if (reqType.getTypeTag().equals(ATypeTag.UNORDEREDLIST)) {
+            if (reqType.getTypeTag().equals(ATypeTag.MULTISET)) {
                 unOrderedListBuilder.addItem(itemVisitorArg.first);
             }
         }
-        if (reqType.getTypeTag().equals(ATypeTag.ORDEREDLIST)) {
+        if (reqType.getTypeTag().equals(ATypeTag.ARRAY)) {
             orderedListBuilder.write(dataDos, true);
         }
-        if (reqType.getTypeTag().equals(ATypeTag.UNORDEREDLIST)) {
+        if (reqType.getTypeTag().equals(ATypeTag.MULTISET)) {
             unOrderedListBuilder.write(dataDos, true);
         }
         int end = dataBos.size();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java
index 1792f68..f8f6925 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java
@@ -36,9 +36,9 @@
     @Override
     protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag actualTypeTag = type.getTypeTag();
-        if (type.getTypeTag() != ATypeTag.UNORDEREDLIST && type.getTypeTag() != ATypeTag.ORDEREDLIST) {
-            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.UNORDEREDLIST,
-                    ATypeTag.ORDEREDLIST);
+        if (type.getTypeTag() != ATypeTag.MULTISET && type.getTypeTag() != ATypeTag.ARRAY) {
+            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.MULTISET,
+                    ATypeTag.ARRAY);
         }
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionToSequenceTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionToSequenceTypeComputer.java
index 60d783d..535b3df 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionToSequenceTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionToSequenceTypeComputer.java
@@ -39,7 +39,7 @@
     protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException {
         IAType argType = strippedInputTypes[0];
         ATypeTag argTypeTag = argType.getTypeTag();
-        if (argTypeTag == ATypeTag.ORDEREDLIST || argTypeTag == ATypeTag.UNORDEREDLIST) {
+        if (argTypeTag == ATypeTag.ARRAY || argTypeTag == ATypeTag.MULTISET) {
             /** if the input is a singleton list, return it's item type if any */
             AbstractCollectionType collectionType = (AbstractCollectionType) argType;
             return collectionType.getItemType();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java
index 0e04480..73c019c 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java
@@ -39,18 +39,18 @@
     @Override
     protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag actualTypeTag = type.getTypeTag();
-        if (argIndex == 0 && actualTypeTag != ATypeTag.RECORD) {
-            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.RECORD);
+        if (argIndex == 0 && actualTypeTag != ATypeTag.OBJECT) {
+            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.OBJECT);
         }
-        if (argIndex == 1 && actualTypeTag != ATypeTag.INT32) {
-            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.INT32);
+        if (argIndex == 1 && actualTypeTag != ATypeTag.INTEGER) {
+            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.INTEGER);
         }
     }
 
     @Override
     protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException {
         IAType firstArgType = strippedInputTypes[0];
-        if (firstArgType.getTypeTag() != ATypeTag.RECORD) {
+        if (firstArgType.getTypeTag() != ATypeTag.OBJECT) {
             return BuiltinType.ANY;
         }
         AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java
index ffa3029..e9af1ab 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java
@@ -39,8 +39,8 @@
     @Override
     protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag actualTypeTag = type.getTypeTag();
-        if (argIndex == 0 && actualTypeTag != ATypeTag.RECORD) {
-            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.RECORD);
+        if (argIndex == 0 && actualTypeTag != ATypeTag.OBJECT) {
+            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.OBJECT);
         }
         if (argIndex == 1 && actualTypeTag != ATypeTag.STRING) {
             throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING);
@@ -50,7 +50,7 @@
     @Override
     protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException {
         IAType firstArgType = strippedInputTypes[0];
-        if (firstArgType.getTypeTag() != ATypeTag.RECORD) {
+        if (firstArgType.getTypeTag() != ATypeTag.OBJECT) {
             return BuiltinType.ANY;
         }
         AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessNestedResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessNestedResultType.java
index 03a6dc7..21593d9e 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessNestedResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessNestedResultType.java
@@ -48,19 +48,19 @@
     @Override
     protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag actualTypeTag = type.getTypeTag();
-        if (argIndex == 0 && actualTypeTag != ATypeTag.RECORD) {
-            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.RECORD);
+        if (argIndex == 0 && actualTypeTag != ATypeTag.OBJECT) {
+            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.OBJECT);
         }
         if (argIndex == 1) {
             switch (actualTypeTag) {
                 case STRING:
                     break;
-                case ORDEREDLIST:
+                case ARRAY:
                     checkOrderedList(funcName, type);
                     break;
                 default:
                     throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING,
-                            ATypeTag.ORDEREDLIST);
+                            ATypeTag.ARRAY);
             }
         }
     }
@@ -76,7 +76,7 @@
     @Override
     protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException {
         IAType firstArgType = strippedInputTypes[0];
-        if (firstArgType.getTypeTag() != ATypeTag.RECORD) {
+        if (firstArgType.getTypeTag() != ATypeTag.OBJECT) {
             return BuiltinType.ANY;
         }
         AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
@@ -87,7 +87,7 @@
         ConstantExpression ce = (ConstantExpression) arg1;
         IAObject v = ((AsterixConstantValue) ce.getValue()).getObject();
         List<String> fieldPath = new ArrayList<>();
-        if (v.getType().getTypeTag() == ATypeTag.ORDEREDLIST) {
+        if (v.getType().getTypeTag() == ATypeTag.ARRAY) {
             for (int i = 0; i < ((AOrderedList) v).size(); i++) {
                 fieldPath.add(((AString) ((AOrderedList) v).getItem(i)).getStringValue());
             }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java
index f2398e1..0748745 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java
@@ -41,17 +41,17 @@
             throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING);
         }
         // Expression2 should be a string, or an (un)ordered list.
-        if (argIndex == 1 && (actualTypeTag != ATypeTag.STRING && actualTypeTag != ATypeTag.UNORDEREDLIST
-                && actualTypeTag != ATypeTag.ORDEREDLIST && actualTypeTag != ATypeTag.ANY)) {
-            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING, ATypeTag.UNORDEREDLIST,
-                    ATypeTag.ORDEREDLIST);
+        if (argIndex == 1 && (actualTypeTag != ATypeTag.STRING && actualTypeTag != ATypeTag.MULTISET
+                && actualTypeTag != ATypeTag.ARRAY && actualTypeTag != ATypeTag.ANY)) {
+            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING, ATypeTag.MULTISET,
+                    ATypeTag.ARRAY);
         }
         // Each option name should be a string if it is already processed by FullTextContainsParameterCheckRule.
         // Before, the third argument should be a record if exists.
         // The structure is: arg2 = optionName1, arg3 = optionValue1, arg4 = optionName1, arg5 = optionValue2, ...
-        if (argIndex > 1 && argIndex % 2 == 0 && (actualTypeTag != ATypeTag.STRING && actualTypeTag != ATypeTag.RECORD
+        if (argIndex > 1 && argIndex % 2 == 0 && (actualTypeTag != ATypeTag.STRING && actualTypeTag != ATypeTag.OBJECT
                 && actualTypeTag != ATypeTag.ANY)) {
-            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING, ATypeTag.RECORD);
+            throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING, ATypeTag.OBJECT);
         }
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/MinMaxAggTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/MinMaxAggTypeComputer.java
index 0c0c2f9..0526e7d 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/MinMaxAggTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/MinMaxAggTypeComputer.java
@@ -39,10 +39,10 @@
         switch (tag) {
             case DOUBLE:
             case FLOAT:
-            case INT64:
-            case INT32:
-            case INT16:
-            case INT8:
+            case BIGINT:
+            case INTEGER:
+            case SMALLINT:
+            case TINYINT:
             case STRING:
             case DATE:
             case TIME:
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java
index 677507e..a81ef34 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java
@@ -40,13 +40,13 @@
     protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag actualTypeTag = type.getTypeTag();
         if (argIndex == 0) {
-            if (type.getTypeTag() != ATypeTag.UNORDEREDLIST && type.getTypeTag() != ATypeTag.ORDEREDLIST) {
+            if (type.getTypeTag() != ATypeTag.MULTISET && type.getTypeTag() != ATypeTag.ARRAY) {
                 throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING,
-                        ATypeTag.ORDEREDLIST);
+                        ATypeTag.ARRAY);
             }
         } else {
-            if (!ATypeHierarchy.isCompatible(type.getTypeTag(), ATypeTag.INT32)) {
-                throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.INT32);
+            if (!ATypeHierarchy.isCompatible(type.getTypeTag(), ATypeTag.INTEGER)) {
+                throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.INTEGER);
             }
         }
     }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java
index d4812c0..034309b 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java
@@ -47,10 +47,10 @@
         switch (tag1) {
             case DOUBLE:
                 switch (tag2) {
-                    case INT8:
-                    case INT16:
-                    case INT32:
-                    case INT64:
+                    case TINYINT:
+                    case SMALLINT:
+                    case INTEGER:
+                    case BIGINT:
                     case FLOAT:
                     case DOUBLE:
                         type = BuiltinType.ADOUBLE;
@@ -64,10 +64,10 @@
                 break;
             case FLOAT:
                 switch (tag2) {
-                    case INT8:
-                    case INT16:
-                    case INT32:
-                    case INT64:
+                    case TINYINT:
+                    case SMALLINT:
+                    case INTEGER:
+                    case BIGINT:
                     case FLOAT:
                         type = BuiltinType.AFLOAT;
                         break;
@@ -81,12 +81,12 @@
                         throw new IncompatibleTypeException(funcName, tag1, tag2);
                 }
                 break;
-            case INT64:
+            case BIGINT:
                 switch (tag2) {
-                    case INT8:
-                    case INT16:
-                    case INT32:
-                    case INT64:
+                    case TINYINT:
+                    case SMALLINT:
+                    case INTEGER:
+                    case BIGINT:
                         type = BuiltinType.AINT64;
                         break;
                     case FLOAT:
@@ -102,14 +102,14 @@
                         throw new IncompatibleTypeException(funcName, tag1, tag2);
                 }
                 break;
-            case INT32:
+            case INTEGER:
                 switch (tag2) {
-                    case INT8:
-                    case INT16:
-                    case INT32:
+                    case TINYINT:
+                    case SMALLINT:
+                    case INTEGER:
                         type = BuiltinType.AINT32;
                         break;
-                    case INT64:
+                    case BIGINT:
                         type = BuiltinType.AINT64;
                         break;
                     case FLOAT:
@@ -125,16 +125,16 @@
                         throw new IncompatibleTypeException(funcName, tag1, tag2);
                 }
                 break;
-            case INT16:
+            case SMALLINT:
                 switch (tag2) {
-                    case INT8:
-                    case INT16:
+                    case TINYINT:
+                    case SMALLINT:
                         type = BuiltinType.AINT16;
                         break;
-                    case INT32:
+                    case INTEGER:
                         type = BuiltinType.AINT32;
                         break;
-                    case INT64:
+                    case BIGINT:
                         type = BuiltinType.AINT64;
                         break;
                     case FLOAT:
@@ -150,18 +150,18 @@
                         throw new IncompatibleTypeException(funcName, tag1, tag2);
                 }
                 break;
-            case INT8:
+            case TINYINT:
                 switch (tag2) {
-                    case INT8:
+                    case TINYINT:
                         type = BuiltinType.AINT8;
                         break;
-                    case INT16:
+                    case SMALLINT:
                         type = BuiltinType.AINT16;
                         break;
-                    case INT32:
+                    case INTEGER:
                         type = BuiltinType.AINT32;
                         break;
-                    case INT64:
+                    case BIGINT:
                         type = BuiltinType.AINT64;
                         break;
                     case FLOAT:
@@ -179,10 +179,10 @@
                 break;
             case ANY:
                 switch (tag2) {
-                    case INT8:
-                    case INT16:
-                    case INT32:
-                    case INT64:
+                    case TINYINT:
+                    case SMALLINT:
+                    case INTEGER:
+                    case BIGINT:
                     case FLOAT:
                     case ANY:
                     case DOUBLE:
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java
index 57b11b4..f2ae015 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java
@@ -38,10 +38,10 @@
         switch (tag) {
             case DOUBLE:
             case FLOAT:
-            case INT64:
-            case INT32:
-            case INT16:
-            case INT8:
+            case BIGINT:
+            case INTEGER:
+            case SMALLINT:
+            case TINYINT:
             case ANY:
                 break;
             default:
@@ -56,10 +56,10 @@
         switch (tag) {
             case DOUBLE:
             case FLOAT:
-            case INT64:
-            case INT32:
-            case INT16:
-            case INT8:
+            case BIGINT:
+            case INTEGER:
+            case SMALLINT:
+            case TINYINT:
             case ANY:
                 type = strippedInputTypes[0];
                 break;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDoubleOutputFunctionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDoubleOutputFunctionTypeComputer.java
index 5045187..1e9678a 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDoubleOutputFunctionTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDoubleOutputFunctionTypeComputer.java
@@ -39,16 +39,16 @@
     protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag tag = type.getTypeTag();
         switch (tag) {
-            case INT8:
-            case INT16:
-            case INT32:
-            case INT64:
+            case TINYINT:
+            case SMALLINT:
+            case INTEGER:
+            case BIGINT:
             case FLOAT:
             case DOUBLE:
                 break;
             default:
-                throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.INT8, ATypeTag.INT16, ATypeTag.INT32,
-                        ATypeTag.INT64, ATypeTag.FLOAT, ATypeTag.DOUBLE);
+                throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+                        ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
         }
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericInt8OutputFunctionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericInt8OutputFunctionTypeComputer.java
index 25ead33..2081b9b 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericInt8OutputFunctionTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericInt8OutputFunctionTypeComputer.java
@@ -38,16 +38,16 @@
     protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag tag = type.getTypeTag();
         switch (tag) {
-            case INT8:
-            case INT16:
-            case INT32:
-            case INT64:
+            case TINYINT:
+            case SMALLINT:
+            case INTEGER:
+            case BIGINT:
             case FLOAT:
             case DOUBLE:
                 break;
             default:
-                throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.INT8, ATypeTag.INT16, ATypeTag.INT32,
-                        ATypeTag.INT64, ATypeTag.FLOAT, ATypeTag.DOUBLE);
+                throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+                        ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
         }
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRound2TypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRound2TypeComputer.java
index aa509e7..dbec30e 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRound2TypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRound2TypeComputer.java
@@ -43,28 +43,28 @@
         ATypeTag tag = type.getTypeTag();
         if (argIndex == 0) {
             switch (tag) {
-                case INT8:
-                case INT16:
-                case INT32:
-                case INT64:
+                case TINYINT:
+                case SMALLINT:
+                case INTEGER:
+                case BIGINT:
                 case FLOAT:
                 case DOUBLE:
                     break;
                 default:
-                    throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.INT8, ATypeTag.INT16,
-                            ATypeTag.INT32, ATypeTag.INT64, ATypeTag.FLOAT, ATypeTag.DOUBLE);
+                    throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+                            ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
             }
         }
         if (argIndex == 1) {
             switch (tag) {
-                case INT8:
-                case INT16:
-                case INT32:
-                case INT64:
+                case TINYINT:
+                case SMALLINT:
+                case INTEGER:
+                case BIGINT:
                     break;
                 default:
-                    throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.INT8, ATypeTag.INT16,
-                            ATypeTag.INT32, ATypeTag.INT64);
+                    throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+                            ATypeTag.INTEGER, ATypeTag.BIGINT);
             }
         }
     }
@@ -73,10 +73,10 @@
     protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException {
         ATypeTag tag = strippedInputTypes[0].getTypeTag();
         switch (tag) {
-            case INT8:
-            case INT16:
-            case INT32:
-            case INT64:
+            case TINYINT:
+            case SMALLINT:
+            case INTEGER:
+            case BIGINT:
             case FLOAT:
             case DOUBLE:
             case ANY:
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java
index bc68e10..ea5c2bb 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java
@@ -40,17 +40,17 @@
     protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag tag = type.getTypeTag();
         switch (tag) {
-            case INT8:
-            case INT16:
-            case INT32:
-            case INT64:
+            case TINYINT:
+            case SMALLINT:
+            case INTEGER:
+            case BIGINT:
             case FLOAT:
             case DOUBLE:
             case ANY:
                 break;
             default:
-                throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.INT8, ATypeTag.INT16, ATypeTag.INT32,
-                        ATypeTag.INT64, ATypeTag.FLOAT, ATypeTag.DOUBLE);
+                throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+                        ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
         }
     }
 
@@ -58,10 +58,10 @@
     protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException {
         ATypeTag tag = strippedInputTypes[0].getTypeTag();
         switch (tag) {
-            case INT8:
-            case INT16:
-            case INT32:
-            case INT64:
+            case TINYINT:
+            case SMALLINT:
+            case INTEGER:
+            case BIGINT:
             case FLOAT:
             case DOUBLE:
             case ANY:
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java
index cb6d90b..a1fb5b0 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java
@@ -63,7 +63,7 @@
         IAType type0 = (IAType) env.getType(funcExpr.getArguments().get(0).getValue());
         ARecordType inputRecordType = TypeComputeUtils.extractRecordType(type0);
         if (inputRecordType == null) {
-            throw new TypeMismatchException(funcName, 0, type0.getTypeTag(), ATypeTag.RECORD);
+            throw new TypeMismatchException(funcName, 0, type0.getTypeTag(), ATypeTag.OBJECT);
         }
 
         ILogicalExpression arg1 = funcExpr.getArguments().get(1).getValue();
@@ -82,7 +82,7 @@
         Collections.sort(resultFieldNames);
 
         for (String fieldName : resultFieldNames) {
-            if (inputRecordType.getFieldType(fieldName).getTypeTag() == ATypeTag.RECORD) {
+            if (inputRecordType.getFieldType(fieldName).getTypeTag() == ATypeTag.OBJECT) {
                 ARecordType nestedType = (ARecordType) inputRecordType.getFieldType(fieldName);
                 //Deep Copy prevents altering of input types
                 resultFieldTypes.add(nestedType.deepCopy(nestedType));
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java
index c91a4e3..5167f30 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java
@@ -56,12 +56,12 @@
         boolean unknownable = TypeHelper.canBeUnknown(t0) || TypeHelper.canBeUnknown(t1);
         ARecordType recType0 = TypeComputeUtils.extractRecordType(t0);
         if (recType0 == null) {
-            throw new TypeMismatchException(funcName, 0, t0.getTypeTag(), ATypeTag.RECORD);
+            throw new TypeMismatchException(funcName, 0, t0.getTypeTag(), ATypeTag.OBJECT);
         }
 
         ARecordType recType1 = TypeComputeUtils.extractRecordType(t1);
         if (recType1 == null) {
-            throw new TypeMismatchException(funcName, 1, t1.getTypeTag(), ATypeTag.RECORD);
+            throw new TypeMismatchException(funcName, 1, t1.getTypeTag(), ATypeTag.OBJECT);
         }
 
         List<String> resultFieldNames = new ArrayList<>();
@@ -72,7 +72,7 @@
 
         List<IAType> resultFieldTypes = new ArrayList<>();
         for (String fieldName : resultFieldNames) {
-            if (recType0.getFieldType(fieldName).getTypeTag() == ATypeTag.RECORD) {
+            if (recType0.getFieldType(fieldName).getTypeTag() == ATypeTag.OBJECT) {
                 ARecordType nestedType = (ARecordType) recType0.getFieldType(fieldName);
                 //Deep Copy prevents altering of input types
                 resultFieldTypes.add(nestedType.deepCopy(nestedType));
@@ -93,7 +93,7 @@
                     throw new CompilationException(ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, fieldNames[i]);
                 }
                 // Assuming fieldTypes[i].getTypeTag() = resultFieldType.getTypeTag()
-                if (fieldTypes[i].getTypeTag() == ATypeTag.RECORD) {
+                if (fieldTypes[i].getTypeTag() == ATypeTag.OBJECT) {
                     resultFieldTypes.set(pos, mergedNestedType(fieldNames[i], fieldTypes[i], resultFieldType));
                 }
             } else {
@@ -117,7 +117,7 @@
     }
 
     private IAType mergedNestedType(String fieldName, IAType fieldType1, IAType fieldType0) throws AlgebricksException {
-        if (fieldType1.getTypeTag() != ATypeTag.RECORD || fieldType0.getTypeTag() != ATypeTag.RECORD) {
+        if (fieldType1.getTypeTag() != ATypeTag.OBJECT || fieldType0.getTypeTag() != ATypeTag.OBJECT) {
             throw new CompilationException(ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, fieldName);
         }
 
@@ -129,7 +129,7 @@
             int pos = resultType.getFieldIndex(fname);
             if (pos >= 0) {
                 // If a sub-record do merge, else ignore and let the values decide what to do
-                if (fieldType1Copy.getFieldTypes()[i].getTypeTag() == ATypeTag.RECORD) {
+                if (fieldType1Copy.getFieldTypes()[i].getTypeTag() == ATypeTag.OBJECT) {
                     IAType[] oldTypes = resultType.getFieldTypes();
                     oldTypes[pos] = mergedNestedType(fname, fieldType1Copy.getFieldTypes()[i],
                             resultType.getFieldTypes()[pos]);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordPairsTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordPairsTypeComputer.java
index 660297c..ceba3fb 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordPairsTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordPairsTypeComputer.java
@@ -36,8 +36,8 @@
     @Override
     protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag typeTag = type.getTypeTag();
-        if (typeTag != ATypeTag.RECORD) {
-            throw new TypeMismatchException(funcName, argIndex, typeTag, ATypeTag.RECORD);
+        if (typeTag != ATypeTag.OBJECT) {
+            throw new TypeMismatchException(funcName, argIndex, typeTag, ATypeTag.OBJECT);
         }
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordRemoveFieldsTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordRemoveFieldsTypeComputer.java
index fc2ebff..3bd64d6 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordRemoveFieldsTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordRemoveFieldsTypeComputer.java
@@ -78,7 +78,7 @@
                 String fn = ((AString) item).getStringValue();
                 fieldNameSet.add(fn);
                 break;
-            case ORDEREDLIST:
+            case ARRAY:
                 AOrderedList pathOrdereList = (AOrderedList) item;
                 String fieldName = ((AString) pathOrdereList.getItem(0)).getStringValue();
                 fieldNameSet.add(fieldName);
@@ -169,7 +169,7 @@
         IAType inputListType = (IAType) env.getType(arg1);
         AOrderedListType inputOrderedListType = TypeComputeUtils.extractOrderedListType(inputListType);
         if (inputOrderedListType == null) {
-            throw new TypeMismatchException(funcName, 1, inputListType.getTypeTag(), ATypeTag.ORDEREDLIST);
+            throw new TypeMismatchException(funcName, 1, inputListType.getTypeTag(), ATypeTag.ARRAY);
         }
 
         ATypeTag tt = inputOrderedListType.getItemType().getTypeTag();
@@ -202,7 +202,7 @@
     private void addField(ARecordType inputRecordType, String fieldName, List<String> resultFieldNames,
             List<IAType> resultFieldTypes) throws AlgebricksException {
         resultFieldNames.add(fieldName);
-        if (inputRecordType.getFieldType(fieldName).getTypeTag() == ATypeTag.RECORD) {
+        if (inputRecordType.getFieldType(fieldName).getTypeTag() == ATypeTag.OBJECT) {
             ARecordType nestedType = (ARecordType) inputRecordType.getFieldType(fieldName);
             //Deep Copy prevents altering of input types
             resultFieldTypes.add(nestedType.deepCopy(nestedType));
@@ -222,17 +222,14 @@
         for (int i = 0; i < fieldNames.length; i++) {
             if (!fieldNameSet.contains(fieldNames[i])) { // The main field is to be kept
                 addField(inputRecordType, fieldNames[i], resultFieldNames, resultFieldTypes);
-            } else if (!pathList.isEmpty()) { // Further check needed for nested fields
-                if (fieldTypes[i].getTypeTag() == ATypeTag.RECORD) {
-                    ARecordType subRecord = (ARecordType) fieldTypes[i];
-
-                    fieldPathStack.push(fieldNames[i]);
-                    subRecord = deepCheckAndCopy(fieldPathStack, subRecord, pathList, inputRecordType.isOpen());
-                    fieldPathStack.pop();
-                    if (subRecord != null) {
-                        resultFieldNames.add(fieldNames[i]);
-                        resultFieldTypes.add(subRecord);
-                    }
+            } else if (!pathList.isEmpty() && fieldTypes[i].getTypeTag() == ATypeTag.OBJECT) {
+                ARecordType subRecord = (ARecordType) fieldTypes[i];
+                fieldPathStack.push(fieldNames[i]);
+                subRecord = deepCheckAndCopy(fieldPathStack, subRecord, pathList, inputRecordType.isOpen());
+                fieldPathStack.pop();
+                if (subRecord != null) {
+                    resultFieldNames.add(fieldNames[i]);
+                    resultFieldTypes.add(subRecord);
                 }
             }
         }
@@ -300,7 +297,7 @@
         for (int i = 0; i < srcFieldNames.length; i++) {
             fieldPath.push(srcFieldNames[i]);
             if (!isRemovePath(fieldPath, pathList)) {
-                if (srcFieldTypes[i].getTypeTag() == ATypeTag.RECORD) {
+                if (srcFieldTypes[i].getTypeTag() == ATypeTag.OBJECT) {
                     ARecordType subRecord = (ARecordType) srcFieldTypes[i];
                     subRecord = deepCheckAndCopy(fieldPath, subRecord, pathList, isOpen);
                     if (subRecord != null) {
@@ -326,20 +323,20 @@
     private static ARecordType getRecordTypeFromType(String funcName, IAType type0)
             throws AlgebricksException {
         switch (type0.getTypeTag()) {
-            case RECORD:
+            case OBJECT:
                 return (ARecordType) type0;
             case ANY:
                 return DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE;
             case UNION:
                 IAType t1 = ((AUnionType) type0).getActualType();
-                if (t1.getTypeTag() == ATypeTag.RECORD) {
+                if (t1.getTypeTag() == ATypeTag.OBJECT) {
                     return (ARecordType) t1;
                 } else if (t1.getTypeTag() == ATypeTag.ANY) {
                     return DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE;
                 }
                 // Falls through for other cases.
             default:
-                throw new TypeMismatchException(funcName, 0, type0.getTypeTag(), ATypeTag.RECORD);
+                throw new TypeMismatchException(funcName, 0, type0.getTypeTag(), ATypeTag.OBJECT);
         }
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java
index 0eeba85..fae3d90 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java
@@ -38,8 +38,8 @@
     @Override
     public void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag tag = type.getTypeTag();
-        if (tag != ATypeTag.ANY && tag != ATypeTag.ORDEREDLIST && tag != ATypeTag.UNORDEREDLIST) {
-            throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.ORDEREDLIST, ATypeTag.UNORDEREDLIST);
+        if (tag != ATypeTag.ANY && tag != ATypeTag.ARRAY && tag != ATypeTag.MULTISET) {
+            throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.ARRAY, ATypeTag.MULTISET);
         }
     }
 
@@ -49,7 +49,7 @@
         if (tag == ATypeTag.ANY) {
             return BuiltinType.ANY;
         }
-        if (tag != ATypeTag.ORDEREDLIST && tag != ATypeTag.UNORDEREDLIST) {
+        if (tag != ATypeTag.ARRAY && tag != ATypeTag.MULTISET) {
             return strippedInputTypes[0];
         }
         AbstractCollectionType act = (AbstractCollectionType) strippedInputTypes[0];
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SleepTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SleepTypeComputer.java
index 6b885e3..b93f215 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SleepTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SleepTypeComputer.java
@@ -32,14 +32,14 @@
     public void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         if (argIndex == 1) {
             switch (type.getTypeTag()) {
-                case INT8:
-                case INT16:
-                case INT32:
-                case INT64:
+                case TINYINT:
+                case SMALLINT:
+                case INTEGER:
+                case BIGINT:
                     break;
                 default:
-                    throw new TypeMismatchException(funcName, argIndex, type.getTypeTag(), ATypeTag.INT8,
-                            ATypeTag.INT16, ATypeTag.INT32, ATypeTag.INT64);
+                    throw new TypeMismatchException(funcName, argIndex, type.getTypeTag(), ATypeTag.TINYINT,
+                            ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT);
             }
         }
     }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/StringIntToStringTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/StringIntToStringTypeComputer.java
index 21fbed3..5b3cf54 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/StringIntToStringTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/StringIntToStringTypeComputer.java
@@ -37,14 +37,14 @@
         }
         if (argIndex == 1) {
             switch (tag) {
-                case INT8:
-                case INT16:
-                case INT32:
-                case INT64:
+                case TINYINT:
+                case SMALLINT:
+                case INTEGER:
+                case BIGINT:
                     break;
                 default:
-                    throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.INT8, ATypeTag.INT16,
-                            ATypeTag.INT32, ATypeTag.INT64);
+                    throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+                            ATypeTag.INTEGER, ATypeTag.BIGINT);
             }
         }
     }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubsetCollectionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubsetCollectionTypeComputer.java
index cdfb723..7867cf6 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubsetCollectionTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubsetCollectionTypeComputer.java
@@ -47,31 +47,31 @@
         IAType t = (IAType) env.getType(fun.getArguments().get(0).getValue());
         ATypeTag actualTypeTag = t.getTypeTag();
         switch (actualTypeTag) {
-            case UNORDEREDLIST:
-            case ORDEREDLIST: {
+            case MULTISET:
+            case ARRAY: {
                 AbstractCollectionType act = (AbstractCollectionType) t;
                 return act.getItemType();
             }
             case UNION: {
                 AUnionType ut = (AUnionType) t;
                 if (!ut.isUnknownableType()) {
-                    throw new TypeMismatchException(funcName, 0, actualTypeTag, ATypeTag.UNORDEREDLIST,
-                            ATypeTag.ORDEREDLIST);
+                    throw new TypeMismatchException(funcName, 0, actualTypeTag, ATypeTag.MULTISET,
+                            ATypeTag.ARRAY);
                 }
                 IAType t2 = ut.getActualType();
                 ATypeTag tag2 = t2.getTypeTag();
-                if (tag2 == ATypeTag.UNORDEREDLIST || tag2 == ATypeTag.ORDEREDLIST) {
+                if (tag2 == ATypeTag.MULTISET || tag2 == ATypeTag.ARRAY) {
                     AbstractCollectionType act = (AbstractCollectionType) t2;
                     return act.getItemType();
                 }
-                throw new TypeMismatchException(funcName, 0, actualTypeTag, ATypeTag.UNORDEREDLIST,
-                        ATypeTag.ORDEREDLIST);
+                throw new TypeMismatchException(funcName, 0, actualTypeTag, ATypeTag.MULTISET,
+                        ATypeTag.ARRAY);
             }
             case ANY:
                 return BuiltinType.ANY;
             default:
-                throw new TypeMismatchException(funcName, 0, actualTypeTag, ATypeTag.UNORDEREDLIST,
-                        ATypeTag.ORDEREDLIST);
+                throw new TypeMismatchException(funcName, 0, actualTypeTag, ATypeTag.MULTISET,
+                        ATypeTag.ARRAY);
         }
     }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubstringTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubstringTypeComputer.java
index 87a3790..74a9530 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubstringTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubstringTypeComputer.java
@@ -37,14 +37,14 @@
         }
         if (argIndex > 0 && argIndex <= 2) {
             switch (tag) {
-                case INT8:
-                case INT16:
-                case INT32:
-                case INT64:
+                case TINYINT:
+                case SMALLINT:
+                case INTEGER:
+                case BIGINT:
                     break;
                 default:
-                    throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.INT8, ATypeTag.INT16,
-                            ATypeTag.INT32, ATypeTag.INT64);
+                    throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+                            ATypeTag.INTEGER, ATypeTag.BIGINT);
             }
         }
     }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
index 9110c12..a1bbb86 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
@@ -188,11 +188,11 @@
 
     public static ARecordType extractRecordType(IAType t) {
         switch (t.getTypeTag()) {
-            case RECORD:
+            case OBJECT:
                 return (ARecordType) t;
             case UNION:
                 IAType innerType = ((AUnionType) t).getActualType();
-                if (innerType.getTypeTag() == ATypeTag.RECORD) {
+                if (innerType.getTypeTag() == ATypeTag.OBJECT) {
                     return (ARecordType) innerType;
                 } else {
                     return null;
@@ -205,13 +205,13 @@
     }
 
     public static AOrderedListType extractOrderedListType(IAType t) {
-        if (t.getTypeTag() == ATypeTag.ORDEREDLIST) {
+        if (t.getTypeTag() == ATypeTag.ARRAY) {
             return (AOrderedListType) t;
         }
 
         if (t.getTypeTag() == ATypeTag.UNION) {
             IAType innerType = ((AUnionType) t).getActualType();
-            if (innerType.getTypeTag() == ATypeTag.ORDEREDLIST) {
+            if (innerType.getTypeTag() == ATypeTag.ARRAY) {
                 return (AOrderedListType) innerType;
             }
         }
@@ -219,13 +219,13 @@
     }
 
     public static AUnorderedListType extractUnorderedListType(IAType t) {
-        if (t.getTypeTag() == ATypeTag.UNORDEREDLIST) {
+        if (t.getTypeTag() == ATypeTag.MULTISET) {
             return (AUnorderedListType) t;
         }
         if (t.getTypeTag() == ATypeTag.UNION) {
             AUnionType unionType = (AUnionType) t;
             IAType innerType = unionType.getActualType();
-            if (innerType.getTypeTag() == ATypeTag.UNORDEREDLIST) {
+            if (innerType.getTypeTag() == ATypeTag.MULTISET) {
                 return (AUnorderedListType) innerType;
             }
         }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryMinusTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryMinusTypeComputer.java
index 5c734d2..f815f33 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryMinusTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryMinusTypeComputer.java
@@ -36,16 +36,16 @@
     public void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
         ATypeTag tag = type.getTypeTag();
         switch (tag) {
-            case INT8:
-            case INT16:
-            case INT32:
-            case INT64:
+            case TINYINT:
+            case SMALLINT:
+            case INTEGER:
+            case BIGINT:
             case FLOAT:
             case DOUBLE:
                 break;
             default:
-                throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.INT8, ATypeTag.INT16, ATypeTag.INT32,
-                        ATypeTag.INT64, ATypeTag.FLOAT, ATypeTag.DOUBLE);
+                throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+                        ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
         }
     }
 
@@ -53,10 +53,10 @@
     public IAType getResultType(ILogicalExpression expr, IAType... knownTypes) throws AlgebricksException {
         ATypeTag tag = knownTypes[0].getTypeTag();
         switch (tag) {
-            case INT8:
-            case INT16:
-            case INT32:
-            case INT64:
+            case TINYINT:
+            case SMALLINT:
+            case INTEGER:
+            case BIGINT:
             case FLOAT:
             case DOUBLE:
             case ANY:
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 9f7f360..1c1bdbc 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
@@ -18,8 +18,9 @@
  */
 package org.apache.asterix.om.types;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.asterix.om.base.IAObject;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public class AOrderedListType extends AbstractCollectionType {
@@ -38,12 +39,12 @@
 
     @Override
     public ATypeTag getTypeTag() {
-        return ATypeTag.ORDEREDLIST;
+        return ATypeTag.ARRAY;
     }
 
     @Override
     public String getDisplayName() {
-        return "AOrderedList";
+        return "array";
     }
 
     @Override
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 77c491f..baaed59 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
@@ -157,7 +157,7 @@
 
     @Override
     public ATypeTag getTypeTag() {
-        return ATypeTag.RECORD;
+        return ATypeTag.OBJECT;
     }
 
     public boolean isOpen() {
@@ -214,7 +214,7 @@
             if (subRecordType.getTypeTag().equals(ATypeTag.UNION)) {
                 //enforced SubType
                 subRecordType = ((AUnionType) subRecordType).getActualType();
-                if (subRecordType.getTypeTag() != ATypeTag.RECORD) {
+                if (subRecordType.getTypeTag() != ATypeTag.OBJECT) {
                     throw new AsterixException(
                             "Field accessor is not defined for values of type " + subRecordType.getTypeTag());
                 }
@@ -264,7 +264,7 @@
     public ARecordType deepCopy(ARecordType type) {
         IAType[] newTypes = new IAType[type.fieldNames.length];
         for (int i = 0; i < type.fieldTypes.length; i++) {
-            if (type.fieldTypes[i].getTypeTag() == ATypeTag.RECORD) {
+            if (type.fieldTypes[i].getTypeTag() == ATypeTag.OBJECT) {
                 newTypes[i] = deepCopy((ARecordType) type.fieldTypes[i]);
             } else {
                 newTypes[i] = type.fieldTypes[i];
@@ -275,7 +275,7 @@
 
     @Override
     public String getDisplayName() {
-        return "ARecord";
+        return "object";
     }
 
     @Override
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ATypeTag.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ATypeTag.java
index ec1805f..4e1f7f6 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ATypeTag.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ATypeTag.java
@@ -27,10 +27,10 @@
  * non-primitive type in the object model
  */
 public enum ATypeTag implements IEnumSerializer {
-    INT8(1),
-    INT16(2),
-    INT32(3),
-    INT64(4),
+    TINYINT(1),
+    SMALLINT(2),
+    INTEGER(3),
+    BIGINT(4),
     UINT8(5),
     UINT16(6),
     UINT32(7),
@@ -48,10 +48,10 @@
     DURATION(19),
     POINT(20),
     POINT3D(21),
-    ORDEREDLIST(22),
-    UNORDEREDLIST(23),
-    RECORD(24),
-    SPARSERECORD(25),
+    ARRAY(22),
+    MULTISET(23),
+    OBJECT(24),
+    SPARSOBJECT(25),
     UNION(26),
     ENUM(27),
     TYPE(28),
@@ -75,10 +75,10 @@
     public static final byte SERIALIZED_MISSING_TYPE_TAG = MISSING.serialize();
     public static final byte SERIALIZED_NULL_TYPE_TAG = NULL.serialize();
     public static final byte SERIALIZED_DOUBLE_TYPE_TAG = DOUBLE.serialize();
-    public static final byte SERIALIZED_RECORD_TYPE_TAG = RECORD.serialize();
-    public static final byte SERIALIZED_INT32_TYPE_TAG = INT32.serialize();
-    public static final byte SERIALIZED_ORDEREDLIST_TYPE_TAG = ORDEREDLIST.serialize();
-    public static final byte SERIALIZED_UNORDEREDLIST_TYPE_TAG = UNORDEREDLIST.serialize();
+    public static final byte SERIALIZED_RECORD_TYPE_TAG = OBJECT.serialize();
+    public static final byte SERIALIZED_INT32_TYPE_TAG = INTEGER.serialize();
+    public static final byte SERIALIZED_ORDEREDLIST_TYPE_TAG = ARRAY.serialize();
+    public static final byte SERIALIZED_UNORDEREDLIST_TYPE_TAG = MULTISET.serialize();
     public static final byte SERIALIZED_POLYGON_TYPE_TAG = POLYGON.serialize();
     public static final byte SERIALIZED_DATE_TYPE_TAG = DATE.serialize();
     public static final byte SERIALIZED_TIME_TYPE_TAG = TIME.serialize();
@@ -93,9 +93,9 @@
     public static final byte SERIALIZED_LINE_TYPE_TAG = LINE.serialize();
     public static final byte SERIALIZED_RECTANGLE_TYPE_TAG = RECTANGLE.serialize();
     public static final byte SERIALIZED_BOOLEAN_TYPE_TAG = BOOLEAN.serialize();
-    public static final byte SERIALIZED_INT8_TYPE_TAG = INT8.serialize();
-    public static final byte SERIALIZED_INT16_TYPE_TAG = INT16.serialize();
-    public static final byte SERIALIZED_INT64_TYPE_TAG = INT64.serialize();
+    public static final byte SERIALIZED_INT8_TYPE_TAG = TINYINT.serialize();
+    public static final byte SERIALIZED_INT16_TYPE_TAG = SMALLINT.serialize();
+    public static final byte SERIALIZED_INT64_TYPE_TAG = BIGINT.serialize();
     public static final byte SERIALIZED_FLOAT_TYPE_TAG = FLOAT.serialize();
     public static final byte SERIALIZED_BINARY_TYPE_TAG = BINARY.serialize();
     public static final byte SERIALIZED_UUID_TYPE_TAG = UUID.serialize();
@@ -129,7 +129,7 @@
     }
 
     public boolean isDerivedType() {
-        return this == ATypeTag.RECORD || this == ATypeTag.ORDEREDLIST || this == ATypeTag.UNORDEREDLIST
+        return this == ATypeTag.OBJECT || this == ATypeTag.ARRAY || this == ATypeTag.MULTISET
                 || this == ATypeTag.UNION;
     }
 
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 2a06976..ace3b6c 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
@@ -127,7 +127,7 @@
 
     @Override
     public String getDisplayName() {
-        return "AUnion";
+        return "union";
     }
 
     @Override
@@ -138,7 +138,7 @@
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
-        sb.append("UNION(");
+        sb.append("union(");
         Iterator<IAType> iter = unionList.iterator();
         if (iter.hasNext()) {
             IAType t0 = iter.next();
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 b4705ac..6de918a 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
@@ -18,9 +18,9 @@
  */
 package org.apache.asterix.om.types;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.asterix.om.base.AUnorderedList;
 import org.apache.asterix.om.base.IAObject;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public class AUnorderedListType extends AbstractCollectionType {
@@ -39,12 +39,12 @@
 
     @Override
     public ATypeTag getTypeTag() {
-        return ATypeTag.UNORDEREDLIST;
+        return ATypeTag.MULTISET;
     }
 
     @Override
     public String getDisplayName() {
-        return "AUnorderedList";
+        return "multiset";
     }
 
     @Override
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 661fd3c..3037e7c 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
@@ -80,7 +80,7 @@
 
         @Override
         public ATypeTag getTypeTag() {
-            return ATypeTag.INT8;
+            return ATypeTag.TINYINT;
         }
 
         @Override
@@ -108,7 +108,7 @@
 
         @Override
         public ATypeTag getTypeTag() {
-            return ATypeTag.INT16;
+            return ATypeTag.SMALLINT;
         }
 
         @Override
@@ -136,7 +136,7 @@
 
         @Override
         public ATypeTag getTypeTag() {
-            return ATypeTag.INT32;
+            return ATypeTag.INTEGER;
         }
 
         @Override
@@ -159,7 +159,7 @@
 
         @Override
         public ATypeTag getTypeTag() {
-            return ATypeTag.INT64;
+            return ATypeTag.BIGINT;
         }
 
         @Override
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeTagUtil.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeTagUtil.java
index 1b0beab..1af3578 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeTagUtil.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeTagUtil.java
@@ -25,13 +25,13 @@
 
     public static IAType getBuiltinTypeByTag(ATypeTag typeTag) throws AsterixException {
         switch (typeTag) {
-            case INT8:
+            case TINYINT:
                 return BuiltinType.AINT8;
-            case INT16:
+            case SMALLINT:
                 return BuiltinType.AINT16;
-            case INT32:
+            case INTEGER:
                 return BuiltinType.AINT32;
-            case INT64:
+            case BIGINT:
                 return BuiltinType.AINT64;
             case BINARY:
                 return BuiltinType.ABINARY;
@@ -81,11 +81,11 @@
                 return BuiltinType.ADAYTIMEDURATION;
             case UUID:
                 return BuiltinType.AUUID;
-            case RECORD:
+            case OBJECT:
                 return RecordUtil.FULLY_OPEN_RECORD_TYPE;
-            case UNORDEREDLIST:
+            case MULTISET:
                 return AUnorderedListType.FULLY_OPEN_UNORDEREDLIST_TYPE;
-            case ORDEREDLIST:
+            case ARRAY:
                 return AOrderedListType.FULL_OPEN_ORDEREDLIST_TYPE;
             default:
                 throw new AsterixException("Typetag " + typeTag + " is not a built-in type");
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/ATypeHierarchy.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/ATypeHierarchy.java
index 9212949..8b43fa8 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/ATypeHierarchy.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/ATypeHierarchy.java
@@ -64,43 +64,43 @@
 
     // add default type promotion rules
     static {
-        // Promotion (widening): INT8 -> INT16 -> INT32 -> INT64 -> FLOAT -> DOUBLE
+        // Promotion (widening): TINYINT -> SMALLINT -> INTEGER -> BIGINT -> FLOAT -> DOUBLE
         // No precision and range loss
-        addPromotionRule(ATypeTag.INT8, ATypeTag.INT16, IntegerToInt16TypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT8, ATypeTag.INT32, IntegerToInt32TypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT8, ATypeTag.INT64, IntegerToInt64TypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT16, ATypeTag.INT32, IntegerToInt32TypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT16, ATypeTag.INT64, IntegerToInt64TypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT32, ATypeTag.INT64, IntegerToInt64TypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT8, ATypeTag.DOUBLE, IntegerToDoubleTypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT16, ATypeTag.DOUBLE, IntegerToDoubleTypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT32, ATypeTag.DOUBLE, IntegerToDoubleTypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT64, ATypeTag.DOUBLE, IntegerToDoubleTypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.TINYINT, ATypeTag.SMALLINT, IntegerToInt16TypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.TINYINT, ATypeTag.INTEGER, IntegerToInt32TypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.TINYINT, ATypeTag.BIGINT, IntegerToInt64TypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.SMALLINT, ATypeTag.INTEGER, IntegerToInt32TypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.SMALLINT, ATypeTag.BIGINT, IntegerToInt64TypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.INTEGER, ATypeTag.BIGINT, IntegerToInt64TypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.TINYINT, ATypeTag.DOUBLE, IntegerToDoubleTypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.SMALLINT, ATypeTag.DOUBLE, IntegerToDoubleTypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.INTEGER, ATypeTag.DOUBLE, IntegerToDoubleTypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.BIGINT, ATypeTag.DOUBLE, IntegerToDoubleTypeConvertComputer.INSTANCE);
         addPromotionRule(ATypeTag.FLOAT, ATypeTag.DOUBLE, FloatToDoubleTypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT8, ATypeTag.FLOAT, IntegerToFloatTypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT16, ATypeTag.FLOAT, IntegerToFloatTypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT32, ATypeTag.FLOAT, IntegerToFloatTypeConvertComputer.INSTANCE);
-        addPromotionRule(ATypeTag.INT64, ATypeTag.FLOAT, IntegerToFloatTypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.TINYINT, ATypeTag.FLOAT, IntegerToFloatTypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.SMALLINT, ATypeTag.FLOAT, IntegerToFloatTypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.INTEGER, ATypeTag.FLOAT, IntegerToFloatTypeConvertComputer.INSTANCE);
+        addPromotionRule(ATypeTag.BIGINT, ATypeTag.FLOAT, IntegerToFloatTypeConvertComputer.INSTANCE);
     }
 
     static {
-        // Demotion (narrowing): DOUBLE -> FLOAT -> INT64 -> INT32 -> INT16 -> INT8
+        // Demotion (narrowing): DOUBLE -> FLOAT -> BIGINT -> INTEGER -> SMALLINT -> TINYINT
         // Possible precision loss (e.g., FLOAT to INT)
         // This may produce an exception (if source value is greater than target.MAX or less than target.MIN)
-        addDemotionRule(ATypeTag.INT16, ATypeTag.INT8, IntegerToInt8TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.INT32, ATypeTag.INT8, IntegerToInt8TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.INT64, ATypeTag.INT8, IntegerToInt8TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.INT32, ATypeTag.INT16, IntegerToInt16TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.INT64, ATypeTag.INT16, IntegerToInt16TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.INT64, ATypeTag.INT32, IntegerToInt32TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.FLOAT, ATypeTag.INT8, FloatToInt8TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.FLOAT, ATypeTag.INT16, FloatToInt16TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.FLOAT, ATypeTag.INT32, FloatToInt32TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.FLOAT, ATypeTag.INT64, FloatToInt64TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.DOUBLE, ATypeTag.INT8, DoubleToInt8TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.DOUBLE, ATypeTag.INT16, DoubleToInt16TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.DOUBLE, ATypeTag.INT32, DoubleToInt32TypeConvertComputer.INSTANCE);
-        addDemotionRule(ATypeTag.DOUBLE, ATypeTag.INT64, DoubleToInt64TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.SMALLINT, ATypeTag.TINYINT, IntegerToInt8TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.INTEGER, ATypeTag.TINYINT, IntegerToInt8TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.BIGINT, ATypeTag.TINYINT, IntegerToInt8TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.INTEGER, ATypeTag.SMALLINT, IntegerToInt16TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.BIGINT, ATypeTag.SMALLINT, IntegerToInt16TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.BIGINT, ATypeTag.INTEGER, IntegerToInt32TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.FLOAT, ATypeTag.TINYINT, FloatToInt8TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.FLOAT, ATypeTag.SMALLINT, FloatToInt16TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.FLOAT, ATypeTag.INTEGER, FloatToInt32TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.FLOAT, ATypeTag.BIGINT, FloatToInt64TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.DOUBLE, ATypeTag.TINYINT, DoubleToInt8TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.DOUBLE, ATypeTag.SMALLINT, DoubleToInt16TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.DOUBLE, ATypeTag.INTEGER, DoubleToInt32TypeConvertComputer.INSTANCE);
+        addDemotionRule(ATypeTag.DOUBLE, ATypeTag.BIGINT, DoubleToInt64TypeConvertComputer.INSTANCE);
         addDemotionRule(ATypeTag.DOUBLE, ATypeTag.FLOAT, DoubleToFloatTypeConvertComputer.INSTANCE);
     }
 
@@ -110,14 +110,14 @@
         hierarchyDomains.put(ATypeTag.CIRCLE, Domain.SPATIAL);
         hierarchyDomains.put(ATypeTag.POLYGON, Domain.SPATIAL);
         hierarchyDomains.put(ATypeTag.RECTANGLE, Domain.SPATIAL);
-        hierarchyDomains.put(ATypeTag.INT8, Domain.NUMERIC);
-        hierarchyDomains.put(ATypeTag.INT16, Domain.NUMERIC);
-        hierarchyDomains.put(ATypeTag.INT32, Domain.NUMERIC);
-        hierarchyDomains.put(ATypeTag.INT64, Domain.NUMERIC);
+        hierarchyDomains.put(ATypeTag.TINYINT, Domain.NUMERIC);
+        hierarchyDomains.put(ATypeTag.SMALLINT, Domain.NUMERIC);
+        hierarchyDomains.put(ATypeTag.INTEGER, Domain.NUMERIC);
+        hierarchyDomains.put(ATypeTag.BIGINT, Domain.NUMERIC);
         hierarchyDomains.put(ATypeTag.FLOAT, Domain.NUMERIC);
         hierarchyDomains.put(ATypeTag.DOUBLE, Domain.NUMERIC);
-        hierarchyDomains.put(ATypeTag.ORDEREDLIST, Domain.LIST);
-        hierarchyDomains.put(ATypeTag.UNORDEREDLIST, Domain.LIST);
+        hierarchyDomains.put(ATypeTag.ARRAY, Domain.LIST);
+        hierarchyDomains.put(ATypeTag.MULTISET, Domain.LIST);
     }
 
     public static Domain getTypeDomain(ATypeTag tag) {
@@ -193,22 +193,22 @@
         if (sourceTypeTag != targetTypeTag) {
 
             switch (targetTypeTag) {
-                //Target Field Type:INT64
-                case INT64:
+                //Target Field Type:BIGINT
+                case BIGINT:
 
-                    // Change the Constant Type to INT64 Type
+                    // Change the Constant Type to BIGINT Type
                     switch (sourceTypeTag) {
-                        case INT8:
+                        case TINYINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new AInt64((long) ((AInt8) sourceObject).getByteValue()));
                             break;
 
-                        case INT16:
+                        case SMALLINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new AInt64((long) ((AInt16) sourceObject).getShortValue()));
                             break;
 
-                        case INT32:
+                        case INTEGER:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new AInt64((long) ((AInt32) sourceObject).getIntegerValue()));
                             break;
@@ -216,14 +216,14 @@
                         case FLOAT:
                             tmpFloatValue = ((AFloat) sourceObject).getFloatValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.FLOAT, ATypeTag.INT64, tmpFloatValue);
+                            valueSanitycheck(ATypeTag.FLOAT, ATypeTag.BIGINT, tmpFloatValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt64((long) tmpFloatValue));
                             break;
 
                         case DOUBLE:
                             tmpDoubleValue = ((ADouble) sourceObject).getDoubleValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.DOUBLE, ATypeTag.INT64, tmpDoubleValue);
+                            valueSanitycheck(ATypeTag.DOUBLE, ATypeTag.BIGINT, tmpDoubleValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt64((long) tmpDoubleValue));
                             break;
 
@@ -233,39 +233,39 @@
 
                     break;
 
-                //Target Field Type:INT32
-                case INT32:
+                //Target Field Type:INTEGER
+                case INTEGER:
 
-                    // Change the Constant Type to INT32 Type
+                    // Change the Constant Type to INTEGER Type
                     switch (sourceTypeTag) {
-                        case INT8:
+                        case TINYINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new AInt32(((AInt8) sourceObject).getByteValue()));
                             break;
 
-                        case INT16:
+                        case SMALLINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new AInt32(((AInt16) sourceObject).getShortValue()));
                             break;
 
-                        case INT64:
+                        case BIGINT:
                             tmpLongValue = ((AInt64) sourceObject).getLongValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.INT64, ATypeTag.INT32, tmpLongValue);
+                            valueSanitycheck(ATypeTag.BIGINT, ATypeTag.INTEGER, tmpLongValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt32((int) tmpLongValue));
                             break;
 
                         case FLOAT:
                             tmpFloatValue = ((AFloat) sourceObject).getFloatValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.FLOAT, ATypeTag.INT32, tmpFloatValue);
+                            valueSanitycheck(ATypeTag.FLOAT, ATypeTag.INTEGER, tmpFloatValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt32((int) tmpFloatValue));
                             break;
 
                         case DOUBLE:
                             tmpDoubleValue = ((ADouble) sourceObject).getDoubleValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.FLOAT, ATypeTag.INT32, tmpDoubleValue);
+                            valueSanitycheck(ATypeTag.FLOAT, ATypeTag.INTEGER, tmpDoubleValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt32((int) tmpDoubleValue));
                             break;
 
@@ -275,43 +275,43 @@
 
                     break;
 
-                //Target Field Type:INT8
-                case INT8:
+                //Target Field Type:TINYINT
+                case TINYINT:
 
-                    // Change the Constant Type to INT8 Type
+                    // Change the Constant Type to TINYINT Type
                     switch (sourceTypeTag) {
-                        case INT16:
+                        case SMALLINT:
                             tmpShortValue = ((AInt16) sourceObject).getShortValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.INT16, ATypeTag.INT8, tmpShortValue);
+                            valueSanitycheck(ATypeTag.SMALLINT, ATypeTag.TINYINT, tmpShortValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt8((byte) tmpShortValue));
                             break;
 
-                        case INT32:
+                        case INTEGER:
                             tmpIntValue = ((AInt32) sourceObject).getIntegerValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.INT32, ATypeTag.INT8, tmpIntValue);
+                            valueSanitycheck(ATypeTag.INTEGER, ATypeTag.TINYINT, tmpIntValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt8((byte) tmpIntValue));
                             break;
 
-                        case INT64:
+                        case BIGINT:
                             tmpLongValue = ((AInt64) sourceObject).getLongValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.INT64, ATypeTag.INT8, tmpLongValue);
+                            valueSanitycheck(ATypeTag.BIGINT, ATypeTag.TINYINT, tmpLongValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt8((byte) tmpLongValue));
                             break;
 
                         case FLOAT:
                             tmpFloatValue = ((AFloat) sourceObject).getFloatValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.FLOAT, ATypeTag.INT8, tmpFloatValue);
+                            valueSanitycheck(ATypeTag.FLOAT, ATypeTag.TINYINT, tmpFloatValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt8((byte) tmpFloatValue));
                             break;
 
                         case DOUBLE:
                             tmpDoubleValue = ((ADouble) sourceObject).getDoubleValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.DOUBLE, ATypeTag.INT8, tmpDoubleValue);
+                            valueSanitycheck(ATypeTag.DOUBLE, ATypeTag.TINYINT, tmpDoubleValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt8((byte) tmpDoubleValue));
                             break;
 
@@ -320,40 +320,40 @@
                     }
                     break;
 
-                //Target Field Type:INT16
-                case INT16:
-                    // Change the Constant Type to INT16 Type
+                //Target Field Type:SMALLINT
+                case SMALLINT:
+                    // Change the Constant Type to SMALLINT Type
                     switch (sourceTypeTag) {
-                        case INT8:
+                        case TINYINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new AInt16(((AInt8) sourceObject).getByteValue()));
                             break;
 
-                        case INT32:
+                        case INTEGER:
                             tmpIntValue = ((AInt32) sourceObject).getIntegerValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.INT32, ATypeTag.INT16, tmpIntValue);
+                            valueSanitycheck(ATypeTag.INTEGER, ATypeTag.SMALLINT, tmpIntValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt16((short) tmpIntValue));
                             break;
 
-                        case INT64:
+                        case BIGINT:
                             tmpLongValue = ((AInt64) sourceObject).getLongValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.INT64, ATypeTag.INT16, tmpLongValue);
+                            valueSanitycheck(ATypeTag.BIGINT, ATypeTag.SMALLINT, tmpLongValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt16((short) tmpLongValue));
                             break;
 
                         case FLOAT:
                             tmpFloatValue = ((AFloat) sourceObject).getFloatValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.FLOAT, ATypeTag.INT16, tmpFloatValue);
+                            valueSanitycheck(ATypeTag.FLOAT, ATypeTag.SMALLINT, tmpFloatValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt16((short) tmpFloatValue));
                             break;
 
                         case DOUBLE:
                             tmpDoubleValue = ((ADouble) sourceObject).getDoubleValue();
                             // Check whether this value is within the range of the field type
-                            valueSanitycheck(ATypeTag.DOUBLE, ATypeTag.INT16, tmpDoubleValue);
+                            valueSanitycheck(ATypeTag.DOUBLE, ATypeTag.SMALLINT, tmpDoubleValue);
                             asterixNewConstantValue = new AsterixConstantValue(new AInt16((short) tmpDoubleValue));
                             break;
 
@@ -366,22 +366,22 @@
                 case FLOAT:
                     // Change the Constant Type to FLOAT Type
                     switch (sourceTypeTag) {
-                        case INT8:
+                        case TINYINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new AFloat(((AInt8) sourceObject).getByteValue()));
                             break;
 
-                        case INT16:
+                        case SMALLINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new AFloat(((AInt16) sourceObject).getShortValue()));
                             break;
 
-                        case INT32:
+                        case INTEGER:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new AFloat(((AInt32) sourceObject).getIntegerValue()));
                             break;
 
-                        case INT64:
+                        case BIGINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new AFloat(((AInt64) sourceObject).getLongValue()));
                             break;
@@ -402,22 +402,22 @@
                 case DOUBLE:
                     // Change the Constant Type to DOUBLE Type
                     switch (sourceTypeTag) {
-                        case INT8:
+                        case TINYINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new ADouble(((AInt8) sourceObject).getByteValue()));
                             break;
 
-                        case INT16:
+                        case SMALLINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new ADouble(((AInt16) sourceObject).getShortValue()));
                             break;
 
-                        case INT32:
+                        case INTEGER:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new ADouble(((AInt32) sourceObject).getIntegerValue()));
                             break;
 
-                        case INT64:
+                        case BIGINT:
                             asterixNewConstantValue = new AsterixConstantValue(
                                     new ADouble(((AInt64) sourceObject).getLongValue()));
                             break;
@@ -451,23 +451,23 @@
         boolean canConvert = true;
 
         switch (targetType) {
-            case INT8:
+            case TINYINT:
                 if (sourceValue > Byte.MAX_VALUE || sourceValue < Byte.MIN_VALUE) {
                     canConvert = false;
                 }
                 break;
 
-            case INT16:
+            case SMALLINT:
                 if (sourceValue > Short.MAX_VALUE || sourceValue < Short.MIN_VALUE) {
                     canConvert = false;
                 }
                 break;
-            case INT32:
+            case INTEGER:
                 if (sourceValue > Integer.MAX_VALUE || sourceValue < Integer.MIN_VALUE) {
                     canConvert = false;
                 }
                 break;
-            case INT64:
+            case BIGINT:
                 if (sourceValue > Long.MAX_VALUE || sourceValue < Long.MIN_VALUE) {
                     canConvert = false;
                 }
@@ -493,15 +493,15 @@
         ATypeTag sourceTypeTag = sourceObject.getType().getTypeTag();
 
         switch (sourceTypeTag) {
-            case INT8:
+            case TINYINT:
                 switch (targetTypeTag) {
-                    case INT8:
+                    case TINYINT:
                         return sourceObject;
-                    case INT16:
+                    case SMALLINT:
                         return new AInt16(((AInt8) sourceObject).getByteValue());
-                    case INT32:
+                    case INTEGER:
                         return new AInt32(((AInt8) sourceObject).getByteValue());
-                    case INT64:
+                    case BIGINT:
                         return new AInt64((long) ((AInt8) sourceObject).getByteValue());
                     case FLOAT:
                         return new AFloat(((AInt8) sourceObject).getByteValue());
@@ -511,16 +511,16 @@
                         throw new AsterixException(
                                 "Can't convert the " + sourceTypeTag + " type to the " + targetTypeTag + " type.");
                 }
-            case INT16:
+            case SMALLINT:
                 switch (targetTypeTag) {
-                    case INT8:
-                        // an exception can happen because of a type demotion from INT16 to INT8
+                    case TINYINT:
+                        // an exception can happen because of a type demotion from SMALLINT to TINYINT
                         return new AInt8((byte) ((AInt16) sourceObject).getShortValue());
-                    case INT16:
+                    case SMALLINT:
                         return sourceObject;
-                    case INT32:
+                    case INTEGER:
                         return new AInt32(((AInt16) sourceObject).getShortValue());
-                    case INT64:
+                    case BIGINT:
                         return new AInt64((long) ((AInt16) sourceObject).getShortValue());
                     case FLOAT:
                         return new AFloat(((AInt16) sourceObject).getShortValue());
@@ -531,17 +531,17 @@
                                 "Can't convert the " + sourceTypeTag + " type to the " + targetTypeTag + " type.");
                 }
 
-            case INT32:
+            case INTEGER:
                 switch (targetTypeTag) {
-                    case INT8:
-                        // an exception can happen because of a type demotion from INT32 to INT8
+                    case TINYINT:
+                        // an exception can happen because of a type demotion from INTEGER to TINYINT
                         return new AInt8(((AInt32) sourceObject).getIntegerValue().byteValue());
-                    case INT16:
-                        // an exception can happen because of a type demotion from INT32 to INT16
+                    case SMALLINT:
+                        // an exception can happen because of a type demotion from INTEGER to SMALLINT
                         return new AInt16(((AInt32) sourceObject).getIntegerValue().shortValue());
-                    case INT32:
+                    case INTEGER:
                         return sourceObject;
-                    case INT64:
+                    case BIGINT:
                         return new AInt64((long) ((AInt32) sourceObject).getIntegerValue());
                     case FLOAT:
                         return new AFloat(((AInt32) sourceObject).getIntegerValue());
@@ -552,18 +552,18 @@
                                 "Can't convert the " + sourceTypeTag + " type to the " + targetTypeTag + " type.");
                 }
 
-            case INT64:
+            case BIGINT:
                 switch (targetTypeTag) {
-                    case INT8:
-                        // an exception can happen because of a type demotion from INT64 to INT8
+                    case TINYINT:
+                        // an exception can happen because of a type demotion from BIGINT to TINYINT
                         return new AInt8((byte) ((AInt64) sourceObject).getLongValue());
-                    case INT16:
-                        // an exception can happen because of a type demotion from INT64 to INT16
+                    case SMALLINT:
+                        // an exception can happen because of a type demotion from BIGINT to SMALLINT
                         return new AInt16((short) ((AInt64) sourceObject).getLongValue());
-                    case INT32:
-                        // an exception can happen because of a type demotion from INT64 to INT32
+                    case INTEGER:
+                        // an exception can happen because of a type demotion from BIGINT to INTEGER
                         return new AInt32((int) ((AInt64) sourceObject).getLongValue());
-                    case INT64:
+                    case BIGINT:
                         return sourceObject;
                     case FLOAT:
                         return new AFloat(((AInt64) sourceObject).getLongValue());
@@ -575,17 +575,17 @@
                 }
             case FLOAT:
                 switch (targetTypeTag) {
-                    case INT8:
-                        // an exception can happen because of a type demotion from FLOAT to INT8
+                    case TINYINT:
+                        // an exception can happen because of a type demotion from FLOAT to TINYINT
                         return new AInt8((byte) ((AFloat) sourceObject).getFloatValue());
-                    case INT16:
-                        // an exception can happen because of a type demotion from FLOAT to INT16
+                    case SMALLINT:
+                        // an exception can happen because of a type demotion from FLOAT to SMALLINT
                         return new AInt16((short) ((AFloat) sourceObject).getFloatValue());
-                    case INT32:
-                        // an exception can happen because of a type demotion from FLOAT to INT32
+                    case INTEGER:
+                        // an exception can happen because of a type demotion from FLOAT to INTEGER
                         return new AInt32((int) ((AFloat) sourceObject).getFloatValue());
-                    case INT64:
-                        // an exception can happen because of a type demotion from FLOAT to INT64
+                    case BIGINT:
+                        // an exception can happen because of a type demotion from FLOAT to BIGINT
                         return new AInt64((long) ((AFloat) sourceObject).getFloatValue());
                     case FLOAT:
                         return sourceObject;
@@ -597,17 +597,17 @@
                 }
             case DOUBLE:
                 switch (targetTypeTag) {
-                    case INT8:
-                        // an exception can happen because of a type demotion from DOUBLE to INT8
+                    case TINYINT:
+                        // an exception can happen because of a type demotion from DOUBLE to TINYINT
                         return new AInt8((byte) ((ADouble) sourceObject).getDoubleValue());
-                    case INT16:
-                        // an exception can happen because of a type demotion from DOUBLE to INT16
+                    case SMALLINT:
+                        // an exception can happen because of a type demotion from DOUBLE to SMALLINT
                         return new AInt16((short) ((ADouble) sourceObject).getDoubleValue());
-                    case INT32:
-                        // an exception can happen because of a type demotion from DOUBLE to INT32
+                    case INTEGER:
+                        // an exception can happen because of a type demotion from DOUBLE to INTEGER
                         return new AInt32((int) ((ADouble) sourceObject).getDoubleValue());
-                    case INT64:
-                        // an exception can happen because of a type demotion from DOUBLE to INT64
+                    case BIGINT:
+                        // an exception can happen because of a type demotion from DOUBLE to BIGINT
                         return new AInt64((long) ((ADouble) sourceObject).getDoubleValue());
                     case FLOAT:
                         // an exception can happen because of a type demotion from DOUBLE to FLOAT
@@ -631,7 +631,7 @@
         ATypeTag sourceTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(sourceByteArray[s1]);
 
         if (sourceTypeTag != targetTypeTag) {
-            // source tag can be promoted to target tag (e.g. tag1: INT16, tag2: INT32)
+            // source tag can be promoted to target tag (e.g. tag1: SMALLINT, tag2: INTEGER)
             if (ATypeHierarchy.canPromote(sourceTypeTag, targetTypeTag)) {
                 convertComputer = ATypeHierarchy.getTypePromoteComputer(sourceTypeTag, targetTypeTag);;
                 convertComputer.convertType(sourceByteArray, s1 + 1, l1 - 1, out);
@@ -663,16 +663,16 @@
             throw new RuntimeDataException(ErrorCode.INVALID_FORMAT, name, argIndex);
         }
         switch (sourceTypeTag) {
-            case INT64:
+            case BIGINT:
                 value = (int) LongPointable.getLong(bytes, offset);
                 break;
-            case INT32:
+            case INTEGER:
                 value = IntegerPointable.getInteger(bytes, offset);
                 break;
-            case INT8:
+            case TINYINT:
                 value = bytes[offset];
                 break;
-            case INT16:
+            case SMALLINT:
                 value = ShortPointable.getShort(bytes, offset);
                 break;
             case FLOAT:
@@ -683,19 +683,21 @@
                 break;
             default:
                 throw new RuntimeDataException(ErrorCode.TYPE_MISMATCH, name, argIndex, sourceTypeTag,
-                        ATypeTag.INT8, ATypeTag.INT16, ATypeTag.INT32, ATypeTag.INT64, ATypeTag.FLOAT, ATypeTag.DOUBLE);
+                        ATypeTag.TINYINT, ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT,
+                        ATypeTag.DOUBLE);
 
         }
 
         return value;
     }
 
-    // Get a LONG (INT64) value from numeric types array. We assume the first byte contains the type tag.
+    // Get a LONG (bigint) value from numeric types array. We assume the first byte contains the type tag.
     public static long getLongValue(String name, int argIndex, byte[] bytes, int offset) throws HyracksDataException {
         return getLongValueWithDifferentTypeTagPosition(name, argIndex, bytes, offset + 1, offset);
     }
 
-    // Get a LONG (INT64) value from numeric types array. We assume the specific location of a byte array contains the type tag.
+    // Get a LONG (bigint) value from numeric types array. We assume the specific location of a byte array
+    // contains the type tag.
     private static long getLongValueWithDifferentTypeTagPosition(String name, int argIndex, byte[] bytes, int offset,
             int typeTagPosition) throws HyracksDataException {
         long value;
@@ -704,16 +706,16 @@
             throw new RuntimeDataException(ErrorCode.INVALID_FORMAT, name, argIndex);
         }
         switch (sourceTypeTag) {
-            case INT64:
+            case BIGINT:
                 value = LongPointable.getLong(bytes, offset);
                 break;
-            case INT32:
+            case INTEGER:
                 value = IntegerPointable.getInteger(bytes, offset);
                 break;
-            case INT8:
+            case TINYINT:
                 value = bytes[offset];
                 break;
-            case INT16:
+            case SMALLINT:
                 value = ShortPointable.getShort(bytes, offset);
                 break;
             case FLOAT:
@@ -724,7 +726,8 @@
                 break;
             default:
                 throw new RuntimeDataException(ErrorCode.TYPE_MISMATCH, name, argIndex, sourceTypeTag,
-                        ATypeTag.INT8, ATypeTag.INT16, ATypeTag.INT32, ATypeTag.INT64, ATypeTag.FLOAT, ATypeTag.DOUBLE);
+                        ATypeTag.TINYINT, ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT,
+                        ATypeTag.DOUBLE);
         }
 
         return value;
@@ -746,16 +749,16 @@
             throw new RuntimeDataException(ErrorCode.INVALID_FORMAT, name, argIndex);
         }
         switch (sourceTypeTag) {
-            case INT64:
+            case BIGINT:
                 value = LongPointable.getLong(bytes, offset);
                 break;
-            case INT32:
+            case INTEGER:
                 value = IntegerPointable.getInteger(bytes, offset);
                 break;
-            case INT8:
+            case TINYINT:
                 value = bytes[offset];
                 break;
-            case INT16:
+            case SMALLINT:
                 value = ShortPointable.getShort(bytes, offset);
                 break;
             case FLOAT:
@@ -766,7 +769,8 @@
                 break;
             default:
                 throw new RuntimeDataException(ErrorCode.TYPE_MISMATCH, name, argIndex, sourceTypeTag,
-                        ATypeTag.INT8, ATypeTag.INT16, ATypeTag.INT32, ATypeTag.INT64, ATypeTag.FLOAT, ATypeTag.DOUBLE);
+                        ATypeTag.TINYINT, ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT,
+                        ATypeTag.DOUBLE);
         }
 
         return value;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/AbstractIntegerTypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/AbstractIntegerTypeConvertComputer.java
index a18c0c0..c646288 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/AbstractIntegerTypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/AbstractIntegerTypeConvertComputer.java
@@ -38,23 +38,23 @@
         // Read source values
         switch (length) {
             case 1:
-                // INT8
+                // TINYINT
                 num = (data[start] & 0xff);
                 break;
 
             case 2:
-                // INT16
+                // SMALLINT
                 num = (short) ((data[start] << 8) | (data[start + 1] & 0xff));
                 break;
 
             case 4:
-                // INT32
+                // INTEGER
                 num = (int) (((data[start] & 0xff) << 24) | ((data[start + 1] & 0xff) << 16)
                         | ((data[start + 2] & 0xff) << 8) | (data[start + 3] & 0xff));
                 break;
 
             case 8:
-                // INT64
+                // BIGINT
                 num = (((long) (data[start] & 0xff) << 56) | ((long) (data[start + 1] & 0xff) << 48)
                         | ((long) (data[start + 2] & 0xff) << 40) | ((long) (data[start + 3] & 0xff) << 32)
                         | ((long) (data[start + 4] & 0xff) << 24) | ((long) (data[start + 5] & 0xff) << 16)
@@ -63,37 +63,38 @@
                 break;
 
             default:
-                throw new IOException("Can't convert integer types. The source type should be one of INT8/16/32/64.");
+                throw new IOException("Can't convert integer types. The source type should be one of "
+                        + "tinyint/smallint/integer/bigint.");
 
         }
 
         // Boundary check
         switch (targetType) {
-            case INT8:
+            case TINYINT:
                 if (num > Byte.MAX_VALUE || num < Byte.MIN_VALUE) {
                     throw new IOException("Source value " + num
-                            + " is out of range that INT8 can hold - INT8.MAX_VALUE:" + Byte.MAX_VALUE
-                            + ", INT8.MIN_VALUE:" + Byte.MIN_VALUE);
+                            + " is out of range that TINYINT can hold - TINYINT.MAX_VALUE:" + Byte.MAX_VALUE
+                            + ", TINYINT.MIN_VALUE:" + Byte.MIN_VALUE);
                 }
                 break;
 
-            case INT16:
+            case SMALLINT:
                 if (num > Short.MAX_VALUE || num < Short.MIN_VALUE) {
                     throw new IOException("Source value " + num
-                            + " is out of range that INT16 can hold - INT16.MAX_VALUE:" + Short.MAX_VALUE
-                            + ", INT16.MIN_VALUE:" + Short.MIN_VALUE);
+                            + " is out of range that SMALLINT can hold - SMALLINT.MAX_VALUE:" + Short.MAX_VALUE
+                            + ", SMALLINT.MIN_VALUE:" + Short.MIN_VALUE);
                 }
                 break;
 
-            case INT32:
+            case INTEGER:
                 if (num > Integer.MAX_VALUE || num < Integer.MIN_VALUE) {
                     throw new IOException("Source value " + num
-                            + " is out of range that INT32 can hold - INT32.MAX_VALUE:" + Integer.MAX_VALUE
-                            + ", INT32.MIN_VALUE:" + Integer.MIN_VALUE);
+                            + " is out of range that INTEGER can hold - INTEGER.MAX_VALUE:" + Integer.MAX_VALUE
+                            + ", INTEGER.MIN_VALUE:" + Integer.MIN_VALUE);
                 }
                 break;
 
-            case INT64:
+            case BIGINT:
             default:
                 break;
         }
@@ -103,18 +104,18 @@
         // Write actual target value
         switch (targetTypeLength) {
             case 1:
-                // INT8
+                // TINYINT
                 out.writeByte((byte) (num & 0xff));
                 break;
 
             case 2:
-                // INT16
+                // SMALLINT
                 out.writeByte((byte) ((num >> 8) & 0xff));
                 out.writeByte((byte) (num & 0xff));
                 break;
 
             case 4:
-                // INT32
+                // INTEGER
                 out.writeByte((byte) ((num >> 24) & 0xff));
                 out.writeByte((byte) ((num >> 16) & 0xff));
                 out.writeByte((byte) ((num >> 8) & 0xff));
@@ -122,7 +123,7 @@
                 break;
 
             case 8:
-                // INT64
+                // BIGINT
                 out.writeByte((byte) ((num >> 56) & 0xff));
                 out.writeByte((byte) ((num >> 48) & 0xff));
                 out.writeByte((byte) ((num >> 40) & 0xff));
@@ -134,7 +135,8 @@
                 break;
 
             default:
-                throw new IOException("Can't convert integer types. The target type should be one of INT8/16/32/64.");
+                throw new IOException("Can't convert integer types. The target type should be one of "
+                        + "tinyint/smallint/integer/bigint.");
 
         }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt16TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt16TypeConvertComputer.java
index dbe186b..f610bfe 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt16TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt16TypeConvertComputer.java
@@ -37,13 +37,13 @@
         double sourceValue = DoublePointable.getDouble(data, start);
         // Boundary check
         if (sourceValue > Short.MAX_VALUE || sourceValue < Short.MIN_VALUE) {
-            throw new IOException("Cannot convert Double to INT16 - Double value " + sourceValue
-                    + " is out of range that INT16 type can hold: INT16.MAX_VALUE:" + Short.MAX_VALUE
-                    + ", INT16.MIN_VALUE: " + Short.MIN_VALUE);
+            throw new IOException("Cannot convert Double to SMALLINT - Double value " + sourceValue
+                    + " is out of range that SMALLINT type can hold: SMALLINT.MAX_VALUE:" + Short.MAX_VALUE
+                    + ", SMALLINT.MIN_VALUE: " + Short.MIN_VALUE);
         }
         // Math.floor to truncate decimal portion
         short targetValue = (short) Math.floor(sourceValue);
-        out.writeByte(ATypeTag.INT16.serialize());
+        out.writeByte(ATypeTag.SMALLINT.serialize());
         out.writeShort(targetValue);
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt32TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt32TypeConvertComputer.java
index 985bbee..da974bb 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt32TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt32TypeConvertComputer.java
@@ -37,13 +37,13 @@
         double sourceValue = DoublePointable.getDouble(data, start);
         // Boundary check
         if (sourceValue > Integer.MAX_VALUE || sourceValue < Integer.MIN_VALUE) {
-            throw new IOException("Cannot convert Double to INT32 - Double value " + sourceValue
-                    + " is out of range that INT32 type can hold: INT32.MAX_VALUE:" + Integer.MAX_VALUE
-                    + ", INT32.MIN_VALUE: " + Integer.MIN_VALUE);
+            throw new IOException("Cannot convert Double to INTEGER - Double value " + sourceValue
+                    + " is out of range that INTEGER type can hold: INTEGER.MAX_VALUE:" + Integer.MAX_VALUE
+                    + ", INTEGER.MIN_VALUE: " + Integer.MIN_VALUE);
         }
         // Math.floor to truncate decimal portion
         int targetValue = (int) Math.floor(sourceValue);
-        out.writeByte(ATypeTag.INT32.serialize());
+        out.writeByte(ATypeTag.INTEGER.serialize());
         out.writeInt(targetValue);
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt64TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt64TypeConvertComputer.java
index 1cf19e9..26daa94 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt64TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt64TypeConvertComputer.java
@@ -37,13 +37,13 @@
         double sourceValue = DoublePointable.getDouble(data, start);
         // Boundary check
         if (sourceValue > Long.MAX_VALUE || sourceValue < Long.MIN_VALUE) {
-            throw new IOException("Cannot convert Double to INT64 - Double value " + sourceValue
-                    + " is out of range that INT64 type can hold: INT64.MAX_VALUE:" + Long.MAX_VALUE
-                    + ", INT64.MIN_VALUE: " + Long.MIN_VALUE);
+            throw new IOException("Cannot convert Double to BIGINT - Double value " + sourceValue
+                    + " is out of range that BIGINT type can hold: BIGINT.MAX_VALUE:" + Long.MAX_VALUE
+                    + ", BIGINT.MIN_VALUE: " + Long.MIN_VALUE);
         }
         // Math.floor to truncate decimal portion
         long targetValue = (long) Math.floor(sourceValue);
-        out.writeByte(ATypeTag.INT64.serialize());
+        out.writeByte(ATypeTag.BIGINT.serialize());
         out.writeLong(targetValue);
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt8TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt8TypeConvertComputer.java
index cd602b9..9b9fe12 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt8TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/DoubleToInt8TypeConvertComputer.java
@@ -37,13 +37,13 @@
         double sourceValue = DoublePointable.getDouble(data, start);
         // Boundary check
         if (sourceValue > Byte.MAX_VALUE || sourceValue < Byte.MIN_VALUE) {
-            throw new IOException("Cannot convert Double to INT8 - Double value " + sourceValue
-                    + " is out of range that INT8 type can hold: INT8.MAX_VALUE:" + Byte.MAX_VALUE
-                    + ", INT8.MIN_VALUE: " + Byte.MIN_VALUE);
+            throw new IOException("Cannot convert Double to TINYINT - Double value " + sourceValue
+                    + " is out of range that TINYINT type can hold: TINYINT.MAX_VALUE:" + Byte.MAX_VALUE
+                    + ", TINYINT.MIN_VALUE: " + Byte.MIN_VALUE);
         }
         // Math.floor to truncate decimal portion
         byte targetValue = (byte) Math.floor(sourceValue);
-        out.writeByte(ATypeTag.INT8.serialize());
+        out.writeByte(ATypeTag.TINYINT.serialize());
         out.writeByte(targetValue);
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt16TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt16TypeConvertComputer.java
index 3a69052..6ed8d06 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt16TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt16TypeConvertComputer.java
@@ -37,13 +37,13 @@
         float sourceValue = FloatPointable.getFloat(data, start);
         // Boundary check
         if (sourceValue > Short.MAX_VALUE || sourceValue < Short.MIN_VALUE) {
-            throw new IOException("Cannot convert Float to INT16 - Float value " + sourceValue
-                    + " is out of range that INT16 type can hold: INT16.MAX_VALUE:" + Short.MAX_VALUE
-                    + ", INT16.MIN_VALUE: " + Short.MIN_VALUE);
+            throw new IOException("Cannot convert Float to SMALLINT - Float value " + sourceValue
+                    + " is out of range that SMALLINT type can hold: SMALLINT.MAX_VALUE:" + Short.MAX_VALUE
+                    + ", SMALLINT.MIN_VALUE: " + Short.MIN_VALUE);
         }
         // Math.floor to truncate decimal portion
         short targetValue = (short) Math.floor(sourceValue);
-        out.writeByte(ATypeTag.INT16.serialize());
+        out.writeByte(ATypeTag.SMALLINT.serialize());
         out.writeShort(targetValue);
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt32TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt32TypeConvertComputer.java
index ba3b9ab..6c4751b 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt32TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt32TypeConvertComputer.java
@@ -37,13 +37,13 @@
         float sourceValue = FloatPointable.getFloat(data, start);
         // Boundary check
         if (sourceValue > Integer.MAX_VALUE || sourceValue < Integer.MIN_VALUE) {
-            throw new IOException("Cannot convert Float to INT32 - Float value " + sourceValue
-                    + " is out of range that INT32 type can hold: INT32.MAX_VALUE:" + Integer.MAX_VALUE
-                    + ", INT32.MIN_VALUE: " + Integer.MIN_VALUE);
+            throw new IOException("Cannot convert Float to INTEGER - Float value " + sourceValue
+                    + " is out of range that INTEGER type can hold: INTEGER.MAX_VALUE:" + Integer.MAX_VALUE
+                    + ", INTEGER.MIN_VALUE: " + Integer.MIN_VALUE);
         }
         // Math.floor to truncate decimal portion
         int targetValue = (int) Math.floor(sourceValue);
-        out.writeByte(ATypeTag.INT32.serialize());
+        out.writeByte(ATypeTag.INTEGER.serialize());
         out.writeInt(targetValue);
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt64TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt64TypeConvertComputer.java
index c88a3b5..43adddf 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt64TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt64TypeConvertComputer.java
@@ -37,13 +37,13 @@
         float sourceValue = FloatPointable.getFloat(data, start);
         // Boundary check
         if (sourceValue > Long.MAX_VALUE || sourceValue < Long.MIN_VALUE) {
-            throw new IOException("Cannot convert Float to INT64 - Float value " + sourceValue
-                    + " is out of range that INT64 type can hold: INT64.MAX_VALUE:" + Long.MAX_VALUE
-                    + ", INT64.MIN_VALUE: " + Long.MIN_VALUE);
+            throw new IOException("Cannot convert Float to BIGINT - Float value " + sourceValue
+                    + " is out of range that BIGINT type can hold: BIGINT.MAX_VALUE:" + Long.MAX_VALUE
+                    + ", BIGINT.MIN_VALUE: " + Long.MIN_VALUE);
         }
         // Math.floor to truncate decimal portion
         long targetValue = (long) Math.floor(sourceValue);
-        out.writeByte(ATypeTag.INT64.serialize());
+        out.writeByte(ATypeTag.BIGINT.serialize());
         out.writeLong(targetValue);
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt8TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt8TypeConvertComputer.java
index 21a941d..355fe4c 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt8TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/FloatToInt8TypeConvertComputer.java
@@ -37,13 +37,13 @@
         float sourceValue = FloatPointable.getFloat(data, start);
         // Boundary check
         if (sourceValue > Byte.MAX_VALUE || sourceValue < Byte.MIN_VALUE) {
-            throw new IOException("Cannot convert Float to INT8 - Float value " + sourceValue
-                    + " is out of range that INT8 type can hold: INT8.MAX_VALUE:" + Byte.MAX_VALUE
-                    + ", INT8.MIN_VALUE: " + Byte.MIN_VALUE);
+            throw new IOException("Cannot convert Float to TINYINT - Float value " + sourceValue
+                    + " is out of range that TINYINT type can hold: TINYINT.MAX_VALUE:" + Byte.MAX_VALUE
+                    + ", TINYINT.MIN_VALUE: " + Byte.MIN_VALUE);
         }
         // Math.floor to truncate decimal portion
         byte targetValue = (byte) Math.floor(sourceValue);
-        out.writeByte(ATypeTag.INT8.serialize());
+        out.writeByte(ATypeTag.TINYINT.serialize());
         out.writeByte(targetValue);
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToDoubleTypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToDoubleTypeConvertComputer.java
index 02ef947..0227937 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToDoubleTypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToDoubleTypeConvertComputer.java
@@ -41,23 +41,23 @@
         //
         switch (length) {
             case 1:
-                // INT8
+                // TINYINT
                 val = (data[start] & 0xff);
                 break;
 
             case 2:
-                // INT16
+                // SMALLINT
                 val = (short) ((data[start] << 8) | (data[start + 1] & 0xff));
                 break;
 
             case 4:
-                // INT32
+                // INTEGER
                 val = (int) (((data[start] & 0xff) << 24) | ((data[start + 1] & 0xff) << 16)
                         | ((data[start + 2] & 0xff) << 8) | (data[start + 3] & 0xff));
                 break;
 
             case 8:
-                // INT64
+                // BIGINT
                 val = (((long) (data[start] & 0xff) << 56) | ((long) (data[start + 1] & 0xff) << 48)
                         | ((long) (data[start + 2] & 0xff) << 40) | ((long) (data[start + 3] & 0xff) << 32)
                         | ((long) (data[start + 4] & 0xff) << 24) | ((long) (data[start + 5] & 0xff) << 16)
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToFloatTypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToFloatTypeConvertComputer.java
index f5b2d0c..85c4202 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToFloatTypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToFloatTypeConvertComputer.java
@@ -40,23 +40,23 @@
         //
         switch (length) {
             case 1:
-                // INT8
+                // TINYINT
                 val = (data[start] & 0xff);
                 break;
 
             case 2:
-                // INT16
+                // SMALLINT
                 val = (short) ((data[start] << 8) | (data[start + 1] & 0xff));
                 break;
 
             case 4:
-                // INT32
+                // INTEGER
                 val = (int) (((data[start] & 0xff) << 24) | ((data[start + 1] & 0xff) << 16)
                         | ((data[start + 2] & 0xff) << 8) | (data[start + 3] & 0xff));
                 break;
 
             case 8:
-                // INT64
+                // BIGINT
                 val = (((long) (data[start] & 0xff) << 56) | ((long) (data[start + 1] & 0xff) << 48)
                         | ((long) (data[start + 2] & 0xff) << 40) | ((long) (data[start + 3] & 0xff) << 32)
                         | ((long) (data[start + 4] & 0xff) << 24) | ((long) (data[start + 5] & 0xff) << 16)
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt16TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt16TypeConvertComputer.java
index 981f4a8..948e554 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt16TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt16TypeConvertComputer.java
@@ -33,7 +33,7 @@
 
     @Override
     public void convertType(byte[] data, int start, int length, DataOutput out) throws IOException {
-        convertIntegerType(data, start, length, out, ATypeTag.INT16, 2);
+        convertIntegerType(data, start, length, out, ATypeTag.SMALLINT, 2);
     }
 
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt32TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt32TypeConvertComputer.java
index 9867344..be370cb 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt32TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt32TypeConvertComputer.java
@@ -32,7 +32,7 @@
 
     @Override
     public void convertType(byte[] data, int start, int length, DataOutput out) throws IOException {
-        convertIntegerType(data, start, length, out, ATypeTag.INT32, 4);
+        convertIntegerType(data, start, length, out, ATypeTag.INTEGER, 4);
     }
 
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt64TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt64TypeConvertComputer.java
index c59c369..5234b59 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt64TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt64TypeConvertComputer.java
@@ -32,7 +32,7 @@
 
     @Override
     public void convertType(byte[] data, int start, int length, DataOutput out) throws IOException {
-        convertIntegerType(data, start, length, out, ATypeTag.INT64, 8);
+        convertIntegerType(data, start, length, out, ATypeTag.BIGINT, 8);
     }
 
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt8TypeConvertComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt8TypeConvertComputer.java
index b7b8f22..271ad25 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt8TypeConvertComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/hierachy/IntegerToInt8TypeConvertComputer.java
@@ -33,7 +33,7 @@
 
     @Override
     public void convertType(byte[] data, int start, int length, DataOutput out) throws IOException {
-        convertIntegerType(data, start, length, out, ATypeTag.INT8, 1);
+        convertIntegerType(data, start, length, out, ATypeTag.TINYINT, 1);
     }
 
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/ConstantExpressionUtil.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/ConstantExpressionUtil.java
index 28b3da2..7c7813d 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/ConstantExpressionUtil.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/ConstantExpressionUtil.java
@@ -60,12 +60,12 @@
     }
 
     public static Long getLongConstant(ILogicalExpression expr) {
-        final IAObject iaObject = getConstantIaObject(expr, ATypeTag.INT64);
+        final IAObject iaObject = getConstantIaObject(expr, ATypeTag.BIGINT);
         return iaObject != null ? ((AInt64) iaObject).getLongValue() : null;
     }
 
     public static Integer getIntConstant(ILogicalExpression expr) {
-        final IAObject iaObject = getConstantIaObject(expr, ATypeTag.INT32);
+        final IAObject iaObject = getConstantIaObject(expr, ATypeTag.INTEGER);
         return iaObject != null ? ((AInt32) iaObject).getIntegerValue() : null;
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java
index c524d28..37e8c05 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java
@@ -62,10 +62,10 @@
         switch (type) {
             case STRING:
             case BINARY:
-            case RECORD:
+            case OBJECT:
             case INTERVAL:
-            case ORDEREDLIST:
-            case UNORDEREDLIST:
+            case ARRAY:
+            case MULTISET:
             case POLYGON:
             case ANY:
                 return false;
@@ -118,18 +118,18 @@
             case NULL:
                 return 0;
             case BOOLEAN:
-            case INT8:
+            case TINYINT:
                 return 1;
-            case INT16:
+            case SMALLINT:
                 return 2;
-            case INT32:
+            case INTEGER:
             case FLOAT:
             case DATE:
             case YEARMONTHDURATION:
                 return 4;
             case TIME:
                 return 4;
-            case INT64:
+            case BIGINT:
             case DOUBLE:
             case DATETIME:
             case DAYTIMEDURATION:
@@ -173,19 +173,19 @@
                     int len = ByteArrayPointable.getContentLength(serNonTaggedAObject, offset);
                     return len + ByteArrayPointable.getNumberBytesToStoreMeta(len);
                 }
-            case RECORD:
+            case OBJECT:
                 if (tagged) {
                     return ARecordSerializerDeserializer.getRecordLength(serNonTaggedAObject, offset + 1) - 1;
                 } else {
                     return ARecordSerializerDeserializer.getRecordLength(serNonTaggedAObject, offset) - 1;
                 }
-            case ORDEREDLIST:
+            case ARRAY:
                 if (tagged) {
                     return AOrderedListSerializerDeserializer.getOrderedListLength(serNonTaggedAObject, offset + 1) - 1;
                 } else {
                     return AOrderedListSerializerDeserializer.getOrderedListLength(serNonTaggedAObject, offset) - 1;
                 }
-            case UNORDEREDLIST:
+            case MULTISET:
                 if (tagged) {
                     return AUnorderedListSerializerDeserializer.getUnorderedListLength(serNonTaggedAObject, offset + 1)
                             - 1;
@@ -249,7 +249,7 @@
         IAType type = keyType;
         ATypeTag typeTag = keyType.getTypeTag();
         // Extract item type from list.
-        if (typeTag == ATypeTag.UNORDEREDLIST || typeTag == ATypeTag.ORDEREDLIST) {
+        if (typeTag == ATypeTag.MULTISET || typeTag == ATypeTag.ARRAY) {
             AbstractCollectionType listType = (AbstractCollectionType) keyType;
             if (!listType.isTyped()) {
                 throw new AlgebricksException("Cannot build an inverted index on untyped lists.)");
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAvgAggregateFunction.java
index 2732200..8fad5e8 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAvgAggregateFunction.java
@@ -142,22 +142,22 @@
         }
         ++count;
         switch (typeTag) {
-            case INT8: {
+            case TINYINT: {
                 byte val = AInt8SerializerDeserializer.getByte(bytes, offset + 1);
                 sum += val;
                 break;
             }
-            case INT16: {
+            case SMALLINT: {
                 short val = AInt16SerializerDeserializer.getShort(bytes, offset + 1);
                 sum += val;
                 break;
             }
-            case INT32: {
+            case INTEGER: {
                 int val = AInt32SerializerDeserializer.getInt(bytes, offset + 1);
                 sum += val;
                 break;
             }
-            case INT64: {
+            case BIGINT: {
                 long val = AInt64SerializerDeserializer.getLong(bytes, offset + 1);
                 sum += val;
                 break;
@@ -235,7 +235,7 @@
                 // Ignore and return.
                 break;
             }
-            case RECORD: {
+            case OBJECT: {
                 // Expected.
                 ATypeTag aggType = ATypeTag.DOUBLE;
                 int nullBitmapSize = 0;
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableSumAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableSumAggregateFunction.java
index 7c1b612..b034c6e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableSumAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableSumAggregateFunction.java
@@ -108,22 +108,22 @@
         }
 
         switch (typeTag) {
-            case INT8: {
+            case TINYINT: {
                 byte val = AInt8SerializerDeserializer.getByte(bytes, offset + 1);
                 sum += val;
                 break;
             }
-            case INT16: {
+            case SMALLINT: {
                 short val = AInt16SerializerDeserializer.getShort(bytes, offset + 1);
                 sum += val;
                 break;
             }
-            case INT32: {
+            case INTEGER: {
                 int val = AInt32SerializerDeserializer.getInt(bytes, offset + 1);
                 sum += val;
                 break;
             }
-            case INT64: {
+            case BIGINT: {
                 long val = AInt64SerializerDeserializer.getLong(bytes, offset + 1);
                 sum += val;
                 break;
@@ -160,25 +160,25 @@
         double sum = BufferSerDeUtil.getDouble(state, start + SUM_OFFSET);
         try {
             switch (aggType) {
-                case INT8: {
+                case TINYINT: {
                     serde = SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AINT8);
                     aInt8.setValue((byte) sum);
                     serde.serialize(aInt8, out);
                     break;
                 }
-                case INT16: {
+                case SMALLINT: {
                     serde = SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AINT16);
                     aInt16.setValue((short) sum);
                     serde.serialize(aInt16, out);
                     break;
                 }
-                case INT32: {
+                case INTEGER: {
                     serde = SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AINT32);
                     aInt32.setValue((int) sum);
                     serde.serialize(aInt32, out);
                     break;
                 }
-                case INT64: {
+                case BIGINT: {
                     serde = SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AINT64);
                     aInt64.setValue((long) sum);
                     serde.serialize(aInt64, out);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAvgAggregateFunction.java
index 83d07f0..60e7127 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAvgAggregateFunction.java
@@ -140,22 +140,22 @@
         }
         ++count;
         switch (typeTag) {
-            case INT8: {
+            case TINYINT: {
                 byte val = AInt8SerializerDeserializer.getByte(data, offset + 1);
                 sum += val;
                 break;
             }
-            case INT16: {
+            case SMALLINT: {
                 short val = AInt16SerializerDeserializer.getShort(data, offset + 1);
                 sum += val;
                 break;
             }
-            case INT32: {
+            case INTEGER: {
                 int val = AInt32SerializerDeserializer.getInt(data, offset + 1);
                 sum += val;
                 break;
             }
-            case INT64: {
+            case BIGINT: {
                 long val = AInt64SerializerDeserializer.getLong(data, offset + 1);
                 sum += val;
                 break;
@@ -221,7 +221,7 @@
                 // Ignore and return.
                 break;
             }
-            case RECORD: {
+            case OBJECT: {
                 // Expected.
                 aggType = ATypeTag.DOUBLE;
                 int nullBitmapSize = 0;
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractSumAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractSumAggregateFunction.java
index 0bdd17a..a4a9ce3 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractSumAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractSumAggregateFunction.java
@@ -102,22 +102,22 @@
         }
 
         switch (typeTag) {
-            case INT8: {
+            case TINYINT: {
                 byte val = AInt8SerializerDeserializer.getByte(data, offset + 1);
                 sum += val;
                 break;
             }
-            case INT16: {
+            case SMALLINT: {
                 short val = AInt16SerializerDeserializer.getShort(data, offset + 1);
                 sum += val;
                 break;
             }
-            case INT32: {
+            case INTEGER: {
                 int val = AInt32SerializerDeserializer.getInt(data, offset + 1);
                 sum += val;
                 break;
             }
-            case INT64: {
+            case BIGINT: {
                 long val = AInt64SerializerDeserializer.getLong(data, offset + 1);
                 sum += val;
                 break;
@@ -148,25 +148,25 @@
         resultStorage.reset();
         try {
             switch (aggType) {
-                case INT8: {
+                case TINYINT: {
                     serde = SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AINT8);
                     aInt8.setValue((byte) sum);
                     serde.serialize(aInt8, resultStorage.getDataOutput());
                     break;
                 }
-                case INT16: {
+                case SMALLINT: {
                     serde = SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AINT16);
                     aInt16.setValue((short) sum);
                     serde.serialize(aInt16, resultStorage.getDataOutput());
                     break;
                 }
-                case INT32: {
+                case INTEGER: {
                     serde = SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AINT32);
                     aInt32.setValue((int) sum);
                     serde.serialize(aInt32, resultStorage.getDataOutput());
                     break;
                 }
-                case INT64: {
+                case BIGINT: {
                     serde = SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AINT64);
                     aInt64.setValue((long) sum);
                     serde.serialize(aInt64, resultStorage.getDataOutput());
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java
index 2435047..379c362 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java
@@ -108,19 +108,19 @@
         this.listLength = getListLength(data, startOff);
         ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[startOff + 1]);
         switch (tag) {
-            case INT64: {
+            case BIGINT: {
                 cmp = BinaryComparatorFactoryProvider.LONG_POINTABLE_INSTANCE.createBinaryComparator();
                 break;
             }
-            case INT32: {
+            case INTEGER: {
                 cmp = BinaryComparatorFactoryProvider.INTEGER_POINTABLE_INSTANCE.createBinaryComparator();
                 break;
             }
-            case INT16: {
+            case SMALLINT: {
                 cmp = BinaryComparatorFactoryProvider.SHORT_POINTABLE_INSTANCE.createBinaryComparator();
                 break;
             }
-            case INT8: {
+            case TINYINT: {
                 cmp = BinaryComparatorFactoryProvider.BYTE_POINTABLE_INSTANCE.createBinaryComparator();
                 break;
             }
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java
index 63e9e44..b6e9ae9 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java
@@ -104,7 +104,7 @@
                         rightStartOffset + typeIndicatorSize, edThresh);
             }
 
-            case ORDEREDLIST: {
+            case ARRAY: {
                 firstOrdListIter.reset(leftBytes, leftStartOffset);
                 secondOrdListIter.reset(rightBytes, rightStartOffset);
                 return (int) ed.computeSimilarity(firstOrdListIter, secondOrdListIter, edThresh);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java
index 2aa6688..eaf3368 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java
@@ -45,7 +45,7 @@
                 return ed.UTF8StringEditDistanceContains(leftBytes, leftStartOffset + typeIndicatorSize, rightBytes,
                         rightStartOffset + typeIndicatorSize, edThresh);
             }
-            case ORDEREDLIST: {
+            case ARRAY: {
                 firstOrdListIter.reset(leftBytes, leftStartOffset);
                 secondOrdListIter.reset(rightBytes, rightStartOffset);
                 return ed.getSimilarityContains(firstOrdListIter, secondOrdListIter, edThresh);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
index dbe99b9..3df6e83 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
@@ -110,7 +110,7 @@
                 return ed.getActualUTF8StringEditDistanceVal(leftBytes, leftStartOffset + typeIndicatorSize, rightBytes,
                         rightStartOffset + typeIndicatorSize, -1);
             }
-            case ORDEREDLIST: {
+            case ARRAY: {
                 firstOrdListIter.reset(leftBytes, leftStartOffset);
                 secondOrdListIter.reset(rightBytes, rightStartOffset);
                 return (int) ed.computeSimilarity(firstOrdListIter, secondOrdListIter);
@@ -130,12 +130,12 @@
         }
 
         // Since they are equal, check one tag is enough.
-        if (typeTag1 != ATypeTag.STRING && typeTag1 != ATypeTag.ORDEREDLIST) { // could be an list
+        if (typeTag1 != ATypeTag.STRING && typeTag1 != ATypeTag.ARRAY) { // could be an list
             throw new TypeMismatchException(BuiltinFunctions.EDIT_DISTANCE, 0, typeTag1.serialize(),
                     ATypeTag.SERIALIZED_STRING_TYPE_TAG, ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
         }
 
-        if (typeTag1 == ATypeTag.ORDEREDLIST) {
+        if (typeTag1 == ATypeTag.ARRAY) {
             itemTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER
                     .deserialize(argPtr1.getByteArray()[argPtr1.getStartOffset() + 1]);
             if (itemTypeTag == ATypeTag.ANY) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FullTextContainsEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FullTextContainsEvaluator.java
index 0a48f6f..a7160ac 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FullTextContainsEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FullTextContainsEvaluator.java
@@ -216,13 +216,13 @@
     void resetQueryArrayAndRight(byte[] arg2Array, ATypeTag typeTag2, IPointable arg2) throws HyracksDataException {
         // If the right side is an (un)ordered list, we need to apply the (un)ordered list tokenizer.
         switch (typeTag2) {
-            case ORDEREDLIST:
+            case ARRAY:
                 tokenizerForRightArray = BinaryTokenizerFactoryProvider.INSTANCE
-                        .getWordTokenizerFactory(ATypeTag.ORDEREDLIST, false, true).createTokenizer();
+                        .getWordTokenizerFactory(ATypeTag.ARRAY, false, true).createTokenizer();
                 break;
-            case UNORDEREDLIST:
+            case MULTISET:
                 tokenizerForRightArray = BinaryTokenizerFactoryProvider.INSTANCE
-                        .getWordTokenizerFactory(ATypeTag.UNORDEREDLIST, false, true).createTokenizer();
+                        .getWordTokenizerFactory(ATypeTag.MULTISET, false, true).createTokenizer();
                 break;
             case STRING:
                 tokenizerForRightArray = BinaryTokenizerFactoryProvider.INSTANCE
@@ -271,7 +271,7 @@
             // the length data in the beginning. Since KeyEntry keeps the length data
             // as a parameter, we need to adjust token offset and length in this case.
             // e.g., 8database <--- we only need to store the offset of 'd' and length 8.
-            if (typeTag2 == ATypeTag.ORDEREDLIST || typeTag2 == ATypeTag.UNORDEREDLIST) {
+            if (typeTag2 == ATypeTag.ARRAY || typeTag2 == ATypeTag.MULTISET) {
                 // How many bytes are required to store the length of the given token?
                 numBytesToStoreLength = UTF8StringUtil.getNumBytesToStoreLength(
                         UTF8StringUtil.getUTFLength(tokenizerForRightArray.getToken().getData(),
@@ -315,8 +315,8 @@
                             "Phrase in Full-text search is not supported. An expression should include only one word.");
                 }
                 break;
-            case ORDEREDLIST:
-            case UNORDEREDLIST:
+            case ARRAY:
+            case MULTISET:
                 for (int j = 0; j < tokenLength; j++) {
                     if (DelimitedUTF8StringBinaryTokenizer.isSeparator((char) refArray[tokenOffset + j])) {
                         throw new HyracksDataException(
@@ -405,7 +405,7 @@
      * The argument2 should be a string or an (un)ordered list.
      */
     protected boolean checkArgTypes(ATypeTag typeTag1, ATypeTag typeTag2) throws HyracksDataException {
-        if ((typeTag1 != ATypeTag.STRING) || (typeTag2 != ATypeTag.ORDEREDLIST && typeTag2 != ATypeTag.UNORDEREDLIST
+        if ((typeTag1 != ATypeTag.STRING) || (typeTag2 != ATypeTag.ARRAY && typeTag2 != ATypeTag.MULTISET
                 && !ATypeHierarchy.isCompatible(typeTag1, typeTag2))) {
             return false;
         }
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/ListAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/ListAccessor.java
index 9783284..c03cfa6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/ListAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/ListAccessor.java
@@ -77,7 +77,7 @@
     }
 
     public int getItemOffset(int itemIndex) throws AsterixException {
-        if (listType == ATypeTag.UNORDEREDLIST) {
+        if (listType == ATypeTag.MULTISET) {
             return AUnorderedListSerializerDeserializer.getItemOffset(listBytes, start, itemIndex);
         } else {
             return AOrderedListSerializerDeserializer.getItemOffset(listBytes, start, itemIndex);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
index ab817bd..f69248d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
@@ -240,11 +240,11 @@
 
     protected boolean checkArgTypes(ATypeTag typeTag1, ATypeTag typeTag2) throws HyracksDataException {
         switch (typeTag1) {
-            case ORDEREDLIST: {
+            case ARRAY: {
                 firstListIter = fstOrdListIter;
                 break;
             }
-            case UNORDEREDLIST: {
+            case MULTISET: {
                 firstListIter = fstUnordListIter;
                 break;
             }
@@ -254,11 +254,11 @@
             }
         }
         switch (typeTag2) {
-            case ORDEREDLIST: {
+            case ARRAY: {
                 secondListIter = sndOrdListIter;
                 break;
             }
-            case UNORDEREDLIST: {
+            case MULTISET: {
                 secondListIter = sndUnordListIter;
                 break;
             }
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/ComparisonHelper.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/ComparisonHelper.java
index c9be11f..e4aa4ad 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/ComparisonHelper.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/ComparisonHelper.java
@@ -77,13 +77,13 @@
     public int compare(ATypeTag typeTag1, ATypeTag typeTag2, IPointable arg1, IPointable arg2)
             throws HyracksDataException {
         switch (typeTag1) {
-            case INT8:
+            case TINYINT:
                 return compareInt8WithArg(typeTag2, arg1, arg2);
-            case INT16:
+            case SMALLINT:
                 return compareInt16WithArg(typeTag2, arg1, arg2);
-            case INT32:
+            case INTEGER:
                 return compareInt32WithArg(typeTag2, arg1, arg2);
-            case INT64:
+            case BIGINT:
                 return compareInt64WithArg(typeTag2, arg1, arg2);
             case FLOAT:
                 return compareFloatWithArg(typeTag2, arg1, arg2);
@@ -190,13 +190,13 @@
 
         double s = ADoubleSerializerDeserializer.getDouble(leftBytes, leftOffset);
         switch (typeTag2) {
-            case INT8:
+            case TINYINT:
                 return compareDouble(s, AInt8SerializerDeserializer.getByte(rightBytes, rightOffset));
-            case INT16:
+            case SMALLINT:
                 return compareDouble(s, AInt16SerializerDeserializer.getShort(rightBytes, rightOffset));
-            case INT32:
+            case INTEGER:
                 return compareDouble(s, AInt32SerializerDeserializer.getInt(rightBytes, rightOffset));
-            case INT64:
+            case BIGINT:
                 return compareDouble(s, AInt64SerializerDeserializer.getLong(rightBytes, rightOffset));
             case FLOAT:
                 return compareDouble(s, AFloatSerializerDeserializer.getFloat(rightBytes, rightOffset));
@@ -217,13 +217,13 @@
 
         float s = FloatPointable.getFloat(leftBytes, leftOffset);
         switch (typeTag2) {
-            case INT8:
+            case TINYINT:
                 return compareFloat(s, AInt8SerializerDeserializer.getByte(rightBytes, rightOffset));
-            case INT16:
+            case SMALLINT:
                 return compareFloat(s, AInt16SerializerDeserializer.getShort(rightBytes, rightOffset));
-            case INT32:
+            case INTEGER:
                 return compareFloat(s, AInt32SerializerDeserializer.getInt(rightBytes, rightOffset));
-            case INT64:
+            case BIGINT:
                 return compareFloat(s, AInt64SerializerDeserializer.getLong(rightBytes, rightOffset));
             case FLOAT:
                 return compareFloat(s, AFloatSerializerDeserializer.getFloat(rightBytes, rightOffset));
@@ -243,13 +243,13 @@
 
         long s = AInt64SerializerDeserializer.getLong(leftBytes, leftOffset);
         switch (typeTag2) {
-            case INT8:
+            case TINYINT:
                 return compareLong(s, AInt8SerializerDeserializer.getByte(rightBytes, rightOffset));
-            case INT16:
+            case SMALLINT:
                 return compareLong(s, AInt16SerializerDeserializer.getShort(rightBytes, rightOffset));
-            case INT32:
+            case INTEGER:
                 return compareLong(s, AInt32SerializerDeserializer.getInt(rightBytes, rightOffset));
-            case INT64:
+            case BIGINT:
                 return compareLong(s, AInt64SerializerDeserializer.getLong(rightBytes, rightOffset));
             case FLOAT:
                 return compareFloat(s, AFloatSerializerDeserializer.getFloat(rightBytes, rightOffset));
@@ -269,19 +269,19 @@
 
         int s = IntegerPointable.getInteger(leftBytes, leftOffset);
         switch (typeTag2) {
-            case INT8: {
+            case TINYINT: {
                 byte v2 = AInt8SerializerDeserializer.getByte(rightBytes, rightOffset);
                 return compareInt(s, v2);
             }
-            case INT16: {
+            case SMALLINT: {
                 short v2 = AInt16SerializerDeserializer.getShort(rightBytes, rightOffset);
                 return compareInt(s, v2);
             }
-            case INT32: {
+            case INTEGER: {
                 int v2 = AInt32SerializerDeserializer.getInt(rightBytes, rightOffset);
                 return compareInt(s, v2);
             }
-            case INT64: {
+            case BIGINT: {
                 long v2 = AInt64SerializerDeserializer.getLong(rightBytes, rightOffset);
                 return compareLong(s, v2);
             }
@@ -307,19 +307,19 @@
 
         short s = AInt16SerializerDeserializer.getShort(leftBytes, leftOffset);
         switch (typeTag2) {
-            case INT8: {
+            case TINYINT: {
                 byte v2 = AInt8SerializerDeserializer.getByte(rightBytes, rightOffset);
                 return compareShort(s, v2);
             }
-            case INT16: {
+            case SMALLINT: {
                 short v2 = AInt16SerializerDeserializer.getShort(rightBytes, rightOffset);
                 return compareShort(s, v2);
             }
-            case INT32: {
+            case INTEGER: {
                 int v2 = AInt32SerializerDeserializer.getInt(rightBytes, rightOffset);
                 return compareInt(s, v2);
             }
-            case INT64: {
+            case BIGINT: {
                 long v2 = AInt64SerializerDeserializer.getLong(rightBytes, rightOffset);
                 return compareLong(s, v2);
             }
@@ -346,13 +346,13 @@
 
         byte s = AInt8SerializerDeserializer.getByte(leftBytes, leftStart);
         switch (typeTag2) {
-            case INT8:
+            case TINYINT:
                 return compareByte(s, AInt8SerializerDeserializer.getByte(rightBytes, rightStart));
-            case INT16:
+            case SMALLINT:
                 return compareShort(s, AInt16SerializerDeserializer.getShort(rightBytes, rightStart));
-            case INT32:
+            case INTEGER:
                 return compareInt(s, AInt32SerializerDeserializer.getInt(rightBytes, rightStart));
-            case INT64:
+            case BIGINT:
                 return compareLong(s, AInt64SerializerDeserializer.getLong(rightBytes, rightStart));
             case FLOAT:
                 return compareFloat(s, AFloatSerializerDeserializer.getFloat(rightBytes, rightStart));
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
index d75c89d..681ff16 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
@@ -90,22 +90,22 @@
                                 builder.reset(baaos, len);
                                 int startOffset = offset + 1;
                                 switch (tt) {
-                                    case INT8: {
+                                    case TINYINT: {
                                         int i = AInt8SerializerDeserializer.getByte(serString, startOffset);
                                         builder.appendString(String.valueOf(i));
                                         break;
                                     }
-                                    case INT16: {
+                                    case SMALLINT: {
                                         int i = AInt16SerializerDeserializer.getShort(serString, startOffset);
                                         builder.appendString(String.valueOf(i));
                                         break;
                                     }
-                                    case INT32: {
+                                    case INTEGER: {
                                         int i = AInt32SerializerDeserializer.getInt(serString, startOffset);
                                         builder.appendString(String.valueOf(i));
                                         break;
                                     }
-                                    case INT64: {
+                                    case BIGINT: {
                                         long l = AInt64SerializerDeserializer.getLong(serString, startOffset);
                                         builder.appendString(String.valueOf(l));
                                         break;
@@ -136,13 +136,13 @@
                                     case YEARMONTHDURATION:
                                     case DAYTIMEDURATION:
                                     case INTERVAL:
-                                    case ORDEREDLIST:
+                                    case ARRAY:
                                     case POINT:
                                     case POINT3D:
                                     case RECTANGLE:
                                     case POLYGON:
-                                    case RECORD:
-                                    case UNORDEREDLIST:
+                                    case OBJECT:
+                                    case MULTISET:
                                     case UUID:
                                     default:
                                         throw new UnsupportedTypeException(getIdentifier(), serString[offset]);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
index 3ba696b..45e9ee1 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
@@ -152,22 +152,22 @@
 
                             typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[offset]);
                             switch (typeTag) {
-                                case INT8:
+                                case TINYINT:
                                     currentType = typeInt8;
                                     operandsInteger[i] = AInt8SerializerDeserializer.getByte(bytes, offset + 1);
                                     operandsFloating[i] = operandsInteger[i];
                                     break;
-                                case INT16:
+                                case SMALLINT:
                                     currentType = typeInt16;
                                     operandsInteger[i] = AInt16SerializerDeserializer.getShort(bytes, offset + 1);
                                     operandsFloating[i] = operandsInteger[i];
                                     break;
-                                case INT32:
+                                case INTEGER:
                                     currentType = typeInt32;
                                     operandsInteger[i] = AInt32SerializerDeserializer.getInt(bytes, offset + 1);
                                     operandsFloating[i] = operandsInteger[i];
                                     break;
-                                case INT64:
+                                case BIGINT:
                                     currentType = typeInt64;
                                     operandsInteger[i] = AInt64SerializerDeserializer.getLong(bytes, offset + 1);
                                     operandsFloating[i] = operandsInteger[i];
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeDescriptor.java
index 95eaac6..22f1e5b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeDescriptor.java
@@ -145,11 +145,11 @@
     private IVisitablePointable allocatePointableForAny(IAType type) {
         ATypeTag tag = type.getTypeTag();
         switch (tag) {
-            case RECORD:
+            case OBJECT:
                 return allocator.allocateFieldValue(DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE);
-            case ORDEREDLIST:
+            case ARRAY:
                 return allocator.allocateFieldValue(DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE);
-            case UNORDEREDLIST:
+            case MULTISET:
                 return allocator.allocateFieldValue(DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE);
             default:
                 return allocator.allocateFieldValue(null);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
index a9ef72e..09e15b5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
@@ -81,14 +81,14 @@
                             int offset = inputArgList.getStartOffset();
                             int size;
 
-                            if (ATypeTag.VALUE_TYPE_MAPPING[serOrderedList[offset]] != ATypeTag.ORDEREDLIST) {
+                            if (ATypeTag.VALUE_TYPE_MAPPING[serOrderedList[offset]] != ATypeTag.ARRAY) {
                                 throw new TypeMismatchException(getIdentifier().getName(), 0, serOrderedList[offset]);
                             } else {
                                 switch (ATypeTag.VALUE_TYPE_MAPPING[serOrderedList[offset + 1]]) {
-                                    case INT8:
-                                    case INT16:
-                                    case INT32:
-                                    case INT64:
+                                    case TINYINT:
+                                    case SMALLINT:
+                                    case INTEGER:
+                                    case BIGINT:
                                     case FLOAT:
                                     case DOUBLE:
                                     case ANY:
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceListIsFilterableDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceListIsFilterableDescriptor.java
index 7029a1a..9c4fb41 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceListIsFilterableDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceListIsFilterableDescriptor.java
@@ -115,10 +115,10 @@
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[offset]);
             long listLen;
             switch (typeTag) {
-                case UNORDEREDLIST:
+                case MULTISET:
                     listLen = AUnorderedListSerializerDeserializer.getNumberOfItems(bytes, offset);
                     break;
-                case ORDEREDLIST:
+                case ARRAY:
                     listLen = AOrderedListSerializerDeserializer.getNumberOfItems(bytes, offset);
                     break;
                 default:
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
index 2aec8fb..427e6eb 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
@@ -109,19 +109,19 @@
                             int offset = argPtr.getStartOffset();
                             typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]);
                             switch (typeTag) {
-                                case INT8:
+                                case TINYINT:
                                     metInt8 = true;
                                     operands[i] = AInt8SerializerDeserializer.getByte(data, offset + 1);
                                     break;
-                                case INT16:
+                                case SMALLINT:
                                     metInt16 = true;
                                     operands[i] = AInt16SerializerDeserializer.getShort(data, offset + 1);
                                     break;
-                                case INT32:
+                                case INTEGER:
                                     metInt32 = true;
                                     operands[i] = AInt32SerializerDeserializer.getInt(data, offset + 1);
                                     break;
-                                case INT64:
+                                case BIGINT:
                                     metInt64 = true;
                                     operands[i] = AInt64SerializerDeserializer.getLong(data, offset + 1);
                                     break;
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractSubBinaryEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractSubBinaryEvaluator.java
index 688e9af..d777bc7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractSubBinaryEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractSubBinaryEvaluator.java
@@ -38,7 +38,7 @@
     private byte[] metaBuffer = new byte[5];
     protected final String functionName;
 
-    private static final ATypeTag[] EXPECTED_INPUT_TAGS = { ATypeTag.BINARY, ATypeTag.INT32 };
+    private static final ATypeTag[] EXPECTED_INPUT_TAGS = { ATypeTag.BINARY, ATypeTag.INTEGER };
 
     public AbstractSubBinaryEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory[] copyEvaluatorFactories,
             String functionName) throws HyracksDataException {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedEvalFactory.java
index f13771e..2da8e90 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedEvalFactory.java
@@ -145,7 +145,7 @@
                                         BuiltinFunctions.FIELD_ACCESS_NESTED.getName(),
                                         serializedTypeTag);
                             }
-                            if (subType.getTypeTag() == ATypeTag.RECORD) {
+                            if (subType.getTypeTag() == ATypeTag.OBJECT) {
                                 recTypeInfos[pathIndex].reset((ARecordType) subType);
                             }
                         }
@@ -173,7 +173,7 @@
                             return;
                         }
                         subType = ((ARecordType) subType).getFieldTypes()[subFieldIndex];
-                        if (subType.getTypeTag() == ATypeTag.RECORD && pathIndex + 1 < fieldPointables.length) {
+                        if (subType.getTypeTag() == ATypeTag.OBJECT && pathIndex + 1 < fieldPointables.length) {
                             // Move to the next Depth
                             recTypeInfos[pathIndex + 1].reset((ARecordType) subType);
                         }
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java
index 8d4f8c2..111557a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java
@@ -203,7 +203,7 @@
 
                             // Get the fields from a list of records
                             for (int i = 0; i < inputFields.size(); i++) {
-                                if (!PointableHelper.sameType(ATypeTag.RECORD, inputFields.get(i))) {
+                                if (!PointableHelper.sameType(ATypeTag.OBJECT, inputFields.get(i))) {
                                     throw new AsterixException("Expected list of record, got "
                                             + PointableHelper.getTypeTag(inputFields.get(i)));
                                 }
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordFieldsUtil.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordFieldsUtil.java
index 92848b3..6127c28 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordFieldsUtil.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordFieldsUtil.java
@@ -289,19 +289,19 @@
     }
 
     private ARecordPointable getRecordPointable() {
-        return (ARecordPointable) recordPointablePool.allocate(ATypeTag.RECORD);
+        return (ARecordPointable) recordPointablePool.allocate(ATypeTag.OBJECT);
     }
 
     private AListPointable getListPointable() {
-        return (AListPointable) listPointablePool.allocate(ATypeTag.ORDEREDLIST);
+        return (AListPointable) listPointablePool.allocate(ATypeTag.ARRAY);
     }
 
     private IARecordBuilder getRecordBuilder() {
-        return recordBuilderPool.allocate(ATypeTag.RECORD);
+        return recordBuilderPool.allocate(ATypeTag.OBJECT);
     }
 
     private OrderedListBuilder getOrderedListBuilder() {
-        return (OrderedListBuilder) listBuilderPool.allocate(ATypeTag.ORDEREDLIST);
+        return (OrderedListBuilder) listBuilderPool.allocate(ATypeTag.ARRAY);
     }
 
     private ArrayBackedValueStorage getTempBuffer() {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordMergeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordMergeDescriptor.java
index 650581b..0b432ac 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordMergeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordMergeDescriptor.java
@@ -154,8 +154,8 @@
                                 if (PointableHelper.isEqual(leftName, rightName)
                                         && !deepEqualAssesor.isEqual(leftValue, rightValue)) {
                                     //Field was found on the right and are subrecords, merge them
-                                    if (PointableHelper.sameType(ATypeTag.RECORD, rightType)
-                                            && PointableHelper.sameType(ATypeTag.RECORD, leftType)) {
+                                    if (PointableHelper.sameType(ATypeTag.OBJECT, rightType)
+                                            && PointableHelper.sameType(ATypeTag.OBJECT, leftType)) {
                                         //We are merging two sub records
                                         addFieldToSubRecord(combinedType, leftName, leftValue, rightValue,
                                                 openFromParent, nestedLevel);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsEvalFactory.java
index 01657f6..2f55cd7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsEvalFactory.java
@@ -163,7 +163,7 @@
                 int pos = runtimeRecordTypeInfo.getFieldIndex(fieldNamePointable.getByteArray(),
                         fieldNamePointable.getStartOffset() + 1, fieldNamePointable.getLength() - 1);
                 if (pos >= 0) { // Closed field
-                    if (PointableHelper.sameType(ATypeTag.RECORD, fieldTypePointable)) {
+                    if (PointableHelper.sameType(ATypeTag.OBJECT, fieldTypePointable)) {
                         processRecord((ARecordType) requiredType.getFieldTypes()[pos],
                                 (ARecordVisitablePointable) fieldValuePointable, inputList, nestedLevel + 1);
                         tabvs.reset();
@@ -173,7 +173,7 @@
                         rbStack.get(nestedLevel).addField(pos, fieldValuePointable);
                     }
                 } else { // Open field
-                    if (PointableHelper.sameType(ATypeTag.RECORD, fieldTypePointable)) {
+                    if (PointableHelper.sameType(ATypeTag.OBJECT, fieldTypePointable)) {
                         processRecord(null, (ARecordVisitablePointable) fieldValuePointable, inputList,
                                 nestedLevel + 1);
                         tabvs.reset();
@@ -192,7 +192,7 @@
                 int pathLen = recordPath.size();
                 for (int i = 0; i < items.size(); i++) {
                     IVisitablePointable item = items.get(i);
-                    if (PointableHelper.sameType(ATypeTag.ORDEREDLIST, typeTags.get(i))) {
+                    if (PointableHelper.sameType(ATypeTag.ARRAY, typeTags.get(i))) {
                         List<IVisitablePointable> inputPathItems = ((AListVisitablePointable) item).getItems();
 
                         if (pathLen == inputPathItems.size()) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
index 886eba5..d4db02e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
@@ -91,16 +91,16 @@
                         int offset = argPtr.getStartOffset();
                         ATypeTag argPtrTypeTag = ATypeTag.VALUE_TYPE_MAPPING[bytes[offset]];
                         switch (argPtrTypeTag) {
-                            case INT8:
+                            case TINYINT:
                                 aDatetime.setValue(AInt8SerializerDeserializer.getByte(bytes, offset + 1));
                                 break;
-                            case INT16:
+                            case SMALLINT:
                                 aDatetime.setValue(AInt16SerializerDeserializer.getShort(bytes, offset + 1));
                                 break;
-                            case INT32:
+                            case INTEGER:
                                 aDatetime.setValue(AInt32SerializerDeserializer.getInt(bytes, offset + 1));
                                 break;
-                            case INT64:
+                            case BIGINT:
                                 aDatetime.setValue(AInt64SerializerDeserializer.getLong(bytes, offset + 1));
                                 break;
                             default:
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java
index c16f740..2bbbd5c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java
@@ -92,16 +92,16 @@
                         ATypeTag argPtrTypeTag = ATypeTag.VALUE_TYPE_MAPPING[bytes[offset]];
 
                         switch (argPtrTypeTag) {
-                            case INT8:
+                            case TINYINT:
                                 aDatetime.setValue(AInt8SerializerDeserializer.getByte(bytes, offset + 1) * 1000l);
                                 break;
-                            case INT16:
+                            case SMALLINT:
                                 aDatetime.setValue(AInt16SerializerDeserializer.getShort(bytes, offset + 1) * 1000l);
                                 break;
-                            case INT32:
+                            case INTEGER:
                                 aDatetime.setValue(AInt32SerializerDeserializer.getInt(bytes, offset + 1) * 1000l);
                                 break;
-                            case INT64:
+                            case BIGINT:
                                 aDatetime.setValue(AInt64SerializerDeserializer.getLong(bytes, offset + 1) * 1000l);
                                 break;
                             default:
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
index 704e334..38eaa1b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
@@ -87,16 +87,16 @@
 
                         ATypeTag argPtrTypeTag = ATypeTag.VALUE_TYPE_MAPPING[bytes[offset]];
                         switch (argPtrTypeTag) {
-                            case INT8:
+                            case TINYINT:
                                 aDuration.setValue(0, AInt8SerializerDeserializer.getByte(bytes, offset + 1));
                                 break;
-                            case INT16:
+                            case SMALLINT:
                                 aDuration.setValue(0, AInt16SerializerDeserializer.getShort(bytes, offset + 1));
                                 break;
-                            case INT32:
+                            case INTEGER:
                                 aDuration.setValue(0, AInt32SerializerDeserializer.getInt(bytes, offset + 1));
                                 break;
-                            case INT64:
+                            case BIGINT:
                                 aDuration.setValue(0, AInt64SerializerDeserializer.getLong(bytes, offset + 1));
                                 break;
                             default:
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
index 01aff1a..e3ab7b3 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
@@ -121,10 +121,10 @@
     private Map<FunctionIdentifier, FunctionTypeInferer> functionTypeInferers = new HashMap<>();
 
     static {
-        typeToValueParserFactMap.put(ATypeTag.INT32, IntegerParserFactory.INSTANCE);
+        typeToValueParserFactMap.put(ATypeTag.INTEGER, IntegerParserFactory.INSTANCE);
         typeToValueParserFactMap.put(ATypeTag.FLOAT, FloatParserFactory.INSTANCE);
         typeToValueParserFactMap.put(ATypeTag.DOUBLE, DoubleParserFactory.INSTANCE);
-        typeToValueParserFactMap.put(ATypeTag.INT64, LongParserFactory.INSTANCE);
+        typeToValueParserFactMap.put(ATypeTag.BIGINT, LongParserFactory.INSTANCE);
         typeToValueParserFactMap.put(ATypeTag.STRING, UTF8StringParserFactory.INSTANCE);
     }
 
@@ -496,7 +496,7 @@
                 AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
                 IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue());
                 switch (t.getTypeTag()) {
-                    case RECORD: {
+                    case OBJECT: {
                         fd.setImmutableStates(t);
                         break;
                     }
@@ -504,7 +504,7 @@
                         AUnionType unionT = (AUnionType) t;
                         if (unionT.isUnknownableType()) {
                             IAType t2 = unionT.getActualType();
-                            if (t2.getTypeTag() == ATypeTag.RECORD) {
+                            if (t2.getTypeTag() == ATypeTag.OBJECT) {
                                 fd.setImmutableStates(t2);
                                 break;
                             }
@@ -531,7 +531,7 @@
                 }
 
                 switch (t.getTypeTag()) {
-                    case RECORD: {
+                    case OBJECT: {
                         fd.setImmutableStates(t, listFieldPath);
                         break;
                     }
@@ -551,7 +551,7 @@
                 AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
                 IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue());
                 ATypeTag typeTag = t.getTypeTag();
-                if (typeTag.equals(ATypeTag.RECORD)) {
+                if (typeTag.equals(ATypeTag.OBJECT)) {
                     fd.setImmutableStates(t);
                 } else if (typeTag.equals(ATypeTag.ANY)) {
                     fd.setImmutableStates(RecordUtil.FULLY_OPEN_RECORD_TYPE);
@@ -567,7 +567,7 @@
                 AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
                 IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue());
                 ATypeTag typeTag = t.getTypeTag();
-                if (typeTag.equals(ATypeTag.RECORD)) {
+                if (typeTag.equals(ATypeTag.OBJECT)) {
                     fd.setImmutableStates(t);
                 } else if (typeTag.equals(ATypeTag.ANY)) {
                     fd.setImmutableStates(RecordUtil.FULLY_OPEN_RECORD_TYPE);
@@ -583,7 +583,7 @@
                 AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
                 IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue());
                 ATypeTag typeTag = t.getTypeTag();
-                if (typeTag.equals(ATypeTag.RECORD)) {
+                if (typeTag.equals(ATypeTag.OBJECT)) {
                     fd.setImmutableStates(t);
                 } else if (typeTag.equals(ATypeTag.ANY)) {
                     fd.setImmutableStates(RecordUtil.FULLY_OPEN_RECORD_TYPE);
@@ -675,13 +675,13 @@
                                     return 1;
                                 case NULL:
                                     return 1;
-                                case INT8:
+                                case TINYINT:
                                     return 2;
-                                case INT16:
+                                case SMALLINT:
                                     return 3;
-                                case INT32:
+                                case INTEGER:
                                     return 5;
-                                case INT64:
+                                case BIGINT:
                                     return 9;
                                 default:
                                     return -1;
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java
index f2eb35e..e4a94a9 100644
--- a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java
@@ -19,16 +19,11 @@
 package org.apache.asterix.tools.datagen;
 
 import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.DataInputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.IOException;
-import java.io.InputStreamReader;
 import java.io.PrintStream;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -222,7 +217,7 @@
             this.act = act;
             this.min = min;
             this.max = max;
-            if (act.getTypeTag() == ATypeTag.ORDEREDLIST) {
+            if (act.getTypeTag() == ATypeTag.ARRAY) {
                 startList = "[";
                 endList = "]";
             } else {
@@ -245,7 +240,7 @@
         public void init(PrintStream out, DataGeneratorContext ctx) throws Exception {
             super.init(out, ctx);
             IAType t = act.getItemType();
-            if (t.getTypeTag() != ATypeTag.RECORD) {
+            if (t.getTypeTag() != ATypeTag.OBJECT) {
                 throw new NotImplementedException("list annotation only works with record item types for now.");
             }
             ARecordType rt = (ARecordType) t;
@@ -679,7 +674,7 @@
                     }
                     IRecordFieldDataGen rfdg = annot.getDeclaredFieldsDatagen()[i];
                     if (rfdg == null) {
-                        if (ti.getTypeTag() == ATypeTag.RECORD) {
+                        if (ti.getTypeTag() == ATypeTag.OBJECT) {
                             ARecordType rt = (ARecordType) ti;
                             RecordDataGenAnnotation dga = null;
                             for (IRecordTypeAnnotation annot : rt.getAnnotations()) {
@@ -727,7 +722,7 @@
                                 a = readFileAsStringArray(lvf.getFile());
                                 ctx.getFileToLoadedDataMap().put(lvf.getFile(), a);
                             }
-                            if (ti.getTypeTag() != ATypeTag.ORDEREDLIST && ti.getTypeTag() != ATypeTag.UNORDEREDLIST) {
+                            if (ti.getTypeTag() != ATypeTag.ARRAY && ti.getTypeTag() != ATypeTag.MULTISET) {
                                 throw new Exception(
                                         "list-val-file annotation cannot be used for field of type " + ti.getTypeTag());
                             }
@@ -808,7 +803,7 @@
                         }
                         case LIST: {
                             ListDataGen l = (ListDataGen) rfdg;
-                            if (ti.getTypeTag() != ATypeTag.ORDEREDLIST && ti.getTypeTag() != ATypeTag.UNORDEREDLIST) {
+                            if (ti.getTypeTag() != ATypeTag.ARRAY && ti.getTypeTag() != ATypeTag.MULTISET) {
                                 throw new Exception(
                                         "list-val-file annotation cannot be used for field of type " + ti.getTypeTag());
                             }
@@ -854,12 +849,12 @@
                         case AUTO: {
                             AutoDataGen auto = (AutoDataGen) rfdg;
                             switch (ti.getTypeTag()) {
-                                case INT32: {
+                                case INTEGER: {
                                     declaredFieldsGenerators[i] = new IntAutoGenerator(
                                             Integer.parseInt(auto.getInitValueStr()));
                                     break;
                                 }
-                                case INT64: {
+                                case BIGINT: {
                                     declaredFieldsGenerators[i] = new LongAutoGenerator(
                                             Long.parseLong(auto.getInitValueStr()));
                                     break;
@@ -964,7 +959,7 @@
             if (tdg.isDataGen()) {
                 IAType t = me.getValue();
 
-                if (t.getTypeTag() != ATypeTag.RECORD) {
+                if (t.getTypeTag() != ATypeTag.OBJECT) {
                     throw new NotImplementedException();
                 }
                 ARecordType rt = (ARecordType) t;
