1212import java .util .ArrayList ;
1313import java .util .List ;
1414import net .sf .jsqlparser .expression .Expression ;
15+ import net .sf .jsqlparser .expression .operators .relational .ExpressionList ;
1516
1617public class GroupByElement {
1718
1819 private List <Expression > groupByExpressions = new ArrayList <>();
20+ private List groupingSets = new ArrayList ();
1921
2022 public void accept (GroupByVisitor groupByVisitor ) {
2123 groupByVisitor .visit (this );
@@ -33,12 +35,47 @@ public void addGroupByExpression(Expression groupByExpression) {
3335 groupByExpressions .add (groupByExpression );
3436 }
3537
38+ public List getGroupingSets () {
39+ return groupingSets ;
40+ }
41+
42+ public void setGroupingSets (List groupingSets ) {
43+ this .groupingSets = groupingSets ;
44+ }
45+
46+ public void addGroupingSet (Expression expr ) {
47+ this .groupingSets .add (expr );
48+ }
49+
50+ public void addGroupingSet (ExpressionList list ) {
51+ this .groupingSets .add (list );
52+ }
53+
3654 @ Override
3755 public String toString () {
3856 StringBuilder b = new StringBuilder ();
3957 b .append ("GROUP BY " );
4058
41- b .append (PlainSelect .getStringList (groupByExpressions ));
59+ if (groupByExpressions .size () > 0 ) {
60+ b .append (PlainSelect .getStringList (groupByExpressions ));
61+ } else if (groupingSets .size () > 0 ) {
62+ b .append ("GROUPING SETS (" );
63+ boolean first = true ;
64+ for (Object o : groupingSets ) {
65+ if (first ) {
66+ first = false ;
67+ } else {
68+ b .append (", " );
69+ }
70+ if (o instanceof Expression ) {
71+ b .append (o .toString ());
72+ } else if (o instanceof ExpressionList ) {
73+ ExpressionList list = (ExpressionList ) o ;
74+ b .append (list .getExpressions () == null ? "()" : list .toString ());
75+ }
76+ }
77+ b .append (")" );
78+ }
4279
4380 return b .toString ();
4481 }
0 commit comments