diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java index 12e2e24..590ab60 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java @@ -239,7 +239,6 @@ private void replaceSelectOperatorProcess(SelectOperator operator) throws Semant List selRSSignature = selRS.getSignature(); // Need to create a new type for Column[_count_of_indexed_key_column] node PrimitiveTypeInfo pti = TypeInfoFactory.getPrimitiveTypeInfo("bigint"); - pti.setTypeName("bigint"); ColumnInfo newCI = new ColumnInfo(rewriteQueryCtx.getAggregateFunction(), pti, "", false); selRSSignature.add(newCI); selRS.setSignature((ArrayList) selRSSignature); diff --git serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharTypeInfo.java serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharTypeInfo.java index fc54a8f..764d5b8 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharTypeInfo.java +++ serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharTypeInfo.java @@ -61,10 +61,4 @@ public static String getQualifiedName(String typeName, int length) { sb.append(")"); return sb.toString(); } - - @Override - public void setTypeName(String typeName) { - // type name should already be set by subclass - return; - } } diff --git serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/DecimalTypeInfo.java serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/DecimalTypeInfo.java index d00f77d..e53634f 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/DecimalTypeInfo.java +++ serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/DecimalTypeInfo.java @@ -44,12 +44,6 @@ public String getTypeName() { } @Override - public void setTypeName(String typeName) { - // No need to set type name, it should always be decimal - return; - } - - @Override public boolean equals(Object other) { if (this == other) { return true; diff --git serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java index 98524ad..e665c4e 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java +++ serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java @@ -40,12 +40,19 @@ private static final long serialVersionUID = 1L; // Base name (varchar vs fully qualified name such as varchar(200)). - protected String typeName; + protected final String typeName; + + private transient PrimitiveCategory primitiveCategory = null; + private transient Class primitiveWritableClass = null; + private transient Class primitiveJavaClass = null; /** - * For java serialization use only. + * For Java/Kryo serialization use only. */ public PrimitiveTypeInfo() { + + // Dummy final assignment. + typeName = null; } /** @@ -63,21 +70,32 @@ public Category getCategory() { return Category.PRIMITIVE; } + private void initTransients() { + PrimitiveTypeEntry primitiveTypeEntry = getPrimitiveTypeEntry(); + primitiveCategory = primitiveTypeEntry.primitiveCategory; + primitiveWritableClass = primitiveTypeEntry.primitiveWritableClass; + primitiveJavaClass = primitiveTypeEntry.primitiveJavaClass; + } + public PrimitiveCategory getPrimitiveCategory() { - return getPrimitiveTypeEntry().primitiveCategory; + if (primitiveCategory == null) { + initTransients(); + } + return primitiveCategory; } public Class getPrimitiveWritableClass() { - return getPrimitiveTypeEntry().primitiveWritableClass; + if (primitiveWritableClass == null) { + initTransients(); + } + return primitiveWritableClass; } public Class getPrimitiveJavaClass() { - return getPrimitiveTypeEntry().primitiveJavaClass; - } - - // The following 2 methods are for java serialization use only. - public void setTypeName(String typeName) { - this.typeName = typeName; + if (primitiveJavaClass == null) { + initTransients(); + } + return primitiveJavaClass; } @Override diff --git serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TimestampLocalTZTypeInfo.java serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TimestampLocalTZTypeInfo.java index e19d7b0..7fb0205 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TimestampLocalTZTypeInfo.java +++ serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TimestampLocalTZTypeInfo.java @@ -44,12 +44,6 @@ public String getTypeName() { } @Override - public void setTypeName(String typeName) { - // No need to set type name, it should always be timestamplocaltz - return; - } - - @Override public boolean equals(Object other) { if (this == other) { return true;