/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java
https://github.com/steeve/hive · Java · 190 lines · 157 code · 11 blank · 22 comment · 8 complexity · 618376d15e9bfea37740b91b0bfbe046 MD5 · raw file
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.hadoop.hive.ql.parse;
- import java.util.HashMap;
- import org.apache.hadoop.hive.conf.HiveConf;
- import org.apache.hadoop.hive.ql.plan.HiveOperation;
- import org.apache.hadoop.hive.ql.session.SessionState;
- /**
- * SemanticAnalyzerFactory.
- *
- */
- public final class SemanticAnalyzerFactory {
- static HashMap<Integer, HiveOperation> commandType = new HashMap<Integer, HiveOperation>();
- static HashMap<Integer, HiveOperation[]> tablePartitionCommandType = new HashMap<Integer, HiveOperation[]>();
- static {
- commandType.put(HiveParser.TOK_EXPLAIN, HiveOperation.EXPLAIN);
- commandType.put(HiveParser.TOK_LOAD, HiveOperation.LOAD);
- 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_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_SERIALIZER, HiveOperation.ALTERTABLE_SERIALIZER);
- commandType.put(HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES, HiveOperation.ALTERTABLE_SERDEPROPERTIES);
- commandType.put(HiveParser.TOK_ALTERTABLE_CLUSTER_SORT, HiveOperation.ALTERTABLE_CLUSTER_SORT);
- commandType.put(HiveParser.TOK_SHOWDATABASES, HiveOperation.SHOWDATABASES);
- commandType.put(HiveParser.TOK_SHOWTABLES, HiveOperation.SHOWTABLES);
- commandType.put(HiveParser.TOK_SHOW_TABLESTATUS, HiveOperation.SHOW_TABLESTATUS);
- commandType.put(HiveParser.TOK_SHOWFUNCTIONS, HiveOperation.SHOWFUNCTIONS);
- commandType.put(HiveParser.TOK_SHOWINDEXES, HiveOperation.SHOWINDEXES);
- commandType.put(HiveParser.TOK_SHOWPARTITIONS, HiveOperation.SHOWPARTITIONS);
- commandType.put(HiveParser.TOK_SHOWLOCKS, HiveOperation.SHOWLOCKS);
- commandType.put(HiveParser.TOK_CREATEFUNCTION, HiveOperation.CREATEFUNCTION);
- commandType.put(HiveParser.TOK_DROPFUNCTION, HiveOperation.DROPFUNCTION);
- commandType.put(HiveParser.TOK_CREATEVIEW, HiveOperation.CREATEVIEW);
- commandType.put(HiveParser.TOK_DROPVIEW, HiveOperation.DROPVIEW);
- commandType.put(HiveParser.TOK_CREATEINDEX, HiveOperation.CREATEINDEX);
- commandType.put(HiveParser.TOK_DROPINDEX, HiveOperation.DROPINDEX);
- commandType.put(HiveParser.TOK_ALTERINDEX_REBUILD, HiveOperation.ALTERINDEX_REBUILD);
- commandType.put(HiveParser.TOK_ALTERINDEX_PROPERTIES, HiveOperation.ALTERINDEX_PROPS);
- commandType.put(HiveParser.TOK_ALTERVIEW_PROPERTIES, HiveOperation.ALTERVIEW_PROPERTIES);
- 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_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_ROLE_GRANT, HiveOperation.SHOW_ROLE_GRANT);
- commandType.put(HiveParser.TOK_ALTERDATABASE_PROPERTIES, HiveOperation.ALTERDATABASE);
- commandType.put(HiveParser.TOK_DESCDATABASE, HiveOperation.DESCDATABASE);
- }
- static {
- tablePartitionCommandType.put(
- HiveParser.TOK_ALTERTABLE_ALTERPARTS_PROTECTMODE,
- new HiveOperation[] { HiveOperation.ALTERTABLE_PROTECTMODE,
- HiveOperation.ALTERPARTITION_PROTECTMODE });
- 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 });
- }
- public static BaseSemanticAnalyzer get(HiveConf conf, ASTNode tree)
- throws SemanticException {
- if (tree.getToken() == null) {
- throw new RuntimeException("Empty Syntax Tree");
- } else {
- setSessionCommandType(commandType.get(tree.getToken().getType()));
- switch (tree.getToken().getType()) {
- case HiveParser.TOK_EXPLAIN:
- return new ExplainSemanticAnalyzer(conf);
- case HiveParser.TOK_LOAD:
- return new LoadSemanticAnalyzer(conf);
- case HiveParser.TOK_CREATEDATABASE:
- case HiveParser.TOK_DROPDATABASE:
- case HiveParser.TOK_SWITCHDATABASE:
- case HiveParser.TOK_DROPTABLE:
- case HiveParser.TOK_DROPVIEW:
- case HiveParser.TOK_DESCDATABASE:
- case HiveParser.TOK_DESCTABLE:
- case HiveParser.TOK_DESCFUNCTION:
- case HiveParser.TOK_MSCK:
- case HiveParser.TOK_ALTERTABLE_ADDCOLS:
- case HiveParser.TOK_ALTERTABLE_RENAMECOL:
- case HiveParser.TOK_ALTERTABLE_REPLACECOLS:
- case HiveParser.TOK_ALTERTABLE_RENAME:
- case HiveParser.TOK_ALTERTABLE_DROPPARTS:
- case HiveParser.TOK_ALTERTABLE_ADDPARTS:
- case HiveParser.TOK_ALTERTABLE_PROPERTIES:
- case HiveParser.TOK_ALTERTABLE_SERIALIZER:
- case HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES:
- case HiveParser.TOK_ALTERINDEX_REBUILD:
- case HiveParser.TOK_ALTERINDEX_PROPERTIES:
- case HiveParser.TOK_ALTERVIEW_PROPERTIES:
- case HiveParser.TOK_SHOWDATABASES:
- case HiveParser.TOK_SHOWTABLES:
- case HiveParser.TOK_SHOW_TABLESTATUS:
- case HiveParser.TOK_SHOWFUNCTIONS:
- case HiveParser.TOK_SHOWPARTITIONS:
- case HiveParser.TOK_SHOWINDEXES:
- case HiveParser.TOK_SHOWLOCKS:
- case HiveParser.TOK_CREATEINDEX:
- case HiveParser.TOK_DROPINDEX:
- case HiveParser.TOK_ALTERTABLE_CLUSTER_SORT:
- case HiveParser.TOK_ALTERTABLE_TOUCH:
- case HiveParser.TOK_ALTERTABLE_ARCHIVE:
- case HiveParser.TOK_ALTERTABLE_UNARCHIVE:
- case HiveParser.TOK_LOCKTABLE:
- case HiveParser.TOK_UNLOCKTABLE:
- case HiveParser.TOK_CREATEROLE:
- case HiveParser.TOK_DROPROLE:
- case HiveParser.TOK_GRANT:
- case HiveParser.TOK_REVOKE:
- case HiveParser.TOK_SHOW_GRANT:
- case HiveParser.TOK_GRANT_ROLE:
- case HiveParser.TOK_REVOKE_ROLE:
- case HiveParser.TOK_SHOW_ROLE_GRANT:
- case HiveParser.TOK_ALTERDATABASE_PROPERTIES:
- return new DDLSemanticAnalyzer(conf);
- case HiveParser.TOK_ALTERTABLE_PARTITION:
- HiveOperation commandType = null;
- Integer type = ((ASTNode) tree.getChild(1)).getToken().getType();
- if (tree.getChild(0).getChildCount() > 1) {
- commandType = tablePartitionCommandType.get(type)[1];
- } else {
- commandType = tablePartitionCommandType.get(type)[0];
- }
- setSessionCommandType(commandType);
- return new DDLSemanticAnalyzer(conf);
- case HiveParser.TOK_CREATEFUNCTION:
- case HiveParser.TOK_DROPFUNCTION:
- return new FunctionSemanticAnalyzer(conf);
- default:
- return new SemanticAnalyzer(conf);
- }
- }
- }
- private static void setSessionCommandType(HiveOperation commandType) {
- if (SessionState.get() != null) {
- SessionState.get().setCommandType(commandType);
- }
- }
- private SemanticAnalyzerFactory() {
- // prevent instantiation
- }
- }