in core/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java [1681:1961]
protected void parsePrivilege(List<SQLPrivilegeItem> privileges, SQLObject parent) {
for (; ; ) {
String privilege = null;
if (lexer.token == Token.ALL) {
lexer.nextToken();
if (lexer.identifierEquals("PRIVILEGES")) {
privilege = "ALL PRIVILEGES";
lexer.nextToken();
} else {
privilege = "ALL";
}
} else if (lexer.token == Token.SELECT) {
privilege = "SELECT";
lexer.nextToken();
} else if (lexer.token == Token.UPDATE) {
privilege = "UPDATE";
lexer.nextToken();
} else if (lexer.token == Token.DELETE) {
privilege = "DELETE";
lexer.nextToken();
} else if (lexer.token == Token.INSERT) {
privilege = "INSERT";
lexer.nextToken();
} else if (lexer.token == Token.INDEX) {
lexer.nextToken();
privilege = "INDEX";
} else if (lexer.token == Token.TRIGGER) {
lexer.nextToken();
privilege = "TRIGGER";
} else if (lexer.token == Token.REFERENCES) {
privilege = "REFERENCES";
lexer.nextToken();
} else if (lexer.token == Token.DESC) {
privilege = "DESCRIBE";
lexer.nextToken();
} else if (lexer.token == Token.CREATE) {
lexer.nextToken();
if (lexer.token == Token.TABLE) {
privilege = "CREATE TABLE";
lexer.nextToken();
} else if (lexer.token == Token.SESSION) {
privilege = "CREATE SESSION";
lexer.nextToken();
} else if (lexer.token == Token.TABLESPACE) {
privilege = "CREATE TABLESPACE";
lexer.nextToken();
} else if (lexer.token == Token.USER) {
privilege = "CREATE USER";
lexer.nextToken();
} else if (lexer.token == Token.VIEW) {
privilege = "CREATE VIEW";
lexer.nextToken();
} else if (lexer.token == Token.PROCEDURE) {
privilege = "CREATE PROCEDURE";
lexer.nextToken();
} else if (lexer.token == Token.SEQUENCE) {
privilege = "CREATE SEQUENCE";
lexer.nextToken();
} else if (lexer.token == Token.ANY) {
lexer.nextToken();
if (lexer.token == Token.TABLE) {
lexer.nextToken();
privilege = "CREATE ANY TABLE";
} else if (lexer.identifierEquals("MATERIALIZED")) {
lexer.nextToken();
accept(Token.VIEW);
privilege = "CREATE ANY MATERIALIZED VIEW";
} else {
throw new ParserException("TODO : " + lexer.token + " " + lexer.stringVal());
}
} else if (lexer.identifierEquals("SYNONYM")) {
privilege = "CREATE SYNONYM";
lexer.nextToken();
} else if (lexer.identifierEquals("ROUTINE")) {
privilege = "CREATE ROUTINE";
lexer.nextToken();
} else if (lexer.identifierEquals("TEMPORARY")) {
lexer.nextToken();
acceptIdentifier("TABLES");
privilege = "CREATE TEMPORARY TABLES";
} else if (lexer.token == Token.ON) {
privilege = "CREATE";
} else if (lexer.token == Token.COMMA) {
privilege = "CREATE";
} else {
throw new ParserException("TODO : " + lexer.token + " " + lexer.stringVal());
}
} else if (lexer.token == Token.ALTER) {
lexer.nextToken();
if (lexer.token == Token.TABLE) {
privilege = "ALTER TABLE";
lexer.nextToken();
} else if (lexer.token == Token.SESSION) {
privilege = "ALTER SESSION";
lexer.nextToken();
} else if (lexer.identifierEquals(FnvHash.Constants.ROUTINE)) {
privilege = "ALTER ROUTINE";
lexer.nextToken();
} else if (lexer.token == Token.ANY) {
lexer.nextToken();
if (lexer.token == Token.TABLE) {
lexer.nextToken();
privilege = "ALTER ANY TABLE";
} else if (lexer.identifierEquals("MATERIALIZED")) {
lexer.nextToken();
accept(Token.VIEW);
privilege = "ALTER ANY MATERIALIZED VIEW";
} else {
throw new ParserException("TODO : " + lexer.token + " " + lexer.stringVal());
}
} else if (lexer.token == Token.ON || lexer.token == Token.COMMA) {
privilege = "ALTER";
} else {
throw new ParserException("TODO : " + lexer.token + " " + lexer.stringVal());
}
} else if (lexer.token == Token.DROP) {
lexer.nextToken();
if (lexer.token == Token.DROP) {
privilege = "DROP TABLE";
lexer.nextToken();
} else if (lexer.token == Token.SESSION) {
privilege = "DROP SESSION";
lexer.nextToken();
} else if (lexer.token == Token.ANY) {
lexer.nextToken();
if (lexer.token == Token.TABLE) {
lexer.nextToken();
privilege = "DROP ANY TABLE";
} else if (lexer.identifierEquals("MATERIALIZED")) {
lexer.nextToken();
accept(Token.VIEW);
privilege = "DROP ANY MATERIALIZED VIEW";
} else {
throw new ParserException("TODO : " + lexer.token + " " + lexer.stringVal());
}
} else {
privilege = "DROP";
}
} else if (lexer.identifierEquals("USAGE")) {
privilege = "USAGE";
lexer.nextToken();
} else if (lexer.identifierEquals("EXECUTE")) {
privilege = "EXECUTE";
lexer.nextToken();
} else if (lexer.identifierEquals("PROXY")) {
privilege = "PROXY";
lexer.nextToken();
} else if (lexer.identifierEquals("QUERY")) {
lexer.nextToken();
acceptIdentifier("REWRITE");
privilege = "QUERY REWRITE";
} else if (lexer.identifierEquals("GLOBAL")) {
lexer.nextToken();
acceptIdentifier("QUERY");
acceptIdentifier("REWRITE");
privilege = "GLOBAL QUERY REWRITE";
} else if (lexer.identifierEquals("INHERIT")) {
lexer.nextToken();
acceptIdentifier("PRIVILEGES");
privilege = "INHERIT PRIVILEGES";
} else if (lexer.identifierEquals("EVENT")) {
lexer.nextToken();
privilege = "EVENT";
} else if (lexer.identifierEquals("FILE")) {
lexer.nextToken();
privilege = "FILE";
} else if (lexer.identifierEquals("DESCRIBE")) {
lexer.nextToken();
privilege = "DESCRIBE";
} else if (lexer.token == Token.GRANT) {
lexer.nextToken();
acceptIdentifier("OPTION");
if (lexer.token == Token.FOR) {
privilege = "GRANT OPTION FOR";
lexer.nextToken();
} else {
privilege = "GRANT OPTION";
}
} else if (lexer.token == Token.LOCK) {
lexer.nextToken();
acceptIdentifier("TABLES");
privilege = "LOCK TABLES";
} else if (lexer.identifierEquals("PROCESS")) {
lexer.nextToken();
privilege = "PROCESS";
} else if (lexer.identifierEquals("RELOAD")) {
lexer.nextToken();
privilege = "RELOAD";
} else if (lexer.identifierEquals("CONNECT")) {
privilege = "CONNECT";
lexer.nextToken();
} else if (lexer.identifierEquals("RESOURCE")) {
lexer.nextToken();
privilege = "RESOURCE";
} else if (lexer.token == Token.CONNECT) {
lexer.nextToken();
privilege = "CONNECT";
} else if (lexer.identifierEquals("REPLICATION")) {
lexer.nextToken();
if (lexer.identifierEquals("SLAVE")) {
lexer.nextToken();
privilege = "REPLICATION SLAVE";
} else {
acceptIdentifier("CLIENT");
privilege = "REPLICATION CLIENT";
}
} else if (lexer.token == Token.SHOW) {
lexer.nextToken();
if (lexer.token == Token.VIEW) {
lexer.nextToken();
privilege = "SHOW VIEW";
} else if (lexer.identifierEquals("DATABASES")) {
acceptIdentifier("DATABASES");
privilege = "SHOW DATABASES";
} else {
privilege = "SHOW";
}
} else if (lexer.identifierEquals("SHUTDOWN")) {
lexer.nextToken();
privilege = "SHUTDOWN";
} else if (lexer.identifierEquals("SUPER")) {
lexer.nextToken();
privilege = "SUPER";
} else if (lexer.identifierEquals("CONTROL")) { // sqlserver
lexer.nextToken();
privilege = "CONTROL";
} else if (lexer.identifierEquals("IMPERSONATE")) { // sqlserver
lexer.nextToken();
privilege = "IMPERSONATE";
} else if (lexer.identifierEquals("LOAD")) { // sqlserver
lexer.nextToken();
if (lexer.identifierEquals("DATA")) {
lexer.nextToken();
privilege = "LOAD DATA";
}
} else if (lexer.identifierEquals("DUMP")) { // sqlserver
lexer.nextToken();
if (lexer.identifierEquals("DATA")) {
lexer.nextToken();
privilege = "DUMP DATA";
}
}
if (privilege != null) {
SQLExpr expr = new SQLIdentifierExpr(privilege);
SQLPrivilegeItem privilegeItem = new SQLPrivilegeItem();
privilegeItem.setAction(expr);
if (lexer.token == Token.LPAREN) {
lexer.nextToken();
for (; ; ) {
privilegeItem.getColumns().add(this.exprParser.name());
if (lexer.token() == Token.COMMA) {
lexer.nextToken();
continue;
}
break;
}
accept(Token.RPAREN);
}
expr.setParent(parent);
privileges.add(privilegeItem);
}
if (lexer.token == Token.COMMA) {
lexer.nextToken();
continue;
}
break;
}
}