in core/src/main/java/com/alibaba/druid/sql/dialect/hive/parser/HiveStatementParser.java [121:360]
public boolean parseStatementListDialect(List<SQLStatement> statementList) {
if (lexer.token() == Token.HINT) {
List<SQLCommentHint> hints = this.exprParser.parseHints();
boolean tddlHints = false;
boolean accept = false;
boolean acceptHint = false;
switch (lexer.token()) {
case SELECT:
case WITH:
case DELETE:
case UPDATE:
case INSERT:
case SHOW:
case REPLACE:
case TRUNCATE:
case DROP:
case ALTER:
case CREATE:
case CHECK:
case SET:
case DESC:
case OPTIMIZE:
case ANALYZE:
case KILL:
case EXPLAIN:
case LPAREN:
acceptHint = true;
default:
break;
}
if (lexer.identifierEquals("MSCK")) {
acceptHint = true;
}
if (acceptHint) {
SQLStatementImpl stmt = (SQLStatementImpl) this.parseStatement();
stmt.setHeadHints(hints);
statementList.add(stmt);
return true;
}
}
if (lexer.token() == Token.FROM) {
SQLStatement stmt = this.parseInsert();
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.LOAD)) {
HiveLoadDataStatement stmt = parseLoad();
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.ANALYZE)) {
SQLStatement stmt = parseAnalyze();
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.EXPORT)) {
SQLStatement stmt = parseExport();
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.IMPORT)) {
SQLStatement stmt = parseImport();
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.ADD)) {
SQLStatement stmt = parseAdd();
if (stmt != null) {
statementList.add(stmt);
return true;
}
}
if (lexer.identifierEquals("MSCK")) {
SQLStatement stmt = parseMsck();
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.SHOW)) {
Lexer.SavePoint savePoint = this.lexer.mark();
lexer.nextToken();
if (lexer.identifierEquals(FnvHash.Constants.VIEWS)) {
lexer.nextToken();
SQLShowViewsStatement stmt = new SQLShowViewsStatement();
if (lexer.token() == Token.IN) {
lexer.nextToken();
SQLName db = this.exprParser.name();
stmt.setDatabase(db);
}
if (lexer.token() == Token.LIKE) {
lexer.nextToken();
SQLExpr pattern = this.exprParser.expr();
stmt.setLike(pattern);
}
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.TABLES)) {
lexer.reset(savePoint);
SQLStatement stmt = this.parseShowTables();
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.DATABASES)
|| lexer.identifierEquals(Constants.SCHEMAS)) {
lexer.nextToken();
SQLShowDatabasesStatement stmt = parseShowDatabases(false);
statementList.add(stmt);
return true;
}
if (lexer.token() == Token.INDEX) {
lexer.nextToken();
SQLShowIndexesStatement stmt = new SQLShowIndexesStatement();
stmt.setType("INDEX");
if (lexer.token() == Token.ON) {
lexer.nextToken();
SQLName table = exprParser.name();
stmt.setTable(table);
}
if (lexer.token() == Token.HINT) {
stmt.setHints(this.exprParser.parseHints());
}
statementList.add(stmt);
return true;
}
if (lexer.token() == Token.CREATE) {
SQLShowCreateTableStatement stmt = parseShowCreateTable();
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.PARTITIONS)) {
lexer.nextToken();
SQLShowPartitionsStmt stmt = new SQLShowPartitionsStmt();
if (lexer.token() == Token.FROM) {
lexer.nextToken();
}
SQLExpr expr = this.exprParser.expr();
stmt.setTableSource(new SQLExprTableSource(expr));
if (lexer.token() == Token.PARTITION) {
lexer.nextToken();
accept(Token.LPAREN);
parseAssignItems(stmt.getPartition(), stmt, false);
accept(Token.RPAREN);
}
if (lexer.token() == Token.WHERE) {
lexer.nextToken();
stmt.setWhere(
this.exprParser.expr()
);
}
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.COLUMNS)) {
lexer.nextToken();
SQLShowColumnsStatement stmt = new SQLShowColumnsStatement();
if (lexer.token() == Token.FROM || lexer.token() == Token.IN) {
lexer.nextToken();
SQLName table = exprParser.name();
if (lexer.token() == Token.SUB && table instanceof SQLIdentifierExpr) {
lexer.mark();
lexer.nextToken();
String strVal = lexer.stringVal();
lexer.nextToken();
if (table instanceof SQLIdentifierExpr) {
SQLIdentifierExpr ident = (SQLIdentifierExpr) table;
table = new SQLIdentifierExpr(ident.getName() + "-" + strVal);
}
}
stmt.setTable(table);
}
if (lexer.token() == Token.LIKE) {
lexer.nextToken();
SQLExpr like = exprParser.expr();
stmt.setLike(like);
}
if (lexer.token() == Token.WHERE) {
lexer.nextToken();
SQLExpr where = exprParser.expr();
stmt.setWhere(where);
}
statementList.add(stmt);
return true;
}
if (lexer.identifierEquals(FnvHash.Constants.FUNCTIONS)) {
lexer.nextToken();
SQLShowFunctionsStatement stmt = new SQLShowFunctionsStatement();
if (lexer.token() == Token.LIKE) {
lexer.nextToken();
SQLExpr like = this.exprParser.expr();
stmt.setLike(like);
}
statementList.add(stmt);
return true;
}
throw new ParserException("TODO " + lexer.info());
}
return false;
}