diff --git ql/src/java/org/apache/hadoop/hive/ql/hooks/HiveProtoLoggingHook.java ql/src/java/org/apache/hadoop/hive/ql/hooks/HiveProtoLoggingHook.java index ec00ab6d6e..8eab54859b 100644 --- ql/src/java/org/apache/hadoop/hive/ql/hooks/HiveProtoLoggingHook.java +++ ql/src/java/org/apache/hadoop/hive/ql/hooks/HiveProtoLoggingHook.java @@ -71,7 +71,6 @@ import static org.apache.hadoop.hive.ql.plan.HiveOperation.DROPROLE; import static org.apache.hadoop.hive.ql.plan.HiveOperation.DROPTABLE; import static org.apache.hadoop.hive.ql.plan.HiveOperation.DROPVIEW; -import static org.apache.hadoop.hive.ql.plan.HiveOperation.DROPVIEW_PROPERTIES; import static org.apache.hadoop.hive.ql.plan.HiveOperation.EXPORT; import static org.apache.hadoop.hive.ql.plan.HiveOperation.IMPORT; import static org.apache.hadoop.hive.ql.plan.HiveOperation.KILL_QUERY; @@ -150,7 +149,7 @@ ALTERPARTITION_SERDEPROPERTIES, ALTERTABLE_CLUSTER_SORT, ANALYZE_TABLE, CACHE_METADATA, ALTERTABLE_BUCKETNUM, ALTERPARTITION_BUCKETNUM, CREATEFUNCTION, DROPFUNCTION, RELOADFUNCTION, CREATEMACRO, DROPMACRO, CREATEVIEW, DROPVIEW, ALTERVIEW_PROPERTIES, - DROPVIEW_PROPERTIES, LOCKTABLE, UNLOCKTABLE, CREATEROLE, DROPROLE, ALTERTABLE_FILEFORMAT, + LOCKTABLE, UNLOCKTABLE, CREATEROLE, DROPROLE, ALTERTABLE_FILEFORMAT, ALTERPARTITION_FILEFORMAT, ALTERTABLE_LOCATION, ALTERPARTITION_LOCATION, CREATETABLE, TRUNCATETABLE, CREATETABLE_AS_SELECT, QUERY, ALTERDATABASE, ALTERDATABASE_OWNER, ALTERTABLE_MERGEFILES, ALTERPARTITION_MERGEFILES, ALTERTABLE_SKEWED, diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java index 4ef33dc5d0..68dfe0de99 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -342,33 +342,41 @@ public void analyzeInternal(ASTNode input) throws SemanticException { analyzeAlterTableProps(qualified, null, ast, false, false); } else if (ast.getType() == HiveParser.TOK_ALTERTABLE_DROPPROPERTIES) { analyzeAlterTableProps(qualified, null, ast, false, true); - } else if (ast.getType() == HiveParser.TOK_ALTERTABLE_UPDATESTATS) { + } else if (ast.getType() == HiveParser.TOK_ALTERTABLE_UPDATESTATS || + ast.getType() == HiveParser.TOK_ALTERPARTITION_UPDATESTATS) { analyzeAlterTableProps(qualified, partSpec, ast, false, false); } else if (ast.getType() == HiveParser.TOK_ALTERTABLE_SKEWED) { analyzeAlterTableSkewedby(qualified, ast); } else if (ast.getType() == HiveParser.TOK_ALTERTABLE_EXCHANGEPARTITION) { analyzeExchangePartition(qualified, ast); - } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_FILEFORMAT) { + } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_FILEFORMAT || + ast.getToken().getType() == HiveParser.TOK_ALTERPARTITION_FILEFORMAT) { analyzeAlterTableFileFormat(ast, tableName, partSpec); - } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_LOCATION) { + } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_LOCATION || + ast.getToken().getType() == HiveParser.TOK_ALTERPARTITION_LOCATION) { analyzeAlterTableLocation(ast, tableName, partSpec); - } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_MERGEFILES) { + } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_MERGEFILES || + ast.getToken().getType() == HiveParser.TOK_ALTERPARTITION_MERGEFILES) { analyzeAlterTablePartMergeFiles(ast, tableName, partSpec); - } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_SERIALIZER) { + } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_SERIALIZER || + ast.getToken().getType() == HiveParser.TOK_ALTERPARTITION_SERIALIZER) { analyzeAlterTableSerde(ast, tableName, partSpec); - } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES) { + } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES || + ast.getToken().getType() == HiveParser.TOK_ALTERPARTITION_SERDEPROPERTIES) { analyzeAlterTableSerdeProps(ast, tableName, partSpec); } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_RENAMEPART) { analyzeAlterTableRenamePart(ast, tableName, partSpec); } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_SKEWED_LOCATION) { analyzeAlterTableSkewedLocation(ast, tableName, partSpec); - } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_BUCKETS) { + } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_BUCKETS || + ast.getToken().getType() == HiveParser.TOK_ALTERPARTITION_BUCKETS) { analyzeAlterTableBucketNum(ast, tableName, partSpec); } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_CLUSTER_SORT) { analyzeAlterTableClusterSort(ast, tableName, partSpec); } else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_COMPACT) { analyzeAlterTableCompact(ast, tableName, partSpec); - } else if(ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_UPDATECOLSTATS){ + } else if(ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_UPDATECOLSTATS || + ast.getToken().getType() == HiveParser.TOK_ALTERPARTITION_UPDATECOLSTATS){ analyzeAlterTableUpdateStats(ast, tableName, partSpec); } else if(ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_DROPCONSTRAINT) { analyzeAlterTableDropConstraint(ast, tableName); diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g index 73f1804e8c..a881944800 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g @@ -168,16 +168,23 @@ TOK_ALTERTABLE_ADDPARTS; TOK_ALTERTABLE_DROPPARTS; TOK_ALTERTABLE_PARTCOLTYPE; TOK_ALTERTABLE_MERGEFILES; +TOK_ALTERPARTITION_MERGEFILES; TOK_ALTERTABLE_TOUCH; TOK_ALTERTABLE_ARCHIVE; TOK_ALTERTABLE_UNARCHIVE; TOK_ALTERTABLE_SERDEPROPERTIES; +TOK_ALTERPARTITION_SERDEPROPERTIES; TOK_ALTERTABLE_SERIALIZER; +TOK_ALTERPARTITION_SERIALIZER; TOK_ALTERTABLE_UPDATECOLSTATS; +TOK_ALTERPARTITION_UPDATECOLSTATS; TOK_ALTERTABLE_UPDATESTATS; +TOK_ALTERPARTITION_UPDATESTATS; TOK_TABLE_PARTITION; TOK_ALTERTABLE_FILEFORMAT; +TOK_ALTERPARTITION_FILEFORMAT; TOK_ALTERTABLE_LOCATION; +TOK_ALTERPARTITION_LOCATION; TOK_ALTERTABLE_PROPERTIES; TOK_ALTERTABLE_CHANGECOL_AFTER_POSITION; TOK_ALTERTABLE_DROPPROPERTIES; @@ -185,6 +192,7 @@ TOK_ALTERTABLE_SKEWED; TOK_ALTERTABLE_EXCHANGEPARTITION; TOK_ALTERTABLE_SKEWED_LOCATION; TOK_ALTERTABLE_BUCKETS; +TOK_ALTERPARTITION_BUCKETS; TOK_ALTERTABLE_CLUSTER_SORT; TOK_ALTERTABLE_COMPACT; TOK_ALTERTABLE_DROPCONSTRAINT; @@ -1185,24 +1193,25 @@ alterTableStatementSuffix | alterStatementPartitionKeyType | alterStatementSuffixDropConstraint | alterStatementSuffixAddConstraint - | partitionSpec? alterTblPartitionStatementSuffix -> alterTblPartitionStatementSuffix partitionSpec? + | alterTblPartitionStatementSuffix[false] + | partitionSpec alterTblPartitionStatementSuffix[true] -> alterTblPartitionStatementSuffix partitionSpec | alterStatementSuffixSetOwner ; -alterTblPartitionStatementSuffix +alterTblPartitionStatementSuffix[boolean partition] @init {pushMsg("alter table partition statement suffix", state);} @after {popMsg(state);} - : alterStatementSuffixFileFormat - | alterStatementSuffixLocation - | alterStatementSuffixMergeFiles - | alterStatementSuffixSerdeProperties + : alterStatementSuffixFileFormat[partition] + | alterStatementSuffixLocation[partition] + | alterStatementSuffixMergeFiles[partition] + | alterStatementSuffixSerdeProperties[partition] | alterStatementSuffixRenamePart - | alterStatementSuffixBucketNum + | alterStatementSuffixBucketNum[partition] | alterTblPartitionStatementSuffixSkewedLocation | alterStatementSuffixClusterbySortby | alterStatementSuffixCompact - | alterStatementSuffixUpdateStatsCol - | alterStatementSuffixUpdateStats + | alterStatementSuffixUpdateStatsCol[partition] + | alterStatementSuffixUpdateStats[partition] | alterStatementSuffixRenameCol | alterStatementSuffixAddCol | alterStatementSuffixUpdateColumns @@ -1306,18 +1315,20 @@ alterStatementSuffixRenameCol ->^(TOK_ALTERTABLE_RENAMECOL $oldName $newName colType $comment? alterColumnConstraint? alterStatementChangeColPosition? restrictOrCascade?) ; -alterStatementSuffixUpdateStatsCol +alterStatementSuffixUpdateStatsCol[boolean partition] @init { pushMsg("update column statistics", state); } @after { popMsg(state); } : KW_UPDATE KW_STATISTICS KW_FOR KW_COLUMN? colName=identifier KW_SET tableProperties (KW_COMMENT comment=StringLiteral)? - ->^(TOK_ALTERTABLE_UPDATECOLSTATS $colName tableProperties $comment?) + -> {partition}? ^(TOK_ALTERPARTITION_UPDATECOLSTATS $colName tableProperties $comment?) + -> ^(TOK_ALTERTABLE_UPDATECOLSTATS $colName tableProperties $comment?) ; -alterStatementSuffixUpdateStats +alterStatementSuffixUpdateStats[boolean partition] @init { pushMsg("update basic statistics", state); } @after { popMsg(state); } : KW_UPDATE KW_STATISTICS KW_SET tableProperties - ->^(TOK_ALTERTABLE_UPDATESTATS tableProperties) + -> {partition}? ^(TOK_ALTERPARTITION_UPDATESTATS tableProperties) + -> ^(TOK_ALTERTABLE_UPDATESTATS tableProperties) ; alterStatementChangeColPosition @@ -1405,13 +1416,15 @@ alterMaterializedViewSuffixRebuild : KW_REBUILD -> ^(TOK_ALTER_MATERIALIZED_VIEW_REBUILD) ; -alterStatementSuffixSerdeProperties +alterStatementSuffixSerdeProperties[boolean partition] @init { pushMsg("alter serdes statement", state); } @after { popMsg(state); } : KW_SET KW_SERDE serdeName=StringLiteral (KW_WITH KW_SERDEPROPERTIES tableProperties)? - -> ^(TOK_ALTERTABLE_SERIALIZER $serdeName tableProperties?) + -> {partition}? ^(TOK_ALTERPARTITION_SERIALIZER $serdeName tableProperties?) + -> ^(TOK_ALTERTABLE_SERIALIZER $serdeName tableProperties?) | KW_SET KW_SERDEPROPERTIES tableProperties - -> ^(TOK_ALTERTABLE_SERDEPROPERTIES tableProperties) + -> {partition}? ^(TOK_ALTERPARTITION_SERDEPROPERTIES tableProperties) + -> ^(TOK_ALTERTABLE_SERDEPROPERTIES tableProperties) ; tablePartitionPrefix @@ -1421,12 +1434,13 @@ tablePartitionPrefix ->^(TOK_TABLE_PARTITION tableName partitionSpec?) ; -alterStatementSuffixFileFormat +alterStatementSuffixFileFormat[boolean partition] @init {pushMsg("alter fileformat statement", state); } @after {popMsg(state);} - : KW_SET KW_FILEFORMAT fileFormat - -> ^(TOK_ALTERTABLE_FILEFORMAT fileFormat) - ; + : KW_SET KW_FILEFORMAT fileFormat + -> {partition}? ^(TOK_ALTERPARTITION_FILEFORMAT fileFormat) + -> ^(TOK_ALTERTABLE_FILEFORMAT fileFormat) + ; alterStatementSuffixClusterbySortby @init {pushMsg("alter partition cluster by sort by statement", state);} @@ -1464,11 +1478,12 @@ skewedLocationMap key=skewedValueLocationElement EQUAL value=StringLiteral -> ^(TOK_SKEWED_LOCATION_MAP $key $value) ; -alterStatementSuffixLocation +alterStatementSuffixLocation[boolean partition] @init {pushMsg("alter location", state);} @after {popMsg(state);} : KW_SET KW_LOCATION newLoc=StringLiteral - -> ^(TOK_ALTERTABLE_LOCATION $newLoc) + -> {partition}? ^(TOK_ALTERPARTITION_LOCATION $newLoc) + -> ^(TOK_ALTERTABLE_LOCATION $newLoc) ; @@ -1506,18 +1521,20 @@ alterStatementSuffixStatsPart ->^(TOK_ALTERTABLE_UPDATECOLSTATS $colName tableProperties $comment?) ; -alterStatementSuffixMergeFiles +alterStatementSuffixMergeFiles[boolean partition] @init { pushMsg("", state); } @after { popMsg(state); } : KW_CONCATENATE - -> ^(TOK_ALTERTABLE_MERGEFILES) + -> {partition}? ^(TOK_ALTERPARTITION_MERGEFILES) + -> ^(TOK_ALTERTABLE_MERGEFILES) ; -alterStatementSuffixBucketNum +alterStatementSuffixBucketNum[boolean partition] @init { pushMsg("", state); } @after { popMsg(state); } : KW_INTO num=Number KW_BUCKETS - -> ^(TOK_ALTERTABLE_BUCKETS $num) + -> {partition}? ^(TOK_ALTERPARTITION_BUCKETS $num) + -> ^(TOK_ALTERTABLE_BUCKETS $num) ; blocking diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 45482764fd..e48bb1f6dd 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -12472,10 +12472,10 @@ else if(ast.getChild(0).getType() == HiveParser.TOK_FALSE) { case HiveParser.TOK_COMMIT: case HiveParser.TOK_ROLLBACK: if(!(conf.getBoolVar(ConfVars.HIVE_IN_TEST) || conf.getBoolVar(ConfVars.HIVE_IN_TEZ_TEST))) { - throw new IllegalStateException(SemanticAnalyzerFactory.getOperation(ast.getToken().getType()) + + throw new IllegalStateException(HiveOperation.operationForToken(ast.getToken().getType()) + " is not supported yet."); } - queryState.setCommandType(SemanticAnalyzerFactory.getOperation(ast.getToken().getType())); + queryState.setCommandType(HiveOperation.operationForToken(ast.getToken().getType())); return false; } diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java index 3afead0378..1a994313dd 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java @@ -26,168 +26,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashMap; - /** * SemanticAnalyzerFactory. * */ public final class SemanticAnalyzerFactory { - static final private Logger LOG = LoggerFactory.getLogger(SemanticAnalyzerFactory.class); - - static HashMap commandType = new HashMap(); - static HashMap tablePartitionCommandType = new HashMap(); - - static { - commandType.put(HiveParser.TOK_EXPLAIN, HiveOperation.EXPLAIN); - commandType.put(HiveParser.TOK_LOAD, HiveOperation.LOAD); - commandType.put(HiveParser.TOK_EXPORT, HiveOperation.EXPORT); - commandType.put(HiveParser.TOK_IMPORT, HiveOperation.IMPORT); - commandType.put(HiveParser.TOK_CREATEDATABASE, HiveOperation.CREATEDATABASE); - commandType.put(HiveParser.TOK_DROPDATABASE, HiveOperation.DROPDATABASE); - commandType.put(HiveParser.TOK_SWITCHDATABASE, HiveOperation.SWITCHDATABASE); - commandType.put(HiveParser.TOK_CREATETABLE, HiveOperation.CREATETABLE); - commandType.put(HiveParser.TOK_TRUNCATETABLE, HiveOperation.TRUNCATETABLE); - commandType.put(HiveParser.TOK_DROPTABLE, HiveOperation.DROPTABLE); - commandType.put(HiveParser.TOK_DESCTABLE, HiveOperation.DESCTABLE); - commandType.put(HiveParser.TOK_DESCFUNCTION, HiveOperation.DESCFUNCTION); - commandType.put(HiveParser.TOK_MSCK, HiveOperation.MSCK); - commandType.put(HiveParser.TOK_ALTERTABLE_ADDCOLS, HiveOperation.ALTERTABLE_ADDCOLS); - commandType.put(HiveParser.TOK_ALTERTABLE_REPLACECOLS, HiveOperation.ALTERTABLE_REPLACECOLS); - commandType.put(HiveParser.TOK_ALTERTABLE_RENAMECOL, HiveOperation.ALTERTABLE_RENAMECOL); - commandType.put(HiveParser.TOK_ALTERTABLE_RENAME, HiveOperation.ALTERTABLE_RENAME); - commandType.put(HiveParser.TOK_ALTERTABLE_DROPPARTS, HiveOperation.ALTERTABLE_DROPPARTS); - commandType.put(HiveParser.TOK_ALTERTABLE_ADDPARTS, HiveOperation.ALTERTABLE_ADDPARTS); - commandType.put(HiveParser.TOK_ALTERTABLE_TOUCH, HiveOperation.ALTERTABLE_TOUCH); - commandType.put(HiveParser.TOK_ALTERTABLE_ARCHIVE, HiveOperation.ALTERTABLE_ARCHIVE); - commandType.put(HiveParser.TOK_ALTERTABLE_UNARCHIVE, HiveOperation.ALTERTABLE_UNARCHIVE); - commandType.put(HiveParser.TOK_ALTERTABLE_PROPERTIES, HiveOperation.ALTERTABLE_PROPERTIES); - commandType.put(HiveParser.TOK_ALTERTABLE_DROPPROPERTIES, HiveOperation.ALTERTABLE_PROPERTIES); - commandType.put(HiveParser.TOK_ALTERTABLE_EXCHANGEPARTITION, - HiveOperation.ALTERTABLE_EXCHANGEPARTITION); - commandType.put(HiveParser.TOK_ALTERTABLE_DROPCONSTRAINT, HiveOperation.ALTERTABLE_DROPCONSTRAINT); - commandType.put(HiveParser.TOK_ALTERTABLE_ADDCONSTRAINT, HiveOperation.ALTERTABLE_ADDCONSTRAINT); - commandType.put(HiveParser.TOK_ALTERTABLE_UPDATECOLUMNS, HiveOperation.ALTERTABLE_UPDATECOLUMNS); - commandType.put(HiveParser.TOK_SHOWDATABASES, HiveOperation.SHOWDATABASES); - commandType.put(HiveParser.TOK_SHOWTABLES, HiveOperation.SHOWTABLES); - commandType.put(HiveParser.TOK_SHOWCOLUMNS, HiveOperation.SHOWCOLUMNS); - commandType.put(HiveParser.TOK_SHOW_TABLESTATUS, HiveOperation.SHOW_TABLESTATUS); - commandType.put(HiveParser.TOK_SHOW_TBLPROPERTIES, HiveOperation.SHOW_TBLPROPERTIES); - commandType.put(HiveParser.TOK_SHOW_CREATEDATABASE, HiveOperation.SHOW_CREATEDATABASE); - commandType.put(HiveParser.TOK_SHOW_CREATETABLE, HiveOperation.SHOW_CREATETABLE); - commandType.put(HiveParser.TOK_SHOWFUNCTIONS, HiveOperation.SHOWFUNCTIONS); - commandType.put(HiveParser.TOK_SHOWPARTITIONS, HiveOperation.SHOWPARTITIONS); - commandType.put(HiveParser.TOK_SHOWLOCKS, HiveOperation.SHOWLOCKS); - commandType.put(HiveParser.TOK_SHOWDBLOCKS, HiveOperation.SHOWLOCKS); - commandType.put(HiveParser.TOK_SHOWCONF, HiveOperation.SHOWCONF); - commandType.put(HiveParser.TOK_SHOWVIEWS, HiveOperation.SHOWVIEWS); - commandType.put(HiveParser.TOK_SHOWMATERIALIZEDVIEWS, HiveOperation.SHOWMATERIALIZEDVIEWS); - commandType.put(HiveParser.TOK_CREATEFUNCTION, HiveOperation.CREATEFUNCTION); - commandType.put(HiveParser.TOK_DROPFUNCTION, HiveOperation.DROPFUNCTION); - commandType.put(HiveParser.TOK_RELOADFUNCTIONS, HiveOperation.RELOADFUNCTION); - commandType.put(HiveParser.TOK_CREATEMACRO, HiveOperation.CREATEMACRO); - commandType.put(HiveParser.TOK_DROPMACRO, HiveOperation.DROPMACRO); - commandType.put(HiveParser.TOK_CREATEVIEW, HiveOperation.CREATEVIEW); - commandType.put(HiveParser.TOK_CREATE_MATERIALIZED_VIEW, HiveOperation.CREATE_MATERIALIZED_VIEW); - commandType.put(HiveParser.TOK_DROPVIEW, HiveOperation.DROPVIEW); - commandType.put(HiveParser.TOK_DROP_MATERIALIZED_VIEW, HiveOperation.DROP_MATERIALIZED_VIEW); - commandType.put(HiveParser.TOK_ALTERVIEW_PROPERTIES, HiveOperation.ALTERVIEW_PROPERTIES); - commandType.put(HiveParser.TOK_ALTERVIEW_DROPPROPERTIES, HiveOperation.ALTERVIEW_PROPERTIES); - commandType.put(HiveParser.TOK_ALTERVIEW_ADDPARTS, HiveOperation.ALTERTABLE_ADDPARTS); - commandType.put(HiveParser.TOK_ALTERVIEW_DROPPARTS, HiveOperation.ALTERTABLE_DROPPARTS); - commandType.put(HiveParser.TOK_ALTERTABLE_OWNER, HiveOperation.ALTERTABLE_OWNER); - commandType.put(HiveParser.TOK_ALTERVIEW_RENAME, HiveOperation.ALTERVIEW_RENAME); - commandType.put(HiveParser.TOK_ALTERVIEW, HiveOperation.ALTERVIEW_AS); - commandType.put(HiveParser.TOK_ALTER_MATERIALIZED_VIEW_REWRITE, - HiveOperation.ALTER_MATERIALIZED_VIEW_REWRITE); - commandType.put(HiveParser.TOK_QUERY, HiveOperation.QUERY); - commandType.put(HiveParser.TOK_LOCKTABLE, HiveOperation.LOCKTABLE); - commandType.put(HiveParser.TOK_UNLOCKTABLE, HiveOperation.UNLOCKTABLE); - commandType.put(HiveParser.TOK_LOCKDB, HiveOperation.LOCKDB); - commandType.put(HiveParser.TOK_UNLOCKDB, HiveOperation.UNLOCKDB); - commandType.put(HiveParser.TOK_CREATEROLE, HiveOperation.CREATEROLE); - commandType.put(HiveParser.TOK_DROPROLE, HiveOperation.DROPROLE); - commandType.put(HiveParser.TOK_GRANT, HiveOperation.GRANT_PRIVILEGE); - commandType.put(HiveParser.TOK_REVOKE, HiveOperation.REVOKE_PRIVILEGE); - commandType.put(HiveParser.TOK_SHOW_GRANT, HiveOperation.SHOW_GRANT); - commandType.put(HiveParser.TOK_GRANT_ROLE, HiveOperation.GRANT_ROLE); - commandType.put(HiveParser.TOK_REVOKE_ROLE, HiveOperation.REVOKE_ROLE); - commandType.put(HiveParser.TOK_SHOW_ROLES, HiveOperation.SHOW_ROLES); - commandType.put(HiveParser.TOK_SHOW_SET_ROLE, HiveOperation.SHOW_ROLES); - commandType.put(HiveParser.TOK_SHOW_ROLE_PRINCIPALS, HiveOperation.SHOW_ROLE_PRINCIPALS); - commandType.put(HiveParser.TOK_SHOW_ROLE_GRANT, HiveOperation.SHOW_ROLE_GRANT); - commandType.put(HiveParser.TOK_ALTERDATABASE_PROPERTIES, HiveOperation.ALTERDATABASE); - commandType.put(HiveParser.TOK_ALTERDATABASE_OWNER, HiveOperation.ALTERDATABASE_OWNER); - commandType.put(HiveParser.TOK_ALTERDATABASE_LOCATION, HiveOperation.ALTERDATABASE_LOCATION); - commandType.put(HiveParser.TOK_DESCDATABASE, HiveOperation.DESCDATABASE); - commandType.put(HiveParser.TOK_ALTERTABLE_SKEWED, HiveOperation.ALTERTABLE_SKEWED); - commandType.put(HiveParser.TOK_ANALYZE, HiveOperation.ANALYZE_TABLE); - commandType.put(HiveParser.TOK_CACHE_METADATA, HiveOperation.CACHE_METADATA); - commandType.put(HiveParser.TOK_ALTERTABLE_PARTCOLTYPE, HiveOperation.ALTERTABLE_PARTCOLTYPE); - commandType.put(HiveParser.TOK_SHOW_COMPACTIONS, HiveOperation.SHOW_COMPACTIONS); - commandType.put(HiveParser.TOK_SHOW_TRANSACTIONS, HiveOperation.SHOW_TRANSACTIONS); - commandType.put(HiveParser.TOK_ABORT_TRANSACTIONS, HiveOperation.ABORT_TRANSACTIONS); - commandType.put(HiveParser.TOK_START_TRANSACTION, HiveOperation.START_TRANSACTION); - commandType.put(HiveParser.TOK_COMMIT, HiveOperation.COMMIT); - commandType.put(HiveParser.TOK_ROLLBACK, HiveOperation.ROLLBACK); - commandType.put(HiveParser.TOK_SET_AUTOCOMMIT, HiveOperation.SET_AUTOCOMMIT); - commandType.put(HiveParser.TOK_REPL_DUMP, HiveOperation.REPLDUMP); - commandType.put(HiveParser.TOK_REPL_LOAD, HiveOperation.REPLLOAD); - commandType.put(HiveParser.TOK_REPL_STATUS, HiveOperation.REPLSTATUS); - commandType.put(HiveParser.TOK_KILL_QUERY, HiveOperation.KILL_QUERY); - commandType.put(HiveParser.TOK_CREATE_RP, HiveOperation.CREATE_RESOURCEPLAN); - commandType.put(HiveParser.TOK_SHOW_RP, HiveOperation.SHOW_RESOURCEPLAN); - commandType.put(HiveParser.TOK_ALTER_RP, HiveOperation.ALTER_RESOURCEPLAN); - commandType.put(HiveParser.TOK_DROP_RP, HiveOperation.DROP_RESOURCEPLAN); - commandType.put(HiveParser.TOK_CREATE_TRIGGER, HiveOperation.CREATE_TRIGGER); - commandType.put(HiveParser.TOK_ALTER_TRIGGER, HiveOperation.ALTER_TRIGGER); - commandType.put(HiveParser.TOK_DROP_TRIGGER, HiveOperation.DROP_TRIGGER); - commandType.put(HiveParser.TOK_CREATE_POOL, HiveOperation.CREATE_POOL); - commandType.put(HiveParser.TOK_ALTER_POOL, HiveOperation.ALTER_POOL); - commandType.put(HiveParser.TOK_DROP_POOL, HiveOperation.DROP_POOL); - commandType.put(HiveParser.TOK_CREATE_MAPPING, HiveOperation.CREATE_MAPPING); - commandType.put(HiveParser.TOK_ALTER_MAPPING, HiveOperation.ALTER_MAPPING); - commandType.put(HiveParser.TOK_DROP_MAPPING, HiveOperation.DROP_MAPPING); - } + private static final Logger LOG = LoggerFactory.getLogger(SemanticAnalyzerFactory.class); - static { - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_FILEFORMAT, - new HiveOperation[] { HiveOperation.ALTERTABLE_FILEFORMAT, - HiveOperation.ALTERPARTITION_FILEFORMAT }); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_LOCATION, - new HiveOperation[] { HiveOperation.ALTERTABLE_LOCATION, - HiveOperation.ALTERPARTITION_LOCATION }); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_MERGEFILES, - new HiveOperation[] {HiveOperation.ALTERTABLE_MERGEFILES, - HiveOperation.ALTERPARTITION_MERGEFILES }); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_SERIALIZER, - new HiveOperation[] {HiveOperation.ALTERTABLE_SERIALIZER, - HiveOperation.ALTERPARTITION_SERIALIZER }); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES, - new HiveOperation[] {HiveOperation.ALTERTABLE_SERDEPROPERTIES, - HiveOperation.ALTERPARTITION_SERDEPROPERTIES }); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_RENAMEPART, - new HiveOperation[] {null, HiveOperation.ALTERTABLE_RENAMEPART}); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_COMPACT, - new HiveOperation[] {HiveOperation.ALTERTABLE_COMPACT, HiveOperation.ALTERTABLE_COMPACT}); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_SKEWED_LOCATION, - new HiveOperation[] {HiveOperation.ALTERTBLPART_SKEWED_LOCATION, - HiveOperation.ALTERTBLPART_SKEWED_LOCATION }); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_BUCKETS, - new HiveOperation[] {HiveOperation.ALTERTABLE_BUCKETNUM, - HiveOperation.ALTERPARTITION_BUCKETNUM}); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_CLUSTER_SORT, - new HiveOperation[] {HiveOperation.ALTERTABLE_CLUSTER_SORT, - HiveOperation.ALTERTABLE_CLUSTER_SORT}); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_UPDATECOLSTATS, - new HiveOperation[] {HiveOperation.ALTERTABLE_UPDATETABLESTATS, - HiveOperation.ALTERTABLE_UPDATEPARTSTATS}); - tablePartitionCommandType.put(HiveParser.TOK_ALTERTABLE_UPDATESTATS, - new HiveOperation[] {HiveOperation.ALTERTABLE_UPDATETABLESTATS, - HiveOperation.ALTERTABLE_UPDATEPARTSTATS}); + private SemanticAnalyzerFactory() { + throw new UnsupportedOperationException("SemanticAnalyzerFactory should not be instantiated"); } - public static BaseSemanticAnalyzer get(QueryState queryState, ASTNode tree) throws SemanticException { BaseSemanticAnalyzer sem = getInternal(queryState, tree); if(queryState.getHiveOperation() == null) { @@ -207,7 +56,7 @@ private static BaseSemanticAnalyzer getInternal(QueryState queryState, ASTNode t if (tree.getToken() == null) { throw new RuntimeException("Empty Syntax Tree"); } else { - HiveOperation opType = commandType.get(tree.getType()); + HiveOperation opType = HiveOperation.operationForToken(tree.getType()); queryState.setCommandType(opType); if (DDLSemanticAnalyzerFactory.handles(tree.getType())) { @@ -236,44 +85,20 @@ private static BaseSemanticAnalyzer getInternal(QueryState queryState, ASTNode t return new ReplicationSemanticAnalyzer(queryState); case HiveParser.TOK_ALTERTABLE: { Tree child = tree.getChild(1); - switch (child.getType()) { - case HiveParser.TOK_ALTERTABLE_RENAME: - case HiveParser.TOK_ALTERTABLE_TOUCH: - case HiveParser.TOK_ALTERTABLE_ARCHIVE: - case HiveParser.TOK_ALTERTABLE_UNARCHIVE: - case HiveParser.TOK_ALTERTABLE_ADDCOLS: - case HiveParser.TOK_ALTERTABLE_RENAMECOL: - case HiveParser.TOK_ALTERTABLE_REPLACECOLS: - case HiveParser.TOK_ALTERTABLE_DROPPARTS: - case HiveParser.TOK_ALTERTABLE_ADDPARTS: - case HiveParser.TOK_ALTERTABLE_PARTCOLTYPE: - case HiveParser.TOK_ALTERTABLE_PROPERTIES: - case HiveParser.TOK_ALTERTABLE_DROPPROPERTIES: - case HiveParser.TOK_ALTERTABLE_EXCHANGEPARTITION: - case HiveParser.TOK_ALTERTABLE_SKEWED: - case HiveParser.TOK_ALTERTABLE_OWNER: - case HiveParser.TOK_ALTERTABLE_DROPCONSTRAINT: - case HiveParser.TOK_ALTERTABLE_ADDCONSTRAINT: - case HiveParser.TOK_ALTERTABLE_UPDATECOLUMNS: - queryState.setCommandType(commandType.get(child.getType())); - return new DDLSemanticAnalyzer(queryState); - } - opType = - tablePartitionCommandType.get(child.getType())[tree.getChildCount() > 2 ? 1 : 0]; - queryState.setCommandType(opType); + queryState.setCommandType(HiveOperation.operationForToken(child.getType())); return new DDLSemanticAnalyzer(queryState); } case HiveParser.TOK_ALTERVIEW: { Tree child = tree.getChild(1); switch (child.getType()) { - case HiveParser.TOK_ALTERVIEW_PROPERTIES: - case HiveParser.TOK_ALTERVIEW_DROPPROPERTIES: - case HiveParser.TOK_ALTERVIEW_ADDPARTS: - case HiveParser.TOK_ALTERVIEW_DROPPARTS: - case HiveParser.TOK_ALTERVIEW_RENAME: - opType = commandType.get(child.getType()); - queryState.setCommandType(opType); - return new DDLSemanticAnalyzer(queryState); + case HiveParser.TOK_ALTERVIEW_PROPERTIES: + case HiveParser.TOK_ALTERVIEW_DROPPROPERTIES: + case HiveParser.TOK_ALTERVIEW_ADDPARTS: + case HiveParser.TOK_ALTERVIEW_DROPPARTS: + case HiveParser.TOK_ALTERVIEW_RENAME: + opType = HiveOperation.operationForToken(child.getType()); + queryState.setCommandType(opType); + return new DDLSemanticAnalyzer(queryState); } // TOK_ALTERVIEW_AS assert child.getType() == HiveParser.TOK_QUERY; @@ -283,14 +108,14 @@ private static BaseSemanticAnalyzer getInternal(QueryState queryState, ASTNode t case HiveParser.TOK_ALTER_MATERIALIZED_VIEW: { Tree child = tree.getChild(1); switch (child.getType()) { - case HiveParser.TOK_ALTER_MATERIALIZED_VIEW_REWRITE: - opType = commandType.get(child.getType()); - queryState.setCommandType(opType); - return new DDLSemanticAnalyzer(queryState); - case HiveParser.TOK_ALTER_MATERIALIZED_VIEW_REBUILD: - opType = commandType.get(child.getType()); - queryState.setCommandType(opType); - return new MaterializedViewRebuildSemanticAnalyzer(queryState); + case HiveParser.TOK_ALTER_MATERIALIZED_VIEW_REWRITE: + opType = HiveOperation.operationForToken(child.getType()); + queryState.setCommandType(opType); + return new DDLSemanticAnalyzer(queryState); + case HiveParser.TOK_ALTER_MATERIALIZED_VIEW_REBUILD: + opType = HiveOperation.operationForToken(child.getType()); + queryState.setCommandType(opType); + return new MaterializedViewRebuildSemanticAnalyzer(queryState); } // Operation not recognized, set to null and let upper level handle this case queryState.setCommandType(null); @@ -315,7 +140,6 @@ private static BaseSemanticAnalyzer getInternal(QueryState queryState, ASTNode t case HiveParser.TOK_SHOWCONF: case HiveParser.TOK_SHOWVIEWS: case HiveParser.TOK_SHOWMATERIALIZEDVIEWS: - case HiveParser.TOK_ALTERTABLE_CLUSTER_SORT: case HiveParser.TOK_LOCKTABLE: case HiveParser.TOK_UNLOCKTABLE: case HiveParser.TOK_CREATEROLE: @@ -361,20 +185,12 @@ private static BaseSemanticAnalyzer getInternal(QueryState queryState, ASTNode t case HiveParser.TOK_COMMIT: case HiveParser.TOK_ROLLBACK: case HiveParser.TOK_SET_AUTOCOMMIT: - default: { + default: SemanticAnalyzer semAnalyzer = HiveConf .getBoolVar(queryState.getConf(), HiveConf.ConfVars.HIVE_CBO_ENABLED) ? new CalcitePlanner(queryState) : new SemanticAnalyzer(queryState); return semAnalyzer; } - } } } - - private SemanticAnalyzerFactory() { - // prevent instantiation - } - static HiveOperation getOperation(int hiveParserToken) { - return commandType.get(hiveParserToken); - } } diff --git ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java index ba3330bf58..62a42e1af1 100644 --- ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java +++ ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java @@ -18,149 +18,189 @@ package org.apache.hadoop.hive.ql.plan; +import java.util.HashMap; +import java.util.Map; + +import org.apache.hadoop.hive.ql.parse.HiveParser; import org.apache.hadoop.hive.ql.security.authorization.Privilege; public enum HiveOperation { - EXPLAIN("EXPLAIN", null, null), - LOAD("LOAD", null, new Privilege[]{Privilege.ALTER_DATA}), - EXPORT("EXPORT", new Privilege[]{Privilege.SELECT}, null), - IMPORT("IMPORT", null, new Privilege[]{Privilege.ALTER_METADATA, Privilege.ALTER_DATA}), - REPLDUMP("REPLDUMP", new Privilege[]{Privilege.ALL}, null), - REPLLOAD("REPLLOAD", null, new Privilege[]{Privilege.ALL}), - REPLSTATUS("REPLSTATUS", new Privilege[]{Privilege.SELECT}, null), - CREATEDATABASE("CREATEDATABASE", null, new Privilege[]{Privilege.CREATE}), - DROPDATABASE("DROPDATABASE", null, new Privilege[]{Privilege.DROP}), - SWITCHDATABASE("SWITCHDATABASE", null, null, true, false), - LOCKDB("LOCKDATABASE", new Privilege[]{Privilege.LOCK}, null), - UNLOCKDB("UNLOCKDATABASE", new Privilege[]{Privilege.LOCK}, null), - DROPTABLE ("DROPTABLE", null, new Privilege[]{Privilege.DROP}), - DESCTABLE("DESCTABLE", null, null), - DESCFUNCTION("DESCFUNCTION", null, null), - MSCK("MSCK", null, null), - ALTERTABLE_ADDCOLS("ALTERTABLE_ADDCOLS", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_REPLACECOLS("ALTERTABLE_REPLACECOLS", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_RENAMECOL("ALTERTABLE_RENAMECOL", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_RENAMEPART("ALTERTABLE_RENAMEPART", new Privilege[]{Privilege.DROP}, new Privilege[]{Privilege.CREATE}), - ALTERTABLE_UPDATEPARTSTATS("ALTERTABLE_UPDATEPARTSTATS", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_UPDATETABLESTATS("ALTERTABLE_UPDATETABLESTATS", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_RENAME("ALTERTABLE_RENAME", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_DROPPARTS("ALTERTABLE_DROPPARTS", new Privilege[]{Privilege.DROP}, null), + EXPLAIN("EXPLAIN", HiveParser.TOK_EXPLAIN, null, null), + LOAD("LOAD", HiveParser.TOK_LOAD, null, new Privilege[]{Privilege.ALTER_DATA}), + EXPORT("EXPORT", HiveParser.TOK_EXPORT, new Privilege[]{Privilege.SELECT}, null), + IMPORT("IMPORT", HiveParser.TOK_IMPORT, null, new Privilege[]{Privilege.ALTER_METADATA, Privilege.ALTER_DATA}), + REPLDUMP("REPLDUMP", HiveParser.TOK_REPL_DUMP, new Privilege[]{Privilege.ALL}, null), + REPLLOAD("REPLLOAD", HiveParser.TOK_REPL_LOAD, null, new Privilege[]{Privilege.ALL}), + REPLSTATUS("REPLSTATUS", HiveParser.TOK_REPL_STATUS, new Privilege[]{Privilege.SELECT}, null), + CREATEDATABASE("CREATEDATABASE", HiveParser.TOK_CREATEDATABASE, null, new Privilege[]{Privilege.CREATE}), + DROPDATABASE("DROPDATABASE", HiveParser.TOK_DROPDATABASE, null, new Privilege[]{Privilege.DROP}), + SWITCHDATABASE("SWITCHDATABASE", HiveParser.TOK_SWITCHDATABASE, null, null, true, false), + LOCKDB("LOCKDATABASE", HiveParser.TOK_LOCKDB, new Privilege[]{Privilege.LOCK}, null), + UNLOCKDB("UNLOCKDATABASE", HiveParser.TOK_UNLOCKDB, new Privilege[]{Privilege.LOCK}, null), + DROPTABLE ("DROPTABLE", HiveParser.TOK_DROPTABLE, null, new Privilege[]{Privilege.DROP}), + DESCTABLE("DESCTABLE", HiveParser.TOK_DESCTABLE, null, null), + DESCFUNCTION("DESCFUNCTION", HiveParser.TOK_DESCFUNCTION, null, null), + MSCK("MSCK", HiveParser.TOK_MSCK, null, null), + ALTERTABLE_ADDCOLS("ALTERTABLE_ADDCOLS", HiveParser.TOK_ALTERTABLE_ADDCOLS, new Privilege[]{Privilege.ALTER_METADATA}, + null), + ALTERTABLE_REPLACECOLS("ALTERTABLE_REPLACECOLS", HiveParser.TOK_ALTERTABLE_REPLACECOLS, + new Privilege[]{Privilege.ALTER_METADATA}, null), + ALTERTABLE_RENAMECOL("ALTERTABLE_RENAMECOL", HiveParser.TOK_ALTERTABLE_RENAMECOL, + new Privilege[]{Privilege.ALTER_METADATA}, null), + ALTERTABLE_RENAMEPART("ALTERTABLE_RENAMEPART", HiveParser.TOK_ALTERTABLE_RENAMEPART, new Privilege[]{Privilege.DROP}, + new Privilege[]{Privilege.CREATE}), + ALTERTABLE_UPDATEPARTSTATS("ALTERTABLE_UPDATEPARTSTATS", + new int[] {HiveParser.TOK_ALTERPARTITION_UPDATESTATS, HiveParser.TOK_ALTERPARTITION_UPDATECOLSTATS}, + new Privilege[]{Privilege.ALTER_METADATA}, null), + ALTERTABLE_UPDATETABLESTATS("ALTERTABLE_UPDATETABLESTATS", + new int[] {HiveParser.TOK_ALTERTABLE_UPDATESTATS, HiveParser.TOK_ALTERTABLE_UPDATECOLSTATS}, + new Privilege[]{Privilege.ALTER_METADATA}, null), + ALTERTABLE_RENAME("ALTERTABLE_RENAME", HiveParser.TOK_ALTERTABLE_RENAME, new Privilege[]{Privilege.ALTER_METADATA}, + null), + ALTERTABLE_DROPPARTS("ALTERTABLE_DROPPARTS", + new int[] {HiveParser.TOK_ALTERTABLE_DROPPARTS, HiveParser.TOK_ALTERVIEW_DROPPARTS}, + new Privilege[]{Privilege.DROP}, null), // The location is input and table is output for alter-table add partitions - ALTERTABLE_ADDPARTS("ALTERTABLE_ADDPARTS", null, new Privilege[]{Privilege.CREATE}), - ALTERTABLE_TOUCH("ALTERTABLE_TOUCH", null, null), - ALTERTABLE_ARCHIVE("ALTERTABLE_ARCHIVE", new Privilege[]{Privilege.ALTER_DATA}, null), - ALTERTABLE_UNARCHIVE("ALTERTABLE_UNARCHIVE", new Privilege[]{Privilege.ALTER_DATA}, null), - ALTERTABLE_PROPERTIES("ALTERTABLE_PROPERTIES", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_OWNER("ALTERTABLE_OWNER", null, null), - ALTERTABLE_SERIALIZER("ALTERTABLE_SERIALIZER", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERPARTITION_SERIALIZER("ALTERPARTITION_SERIALIZER", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_SERDEPROPERTIES("ALTERTABLE_SERDEPROPERTIES", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERPARTITION_SERDEPROPERTIES("ALTERPARTITION_SERDEPROPERTIES", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_CLUSTER_SORT("ALTERTABLE_CLUSTER_SORT", + ALTERTABLE_ADDPARTS("ALTERTABLE_ADDPARTS", + new int[] {HiveParser.TOK_ALTERTABLE_ADDPARTS, HiveParser.TOK_ALTERVIEW_ADDPARTS}, null, + new Privilege[]{Privilege.CREATE}), + ALTERTABLE_TOUCH("ALTERTABLE_TOUCH", HiveParser.TOK_ALTERTABLE_TOUCH, null, null), + ALTERTABLE_ARCHIVE("ALTERTABLE_ARCHIVE", HiveParser.TOK_ALTERTABLE_ARCHIVE, new Privilege[]{Privilege.ALTER_DATA}, + null), + ALTERTABLE_UNARCHIVE("ALTERTABLE_UNARCHIVE", HiveParser.TOK_ALTERTABLE_UNARCHIVE, + new Privilege[]{Privilege.ALTER_DATA}, null), + ALTERTABLE_PROPERTIES("ALTERTABLE_PROPERTIES", + new int[] {HiveParser.TOK_ALTERTABLE_PROPERTIES, HiveParser.TOK_ALTERTABLE_DROPPROPERTIES}, + new Privilege[]{Privilege.ALTER_METADATA}, null), + ALTERTABLE_OWNER("ALTERTABLE_OWNER", HiveParser.TOK_ALTERTABLE_OWNER, null, null), + ALTERTABLE_SERIALIZER("ALTERTABLE_SERIALIZER", HiveParser.TOK_ALTERTABLE_SERIALIZER, + new Privilege[]{Privilege.ALTER_METADATA}, null), + ALTERPARTITION_SERIALIZER("ALTERPARTITION_SERIALIZER", HiveParser.TOK_ALTERPARTITION_SERIALIZER, + new Privilege[]{Privilege.ALTER_METADATA}, null), + ALTERTABLE_SERDEPROPERTIES("ALTERTABLE_SERDEPROPERTIES", HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES, new Privilege[]{Privilege.ALTER_METADATA}, null), - ANALYZE_TABLE("ANALYZE_TABLE", null, null), - CACHE_METADATA("CACHE_METADATA", new Privilege[]{Privilege.SELECT}, null), - ALTERTABLE_BUCKETNUM("ALTERTABLE_BUCKETNUM", + ALTERPARTITION_SERDEPROPERTIES("ALTERPARTITION_SERDEPROPERTIES", HiveParser.TOK_ALTERPARTITION_SERDEPROPERTIES, new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERPARTITION_BUCKETNUM("ALTERPARTITION_BUCKETNUM", + ALTERTABLE_CLUSTER_SORT("ALTERTABLE_CLUSTER_SORT", HiveParser.TOK_ALTERTABLE_CLUSTER_SORT, new Privilege[]{Privilege.ALTER_METADATA}, null), - SHOWDATABASES("SHOWDATABASES", new Privilege[]{Privilege.SHOW_DATABASE}, null, true, false), - SHOWTABLES("SHOWTABLES", null, null, true, false), - SHOWCOLUMNS("SHOWCOLUMNS", null, null, true, false), - SHOW_TABLESTATUS("SHOW_TABLESTATUS", null, null, true, false), - SHOW_TBLPROPERTIES("SHOW_TBLPROPERTIES", null, null, true, false), - SHOW_CREATEDATABASE("SHOW_CREATEDATABASE", new Privilege[]{Privilege.SELECT}, null), - SHOW_CREATETABLE("SHOW_CREATETABLE", new Privilege[]{Privilege.SELECT}, null), - SHOWFUNCTIONS("SHOWFUNCTIONS", null, null, true, false), - SHOWPARTITIONS("SHOWPARTITIONS", null, null), - SHOWLOCKS("SHOWLOCKS", null, null, true, false), - SHOWCONF("SHOWCONF", null, null), - SHOWVIEWS("SHOWVIEWS", null, null, true, false), - SHOWMATERIALIZEDVIEWS("SHOWMATERIALIZEDVIEWS", null, null, true, false), - CREATEFUNCTION("CREATEFUNCTION", null, null), - DROPFUNCTION("DROPFUNCTION", null, null), - RELOADFUNCTION("RELOADFUNCTION", null, null), - CREATEMACRO("CREATEMACRO", null, null), - DROPMACRO("DROPMACRO", null, null), - CREATEVIEW("CREATEVIEW", new Privilege[]{Privilege.SELECT}, new Privilege[]{Privilege.CREATE}), - CREATE_MATERIALIZED_VIEW("CREATE_MATERIALIZED_VIEW", new Privilege[]{Privilege.SELECT}, new - Privilege[]{Privilege.CREATE}), - DROPVIEW("DROPVIEW", null, new Privilege[]{Privilege.DROP}), - DROP_MATERIALIZED_VIEW("DROP_MATERIALIZED_VIEW", null, new Privilege[]{Privilege.DROP}), - ALTER_MATERIALIZED_VIEW_REWRITE("ALTER_MATERIALIZED_VIEW_REWRITE", + ANALYZE_TABLE("ANALYZE_TABLE", HiveParser.TOK_ANALYZE, null, null), + CACHE_METADATA("CACHE_METADATA", HiveParser.TOK_CACHE_METADATA, new Privilege[]{Privilege.SELECT}, null), + ALTERTABLE_BUCKETNUM("ALTERTABLE_BUCKETNUM", HiveParser.TOK_ALTERTABLE_BUCKETS, new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERVIEW_PROPERTIES("ALTERVIEW_PROPERTIES", null, null), - DROPVIEW_PROPERTIES("DROPVIEW_PROPERTIES", null, null), - LOCKTABLE("LOCKTABLE", new Privilege[]{Privilege.LOCK}, null), - UNLOCKTABLE("UNLOCKTABLE", new Privilege[]{Privilege.LOCK}, null), - CREATEROLE("CREATEROLE", null, null), - DROPROLE("DROPROLE", null, null), - GRANT_PRIVILEGE("GRANT_PRIVILEGE", null, null), - REVOKE_PRIVILEGE("REVOKE_PRIVILEGE", null, null), - SHOW_GRANT("SHOW_GRANT", null, null, true, false), - GRANT_ROLE("GRANT_ROLE", null, null), - REVOKE_ROLE("REVOKE_ROLE", null, null), - SHOW_ROLES("SHOW_ROLES", null, null, true, false), - SHOW_ROLE_PRINCIPALS("SHOW_ROLE_PRINCIPALS", null, null, true, false), - SHOW_ROLE_GRANT("SHOW_ROLE_GRANT", null, null, true, false), - ALTERTABLE_FILEFORMAT("ALTERTABLE_FILEFORMAT", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERPARTITION_FILEFORMAT("ALTERPARTITION_FILEFORMAT", new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_LOCATION("ALTERTABLE_LOCATION", new Privilege[]{Privilege.ALTER_DATA}, null), - ALTERPARTITION_LOCATION("ALTERPARTITION_LOCATION", new Privilege[]{Privilege.ALTER_DATA}, null), - CREATETABLE("CREATETABLE", null, new Privilege[]{Privilege.CREATE}), - TRUNCATETABLE("TRUNCATETABLE", null, new Privilege[]{Privilege.DROP}), - CREATETABLE_AS_SELECT("CREATETABLE_AS_SELECT", new Privilege[]{Privilege.SELECT}, new Privilege[]{Privilege.CREATE}), - QUERY("QUERY", new Privilege[]{Privilege.SELECT}, new Privilege[]{Privilege.ALTER_DATA, Privilege.CREATE}, true, false), - ALTERDATABASE("ALTERDATABASE", null, null), - ALTERDATABASE_OWNER("ALTERDATABASE_OWNER", null, null), - ALTERDATABASE_LOCATION("ALTERDATABASE_LOCATION", new Privilege[]{Privilege.ALTER_DATA}, null), - DESCDATABASE("DESCDATABASE", null, null), - ALTERTABLE_MERGEFILES("ALTER_TABLE_MERGE", new Privilege[] { Privilege.SELECT }, new Privilege[] { Privilege.ALTER_DATA }), - ALTERPARTITION_MERGEFILES("ALTER_PARTITION_MERGE", new Privilege[] { Privilege.SELECT }, new Privilege[] { Privilege.ALTER_DATA }), - ALTERTABLE_SKEWED("ALTERTABLE_SKEWED", new Privilege[] {Privilege.ALTER_METADATA}, null), - ALTERTBLPART_SKEWED_LOCATION("ALTERTBLPART_SKEWED_LOCATION", + ALTERPARTITION_BUCKETNUM("ALTERPARTITION_BUCKETNUM", HiveParser.TOK_ALTERPARTITION_BUCKETS, + new Privilege[]{Privilege.ALTER_METADATA}, null), + SHOWDATABASES("SHOWDATABASES", HiveParser.TOK_SHOWDATABASES, new Privilege[]{Privilege.SHOW_DATABASE}, null, true, + false), + SHOWTABLES("SHOWTABLES", HiveParser.TOK_SHOWTABLES, null, null, true, false), + SHOWCOLUMNS("SHOWCOLUMNS", HiveParser.TOK_SHOWCOLUMNS, null, null, true, false), + SHOW_TABLESTATUS("SHOW_TABLESTATUS", HiveParser.TOK_SHOW_TABLESTATUS, null, null, true, false), + SHOW_TBLPROPERTIES("SHOW_TBLPROPERTIES", HiveParser.TOK_SHOW_TBLPROPERTIES, null, null, true, false), + SHOW_CREATEDATABASE("SHOW_CREATEDATABASE", HiveParser.TOK_SHOW_CREATEDATABASE, new Privilege[]{Privilege.SELECT}, + null), + SHOW_CREATETABLE("SHOW_CREATETABLE", HiveParser.TOK_SHOW_CREATETABLE, new Privilege[]{Privilege.SELECT}, null), + SHOWFUNCTIONS("SHOWFUNCTIONS", HiveParser.TOK_SHOWFUNCTIONS, null, null, true, false), + SHOWPARTITIONS("SHOWPARTITIONS", HiveParser.TOK_SHOWPARTITIONS, null, null), + SHOWLOCKS("SHOWLOCKS", new int[] {HiveParser.TOK_SHOWLOCKS, HiveParser.TOK_SHOWDBLOCKS}, null, null, true, false), + SHOWCONF("SHOWCONF", HiveParser.TOK_SHOWCONF, null, null), + SHOWVIEWS("SHOWVIEWS", HiveParser.TOK_SHOWVIEWS, null, null, true, false), + SHOWMATERIALIZEDVIEWS("SHOWMATERIALIZEDVIEWS", HiveParser.TOK_SHOWMATERIALIZEDVIEWS, null, null, true, false), + CREATEFUNCTION("CREATEFUNCTION", HiveParser.TOK_CREATEFUNCTION, null, null), + DROPFUNCTION("DROPFUNCTION", HiveParser.TOK_DROPFUNCTION, null, null), + RELOADFUNCTION("RELOADFUNCTION", HiveParser.TOK_RELOADFUNCTIONS, null, null), + CREATEMACRO("CREATEMACRO", HiveParser.TOK_CREATEMACRO, null, null), + DROPMACRO("DROPMACRO", HiveParser.TOK_DROPMACRO, null, null), + CREATEVIEW("CREATEVIEW", HiveParser.TOK_CREATEVIEW, new Privilege[]{Privilege.SELECT}, + new Privilege[]{Privilege.CREATE}), + CREATE_MATERIALIZED_VIEW("CREATE_MATERIALIZED_VIEW", HiveParser.TOK_CREATE_MATERIALIZED_VIEW, + new Privilege[]{Privilege.SELECT}, new Privilege[]{Privilege.CREATE}), + DROPVIEW("DROPVIEW", HiveParser.TOK_DROPVIEW, null, new Privilege[]{Privilege.DROP}), + DROP_MATERIALIZED_VIEW("DROP_MATERIALIZED_VIEW", HiveParser.TOK_DROP_MATERIALIZED_VIEW, null, + new Privilege[]{Privilege.DROP}), + ALTER_MATERIALIZED_VIEW_REWRITE("ALTER_MATERIALIZED_VIEW_REWRITE", HiveParser.TOK_ALTER_MATERIALIZED_VIEW_REWRITE, + new Privilege[]{Privilege.ALTER_METADATA}, null), + ALTERVIEW_PROPERTIES("ALTERVIEW_PROPERTIES", + new int[] {HiveParser.TOK_ALTERVIEW_PROPERTIES, HiveParser.TOK_ALTERVIEW_DROPPROPERTIES}, null, null), + LOCKTABLE("LOCKTABLE", HiveParser.TOK_LOCKTABLE, new Privilege[]{Privilege.LOCK}, null), + UNLOCKTABLE("UNLOCKTABLE", HiveParser.TOK_UNLOCKTABLE, new Privilege[]{Privilege.LOCK}, null), + CREATEROLE("CREATEROLE", HiveParser.TOK_CREATEROLE, null, null), + DROPROLE("DROPROLE", HiveParser.TOK_DROPROLE, null, null), + GRANT_PRIVILEGE("GRANT_PRIVILEGE", HiveParser.TOK_GRANT, null, null), + REVOKE_PRIVILEGE("REVOKE_PRIVILEGE", HiveParser.TOK_REVOKE, null, null), + SHOW_GRANT("SHOW_GRANT", HiveParser.TOK_SHOW_GRANT, null, null, true, false), + GRANT_ROLE("GRANT_ROLE", HiveParser.TOK_GRANT_ROLE, null, null), + REVOKE_ROLE("REVOKE_ROLE", HiveParser.TOK_REVOKE_ROLE, null, null), + SHOW_ROLES("SHOW_ROLES", new int[] {HiveParser.TOK_SHOW_ROLES, HiveParser.TOK_SHOW_SET_ROLE}, null, null, true, + false), + SHOW_ROLE_PRINCIPALS("SHOW_ROLE_PRINCIPALS", HiveParser.TOK_SHOW_ROLE_PRINCIPALS, null, null, true, false), + SHOW_ROLE_GRANT("SHOW_ROLE_GRANT", HiveParser.TOK_SHOW_ROLE_GRANT, null, null, true, false), + ALTERTABLE_FILEFORMAT("ALTERTABLE_FILEFORMAT", HiveParser.TOK_ALTERTABLE_FILEFORMAT, + new Privilege[]{Privilege.ALTER_METADATA}, null), + ALTERPARTITION_FILEFORMAT("ALTERPARTITION_FILEFORMAT", HiveParser.TOK_ALTERPARTITION_FILEFORMAT, + new Privilege[]{Privilege.ALTER_METADATA}, null), + ALTERTABLE_LOCATION("ALTERTABLE_LOCATION", HiveParser.TOK_ALTERTABLE_LOCATION, new Privilege[]{Privilege.ALTER_DATA}, + null), + ALTERPARTITION_LOCATION("ALTERPARTITION_LOCATION", HiveParser.TOK_ALTERPARTITION_LOCATION, + new Privilege[]{Privilege.ALTER_DATA}, null), + CREATETABLE("CREATETABLE", HiveParser.TOK_CREATETABLE, null, new Privilege[]{Privilege.CREATE}), + TRUNCATETABLE("TRUNCATETABLE", HiveParser.TOK_TRUNCATETABLE, null, new Privilege[]{Privilege.DROP}), + CREATETABLE_AS_SELECT("CREATETABLE_AS_SELECT", (int[])null, new Privilege[]{Privilege.SELECT}, + new Privilege[]{Privilege.CREATE}), + QUERY("QUERY", HiveParser.TOK_QUERY, new Privilege[]{Privilege.SELECT}, + new Privilege[]{Privilege.ALTER_DATA, Privilege.CREATE}, true, false), + ALTERDATABASE("ALTERDATABASE", HiveParser.TOK_ALTERDATABASE_PROPERTIES, null, null), + ALTERDATABASE_OWNER("ALTERDATABASE_OWNER", HiveParser.TOK_ALTERDATABASE_OWNER, null, null), + ALTERDATABASE_LOCATION("ALTERDATABASE_LOCATION", HiveParser.TOK_ALTERDATABASE_LOCATION, + new Privilege[]{Privilege.ALTER_DATA}, null), + DESCDATABASE("DESCDATABASE", HiveParser.TOK_DESCDATABASE, null, null), + ALTERTABLE_MERGEFILES("ALTER_TABLE_MERGE", HiveParser.TOK_ALTERTABLE_MERGEFILES, new Privilege[] {Privilege.SELECT}, + new Privilege[] {Privilege.ALTER_DATA}), + ALTERPARTITION_MERGEFILES("ALTER_PARTITION_MERGE", HiveParser.TOK_ALTERPARTITION_MERGEFILES, + new Privilege[] {Privilege.SELECT}, new Privilege[] {Privilege.ALTER_DATA}), + ALTERTABLE_SKEWED("ALTERTABLE_SKEWED", HiveParser.TOK_ALTERTABLE_SKEWED, new Privilege[] {Privilege.ALTER_METADATA}, + null), + ALTERTBLPART_SKEWED_LOCATION("ALTERTBLPART_SKEWED_LOCATION", HiveParser.TOK_ALTERTABLE_SKEWED_LOCATION, new Privilege[] {Privilege.ALTER_DATA}, null), - ALTERTABLE_PARTCOLTYPE("ALTERTABLE_PARTCOLTYPE", new Privilege[] { Privilege.SELECT }, new Privilege[] { Privilege.ALTER_DATA }), - ALTERTABLE_EXCHANGEPARTITION( - "ALTERTABLE_EXCHANGEPARTITION", new Privilege[] { Privilege.SELECT, Privilege.DELETE }, - new Privilege[] { Privilege.INSERT }), - ALTERTABLE_DROPCONSTRAINT("ALTERTABLE_DROPCONSTRAINT", + ALTERTABLE_PARTCOLTYPE("ALTERTABLE_PARTCOLTYPE", HiveParser.TOK_ALTERTABLE_PARTCOLTYPE, + new Privilege[] {Privilege.SELECT}, new Privilege[] {Privilege.ALTER_DATA}), + ALTERTABLE_EXCHANGEPARTITION("ALTERTABLE_EXCHANGEPARTITION", HiveParser.TOK_ALTERTABLE_EXCHANGEPARTITION, + new Privilege[] {Privilege.SELECT, Privilege.DELETE}, new Privilege[] {Privilege.INSERT}), + ALTERTABLE_DROPCONSTRAINT("ALTERTABLE_DROPCONSTRAINT", HiveParser.TOK_ALTERTABLE_DROPCONSTRAINT, new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_ADDCONSTRAINT("ALTERTABLE_ADDCONSTRAINT", + ALTERTABLE_ADDCONSTRAINT("ALTERTABLE_ADDCONSTRAINT", HiveParser.TOK_ALTERTABLE_ADDCONSTRAINT, new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERTABLE_UPDATECOLUMNS("ALTERTABLE_UPDATECOLUMNS", + ALTERTABLE_UPDATECOLUMNS("ALTERTABLE_UPDATECOLUMNS", HiveParser.TOK_ALTERTABLE_UPDATECOLUMNS, new Privilege[]{Privilege.ALTER_METADATA}, null), - ALTERVIEW_RENAME("ALTERVIEW_RENAME", new Privilege[] {Privilege.ALTER_METADATA}, null), - ALTERVIEW_AS("ALTERVIEW_AS", new Privilege[] {Privilege.ALTER_METADATA}, null), - ALTERTABLE_COMPACT("ALTERTABLE_COMPACT", new Privilege[]{Privilege.SELECT}, new Privilege[]{Privilege.ALTER_DATA}), - SHOW_COMPACTIONS("SHOW COMPACTIONS", null, null, true, false), - SHOW_TRANSACTIONS("SHOW TRANSACTIONS", null, null, true, false), - START_TRANSACTION("START TRANSACTION", null, null, false, false), - COMMIT("COMMIT", null, null, true, true), - ROLLBACK("ROLLBACK", null, null, true, true), - SET_AUTOCOMMIT("SET AUTOCOMMIT", null, null, true, false), - ABORT_TRANSACTIONS("ABORT TRANSACTIONS", null, null, false, false), - KILL_QUERY("KILL QUERY", null, null), - CREATE_RESOURCEPLAN("CREATE RESOURCEPLAN", null, null, false, false), - SHOW_RESOURCEPLAN("SHOW RESOURCEPLAN", null, null, false, false), - ALTER_RESOURCEPLAN("ALTER RESOURCEPLAN", null, null, false, false), - DROP_RESOURCEPLAN("DROP RESOURCEPLAN", null, null, false, false), - CREATE_TRIGGER("CREATE TRIGGER", null, null, false, false), - ALTER_TRIGGER("ALTER TRIGGER", null, null, false, false), - DROP_TRIGGER("DROP TRIGGER", null, null, false, false), - CREATE_POOL("CREATE POOL", null, null, false, false), - ALTER_POOL("ALTER POOL", null, null, false, false), - DROP_POOL("DROP POOL", null, null, false, false), - CREATE_MAPPING("CREATE MAPPING", null, null, false, false), - ALTER_MAPPING("ALTER MAPPING", null, null, false, false), - DROP_MAPPING("DROP MAPPING", null, null, false, false); - - - private String operationName; - - private Privilege[] inputRequiredPrivileges; + ALTERVIEW_RENAME("ALTERVIEW_RENAME", HiveParser.TOK_ALTERVIEW_RENAME, new Privilege[] {Privilege.ALTER_METADATA}, + null), + ALTERVIEW_AS("ALTERVIEW_AS", HiveParser.TOK_ALTERVIEW, new Privilege[] {Privilege.ALTER_METADATA}, null), + ALTERTABLE_COMPACT("ALTERTABLE_COMPACT", HiveParser.TOK_ALTERTABLE_COMPACT, new Privilege[]{Privilege.SELECT}, + new Privilege[]{Privilege.ALTER_DATA}), + SHOW_COMPACTIONS("SHOW COMPACTIONS", HiveParser.TOK_SHOW_COMPACTIONS, null, null, true, false), + SHOW_TRANSACTIONS("SHOW TRANSACTIONS", HiveParser.TOK_SHOW_TRANSACTIONS, null, null, true, false), + START_TRANSACTION("START TRANSACTION", HiveParser.TOK_START_TRANSACTION, null, null, false, false), + COMMIT("COMMIT", HiveParser.TOK_COMMIT, null, null, true, true), + ROLLBACK("ROLLBACK", HiveParser.TOK_ROLLBACK, null, null, true, true), + SET_AUTOCOMMIT("SET AUTOCOMMIT", HiveParser.TOK_SET_AUTOCOMMIT, null, null, true, false), + ABORT_TRANSACTIONS("ABORT TRANSACTIONS", HiveParser.TOK_ABORT_TRANSACTIONS, null, null, false, false), + KILL_QUERY("KILL QUERY", HiveParser.TOK_KILL_QUERY, null, null), + CREATE_RESOURCEPLAN("CREATE RESOURCEPLAN", HiveParser.TOK_CREATE_RP, null, null, false, false), + SHOW_RESOURCEPLAN("SHOW RESOURCEPLAN", HiveParser.TOK_SHOW_RP, null, null, false, false), + ALTER_RESOURCEPLAN("ALTER RESOURCEPLAN", HiveParser.TOK_ALTER_RP, null, null, false, false), + DROP_RESOURCEPLAN("DROP RESOURCEPLAN", HiveParser.TOK_DROP_RP, null, null, false, false), + CREATE_TRIGGER("CREATE TRIGGER", HiveParser.TOK_CREATE_TRIGGER, null, null, false, false), + ALTER_TRIGGER("ALTER TRIGGER", HiveParser.TOK_ALTER_TRIGGER, null, null, false, false), + DROP_TRIGGER("DROP TRIGGER", HiveParser.TOK_DROP_TRIGGER, null, null, false, false), + CREATE_POOL("CREATE POOL", HiveParser.TOK_CREATE_POOL, null, null, false, false), + ALTER_POOL("ALTER POOL", HiveParser.TOK_ALTER_POOL, null, null, false, false), + DROP_POOL("DROP POOL", HiveParser.TOK_DROP_POOL, null, null, false, false), + CREATE_MAPPING("CREATE MAPPING", HiveParser.TOK_CREATE_MAPPING, null, null, false, false), + ALTER_MAPPING("ALTER MAPPING", HiveParser.TOK_ALTER_MAPPING, null, null, false, false), + DROP_MAPPING("DROP MAPPING", HiveParser.TOK_DROP_MAPPING, null, null, false, false); - private Privilege[] outputRequiredPrivileges; + private final String operationName; + private final int[] tokens; + private final Privilege[] inputRequiredPrivileges; + private final Privilege[] outputRequiredPrivileges; /** * Only a small set of operations is allowed inside an explicit transactions, e.g. DML on @@ -171,112 +211,64 @@ private final boolean allowedInTransaction; private final boolean requiresOpenTransaction; - public Privilege[] getInputRequiredPrivileges() { - return inputRequiredPrivileges; + HiveOperation(String operationName, int token, Privilege[] inputRequiredPrivileges, + Privilege[] outputRequiredPrivileges) { + this(operationName, new int[] {token}, inputRequiredPrivileges, outputRequiredPrivileges, false, false); } - public Privilege[] getOutputRequiredPrivileges() { - return outputRequiredPrivileges; + HiveOperation(String operationName, int[] tokens, Privilege[] inputRequiredPrivileges, + Privilege[] outputRequiredPrivileges) { + this(operationName, tokens, inputRequiredPrivileges, outputRequiredPrivileges, false, false); } - public String getOperationName() { - return operationName; + HiveOperation(String operationName, int token, Privilege[] inputRequiredPrivileges, + Privilege[] outputRequiredPrivileges, boolean allowedInTransaction, boolean requiresOpenTransaction) { + this(operationName, new int[] {token}, inputRequiredPrivileges, outputRequiredPrivileges, allowedInTransaction, + requiresOpenTransaction); } - public boolean isAllowedInTransaction() { - return allowedInTransaction; - } - public boolean isRequiresOpenTransaction() { return requiresOpenTransaction; } - - private HiveOperation(String operationName, - Privilege[] inputRequiredPrivileges, Privilege[] outputRequiredPrivileges) { - this(operationName, inputRequiredPrivileges, outputRequiredPrivileges, false, false); - } - private HiveOperation(String operationName, - Privilege[] inputRequiredPrivileges, Privilege[] outputRequiredPrivileges, - boolean allowedInTransaction, boolean requiresOpenTransaction) { + HiveOperation(String operationName, int[] tokens, Privilege[] inputRequiredPrivileges, + Privilege[] outputRequiredPrivileges, boolean allowedInTransaction, boolean requiresOpenTransaction) { this.operationName = operationName; + this.tokens = tokens; this.inputRequiredPrivileges = inputRequiredPrivileges; this.outputRequiredPrivileges = outputRequiredPrivileges; this.requiresOpenTransaction = requiresOpenTransaction; - if(requiresOpenTransaction) { - allowedInTransaction = true; - } - this.allowedInTransaction = allowedInTransaction; + this.allowedInTransaction = allowedInTransaction || requiresOpenTransaction; } - public static class PrivilegeAgreement { - - private Privilege[] inputUserLevelRequiredPriv; - private Privilege[] inputDBLevelRequiredPriv; - private Privilege[] inputTableLevelRequiredPriv; - private Privilege[] inputColumnLevelRequiredPriv; - private Privilege[] outputUserLevelRequiredPriv; - private Privilege[] outputDBLevelRequiredPriv; - private Privilege[] outputTableLevelRequiredPriv; - private Privilege[] outputColumnLevelRequiredPriv; - - public PrivilegeAgreement putUserLevelRequiredPriv( - Privilege[] inputUserLevelRequiredPriv, - Privilege[] outputUserLevelRequiredPriv) { - this.inputUserLevelRequiredPriv = inputUserLevelRequiredPriv; - this.outputUserLevelRequiredPriv = outputUserLevelRequiredPriv; - return this; - } - - public PrivilegeAgreement putDBLevelRequiredPriv( - Privilege[] inputDBLevelRequiredPriv, - Privilege[] outputDBLevelRequiredPriv) { - this.inputDBLevelRequiredPriv = inputDBLevelRequiredPriv; - this.outputDBLevelRequiredPriv = outputDBLevelRequiredPriv; - return this; - } - - public PrivilegeAgreement putTableLevelRequiredPriv( - Privilege[] inputTableLevelRequiredPriv, - Privilege[] outputTableLevelRequiredPriv) { - this.inputTableLevelRequiredPriv = inputTableLevelRequiredPriv; - this.outputTableLevelRequiredPriv = outputTableLevelRequiredPriv; - return this; - } - - public PrivilegeAgreement putColumnLevelRequiredPriv( - Privilege[] inputColumnLevelPriv, Privilege[] outputColumnLevelPriv) { - this.inputColumnLevelRequiredPriv = inputColumnLevelPriv; - this.outputColumnLevelRequiredPriv = outputColumnLevelPriv; - return this; - } - - public Privilege[] getInputUserLevelRequiredPriv() { - return inputUserLevelRequiredPriv; - } - - public Privilege[] getInputDBLevelRequiredPriv() { - return inputDBLevelRequiredPriv; - } + public String getOperationName() { + return operationName; + } - public Privilege[] getInputTableLevelRequiredPriv() { - return inputTableLevelRequiredPriv; - } + public Privilege[] getInputRequiredPrivileges() { + return inputRequiredPrivileges; + } - public Privilege[] getInputColumnLevelRequiredPriv() { - return inputColumnLevelRequiredPriv; - } + public Privilege[] getOutputRequiredPrivileges() { + return outputRequiredPrivileges; + } - public Privilege[] getOutputUserLevelRequiredPriv() { - return outputUserLevelRequiredPriv; - } + public boolean isAllowedInTransaction() { + return allowedInTransaction; + } - public Privilege[] getOutputDBLevelRequiredPriv() { - return outputDBLevelRequiredPriv; - } + public boolean isRequiresOpenTransaction() { + return requiresOpenTransaction; + } - public Privilege[] getOutputTableLevelRequiredPriv() { - return outputTableLevelRequiredPriv; + private static final Map TOKEN_TO_OPERATION = new HashMap<>(); + static { + for (HiveOperation hiveOperation : values()) { + if (hiveOperation.tokens != null) { + for (int token : hiveOperation.tokens) { + TOKEN_TO_OPERATION.put(token, hiveOperation); + } + } } + } - public Privilege[] getOutputColumnLevelRequiredPriv() { - return outputColumnLevelRequiredPriv; - } + public static HiveOperation operationForToken(int token) { + return TOKEN_TO_OPERATION.get(token); } } diff --git ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/HiveOperationType.java ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/HiveOperationType.java index 0b2080a56b..562c3abdf8 100644 --- ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/HiveOperationType.java +++ ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/HiveOperationType.java @@ -91,7 +91,6 @@ DROPVIEW, DROP_MATERIALIZED_VIEW, ALTERVIEW_PROPERTIES, - DROPVIEW_PROPERTIES, LOCKTABLE, UNLOCKTABLE, CREATEROLE, diff --git ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/sqlstd/Operation2Privilege.java ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/sqlstd/Operation2Privilege.java index f3c8cc5b0a..3d82888712 100644 --- ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/sqlstd/Operation2Privilege.java +++ ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/sqlstd/Operation2Privilege.java @@ -237,8 +237,6 @@ public HivePrivilegeObjectType getObjectType() { // require view ownership for alter/drop view op2Priv.put(HiveOperationType.ALTERVIEW_PROPERTIES, PrivRequirement.newIOPrivRequirement(OWNER_PRIV_AR, OWNER_PRIV_AR)); - op2Priv.put(HiveOperationType.DROPVIEW_PROPERTIES, - PrivRequirement.newIOPrivRequirement(OWNER_PRIV_AR, OWNER_PRIV_AR)); op2Priv.put(HiveOperationType.ALTERVIEW_RENAME, PrivRequirement.newIOPrivRequirement(OWNER_PRIV_AR, OWNER_PRIV_AR)); op2Priv.put(HiveOperationType.ALTERVIEW_AS,