Author: szehon
Date: Tue Nov 25 00:09:33 2014
New Revision: 1641510

URL: http://svn.apache.org/r1641510
Log:
HIVE-8784 : Querying partition does not work with JDO enabled against 
PostgreSQL (Chaoyu Tang via Szehon)

Added:
    
hive/branches/branch-0.14/ql/src/test/queries/clientpositive/partition_multilevels.q
    
hive/branches/branch-0.14/ql/src/test/results/clientpositive/partition_multilevels.q.out
Modified:
    
hive/branches/branch-0.14/metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java

Modified: 
hive/branches/branch-0.14/metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java
URL: 
http://svn.apache.org/viewvc/hive/branches/branch-0.14/metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java?rev=1641510&r1=1641509&r2=1641510&view=diff
==============================================================================
--- 
hive/branches/branch-0.14/metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java
 (original)
+++ 
hive/branches/branch-0.14/metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java
 Tue Nov 25 00:09:33 2014
@@ -367,20 +367,8 @@ public class ExpressionTree {
             partitionColumnIndex, partitionColumnCount, isOpEquals, 
filterBuilder);
         return;
       }
-
-      String keyEqual = FileUtils.escapePathName(keyName) + "=";
-      String valString = "partitionName.substring(";
-      String indexOfKeyStr = "";
-      if (partitionColumnIndex != 0) {
-        keyEqual = "/" + keyEqual;
-        indexOfKeyStr = "partitionName.indexOf(\"" + keyEqual + "\") + ";
-        valString += indexOfKeyStr;
-      }
-      valString += keyEqual.length();
-      if (partitionColumnIndex != (partitionColumnCount - 1)) {
-        valString += ", partitionName.concat(\"/\").indexOf(\"/\", " + 
indexOfKeyStr + keyEqual.length() + ")";
-      }
-      valString += ")";
+      //get the value for a partition key form MPartition.values 
(PARTITION_KEY_VALUES)
+      String valString = "values.get(" + partitionColumnIndex + ")";
 
       if (operator == Operator.LIKE) {
         if (isReverseOrder) {

Added: 
hive/branches/branch-0.14/ql/src/test/queries/clientpositive/partition_multilevels.q
URL: 
http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/test/queries/clientpositive/partition_multilevels.q?rev=1641510&view=auto
==============================================================================
--- 
hive/branches/branch-0.14/ql/src/test/queries/clientpositive/partition_multilevels.q
 (added)
+++ 
hive/branches/branch-0.14/ql/src/test/queries/clientpositive/partition_multilevels.q
 Tue Nov 25 00:09:33 2014
@@ -0,0 +1,93 @@
+create table partition_test_multilevel (key string, value string) partitioned 
by (level1 string, level2 string, level3 string);
+
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='111', level3='11') select key, value from srcpart tablesample (11 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='111', level3='22') select key, value from srcpart tablesample (12 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='111', level3='33') select key, value from srcpart tablesample (13 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='111', level3='44') select key, value from srcpart tablesample (14 rows);
+
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='222', level3='11') select key, value from srcpart tablesample (15 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='222', level3='22') select key, value from srcpart tablesample (16 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='222', level3='33') select key, value from srcpart tablesample (17 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='222', level3='44') select key, value from srcpart tablesample (18 rows);
+
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='333', level3='11') select key, value from srcpart tablesample (19 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='333', level3='22') select key, value from srcpart tablesample (20 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='333', level3='33') select key, value from srcpart tablesample (21 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', 
level2='333', level3='44') select key, value from srcpart tablesample (22 rows);
+
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='111', level3='11') select key, value from srcpart tablesample (11 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='111', level3='22') select key, value from srcpart tablesample (12 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='111', level3='33') select key, value from srcpart tablesample (13 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='111', level3='44') select key, value from srcpart tablesample (14 rows);
+
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='222', level3='11') select key, value from srcpart tablesample (15 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='222', level3='22') select key, value from srcpart tablesample (16 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='222', level3='33') select key, value from srcpart tablesample (17 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='222', level3='44') select key, value from srcpart tablesample (18 rows);
+
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='333', level3='11') select key, value from srcpart tablesample (19 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='333', level3='22') select key, value from srcpart tablesample (20 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='333', level3='33') select key, value from srcpart tablesample (21 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', 
level2='333', level3='44') select key, value from srcpart tablesample (22 rows);
+
+set metaconf:hive.metastore.try.direct.sql=false;
+
+-- beginning level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level1 = '2222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level1 >= '2222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level1 !='2222' group by level1, level2, level3;
+
+-- middle level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level2 = '222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level2 <= '222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level2 != '222' group by level1, level2, level3;
+
+-- ending level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level3 = '22' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level3 >= '22' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level3 != '22' group by level1, level2, level3;
+
+-- two different levels of partitions in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level2 >= '222' and level3 = '33' group by level1, level2, level3;
+
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level1 <= '1111' and level3 >= '33' group by level1, level2, level3;
+
+
+-- all levels of partitions in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level1 = '2222' and level2 >= '222' and level3 <= '33' group by level1, level2, 
level3;
+
+-- between
+select level1, level2, level3, count(*) from partition_test_multilevel where 
(level1 = '2222') and (level2 between '222' and '333') and (level3 between '11' 
and '33') group by level1, level2, level3;
+
+explain select level1, level2, level3, count(*) from partition_test_multilevel 
where (level1 = '2222') and (level2 between '222' and '333') and (level3 
between '11' and '33') group by level1, level2, level3;
+
+set metaconf:hive.metastore.try.direct.sql=true;
+
+-- beginning level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level1 = '2222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level1 >= '2222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level1 !='2222' group by level1, level2, level3;
+
+-- middle level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level2 = '222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level2 <= '222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level2 != '222' group by level1, level2, level3;
+
+-- ending level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level3 = '22' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level3 >= '22' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level3 != '22' group by level1, level2, level3;
+
+-- two different levels of partitions in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level2 >= '222' and level3 = '33' group by level1, level2, level3;
+
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level1 <= '1111' and level3 >= '33' group by level1, level2, level3;
+
+
+-- all levels of partitions in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where 
level1 = '2222' and level2 >= '222' and level3 <= '33' group by level1, level2, 
level3;
+
+-- between
+select level1, level2, level3, count(*) from partition_test_multilevel where 
(level1 = '2222') and (level2 between '222' and '333') and (level3 between '11' 
and '33') group by level1, level2, level3;
+
+explain select level1, level2, level3, count(*) from partition_test_multilevel 
where (level1 = '2222') and (level2 between '222' and '333') and (level3 
between '11' and '33') group by level1, level2, level3;


Reply via email to