You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by rh...@apache.org on 2014/04/02 05:44:15 UTC
svn commit: r1583864 - in /hive/trunk/ql/src:
java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java
test/queries/clientpositive/pcr.q test/results/clientpositive/pcr.q.out
Author: rhbutani
Date: Wed Apr 2 03:44:14 2014
New Revision: 1583864
URL: http://svn.apache.org/r1583864
Log:
HIVE-6778 ql/src/test/queries/clientpositive/pcr.q covers the test which generate 1.0 =1 predicate in partition pruner. (Harish Butani via Hari S., Jitendra Pandey)
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java
hive/trunk/ql/src/test/queries/clientpositive/pcr.q
hive/trunk/ql/src/test/results/clientpositive/pcr.q.out
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java?rev=1583864&r1=1583863&r2=1583864&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java Wed Apr 2 03:44:14 2014
@@ -62,7 +62,6 @@ public final class PcrExprProcFactory {
throws SemanticException {
StructObjectInspector rowObjectInspector;
Table tbl = p.getTable();
- LinkedHashMap<String, String> partSpec = p.getSpec();
try {
rowObjectInspector = (StructObjectInspector) tbl
@@ -72,7 +71,7 @@ public final class PcrExprProcFactory {
}
try {
- return PartExprEvalUtils.evalExprWithPart(expr, partSpec, vcs, rowObjectInspector);
+ return PartExprEvalUtils.evalExprWithPart(expr, p, vcs, rowObjectInspector);
} catch (HiveException e) {
throw new SemanticException(e);
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java?rev=1583864&r1=1583863&r2=1583864&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java Wed Apr 2 03:44:14 2014
@@ -22,19 +22,24 @@ import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import org.apache.hadoop.hive.common.ObjectPair;
+import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
import org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator;
import org.apache.hadoop.hive.ql.exec.ExprNodeEvaluatorFactory;
import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.metadata.Partition;
import org.apache.hadoop.hive.ql.metadata.VirtualColumn;
import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
import org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
public class PartExprEvalUtils {
/**
@@ -47,19 +52,32 @@ public class PartExprEvalUtils {
* @throws HiveException
*/
static synchronized public Object evalExprWithPart(ExprNodeDesc expr,
- LinkedHashMap<String, String> partSpec, List<VirtualColumn> vcs,
+ Partition p, List<VirtualColumn> vcs,
StructObjectInspector rowObjectInspector) throws HiveException {
+ LinkedHashMap<String, String> partSpec = p.getSpec();
+ Properties partProps = p.getSchema();
+ String pcolTypes = partProps.getProperty(hive_metastoreConstants.META_TABLE_PARTITION_COLUMN_TYPES);
+ String[] partKeyTypes = pcolTypes.trim().split(":");
+
+ if (partSpec.size() != partKeyTypes.length) {
+ throw new HiveException("Internal error : Partition Spec size, " + partProps.size() +
+ " doesn't match partition key definition size, " + partKeyTypes.length);
+ }
boolean hasVC = vcs != null && !vcs.isEmpty();
Object[] rowWithPart = new Object[hasVC ? 3 : 2];
// Create the row object
ArrayList<String> partNames = new ArrayList<String>();
- ArrayList<String> partValues = new ArrayList<String>();
+ ArrayList<Object> partValues = new ArrayList<Object>();
ArrayList<ObjectInspector> partObjectInspectors = new ArrayList<ObjectInspector>();
+ int i=0;
for (Map.Entry<String, String> entry : partSpec.entrySet()) {
partNames.add(entry.getKey());
- partValues.add(entry.getValue());
- partObjectInspectors
- .add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
+ ObjectInspector oi = PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector
+ (TypeInfoFactory.getPrimitiveTypeInfo(partKeyTypes[i++]));
+ partValues.add(ObjectInspectorConverters.getConverter(
+ PrimitiveObjectInspectorFactory.javaStringObjectInspector, oi)
+ .convert(entry.getValue()));
+ partObjectInspectors.add(oi);
}
StructObjectInspector partObjectInspector = ObjectInspectorFactory
.getStandardStructObjectInspector(partNames, partObjectInspectors);
Modified: hive/trunk/ql/src/test/queries/clientpositive/pcr.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/pcr.q?rev=1583864&r1=1583863&r2=1583864&view=diff
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/pcr.q (original)
+++ hive/trunk/ql/src/test/queries/clientpositive/pcr.q Wed Apr 2 03:44:14 2014
@@ -112,7 +112,7 @@ insert overwrite table pcr_foo partition
insert overwrite table pcr_foo partition (ds=7) select * from src where key < 10 order by key;
-- the condition is 'true' for all the 3 partitions (ds=3,5,7):
-select key, value, ds from pcr_foo where (ds % 2.0 == 1);
+select key, value, ds from pcr_foo where (ds % 2 == 1);
-- the condition is 'true' for partitions (ds=3,5) but 'false' of partition ds=7:
select key, value, ds from pcr_foo where (ds / 3 < 2);
Modified: hive/trunk/ql/src/test/results/clientpositive/pcr.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/pcr.q.out?rev=1583864&r1=1583863&r2=1583864&view=diff
==============================================================================
Files hive/trunk/ql/src/test/results/clientpositive/pcr.q.out (original) and hive/trunk/ql/src/test/results/clientpositive/pcr.q.out Wed Apr 2 03:44:14 2014 differ