diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharTypeInfo.java b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharTypeInfo.java index 820fb4e..18de5a0 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharTypeInfo.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharTypeInfo.java @@ -54,12 +54,16 @@ public String getQualifiedName() { return getQualifiedName(typeName, length); } - public static String getQualifiedName(String typeName, int length) { - StringBuilder sb = new StringBuilder(typeName); - sb.append("("); - sb.append(length); - sb.append(")"); - return sb.toString(); + /** + * Utility method to build the fully qualified data type. For example: + * (char,16) becomes char(16). + * + * @param typeName The name of the data type (char or varchar) + * @param length The maximum length of the data type + * @return A fully qualified field name + */ + protected String getQualifiedName(String typeName, int length) { + return typeName + '(' + length + ')'; } @Override @@ -67,4 +71,27 @@ public void setTypeName(String typeName) { // type name should already be set by subclass return; } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + length; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + BaseCharTypeInfo other = (BaseCharTypeInfo) obj; + if (length != other.length) { + return false; + } + return true; + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharUtils.java b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharUtils.java index 259e642..d3c53ff 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharUtils.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharUtils.java @@ -22,8 +22,6 @@ import org.apache.hadoop.hive.common.type.HiveChar; import org.apache.hadoop.hive.common.type.HiveVarchar; import org.apache.hadoop.hive.serde2.io.HiveBaseCharWritable; -import org.apache.hadoop.hive.serde2.io.HiveCharWritable; -import org.apache.hadoop.hive.serde2.io.HiveVarcharWritable; public class BaseCharUtils { diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/CharTypeInfo.java b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/CharTypeInfo.java index ef9b945..9b91317 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/CharTypeInfo.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/CharTypeInfo.java @@ -39,28 +39,6 @@ public String getTypeName() { } @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null || getClass() != other.getClass()) { - return false; - } - - CharTypeInfo pti = (CharTypeInfo) other; - - return this.typeName.equals(pti.typeName) && this.getLength() == pti.getLength(); - } - - /** - * Generate the hashCode for this TypeInfo. - */ - @Override - public int hashCode() { - return getQualifiedName().hashCode(); - } - - @Override public String toString() { return getQualifiedName(); } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java index 97af49a..1d11764 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hive.serde2.typeinfo; import java.io.Serializable; +import java.util.Objects; import org.apache.hadoop.hive.common.classification.InterfaceAudience; import org.apache.hadoop.hive.common.classification.InterfaceStability; @@ -52,6 +53,7 @@ public PrimitiveTypeInfo() { * For TypeInfoFactory use only. */ PrimitiveTypeInfo(String typeName) { + Objects.requireNonNull(typeName); this.typeName = typeName; } @@ -90,29 +92,33 @@ public PrimitiveTypeEntry getPrimitiveTypeEntry() { } @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null || getClass() != other.getClass()) { - return false; - } - - PrimitiveTypeInfo pti = (PrimitiveTypeInfo) other; - - return this.typeName.equals(pti.typeName); + public String toString() { + return typeName; } - /** - * Generate the hashCode for this TypeInfo. - */ @Override public int hashCode() { - return typeName.hashCode(); + final int prime = 31; + int result = 1; + result = prime * result + ((typeName == null) ? 0 : typeName.hashCode()); + return result; } @Override - public String toString() { - return typeName; + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + PrimitiveTypeInfo other = (PrimitiveTypeInfo) obj; + if (typeName == null) { + if (other.typeName != null) + return false; + } else if (!typeName.equals(other.typeName)) { + return false; + } + return true; } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java index 77d60c5..baafb75 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java @@ -174,13 +174,11 @@ private static PrimitiveTypeInfo createPrimitiveTypeInfo(String fullName) { } public static CharTypeInfo getCharTypeInfo(int length) { - String fullName = BaseCharTypeInfo.getQualifiedName(serdeConstants.CHAR_TYPE_NAME, length); - return (CharTypeInfo) getPrimitiveTypeInfo(fullName); + return new CharTypeInfo(length); } public static VarcharTypeInfo getVarcharTypeInfo(int length) { - String fullName = BaseCharTypeInfo.getQualifiedName(serdeConstants.VARCHAR_TYPE_NAME, length); - return (VarcharTypeInfo) getPrimitiveTypeInfo(fullName); + return new VarcharTypeInfo(length); } public static DecimalTypeInfo getDecimalTypeInfo(int precision, int scale) { diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/VarcharTypeInfo.java b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/VarcharTypeInfo.java index edf12a2..f8d41e4 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/VarcharTypeInfo.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/VarcharTypeInfo.java @@ -39,28 +39,6 @@ public String getTypeName() { } @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null || getClass() != other.getClass()) { - return false; - } - - VarcharTypeInfo pti = (VarcharTypeInfo) other; - - return this.getLength() == pti.getLength(); - } - - /** - * Generate the hashCode for this TypeInfo. - */ - @Override - public int hashCode() { - return getLength(); - } - - @Override public String toString() { return getQualifiedName(); }