diff --git ql/src/test/queries/clientpositive/cast_qualified_types.q ql/src/test/queries/clientpositive/cast_qualified_types.q new file mode 100644 index 0000000..fe0abd4 --- /dev/null +++ ql/src/test/queries/clientpositive/cast_qualified_types.q @@ -0,0 +1,9 @@ +set hive.plan.serialization.format=javaXML; + +select + cast(key as decimal(10,2)) as c1, + cast(key as char(10)) as c2, + cast(key as varchar(10)) as c3 +from src +order by c1, c2, c3 +limit 1; diff --git ql/src/test/results/clientpositive/cast_qualified_types.q.out ql/src/test/results/clientpositive/cast_qualified_types.q.out new file mode 100644 index 0000000..1924c5d --- /dev/null +++ ql/src/test/results/clientpositive/cast_qualified_types.q.out @@ -0,0 +1,21 @@ +PREHOOK: query: select + cast(key as decimal(10,2)) as c1, + cast(key as char(10)) as c2, + cast(key as varchar(10)) as c3 +from src +order by c1, c2, c3 +limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: select + cast(key as decimal(10,2)) as c1, + cast(key as char(10)) as c2, + cast(key as varchar(10)) as c3 +from src +order by c1, c2, c3 +limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### +0 0 0 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 132a79a..7e02f7e 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharTypeInfo.java +++ serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/BaseCharTypeInfo.java @@ -27,6 +27,10 @@ public BaseCharTypeInfo() { } + public BaseCharTypeInfo(String typeName) { + super(typeName); + } + public BaseCharTypeInfo(String typeName, int length) { super(typeName); this.length = length; @@ -53,4 +57,9 @@ public static String getQualifiedName(String typeName, int length) { 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/CharTypeInfo.java serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/CharTypeInfo.java index 52fdac2..610818e 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/CharTypeInfo.java +++ serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/CharTypeInfo.java @@ -25,6 +25,7 @@ // no-arg constructor to make kyro happy. public CharTypeInfo() { + super(serdeConstants.CHAR_TYPE_NAME); } public CharTypeInfo(int length) { 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 bd28609..cbe4802 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/DecimalTypeInfo.java +++ serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/DecimalTypeInfo.java @@ -28,6 +28,7 @@ // no-arg constructor to make kyro happy. public DecimalTypeInfo() { + super(serdeConstants.DECIMAL_TYPE_NAME); } public DecimalTypeInfo(int precision, int scale) { @@ -43,6 +44,12 @@ 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 (other == null || !(other instanceof DecimalTypeInfo)) { return false; @@ -101,4 +108,20 @@ public boolean accept(TypeInfo other) { return this.precision() - this.scale() >= dti.precision() - dti.scale(); } + public int getPrecision() { + return precision; + } + + public void setPrecision(int precision) { + this.precision = precision; + } + + public int getScale() { + return scale; + } + + public void setScale(int scale) { + this.scale = scale; + } + } diff --git serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/VarcharTypeInfo.java serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/VarcharTypeInfo.java index 4550275..5ac2b46 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/VarcharTypeInfo.java +++ serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/VarcharTypeInfo.java @@ -25,6 +25,7 @@ // no-arg constructor to make kyro happy. public VarcharTypeInfo() { + super(serdeConstants.VARCHAR_TYPE_NAME); } public VarcharTypeInfo(int length) {