public SQLStatement parseShow()

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