Search in sources :

Example 1 with OracleSelectUnPivot

use of com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectUnPivot in project druid by alibaba.

the class OracleSelectParser method parsePivot.

private void parsePivot(OracleSelectTableSource tableSource) {
    OracleSelectPivot.Item item;
    if (identifierEquals("PIVOT")) {
        lexer.nextToken();
        OracleSelectPivot pivot = new OracleSelectPivot();
        if (identifierEquals("XML")) {
            lexer.nextToken();
            pivot.setXml(true);
        }
        accept(Token.LPAREN);
        while (true) {
            item = new OracleSelectPivot.Item();
            item.setExpr((SQLAggregateExpr) this.exprParser.expr());
            item.setAlias(as());
            pivot.addItem(item);
            if (!(lexer.token() == (Token.COMMA))) {
                break;
            }
            lexer.nextToken();
        }
        accept(Token.FOR);
        if (lexer.token() == (Token.LPAREN)) {
            lexer.nextToken();
            while (true) {
                pivot.getPivotFor().add(new SQLIdentifierExpr(lexer.stringVal()));
                lexer.nextToken();
                if (!(lexer.token() == (Token.COMMA))) {
                    break;
                }
                lexer.nextToken();
            }
            accept(Token.RPAREN);
        } else {
            pivot.getPivotFor().add(new SQLIdentifierExpr(lexer.stringVal()));
            lexer.nextToken();
        }
        accept(Token.IN);
        accept(Token.LPAREN);
        if (lexer.token() == (Token.LPAREN)) {
            throw new ParserException("TODO");
        }
        if (lexer.token() == (Token.SELECT)) {
            throw new ParserException("TODO");
        }
        for (; ; ) {
            item = new OracleSelectPivot.Item();
            item.setExpr(this.exprParser.expr());
            item.setAlias(as());
            pivot.getPivotIn().add(item);
            if (lexer.token() != Token.COMMA) {
                break;
            }
            lexer.nextToken();
        }
        accept(Token.RPAREN);
        accept(Token.RPAREN);
        tableSource.setPivot(pivot);
    } else if (identifierEquals("UNPIVOT")) {
        lexer.nextToken();
        OracleSelectUnPivot unPivot = new OracleSelectUnPivot();
        if (identifierEquals("INCLUDE")) {
            lexer.nextToken();
            acceptIdentifier("NULLS");
            unPivot.setNullsIncludeType(OracleSelectUnPivot.NullsIncludeType.INCLUDE_NULLS);
        } else if (identifierEquals("EXCLUDE")) {
            lexer.nextToken();
            acceptIdentifier("NULLS");
            unPivot.setNullsIncludeType(OracleSelectUnPivot.NullsIncludeType.EXCLUDE_NULLS);
        }
        accept(Token.LPAREN);
        if (lexer.token() == (Token.LPAREN)) {
            lexer.nextToken();
            this.exprParser.exprList(unPivot.getItems(), unPivot);
            accept(Token.RPAREN);
        } else {
            unPivot.addItem(this.exprParser.expr());
        }
        accept(Token.FOR);
        if (lexer.token() == (Token.LPAREN)) {
            lexer.nextToken();
            while (true) {
                unPivot.getPivotFor().add(new SQLIdentifierExpr(lexer.stringVal()));
                lexer.nextToken();
                if (!(lexer.token() == (Token.COMMA))) {
                    break;
                }
                lexer.nextToken();
            }
            accept(Token.RPAREN);
        } else {
            unPivot.getPivotFor().add(new SQLIdentifierExpr(lexer.stringVal()));
            lexer.nextToken();
        }
        accept(Token.IN);
        accept(Token.LPAREN);
        if (lexer.token() == (Token.LPAREN)) {
            throw new ParserException("TODO");
        }
        if (lexer.token() == (Token.SELECT)) {
            throw new ParserException("TODO");
        }
        for (; ; ) {
            item = new OracleSelectPivot.Item();
            item.setExpr(this.exprParser.expr());
            item.setAlias(as());
            unPivot.getPivotIn().add(item);
            if (lexer.token() != Token.COMMA) {
                break;
            }
            lexer.nextToken();
        }
        accept(Token.RPAREN);
        accept(Token.RPAREN);
        tableSource.setPivot(unPivot);
    }
}
Also used : ParserException(com.alibaba.druid.sql.parser.ParserException) CellAssignmentItem(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.CellAssignmentItem) OracleSelectPivot(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectPivot) OracleSelectUnPivot(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectUnPivot) SQLIdentifierExpr(com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr)

Example 2 with OracleSelectUnPivot

use of com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectUnPivot in project druid by alibaba.

the class OracleASTVisitorAdapterTest method test_adapter.

public void test_adapter() throws Exception {
    OracleASTVisitorAdapter adapter = new OracleASTVisitorAdapter();
    new OraclePLSQLCommitStatement().accept(adapter);
    new OracleAnalytic().accept(adapter);
    new OracleAnalyticWindowing().accept(adapter);
    new SQLDateExpr().accept(adapter);
    new OracleDbLinkExpr().accept(adapter);
    new OracleSelectForUpdate().accept(adapter);
    new OracleSelectHierachicalQueryClause().accept(adapter);
    new OracleSelectPivot.Item().accept(adapter);
    new OracleSelectPivot().accept(adapter);
    new CheckOption().accept(adapter);
    new ReadOnly().accept(adapter);
    new OracleSelectUnPivot().accept(adapter);
    new SQLTimestampExpr().accept(adapter);
    new PartitionExtensionClause().accept(adapter);
    new VersionsFlashbackQueryClause().accept(adapter);
    new VersionsFlashbackQueryClause().accept(adapter);
    new AsOfFlashbackQueryClause().accept(adapter);
    new SQLGroupingSetExpr().accept(adapter);
    new OracleWithSubqueryEntry().accept(adapter);
    new OracleFileSpecification().accept(adapter);
    new OracleAlterTablespaceAddDataFile().accept(adapter);
    new OracleAlterTablespaceStatement().accept(adapter);
    new SQLCreateSequenceStatement().accept(adapter);
    new SQLLoopStatement().accept(adapter);
    new OracleIntervalExpr().accept(adapter);
    new OracleDeleteStatement().accept(adapter);
    new OracleUpdateStatement().accept(adapter);
    new SampleClause().accept(adapter);
    new OracleSelectTableReference().accept(adapter);
    new SearchClause().accept(adapter);
    new CycleClause().accept(adapter);
    new OracleBinaryFloatExpr().accept(adapter);
    new OracleBinaryDoubleExpr().accept(adapter);
    new OracleCursorExpr().accept(adapter);
    new OracleIsSetExpr().accept(adapter);
    new ReturnRowsClause().accept(adapter);
    new ModelClause().accept(adapter);
    new MainModelClause().accept(adapter);
    new ModelColumnClause().accept(adapter);
    new QueryPartitionClause().accept(adapter);
    new ModelColumn().accept(adapter);
    new ModelRulesClause().accept(adapter);
    new CellAssignmentItem().accept(adapter);
    new CellAssignment().accept(adapter);
    new SQLMergeStatement().accept(adapter);
    new MergeUpdateClause().accept(adapter);
    new MergeInsertClause().accept(adapter);
    new SQLErrorLoggingClause().accept(adapter);
    new OracleReturningClause().accept(adapter);
    new OracleInsertStatement().accept(adapter);
    new InsertIntoClause().accept(adapter);
    new OracleMultiInsertStatement().accept(adapter);
    new ConditionalInsertClause().accept(adapter);
    new ConditionalInsertClauseItem().accept(adapter);
    new OracleSelectQueryBlock().accept(adapter);
    new SQLBlockStatement().accept(adapter);
    new OracleLockTableStatement().accept(adapter);
    new OracleAlterSessionStatement().accept(adapter);
    new OracleExprStatement().accept(adapter);
    new OracleDatetimeExpr().accept(adapter);
    new OracleExceptionStatement().accept(adapter);
    new OracleExceptionStatement.Item().accept(adapter);
    new OracleArgumentExpr().accept(adapter);
    new OracleSetTransactionStatement().accept(adapter);
    new SQLDropSequenceStatement().accept(adapter);
    new OracleDataTypeIntervalDay().accept(adapter);
    new OracleDataTypeIntervalYear().accept(adapter);
    new OracleDataTypeTimestamp().accept(adapter);
    new OracleDropDbLinkStatement().accept(adapter);
    new OracleCreateDatabaseDbLinkStatement().accept(adapter);
    new SQLCreateProcedureStatement().accept(adapter);
    new OracleSavePointStatement().accept(adapter);
    new SQLFetchStatement().accept(adapter);
    new OracleExitStatement().accept(adapter);
    new OracleExplainStatement().accept(adapter);
    new OracleAlterProcedureStatement().accept(adapter);
    new OracleAlterTableDropPartition().accept(adapter);
    new OracleAlterTableTruncatePartition().accept(adapter);
    new OracleAlterTableSplitPartition.TableSpaceItem().accept(adapter);
    new OracleAlterTableSplitPartition.UpdateIndexesClause().accept(adapter);
    new OracleAlterTableSplitPartition.NestedTablePartitionSpec().accept(adapter);
    new OracleAlterTableSplitPartition().accept(adapter);
    new OracleAlterTableModify().accept(adapter);
    new OracleCreateIndexStatement().accept(adapter);
    new OracleAlterIndexStatement().accept(adapter);
    new OracleForStatement().accept(adapter);
    new OracleAlterIndexStatement().accept(adapter);
    new OracleRangeExpr().accept(adapter);
    new OraclePrimaryKey().accept(adapter);
    new OracleCreateTableStatement().accept(adapter);
    new SQLAlterTableRename().accept(adapter);
    new OracleStorageClause().accept(adapter);
    new OracleGotoStatement().accept(adapter);
    new OracleLabelStatement().accept(adapter);
    new SQLParameter().accept(adapter);
    new OracleCommitStatement().accept(adapter);
    new OracleAlterTriggerStatement().accept(adapter);
    new OracleAlterSynonymStatement().accept(adapter);
    new AsOfSnapshotClause().accept(adapter);
    new OracleAlterViewStatement().accept(adapter);
    new OracleAlterTableMoveTablespace().accept(adapter);
    new OracleSizeExpr().accept(adapter);
}
Also used : OracleDropDbLinkStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDbLinkStatement) OracleWithSubqueryEntry(com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleWithSubqueryEntry) ModelColumnClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ModelColumnClause) SQLTimestampExpr(com.alibaba.druid.sql.ast.expr.SQLTimestampExpr) ModelClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause) MainModelClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.MainModelClause) ConditionalInsertClauseItem(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement.ConditionalInsertClauseItem) OracleDataTypeTimestamp(com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeTimestamp) OracleExprStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement) OracleAnalytic(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAnalytic) OracleBinaryDoubleExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleBinaryDoubleExpr) OracleAlterTableSplitPartition(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition) OracleDataTypeIntervalYear(com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalYear) AsOfFlashbackQueryClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause) OracleIntervalExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalExpr) OracleSelectPivot(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectPivot) OracleSelectUnPivot(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectUnPivot) SQLParameter(com.alibaba.druid.sql.ast.SQLParameter) OracleGotoStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement) InsertIntoClause(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement.InsertIntoClause) OracleRangeExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr) OracleAlterSynonymStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement) OracleCursorExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleCursorExpr) OracleCreateIndexStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement) VersionsFlashbackQueryClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.VersionsFlashbackQueryClause) ModelColumn(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ModelColumn) OracleBinaryFloatExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleBinaryFloatExpr) OracleAlterTablespaceAddDataFile(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDataFile) OracleAlterSessionStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement) ConditionalInsertClause(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement.ConditionalInsertClause) CheckOption(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectRestriction.CheckOption) OracleAlterTableModify(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify) OraclePrimaryKey(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey) OracleSetTransactionStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSetTransactionStatement) CellAssignmentItem(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.CellAssignmentItem) OracleFileSpecification(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification) OracleReturningClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause) OracleCreateDatabaseDbLinkStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateDatabaseDbLinkStatement) SearchClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.SearchClause) SampleClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.SampleClause) OracleAlterTableMoveTablespace(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableMoveTablespace) OracleAlterTriggerStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement) OracleAlterViewStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement) OracleAlterTableTruncatePartition(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableTruncatePartition) OracleExplainStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement) OracleSizeExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr) CycleClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause) OracleLockTableStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLockTableStatement) MergeUpdateClause(com.alibaba.druid.sql.ast.statement.SQLMergeStatement.MergeUpdateClause) OracleSelectTableReference(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableReference) OracleAnalyticWindowing(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAnalyticWindowing) OracleIsSetExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIsSetExpr) OracleDatetimeExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleDatetimeExpr) ReadOnly(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectRestriction.ReadOnly) OracleAlterProcedureStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement) OracleSelectForUpdate(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate) PartitionExtensionClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.PartitionExtensionClause) OracleArgumentExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleArgumentExpr) OracleUpdateStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement) OracleAlterIndexStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement) OracleInsertStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleInsertStatement) OracleSelectQueryBlock(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectQueryBlock) OracleDbLinkExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleDbLinkExpr) OracleAlterTablespaceStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement) MainModelClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.MainModelClause) OracleForStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement) OracleExitStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement) OracleStorageClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleStorageClause) CellAssignment(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.CellAssignment) ModelRulesClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ModelRulesClause) OracleCommitStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement) SQLGroupingSetExpr(com.alibaba.druid.sql.ast.expr.SQLGroupingSetExpr) OracleAlterTableDropPartition(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition) OracleSavePointStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement) ReturnRowsClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ReturnRowsClause) OracleDeleteStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement) OracleLabelStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLabelStatement) OraclePLSQLCommitStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement) OracleASTVisitorAdapter(com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitorAdapter) OracleMultiInsertStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement) QueryPartitionClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.QueryPartitionClause) OracleSelectHierachicalQueryClause(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectHierachicalQueryClause) OracleExceptionStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement) AsOfSnapshotClause(com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause) OracleCreateTableStatement(com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement) SQLDateExpr(com.alibaba.druid.sql.ast.expr.SQLDateExpr) OracleDataTypeIntervalDay(com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalDay) MergeInsertClause(com.alibaba.druid.sql.ast.statement.SQLMergeStatement.MergeInsertClause)

Aggregations

CellAssignmentItem (com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.CellAssignmentItem)2 OracleSelectPivot (com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectPivot)2 OracleSelectUnPivot (com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectUnPivot)2 SQLParameter (com.alibaba.druid.sql.ast.SQLParameter)1 SQLDateExpr (com.alibaba.druid.sql.ast.expr.SQLDateExpr)1 SQLGroupingSetExpr (com.alibaba.druid.sql.ast.expr.SQLGroupingSetExpr)1 SQLIdentifierExpr (com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr)1 SQLTimestampExpr (com.alibaba.druid.sql.ast.expr.SQLTimestampExpr)1 MergeInsertClause (com.alibaba.druid.sql.ast.statement.SQLMergeStatement.MergeInsertClause)1 MergeUpdateClause (com.alibaba.druid.sql.ast.statement.SQLMergeStatement.MergeUpdateClause)1 OracleDataTypeIntervalDay (com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalDay)1 OracleDataTypeIntervalYear (com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalYear)1 OracleDataTypeTimestamp (com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeTimestamp)1 CycleClause (com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause)1 AsOfFlashbackQueryClause (com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause)1 AsOfSnapshotClause (com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause)1 VersionsFlashbackQueryClause (com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.VersionsFlashbackQueryClause)1 ModelClause (com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause)1 CellAssignment (com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.CellAssignment)1 MainModelClause (com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.MainModelClause)1