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