Index: ql/src/test/results/clientnegative/default_partition_name.q.out =================================================================== --- ql/src/test/results/clientnegative/default_partition_name.q.out (revision 0) +++ ql/src/test/results/clientnegative/default_partition_name.q.out (revision 0) @@ -0,0 +1,6 @@ +PREHOOK: query: create table default_partition_name (key int, value string) partitioned by (ds string) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table default_partition_name (key int, value string) partitioned by (ds string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@default_partition_name +FAILED: Error in semantic analysis: Partition value contains a reserved substring (User value: __HIVE_DEFAULT_PARTITION__ Reserved substring: __HIVE_DEFAULT_PARTITION__) Index: ql/src/test/results/clientpositive/default_partition_name.q.out =================================================================== --- ql/src/test/results/clientpositive/default_partition_name.q.out (revision 0) +++ ql/src/test/results/clientpositive/default_partition_name.q.out (revision 0) @@ -0,0 +1,17 @@ +PREHOOK: query: create table default_partition_name (key int, value string) partitioned by (ds string) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table default_partition_name (key int, value string) partitioned by (ds string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@default_partition_name +PREHOOK: query: alter table default_partition_name add partition(ds='__HIVE_DEFAULT_PARTITION__') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Input: default@default_partition_name +POSTHOOK: query: alter table default_partition_name add partition(ds='__HIVE_DEFAULT_PARTITION__') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Input: default@default_partition_name +POSTHOOK: Output: default@default_partition_name@ds=__HIVE_DEFAULT_PARTITION__ +PREHOOK: query: show partitions default_partition_name +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: show partitions default_partition_name +POSTHOOK: type: SHOWPARTITIONS +ds=__HIVE_DEFAULT_PARTITION__ Index: ql/src/test/queries/clientnegative/default_partition_name.q =================================================================== --- ql/src/test/queries/clientnegative/default_partition_name.q (revision 0) +++ ql/src/test/queries/clientnegative/default_partition_name.q (revision 0) @@ -0,0 +1,3 @@ +create table default_partition_name (key int, value string) partitioned by (ds string); + +alter table default_partition_name add partition(ds='__HIVE_DEFAULT_PARTITION__'); Index: ql/src/test/queries/clientpositive/default_partition_name.q =================================================================== --- ql/src/test/queries/clientpositive/default_partition_name.q (revision 0) +++ ql/src/test/queries/clientpositive/default_partition_name.q (revision 0) @@ -0,0 +1,7 @@ +create table default_partition_name (key int, value string) partitioned by (ds string); + +set hive.exec.default.partition.name='some_other_default_partition_name'; + +alter table default_partition_name add partition(ds='__HIVE_DEFAULT_PARTITION__'); + +show partitions default_partition_name; Index: ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (revision 1065702) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (working copy) @@ -70,13 +70,6 @@ import org.apache.hadoop.hive.ql.plan.AlterTableSimpleDesc; import org.apache.hadoop.hive.ql.plan.CreateDatabaseDesc; import org.apache.hadoop.hive.ql.plan.CreateIndexDesc; -import org.apache.hadoop.hive.ql.plan.GrantDesc; -import org.apache.hadoop.hive.ql.plan.GrantRevokeRoleDDL; -import org.apache.hadoop.hive.ql.plan.PrincipalDesc; -import org.apache.hadoop.hive.ql.plan.PrivilegeDesc; -import org.apache.hadoop.hive.ql.plan.PrivilegeObjectDesc; -import org.apache.hadoop.hive.ql.plan.RevokeDesc; -import org.apache.hadoop.hive.ql.plan.RoleDDLDesc; import org.apache.hadoop.hive.ql.plan.DDLWork; import org.apache.hadoop.hive.ql.plan.DescDatabaseDesc; import org.apache.hadoop.hive.ql.plan.DescFunctionDesc; @@ -85,8 +78,15 @@ import org.apache.hadoop.hive.ql.plan.DropIndexDesc; import org.apache.hadoop.hive.ql.plan.DropTableDesc; import org.apache.hadoop.hive.ql.plan.FetchWork; +import org.apache.hadoop.hive.ql.plan.GrantDesc; +import org.apache.hadoop.hive.ql.plan.GrantRevokeRoleDDL; import org.apache.hadoop.hive.ql.plan.LockTableDesc; import org.apache.hadoop.hive.ql.plan.MsckDesc; +import org.apache.hadoop.hive.ql.plan.PrincipalDesc; +import org.apache.hadoop.hive.ql.plan.PrivilegeDesc; +import org.apache.hadoop.hive.ql.plan.PrivilegeObjectDesc; +import org.apache.hadoop.hive.ql.plan.RevokeDesc; +import org.apache.hadoop.hive.ql.plan.RoleDDLDesc; import org.apache.hadoop.hive.ql.plan.ShowDatabasesDesc; import org.apache.hadoop.hive.ql.plan.ShowFunctionsDesc; import org.apache.hadoop.hive.ql.plan.ShowGrantDesc; @@ -111,9 +111,9 @@ */ public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer { private static final Log LOG = LogFactory.getLog("hive.ql.parse.DDLSemanticAnalyzer"); - public static final Map TokenToTypeName = new HashMap(); + private final Set reservedPartitionValues; + private static final Map TokenToTypeName = new HashMap(); - public static final Set reservedPartitionValues = new HashSet(); static { TokenToTypeName.put(HiveParser.TOK_BOOLEAN, Constants.BOOLEAN_TYPE_NAME); TokenToTypeName.put(HiveParser.TOK_TINYINT, Constants.TINYINT_TYPE_NAME); @@ -157,6 +157,7 @@ public DDLSemanticAnalyzer(HiveConf conf) throws SemanticException { super(conf); + reservedPartitionValues = new HashSet(); // Partition can't have this name reservedPartitionValues.add(HiveConf.getVar(conf, ConfVars.DEFAULTPARTITIONNAME)); reservedPartitionValues.add(HiveConf.getVar(conf, ConfVars.DEFAULT_ZOOKEEPER_PARTITION_NAME)); @@ -357,7 +358,7 @@ private void analyzeShowGrant(ASTNode ast) throws SemanticException { PrivilegeObjectDesc privHiveObj = null; - + ASTNode principal = (ASTNode) ast.getChild(0); PrincipalType type = PrincipalType.USER; switch (principal.getType()) { @@ -393,13 +394,13 @@ } } } - + if (privHiveObj == null && cols != null) { throw new SemanticException( "For user-level privileges, column sets should be null. columns=" + cols.toString()); } - + ShowGrantDesc showGrant = new ShowGrantDesc(ctx.getResFile().toString(), principalDesc, privHiveObj, cols); rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), @@ -421,10 +422,10 @@ grantOption = true; } else if (astChild.getType() == HiveParser.TOK_PRIV_OBJECT) { privilegeObj = analyzePrivilegeObject(astChild); - } + } } } - + String userName = null; if (SessionState.get() != null && SessionState.get().getAuthenticator() != null) { @@ -436,7 +437,7 @@ rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), grantDesc), conf)); } - + private void analyzeRevoke(ASTNode ast) throws SemanticException { List privilegeDesc = analyzePrivilegeListDef( (ASTNode) ast.getChild(0)); @@ -447,13 +448,13 @@ ASTNode astChild = (ASTNode) ast.getChild(2); hiveObj = analyzePrivilegeObject(astChild); } - + RevokeDesc revokeDesc = new RevokeDesc(privilegeDesc, principalDesc, hiveObj); rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), revokeDesc), conf)); } - + private PrivilegeObjectDesc analyzePrivilegeObject(ASTNode ast) throws SemanticException { PrivilegeObjectDesc subject = new PrivilegeObjectDesc(); @@ -470,10 +471,10 @@ } return subject; } - + private List analyzePrincipalListDef(ASTNode node) { List principalList = new ArrayList(); - + for (int i = 0; i < node.getChildCount(); i++) { ASTNode child = (ASTNode) node.getChild(i); PrincipalType type = null; @@ -492,7 +493,7 @@ PrincipalDesc principalDesc = new PrincipalDesc(principalName, type); principalList.add(principalDesc); } - + return principalList; } @@ -501,7 +502,7 @@ List ret = new ArrayList(); for (int i = 0; i < node.getChildCount(); i++) { ASTNode privilegeDef = (ASTNode) node.getChild(i); - + String privilegeStr = unescapeIdentifier(privilegeDef.getChild(0) .getText()); Privilege privObj = PrivilegeRegistry.getPrivilege(privilegeStr);