in core/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java [642:828]
protected String alias() {
String alias = null;
if (lexer.token == Token.LITERAL_ALIAS) {
alias = lexer.stringVal();
lexer.nextToken();
} else if (lexer.token == Token.IDENTIFIER) {
alias = lexer.stringVal();
lexer.nextToken();
} else if (lexer.token == Token.LITERAL_CHARS) {
alias = "'" + lexer.stringVal() + "'";
lexer.nextToken();
} else if (lexer.token == Token.LITERAL_FLOAT && dialectFeatureEnabled(AliasLiteralFloat)) {
String numStr = lexer.numberString();
lexer.nextToken();
if (lexer.token == Token.IDENTIFIER) {
numStr += lexer.stringVal();
lexer.nextToken();
}
return numStr;
} else {
switch (lexer.token) {
case KEY:
case INDEX:
case CASE:
// case MODEL:
case PCTFREE:
case INITRANS:
case MAXTRANS:
case SEGMENT:
case CREATION:
case IMMEDIATE:
case DEFERRED:
case STORAGE:
case NEXT:
case MINEXTENTS:
case MAXEXTENTS:
case MAXSIZE:
case PCTINCREASE:
case FLASH_CACHE:
case CELL_FLASH_CACHE:
case NONE:
case LOB:
case STORE:
case ROW:
case CHUNK:
case CACHE:
case NOCACHE:
case LOGGING:
case NOCOMPRESS:
case KEEP_DUPLICATES:
case EXCEPTIONS:
case PURGE:
case INITIALLY:
case END:
case COMMENT:
case ENABLE:
case DISABLE:
case SEQUENCE:
case USER:
case ANALYZE:
case OPTIMIZE:
case GRANT:
case REVOKE:
case FULL:
case TO:
case NEW:
case INTERVAL:
case LOCK:
case LIMIT:
case IDENTIFIED:
case PASSWORD:
case BINARY:
case WINDOW:
case OFFSET:
case SHARE:
case START:
case CONNECT:
case MATCHED:
case ERRORS:
case REJECT:
case UNLIMITED:
case BEGIN:
case EXCLUSIVE:
case MODE:
case ADVISE:
case TYPE:
case CLOSE:
case OPEN:
case ANY:
case CAST:
case COMPUTE:
case ESCAPE:
case INTERSECT:
case MERGE:
case MINUS:
case SOME:
case TRUNCATE:
case UNTIL:
case VIEW:
case FUNCTION:
case DESC:
case KILL:
case SHOW:
case NULL:
case ALL:
case CONSTRAINT:
case INNER:
case LEFT:
case RIGHT:
case VALUES:
case SCHEMA:
case PARTITION:
case UPDATE:
case DO:
case LOOP:
case REPEAT:
case DEFAULT:
case LIKE:
case IS:
case UNIQUE:
case CHECK:
case INOUT:
case DECLARE:
case TABLE:
case TRIGGER:
case IN:
case OUT:
case BY:
case EXCEPT:
case TABLESPACE:
case CREATE:
case DELETE:
case PRIMARY:
case FOREIGN:
case REFERENCES:
case INTO:
case USE:
case LEAVE:
case DISTRIBUTE:
case AS:
case FOR:
case PARTITIONED:
case REPLACE:
case ALTER:
case EXPLAIN:
case ASC:
case DATABASE:
case TRUE:
case FALSE:
case OUTER:
case DROP:
alias = lexer.stringVal();
lexer.nextToken();
return alias;
case GROUP:
case ORDER:
{
Lexer.SavePoint mark = lexer.mark();
alias = lexer.stringVal();
lexer.nextToken();
if (lexer.token == Token.BY) {
lexer.reset(mark);
alias = null;
}
}
break;
case QUES:
alias = "?";
lexer.nextToken();
return alias;
case UNION: {
Lexer.SavePoint mark = lexer.mark();
String strVal = lexer.stringVal();
lexer.nextToken();
if (lexer.token == Token.ALL) {
lexer.reset(mark);
return null;
} else {
return strVal;
}
}
default:
break;
}
}
return alias;
}