Index: ql/src/test/results/clientpositive/partition_special_char.q.out =================================================================== --- ql/src/test/results/clientpositive/partition_special_char.q.out (revision 0) +++ ql/src/test/results/clientpositive/partition_special_char.q.out (revision 0) @@ -0,0 +1,109 @@ +PREHOOK: query: create table sc as select * +from (select '2011-01-11', '2011-01-11+14:18:26' from src limit 1 + union all + select '2011-01-11', '2011-01-11+15:18:26' from src limit 1 + union all + select '2011-01-11', '2011-01-11+16:18:26' from src limit 1 ) s +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@src +POSTHOOK: query: create table sc as select * +from (select '2011-01-11', '2011-01-11+14:18:26' from src limit 1 + union all + select '2011-01-11', '2011-01-11+15:18:26' from src limit 1 + union all + select '2011-01-11', '2011-01-11+16:18:26' from src limit 1 ) s +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@src +POSTHOOK: Output: default@sc +PREHOOK: query: create table sc_part (key string) partitioned by (ts string) stored as rcfile +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table sc_part (key string) partitioned by (ts string) stored as rcfile +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@sc_part +PREHOOK: query: insert overwrite table sc_part partition(ts) select * from sc +PREHOOK: type: QUERY +PREHOOK: Input: default@sc +PREHOOK: Output: default@sc_part +POSTHOOK: query: insert overwrite table sc_part partition(ts) select * from sc +POSTHOOK: type: QUERY +POSTHOOK: Input: default@sc +POSTHOOK: Output: default@sc_part@ts=2011-01-11+14%3A18%3A26 +POSTHOOK: Output: default@sc_part@ts=2011-01-11+15%3A18%3A26 +POSTHOOK: Output: default@sc_part@ts=2011-01-11+16%3A18%3A26 +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+14:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+15:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+16:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +PREHOOK: query: show partitions sc_part +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: show partitions sc_part +POSTHOOK: type: SHOWPARTITIONS +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+14:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+15:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+16:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +ts=2011-01-11+14%3A18%3A26 +ts=2011-01-11+15%3A18%3A26 +ts=2011-01-11+16%3A18%3A26 +PREHOOK: query: select count(*) from sc_part where ts is not null +PREHOOK: type: QUERY +PREHOOK: Input: default@sc_part@ts=2011-01-11+14%3A18%3A26 +PREHOOK: Input: default@sc_part@ts=2011-01-11+15%3A18%3A26 +PREHOOK: Input: default@sc_part@ts=2011-01-11+16%3A18%3A26 +PREHOOK: Output: file:/tmp/nzhang/hive_2011-01-13_11-13-08_667_3825187877309649250/-mr-10000 +POSTHOOK: query: select count(*) from sc_part where ts is not null +POSTHOOK: type: QUERY +POSTHOOK: Input: default@sc_part@ts=2011-01-11+14%3A18%3A26 +POSTHOOK: Input: default@sc_part@ts=2011-01-11+15%3A18%3A26 +POSTHOOK: Input: default@sc_part@ts=2011-01-11+16%3A18%3A26 +POSTHOOK: Output: file:/tmp/nzhang/hive_2011-01-13_11-13-08_667_3825187877309649250/-mr-10000 +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+14:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+15:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+16:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +3 +PREHOOK: query: insert overwrite table sc_part partition(ts) select * from sc +PREHOOK: type: QUERY +PREHOOK: Input: default@sc +PREHOOK: Output: default@sc_part +POSTHOOK: query: insert overwrite table sc_part partition(ts) select * from sc +POSTHOOK: type: QUERY +POSTHOOK: Input: default@sc +POSTHOOK: Output: default@sc_part@ts=2011-01-11+14%3A18%3A26 +POSTHOOK: Output: default@sc_part@ts=2011-01-11+15%3A18%3A26 +POSTHOOK: Output: default@sc_part@ts=2011-01-11+16%3A18%3A26 +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+14:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+14:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+15:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+15:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+16:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+16:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +PREHOOK: query: show partitions sc_part +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: show partitions sc_part +POSTHOOK: type: SHOWPARTITIONS +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+14:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+14:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+15:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+15:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+16:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+16:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +ts=2011-01-11+14%3A18%3A26 +ts=2011-01-11+15%3A18%3A26 +ts=2011-01-11+16%3A18%3A26 +PREHOOK: query: select count(*) from sc_part where ts is not null +PREHOOK: type: QUERY +PREHOOK: Input: default@sc_part@ts=2011-01-11+14%3A18%3A26 +PREHOOK: Input: default@sc_part@ts=2011-01-11+15%3A18%3A26 +PREHOOK: Input: default@sc_part@ts=2011-01-11+16%3A18%3A26 +PREHOOK: Output: file:/tmp/nzhang/hive_2011-01-13_11-13-17_403_2722288816258097447/-mr-10000 +POSTHOOK: query: select count(*) from sc_part where ts is not null +POSTHOOK: type: QUERY +POSTHOOK: Input: default@sc_part@ts=2011-01-11+14%3A18%3A26 +POSTHOOK: Input: default@sc_part@ts=2011-01-11+15%3A18%3A26 +POSTHOOK: Input: default@sc_part@ts=2011-01-11+16%3A18%3A26 +POSTHOOK: Output: file:/tmp/nzhang/hive_2011-01-13_11-13-17_403_2722288816258097447/-mr-10000 +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+14:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+14:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+15:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+15:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+16:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +POSTHOOK: Lineage: sc_part PARTITION(ts=2011-01-11+16:18:26).key SIMPLE [(sc)sc.FieldSchema(name:_c0, type:string, comment:null), ] +3 Index: ql/src/test/queries/clientpositive/partition_special_char.q =================================================================== --- ql/src/test/queries/clientpositive/partition_special_char.q (revision 0) +++ ql/src/test/queries/clientpositive/partition_special_char.q (revision 0) @@ -0,0 +1,19 @@ +create table sc as select * +from (select '2011-01-11', '2011-01-11+14:18:26' from src limit 1 + union all + select '2011-01-11', '2011-01-11+15:18:26' from src limit 1 + union all + select '2011-01-11', '2011-01-11+16:18:26' from src limit 1 ) s; + +create table sc_part (key string) partitioned by (ts string) stored as rcfile; + +set hive.exec.dynamic.partition=true; +set hive.exec.dynamic.partition.mode=nonstrict; + +insert overwrite table sc_part partition(ts) select * from sc; +show partitions sc_part; +select count(*) from sc_part where ts is not null; + +insert overwrite table sc_part partition(ts) select * from sc; +show partitions sc_part; +select count(*) from sc_part where ts is not null; Index: ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java (revision 1058422) +++ ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java (working copy) @@ -95,7 +95,7 @@ private HiveConf conf = null; private IMetaStoreClient metaStoreClient; private String currentDatabase; - + private static ThreadLocal hiveDB = new ThreadLocal() { @Override protected synchronized Object initialValue() { @@ -965,7 +965,7 @@ throw new HiveException(e); } } - + /** * Query metadata to see if a database with the given name already exists. * @@ -1134,7 +1134,7 @@ public void loadTable(Path loadPath, String tableName, boolean replace, boolean holdDDLTime) throws HiveException { Table tbl = getTable(tableName); - + if (replace) { tbl.replaceFiles(loadPath); } else { @@ -1459,7 +1459,7 @@ public void setCurrentDatabase(String currentDatabase) { this.currentDatabase = currentDatabase; } - + public void createRole(String roleName, String ownerName) throws HiveException { try { @@ -1476,7 +1476,7 @@ throw new HiveException(e); } } - + public List showRoleGrant(String principalName, PrincipalType principalType) throws HiveException { try { return getMSC().list_roles(principalName, principalType); @@ -1484,7 +1484,7 @@ throw new HiveException(e); } } - + public boolean grantRole(String roleName, String userName, PrincipalType principalType, String grantor, PrincipalType grantorType, boolean grantOption) throws HiveException { @@ -1504,7 +1504,7 @@ throw new HiveException(e); } } - + public List listRoles(String userName, PrincipalType principalType) throws HiveException { try { @@ -1513,7 +1513,7 @@ throw new HiveException(e); } } - + /** * @param objectType * hive object type @@ -1717,7 +1717,7 @@ // use FsShell to move data to .Trash first rather than delete permanently FsShell fshell = new FsShell(); fshell.setConf(conf); - fshell.run(new String[]{"-rmr", oldPath.toUri().toString()}); + fshell.run(new String[]{"-rmr", oldPath.toString()}); } } catch (Exception e) { //swallow the exception @@ -1734,7 +1734,7 @@ if (fs.exists(destf)) { fs.delete(destf, true); } - + boolean b = fs.rename(srcs[0].getPath(), destf); if (!b) { throw new HiveException("Unable to move results from " + srcs[0].getPath() @@ -1806,7 +1806,7 @@ } return metaStoreClient; } - + private String getUserName() { SessionState ss = SessionState.get(); if (ss != null && ss.getAuthenticator() != null) { @@ -1814,7 +1814,7 @@ } return null; } - + private List getGroupNames() { SessionState ss = SessionState.get(); if (ss != null && ss.getAuthenticator() != null) {