You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2013/10/28 19:27:26 UTC
svn commit: r1536471 - in /hive/trunk:
ql/src/java/org/apache/hadoop/hive/ql/plan/
ql/src/test/queries/clientpositive/ ql/src/test/results/clientpositive/
serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/
serde/src/java/org/apache...
Author: hashutosh
Date: Mon Oct 28 18:27:26 2013
New Revision: 1536471
URL: http://svn.apache.org/r1536471
Log:
HIVE-5648 : error when casting partition column to varchar in where clause (Jason Dere via Ashutosh Chauhan)
Added:
hive/trunk/ql/src/test/queries/clientpositive/partition_varchar2.q
hive/trunk/ql/src/test/results/clientpositive/partition_varchar2.q.out
hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/primitive/TestPrimitiveObjectInspectorFactory.java
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeConstantDesc.java
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorFactory.java
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeConstantDesc.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeConstantDesc.java?rev=1536471&r1=1536470&r2=1536471&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeConstantDesc.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeConstantDesc.java Mon Oct 28 18:27:26 2013
@@ -59,11 +59,11 @@ public class ExprNodeConstantDesc extend
@Override
public ConstantObjectInspector getWritableObjectInspector() {
- PrimitiveCategory pc = ((PrimitiveTypeInfo)getTypeInfo())
- .getPrimitiveCategory();
+ PrimitiveTypeInfo pti = (PrimitiveTypeInfo) getTypeInfo();
+ PrimitiveCategory pc = pti.getPrimitiveCategory();
// Convert from Java to Writable
Object writableValue = PrimitiveObjectInspectorFactory
- .getPrimitiveJavaObjectInspector(pc).getPrimitiveWritableObject(
+ .getPrimitiveJavaObjectInspector(pti).getPrimitiveWritableObject(
getValue());
return PrimitiveObjectInspectorFactory
.getPrimitiveWritableConstantObjectInspector((PrimitiveTypeInfo) getTypeInfo(), writableValue);
Added: hive/trunk/ql/src/test/queries/clientpositive/partition_varchar2.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/partition_varchar2.q?rev=1536471&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/partition_varchar2.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/partition_varchar2.q Mon Oct 28 18:27:26 2013
@@ -0,0 +1,10 @@
+drop table partition_varchar_2;
+
+create table partition_varchar_2 (key string, value varchar(20)) partitioned by (dt varchar(15), region int);
+
+insert overwrite table partition_varchar_2 partition(dt='2000-01-01', region=1)
+ select * from src order by key limit 1;
+
+select * from partition_varchar_2 where cast(dt as varchar(10)) = '2000-01-01';
+
+drop table partition_varchar_2;
Added: hive/trunk/ql/src/test/results/clientpositive/partition_varchar2.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/partition_varchar2.q.out?rev=1536471&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/partition_varchar2.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/partition_varchar2.q.out Mon Oct 28 18:27:26 2013
@@ -0,0 +1,44 @@
+PREHOOK: query: drop table partition_varchar_2
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table partition_varchar_2
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table partition_varchar_2 (key string, value varchar(20)) partitioned by (dt varchar(15), region int)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table partition_varchar_2 (key string, value varchar(20)) partitioned by (dt varchar(15), region int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@partition_varchar_2
+PREHOOK: query: insert overwrite table partition_varchar_2 partition(dt='2000-01-01', region=1)
+ select * from src order by key limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@partition_varchar_2@dt=2000-01-01/region=1
+POSTHOOK: query: insert overwrite table partition_varchar_2 partition(dt='2000-01-01', region=1)
+ select * from src order by key limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@partition_varchar_2@dt=2000-01-01/region=1
+POSTHOOK: Lineage: partition_varchar_2 PARTITION(dt=2000-01-01,region=1).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: partition_varchar_2 PARTITION(dt=2000-01-01,region=1).value EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ]
+PREHOOK: query: select * from partition_varchar_2 where cast(dt as varchar(10)) = '2000-01-01'
+PREHOOK: type: QUERY
+PREHOOK: Input: default@partition_varchar_2
+PREHOOK: Input: default@partition_varchar_2@dt=2000-01-01/region=1
+#### A masked pattern was here ####
+POSTHOOK: query: select * from partition_varchar_2 where cast(dt as varchar(10)) = '2000-01-01'
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@partition_varchar_2
+POSTHOOK: Input: default@partition_varchar_2@dt=2000-01-01/region=1
+#### A masked pattern was here ####
+POSTHOOK: Lineage: partition_varchar_2 PARTITION(dt=2000-01-01,region=1).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: partition_varchar_2 PARTITION(dt=2000-01-01,region=1).value EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ]
+0 val_0 2000-01-01 1
+PREHOOK: query: drop table partition_varchar_2
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@partition_varchar_2
+PREHOOK: Output: default@partition_varchar_2
+POSTHOOK: query: drop table partition_varchar_2
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@partition_varchar_2
+POSTHOOK: Output: default@partition_varchar_2
+POSTHOOK: Lineage: partition_varchar_2 PARTITION(dt=2000-01-01,region=1).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: partition_varchar_2 PARTITION(dt=2000-01-01,region=1).value EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ]
Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorFactory.java?rev=1536471&r1=1536470&r2=1536471&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorFactory.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorFactory.java Mon Oct 28 18:27:26 2013
@@ -73,6 +73,8 @@ public final class PrimitiveObjectInspec
new WritableDoubleObjectInspector();
public static final WritableStringObjectInspector writableStringObjectInspector =
new WritableStringObjectInspector();
+ public static final WritableHiveVarcharObjectInspector writableHiveVarcharObjectInspector =
+ new WritableHiveVarcharObjectInspector((VarcharTypeInfo) TypeInfoFactory.varcharTypeInfo);
public static final WritableVoidObjectInspector writableVoidObjectInspector =
new WritableVoidObjectInspector();
public static final WritableDateObjectInspector writableDateObjectInspector =
@@ -104,6 +106,7 @@ public final class PrimitiveObjectInspec
writableDoubleObjectInspector);
cachedPrimitiveWritableInspectorCache.put(TypeInfoFactory.getPrimitiveTypeInfo(serdeConstants.STRING_TYPE_NAME),
writableStringObjectInspector);
+ cachedPrimitiveWritableInspectorCache.put(TypeInfoFactory.varcharTypeInfo, writableHiveVarcharObjectInspector);
cachedPrimitiveWritableInspectorCache.put(TypeInfoFactory.getPrimitiveTypeInfo(serdeConstants.VOID_TYPE_NAME),
writableVoidObjectInspector);
cachedPrimitiveWritableInspectorCache.put(TypeInfoFactory.getPrimitiveTypeInfo(serdeConstants.DATE_TYPE_NAME),
@@ -126,6 +129,7 @@ public final class PrimitiveObjectInspec
primitiveCategoryToWritableOI.put(PrimitiveCategory.FLOAT, writableFloatObjectInspector);
primitiveCategoryToWritableOI.put(PrimitiveCategory.DOUBLE, writableDoubleObjectInspector);
primitiveCategoryToWritableOI.put(PrimitiveCategory.STRING, writableStringObjectInspector);
+ primitiveCategoryToWritableOI.put(PrimitiveCategory.VARCHAR, writableHiveVarcharObjectInspector);
primitiveCategoryToWritableOI.put(PrimitiveCategory.VOID, writableVoidObjectInspector);
primitiveCategoryToWritableOI.put(PrimitiveCategory.DATE, writableDateObjectInspector);
primitiveCategoryToWritableOI.put(PrimitiveCategory.TIMESTAMP, writableTimestampObjectInspector);
@@ -149,6 +153,8 @@ public final class PrimitiveObjectInspec
new JavaDoubleObjectInspector();
public static final JavaStringObjectInspector javaStringObjectInspector =
new JavaStringObjectInspector();
+ public static final JavaHiveVarcharObjectInspector javaHiveVarcharObjectInspector =
+ new JavaHiveVarcharObjectInspector((VarcharTypeInfo) TypeInfoFactory.varcharTypeInfo);
public static final JavaVoidObjectInspector javaVoidObjectInspector =
new JavaVoidObjectInspector();
public static final JavaDateObjectInspector javaDateObjectInspector =
@@ -180,6 +186,7 @@ public final class PrimitiveObjectInspec
javaDoubleObjectInspector);
cachedPrimitiveJavaInspectorCache.put(TypeInfoFactory.getPrimitiveTypeInfo(serdeConstants.STRING_TYPE_NAME),
javaStringObjectInspector);
+ cachedPrimitiveJavaInspectorCache.put(TypeInfoFactory.varcharTypeInfo, javaHiveVarcharObjectInspector);
cachedPrimitiveJavaInspectorCache.put(TypeInfoFactory.getPrimitiveTypeInfo(serdeConstants.VOID_TYPE_NAME),
javaVoidObjectInspector);
cachedPrimitiveJavaInspectorCache.put(TypeInfoFactory.getPrimitiveTypeInfo(serdeConstants.DATE_TYPE_NAME),
@@ -202,6 +209,7 @@ public final class PrimitiveObjectInspec
primitiveCategoryToJavaOI.put(PrimitiveCategory.FLOAT, javaFloatObjectInspector);
primitiveCategoryToJavaOI.put(PrimitiveCategory.DOUBLE, javaDoubleObjectInspector);
primitiveCategoryToJavaOI.put(PrimitiveCategory.STRING, javaStringObjectInspector);
+ primitiveCategoryToJavaOI.put(PrimitiveCategory.VARCHAR, javaHiveVarcharObjectInspector);
primitiveCategoryToJavaOI.put(PrimitiveCategory.VOID, javaVoidObjectInspector);
primitiveCategoryToJavaOI.put(PrimitiveCategory.DATE, javaDateObjectInspector);
primitiveCategoryToJavaOI.put(PrimitiveCategory.TIMESTAMP, javaTimestampObjectInspector);
Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java?rev=1536471&r1=1536470&r2=1536471&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java Mon Oct 28 18:27:26 2013
@@ -24,6 +24,7 @@ import java.util.concurrent.ConcurrentHa
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.common.type.HiveVarchar;
import org.apache.hadoop.hive.common.type.HiveDecimal;
import org.apache.hadoop.hive.serde.serdeConstants;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils;
@@ -48,6 +49,7 @@ public final class TypeInfoFactory {
public static final PrimitiveTypeInfo intTypeInfo = new PrimitiveTypeInfo(serdeConstants.INT_TYPE_NAME);
public static final PrimitiveTypeInfo longTypeInfo = new PrimitiveTypeInfo(serdeConstants.BIGINT_TYPE_NAME);
public static final PrimitiveTypeInfo stringTypeInfo = new PrimitiveTypeInfo(serdeConstants.STRING_TYPE_NAME);
+ public static final PrimitiveTypeInfo varcharTypeInfo = new VarcharTypeInfo(HiveVarchar.MAX_VARCHAR_LENGTH);
public static final PrimitiveTypeInfo floatTypeInfo = new PrimitiveTypeInfo(serdeConstants.FLOAT_TYPE_NAME);
public static final PrimitiveTypeInfo doubleTypeInfo = new PrimitiveTypeInfo(serdeConstants.DOUBLE_TYPE_NAME);
public static final PrimitiveTypeInfo byteTypeInfo = new PrimitiveTypeInfo(serdeConstants.TINYINT_TYPE_NAME);
@@ -74,6 +76,7 @@ public final class TypeInfoFactory {
cachedPrimitiveTypeInfo.put(serdeConstants.INT_TYPE_NAME, intTypeInfo);
cachedPrimitiveTypeInfo.put(serdeConstants.BIGINT_TYPE_NAME, longTypeInfo);
cachedPrimitiveTypeInfo.put(serdeConstants.STRING_TYPE_NAME, stringTypeInfo);
+ cachedPrimitiveTypeInfo.put(varcharTypeInfo.getQualifiedName(), varcharTypeInfo);
cachedPrimitiveTypeInfo.put(serdeConstants.FLOAT_TYPE_NAME, floatTypeInfo);
cachedPrimitiveTypeInfo.put(serdeConstants.DOUBLE_TYPE_NAME, doubleTypeInfo);
cachedPrimitiveTypeInfo.put(serdeConstants.TINYINT_TYPE_NAME, byteTypeInfo);
Added: hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/primitive/TestPrimitiveObjectInspectorFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/primitive/TestPrimitiveObjectInspectorFactory.java?rev=1536471&view=auto
==============================================================================
--- hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/primitive/TestPrimitiveObjectInspectorFactory.java (added)
+++ hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/primitive/TestPrimitiveObjectInspectorFactory.java Mon Oct 28 18:27:26 2013
@@ -0,0 +1,41 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.serde2.objectinspector.primitive;
+
+import junit.framework.TestCase;
+
+import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory;
+
+public class TestPrimitiveObjectInspectorFactory extends TestCase {
+
+ public void testGetPrimitiveWritableObjectInspector() {
+ // even without type params, return a default OI for varchar
+ PrimitiveObjectInspector poi = PrimitiveObjectInspectorFactory
+ .getPrimitiveWritableObjectInspector(PrimitiveCategory.VARCHAR);
+ assertEquals(poi, PrimitiveObjectInspectorFactory.writableHiveVarcharObjectInspector);
+ }
+
+ public void testGetPrimitiveJavaObjectInspector() {
+ // even without type params, return a default OI for varchar
+ PrimitiveObjectInspector poi = PrimitiveObjectInspectorFactory
+ .getPrimitiveJavaObjectInspector(PrimitiveCategory.VARCHAR);
+ assertEquals(poi, PrimitiveObjectInspectorFactory.javaHiveVarcharObjectInspector);
+ }
+}