diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleGroupingSetsExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleGroupingSetsExpr.java new file mode 100644 index 0000000000..6a0167d804 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleGroupingSetsExpr.java @@ -0,0 +1,63 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.dialect.oracle.ast.expr; + +import java.util.ArrayList; +import java.util.List; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLExprImpl; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class OracleGroupingSetsExpr extends SQLExprImpl implements OracleExpr { + + private static final long serialVersionUID = 1L; + private final List items = new ArrayList(); + + public OracleGroupingSetsExpr(){ + + } + + public List getItems() { + return this.items; + } + + public void output(StringBuffer buf) { + buf.append("GROUPING SETS ("); + int i = 0; + for (int size = this.items.size(); i < size; ++i) { + if (i != 0) { + buf.append(", "); + } + ((SQLExpr) this.items.get(i)).output(buf); + } + buf.append(")"); + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + this.accept0((OracleASTVisitor) visitor); + } + + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, this.items); + } + + visitor.endVisit(this); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVIsitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVIsitorAdapter.java index 89e928230a..58dcb10b48 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVIsitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVIsitorAdapter.java @@ -32,6 +32,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleDateExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleDbLinkExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleExtractExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleGroupComparisonCondition; +import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleGroupingSetsExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIsSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; @@ -684,4 +685,14 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora public void endVisit(CellAssignment x) { } + + @Override + public void endVisit(OracleGroupingSetsExpr x) { + + } + + @Override + public boolean visit(OracleGroupingSetsExpr x) { + return true; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java index bbc9beea84..730caf63a3 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java @@ -38,6 +38,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleDateExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleDbLinkExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleExtractExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleGroupComparisonCondition; +import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleGroupingSetsExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIsSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; @@ -88,6 +89,8 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleGroupComparisonCondition x); + void endVisit(OracleGroupingSetsExpr x); + void endVisit(OracleHint x); void endVisit(OracleIntervalExpr x); @@ -156,6 +159,8 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleGroupComparisonCondition x); + boolean visit(OracleGroupingSetsExpr x); + boolean visit(OracleHint x); boolean visit(OracleIntervalExpr x); @@ -277,21 +282,21 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(ModelClause.QueryPartitionClause x); void endVisit(ModelClause.QueryPartitionClause x); - + boolean visit(ModelClause.ModelColumn x); - + void endVisit(ModelClause.ModelColumn x); - + boolean visit(ModelClause.ModelRulesClause x); - + void endVisit(ModelClause.ModelRulesClause x); - + boolean visit(ModelClause.CellAssignmentItem x); - + void endVisit(ModelClause.CellAssignmentItem x); - + boolean visit(ModelClause.CellAssignment x); - + void endVisit(ModelClause.CellAssignment x); boolean visit(ModelClause x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index 099f0ec82e..2b86f6677d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -808,6 +808,11 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } + @Override + public void endVisit(OracleGroupingSetsExpr x) { + + } + @Override public void endVisit(OracleHint x) {