in core/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsStatementParser.java [961:1252]
public SQLStatement parseShow() {
accept(Token.SHOW);
if (lexer.identifierEquals(FnvHash.Constants.PARTITIONS)) {
lexer.nextToken();
SQLShowPartitionsStmt stmt = new SQLShowPartitionsStmt();
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()
);
}
return stmt;
}
if (lexer.identifierEquals(FnvHash.Constants.STATISTIC)) {
lexer.nextToken();
SQLShowStatisticStmt stmt = new SQLShowStatisticStmt();
SQLExpr expr = this.exprParser.expr();
stmt.setTableSource(new SQLExprTableSource(expr));
if (lexer.token() == Token.PARTITION) {
lexer.nextToken();
accept(Token.LPAREN);
parseAssignItems(stmt.getPartitions(), stmt, false);
accept(Token.RPAREN);
}
if (identifierEquals("COLUMNS")) {
lexer.nextToken();
if (lexer.token() != Token.SEMI) {
accept(Token.LPAREN);
this.exprParser.names(stmt.getColumns(), stmt);
accept(Token.RPAREN);
}
}
return stmt;
}
if (lexer.identifierEquals(FnvHash.Constants.STATISTIC_LIST)) {
lexer.nextToken();
SQLShowStatisticListStmt stmt = new SQLShowStatisticListStmt();
SQLExpr expr = this.exprParser.expr();
stmt.setTableSource(new SQLExprTableSource(expr));
return stmt;
}
if (lexer.identifierEquals(FnvHash.Constants.PACKAGES)) {
lexer.nextToken();
SQLShowPackagesStatement stmt = new SQLShowPackagesStatement();
return stmt;
}
if (lexer.identifierEquals(FnvHash.Constants.TABLES)) {
lexer.nextToken();
SQLShowTablesStatement stmt = new SQLShowTablesStatement();
if (lexer.token() == Token.FROM || lexer.token() == Token.IN) {
lexer.nextToken();
stmt.setDatabase(this.exprParser.name());
} else if (lexer.token() == IDENTIFIER) {
SQLName database = exprParser.name();
stmt.setDatabase(database);
}
if (lexer.token() == Token.LIKE) {
lexer.nextToken();
stmt.setLike(this.exprParser.expr());
} else if (lexer.token() == Token.LITERAL_CHARS || lexer.token() == Token.LITERAL_ALIAS) {
stmt.setLike(this.exprParser.expr());
}
return stmt;
}
if (lexer.identifierEquals(FnvHash.Constants.LABEL)) {
lexer.nextToken();
acceptIdentifier("GRANTS");
OdpsShowGrantsStmt stmt = new OdpsShowGrantsStmt();
stmt.setLabel(true);
if (lexer.token() == Token.ON) {
lexer.nextToken();
accept(Token.TABLE);
stmt.setObjectType(this.exprParser.expr());
}
if (lexer.token() == Token.FOR) {
lexer.nextToken();
accept(Token.USER);
stmt.setUser(this.exprParser.expr());
}
return stmt;
}
if (lexer.identifierEquals(FnvHash.Constants.GRANTS)) {
lexer.nextToken();
OdpsShowGrantsStmt stmt = new OdpsShowGrantsStmt();
if (lexer.token() == Token.FOR) {
lexer.nextToken();
if (lexer.token() == Token.USER) {
lexer.nextToken();
}
stmt.setUser(this.exprParser.expr());
}
if (lexer.token() == Token.ON) {
lexer.nextToken();
acceptIdentifier("type");
stmt.setObjectType(this.exprParser.expr());
}
return stmt;
}
if (lexer.identifierEquals(FnvHash.Constants.USERS)) {
lexer.nextToken();
SQLShowUsersStatement stmt = new SQLShowUsersStatement();
return stmt;
}
if (lexer.identifierEquals("RECYCLEBIN")) {
lexer.nextToken();
SQLShowRecylebinStatement stmt = new SQLShowRecylebinStatement();
return stmt;
}
if (lexer.identifierEquals("VARIABLES")) {
lexer.nextToken();
return parseShowVariants();
}
if (lexer.token() == Token.CREATE) {
return parseShowCreateTable();
}
if (lexer.identifierEquals(FnvHash.Constants.FUNCTIONS)) {
lexer.nextToken();
SQLShowFunctionsStatement stmt = new SQLShowFunctionsStatement();
if (lexer.token() == Token.LIKE) {
lexer.nextToken();
stmt.setLike(
this.exprParser.expr()
);
} else if (lexer.token() == Token.LITERAL_CHARS || lexer.token() == IDENTIFIER) {
stmt.setLike(
this.exprParser.expr()
);
}
return stmt;
}
if (lexer.identifierEquals(FnvHash.Constants.ROLE)) {
lexer.nextToken();
SQLShowRoleStatement stmt = new SQLShowRoleStatement();
if (lexer.token() == Token.GRANT) {
lexer.nextToken();
stmt.setGrant(
this.exprParser.name()
);
}
return stmt;
}
if (lexer.identifierEquals("ACL")) {
lexer.nextToken();
SQLShowACLStatement stmt = new SQLShowACLStatement();
if (lexer.token() == Token.FOR) {
lexer.nextToken();
stmt.setTable(
new SQLExprTableSource(
this.exprParser.name()
)
);
}
return stmt;
}
if (lexer.identifierEquals(FnvHash.Constants.ROLES)) {
lexer.nextToken();
SQLShowRolesStatement stmt = new SQLShowRolesStatement();
return stmt;
}
if (lexer.identifierEquals("HISTORY")) {
lexer.nextToken();
SQLShowHistoryStatement stmt = new SQLShowHistoryStatement();
if (lexer.token() == Token.FOR) {
lexer.nextToken();
if (lexer.identifierEquals(FnvHash.Constants.TABLES)) {
lexer.nextToken();
stmt.setTables(true);
} else if (lexer.token() == Token.TABLE) {
lexer.nextToken();
stmt.setTable(
new SQLExprTableSource(
this.exprParser.name()
)
);
}
}
if (lexer.token() == Token.LPAREN) {
this.exprParser.parseAssignItem(stmt.getProperties(), stmt);
}
if (lexer.token() == Token.PARTITION) {
lexer.nextToken();
this.exprParser.parseAssignItem(stmt.getPartitions(), stmt);
}
return stmt;
}
if (lexer.identifierEquals("CHANGELOGS")) {
lexer.nextToken();
OdpsShowChangelogsStatement stmt = new OdpsShowChangelogsStatement();
if (lexer.token() == Token.FOR) {
lexer.nextToken();
if (lexer.identifierEquals(FnvHash.Constants.TABLES)) {
lexer.nextToken();
stmt.setTables(true);
} else if (lexer.token() == Token.TABLE) {
lexer.nextToken();
stmt.setTable(
new SQLExprTableSource(
this.exprParser.name()
)
);
} else if (lexer.token() == IDENTIFIER) {
stmt.setTable(
new SQLExprTableSource(
this.exprParser.name()
)
);
}
}
if (lexer.token() == Token.LPAREN) {
this.exprParser.parseAssignItem(stmt.getProperties(), stmt);
}
if (lexer.token() == Token.PARTITION) {
lexer.nextToken();
this.exprParser.parseAssignItem(stmt.getPartitions(), stmt);
}
if (lexer.token() == Token.LITERAL_INT) {
stmt.setId(
this.exprParser.primary()
);
}
return stmt;
}
throw new ParserException("TODO " + lexer.info());
}