Author: rhbutani
Date: Wed Apr 2 03:45:10 2014
New Revision: 1583865
URL: http://svn.apache.org/r1583865
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/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java
hive/branches/branch-0.13/ql/src/test/queries/clientpositive/pcr.q
hive/branches/branch-0.13/ql/src/test/results/clientpositive/pcr.q.out
Modified:
hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
URL:
http://svn.apache.org/viewvc/hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java?rev=1583865&r1=1583864&r2=1583865&view=diff
==============================================================================
---
hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
(original)
+++
hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
Wed Apr 2 03:45:10 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/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java
URL:
http://svn.apache.org/viewvc/hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java?rev=1583865&r1=1583864&r2=1583865&view=diff
==============================================================================
---
hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java
(original)
+++
hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartExprEvalUtils.java
Wed Apr 2 03:45:10 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/branches/branch-0.13/ql/src/test/queries/clientpositive/pcr.q
URL:
http://svn.apache.org/viewvc/hive/branches/branch-0.13/ql/src/test/queries/clientpositive/pcr.q?rev=1583865&r1=1583864&r2=1583865&view=diff
==============================================================================
--- hive/branches/branch-0.13/ql/src/test/queries/clientpositive/pcr.q
(original)
+++ hive/branches/branch-0.13/ql/src/test/queries/clientpositive/pcr.q Wed Apr
2 03:45:10 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/branches/branch-0.13/ql/src/test/results/clientpositive/pcr.q.out
URL:
http://svn.apache.org/viewvc/hive/branches/branch-0.13/ql/src/test/results/clientpositive/pcr.q.out?rev=1583865&r1=1583864&r2=1583865&view=diff
==============================================================================
Files hive/branches/branch-0.13/ql/src/test/results/clientpositive/pcr.q.out
(original) and
hive/branches/branch-0.13/ql/src/test/results/clientpositive/pcr.q.out Wed Apr
2 03:45:10 2014 differ