protected String alias()

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;
    }