Skip to content

Commit c62781a

Browse files
feat: more useful VisitorAdaptors
Signed-off-by: Andreas Reichel <[email protected]>
1 parent e963fb6 commit c62781a

18 files changed

+482
-156
lines changed

src/main/java/net/sf/jsqlparser/expression/AnalyticExpression.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ public AnalyticExpression(Function function) {
6060
this.distinct = function.isDistinct();
6161
this.unique = function.isUnique();
6262

63-
6463
ExpressionList<? extends Expression> list = function.getParameters();
6564
if (list != null) {
6665
if (list.size() > 3) {
@@ -117,16 +116,16 @@ public void setKeep(KeepExpression keep) {
117116
}
118117

119118
public ExpressionList<?> getPartitionExpressionList() {
120-
return windowDef.partitionBy.getPartitionExpressionList();
119+
return windowDef.partitionBy;
121120
}
122121

123-
public void setPartitionExpressionList(ExpressionList<?> partitionExpressionList) {
122+
public void setPartitionExpressionList(ExpressionList<Expression> partitionExpressionList) {
124123
setPartitionExpressionList(partitionExpressionList, false);
125124
}
126125

127-
public void setPartitionExpressionList(ExpressionList<?> partitionExpressionList,
126+
public void setPartitionExpressionList(ExpressionList<Expression> partitionExpressionList,
128127
boolean brackets) {
129-
windowDef.partitionBy.setPartitionExpressionList(partitionExpressionList, brackets);
128+
windowDef.partitionBy.setExpressions(partitionExpressionList, brackets);
130129
}
131130

132131
public boolean isPartitionByBrackets() {

src/main/java/net/sf/jsqlparser/expression/ExpressionVisitor.java

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,95 @@
6161
import net.sf.jsqlparser.statement.select.AllColumns;
6262
import net.sf.jsqlparser.statement.select.AllTableColumns;
6363
import net.sf.jsqlparser.statement.select.FunctionAllColumns;
64+
import net.sf.jsqlparser.statement.select.GroupByElement;
65+
import net.sf.jsqlparser.statement.select.Limit;
66+
import net.sf.jsqlparser.statement.select.OrderByElement;
6467
import net.sf.jsqlparser.statement.select.ParenthesedSelect;
6568
import net.sf.jsqlparser.statement.select.Select;
69+
import net.sf.jsqlparser.statement.update.UpdateSet;
70+
71+
import java.util.List;
6672

6773
public interface ExpressionVisitor<T> {
6874

75+
default <S> T visitExpressions(ExpressionList<? extends Expression> expressions, S context) {
76+
if (expressions != null) {
77+
expressions.forEach(expression -> expression.accept(this, context));
78+
}
79+
return null;
80+
};
81+
82+
default <S> T visitExpression(Expression expression, S context) {
83+
if (expression != null) {
84+
expression.accept(this, context);
85+
}
86+
return null;
87+
}
88+
89+
default <S> T visitOrderBy(List<OrderByElement> orderByElements, S context) {
90+
if (orderByElements != null) {
91+
for (OrderByElement orderByElement : orderByElements) {
92+
orderByElement.getExpression().accept(this, context);
93+
}
94+
}
95+
return null;
96+
}
97+
98+
default <S> T visitLimit(Limit limit, S context) {
99+
if (limit != null && !limit.isLimitNull() && !limit.isLimitAll()) {
100+
if (limit.getOffset() != null) {
101+
limit.getOffset().accept(this, context);
102+
}
103+
if (limit.getRowCount() != null) {
104+
limit.getRowCount().accept(this, context);
105+
}
106+
if (limit.getByExpressions() != null) {
107+
limit.getByExpressions().accept(this, context);
108+
}
109+
}
110+
return null;
111+
}
112+
113+
default <S> T visitPreferringClause(PreferringClause preferringClause, S context) {
114+
if (preferringClause != null) {
115+
if (preferringClause.getPreferring() != null) {
116+
preferringClause.getPreferring().accept(this, context);
117+
}
118+
if (preferringClause.getPartitionBy() != null) {
119+
for (Expression expression : preferringClause.getPartitionBy()) {
120+
expression.accept(this, context);
121+
}
122+
}
123+
}
124+
return null;
125+
}
126+
127+
default <S> T visitUpdateSets(List<UpdateSet> insert, S context) {
128+
for (UpdateSet updateSet : insert) {
129+
for (Column column : updateSet.getColumns()) {
130+
column.accept(this, context);
131+
}
132+
for (Expression value : updateSet.getValues()) {
133+
value.accept(this, context);
134+
}
135+
}
136+
return null;
137+
}
138+
139+
default <S> T visit(GroupByElement groupBy, S context) {
140+
if (groupBy != null) {
141+
for (Expression expression : groupBy.getGroupByExpressionList()) {
142+
expression.accept(this, context);
143+
}
144+
if (!groupBy.getGroupingSets().isEmpty()) {
145+
for (ExpressionList<?> expressionList : groupBy.getGroupingSets()) {
146+
expressionList.accept(this, context);
147+
}
148+
}
149+
}
150+
return null;
151+
}
152+
69153
<S> T visit(BitwiseRightShift bitwiseRightShift, S context);
70154

71155
default void visit(BitwiseRightShift bitwiseRightShift) {

src/main/java/net/sf/jsqlparser/expression/ExpressionVisitorAdapter.java

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public ExpressionVisitorAdapter<T> setSelectVisitor(SelectVisitor<T> selectVisit
103103

104104
@Override
105105
public <S> T visit(NullValue nullValue, S context) {
106-
return visitExpression(nullValue, context);
106+
return applyExpression(nullValue, context);
107107
}
108108

109109
@Override
@@ -130,47 +130,47 @@ public <S> T visit(SignedExpression signedExpression, S context) {
130130

131131
@Override
132132
public <S> T visit(JdbcParameter jdbcParameter, S context) {
133-
return visitExpression(jdbcParameter, context);
133+
return applyExpression(jdbcParameter, context);
134134
}
135135

136136
@Override
137137
public <S> T visit(JdbcNamedParameter jdbcNamedParameter, S context) {
138-
return visitExpression(jdbcNamedParameter, context);
138+
return applyExpression(jdbcNamedParameter, context);
139139
}
140140

141141
@Override
142142
public <S> T visit(DoubleValue doubleValue, S context) {
143-
return visitExpression(doubleValue, context);
143+
return applyExpression(doubleValue, context);
144144
}
145145

146146
@Override
147147
public <S> T visit(LongValue longValue, S context) {
148-
return visitExpression(longValue, context);
148+
return applyExpression(longValue, context);
149149
}
150150

151151
@Override
152152
public <S> T visit(DateValue dateValue, S context) {
153-
return visitExpression(dateValue, context);
153+
return applyExpression(dateValue, context);
154154
}
155155

156156
@Override
157157
public <S> T visit(TimeValue timeValue, S context) {
158-
return visitExpression(timeValue, context);
158+
return applyExpression(timeValue, context);
159159
}
160160

161161
@Override
162162
public <S> T visit(TimestampValue timestampValue, S context) {
163-
return visitExpression(timestampValue, context);
163+
return applyExpression(timestampValue, context);
164164
}
165165

166166
@Override
167167
public <S> T visit(StringValue stringValue, S context) {
168-
return visitExpression(stringValue, context);
168+
return applyExpression(stringValue, context);
169169
}
170170

171171
@Override
172172
public <S> T visit(BooleanValue booleanValue, S context) {
173-
return visitExpression(booleanValue, context);
173+
return applyExpression(booleanValue, context);
174174
}
175175

176176
@Override
@@ -317,7 +317,7 @@ public <S> T visit(ContainedBy containedBy, S context) {
317317

318318
@Override
319319
public <S> T visit(Column column, S context) {
320-
return visitExpression(column, context);
320+
return applyExpression(column, context);
321321
}
322322

323323
@Override
@@ -361,7 +361,7 @@ public <S> T visit(MemberOfExpression memberOfExpression, S context) {
361361

362362
@Override
363363
public <S> T visit(AnyComparisonExpression anyComparisonExpression, S context) {
364-
return visitExpression(anyComparisonExpression, context);
364+
return applyExpression(anyComparisonExpression, context);
365365
}
366366

367367
@Override
@@ -490,7 +490,7 @@ public <S> T visit(BitwiseLeftShift bitwiseLeftShift, S context) {
490490
return visitBinaryExpression(bitwiseLeftShift, context);
491491
}
492492

493-
protected <S> T visitExpression(Expression expression, S context) {
493+
protected <S> T applyExpression(Expression expression, S context) {
494494
return null;
495495
}
496496

@@ -531,12 +531,12 @@ public <S> T visit(JsonOperator jsonOperator, S context) {
531531

532532
@Override
533533
public <S> T visit(UserVariable userVariable, S context) {
534-
return visitExpression(userVariable, context);
534+
return applyExpression(userVariable, context);
535535
}
536536

537537
@Override
538538
public <S> T visit(NumericBind numericBind, S context) {
539-
return visitExpression(numericBind, context);
539+
return applyExpression(numericBind, context);
540540
}
541541

542542
@Override
@@ -601,22 +601,22 @@ public <S> T visit(UnPivot unpivot, S context) {
601601

602602
@Override
603603
public <S> T visit(AllColumns allColumns, S context) {
604-
return visitExpression(allColumns, context);
604+
return applyExpression(allColumns, context);
605605
}
606606

607607
@Override
608608
public <S> T visit(AllTableColumns allTableColumns, S context) {
609-
return visitExpression(allTableColumns, context);
609+
return applyExpression(allTableColumns, context);
610610
}
611611

612612
@Override
613613
public <S> T visit(FunctionAllColumns functionAllColumns, S context) {
614-
return visitExpression(functionAllColumns, context);
614+
return applyExpression(functionAllColumns, context);
615615
}
616616

617617
@Override
618618
public <S> T visit(AllValue allValue, S context) {
619-
return visitExpression(allValue, context);
619+
return applyExpression(allValue, context);
620620
}
621621

622622
@Override
@@ -636,27 +636,27 @@ public <S> T visit(RowGetExpression rowGetExpression, S context) {
636636

637637
@Override
638638
public <S> T visit(HexValue hexValue, S context) {
639-
return visitExpression(hexValue, context);
639+
return applyExpression(hexValue, context);
640640
}
641641

642642
@Override
643643
public <S> T visit(OracleHint hint, S context) {
644-
return visitExpression(hint, context);
644+
return applyExpression(hint, context);
645645
}
646646

647647
@Override
648648
public <S> T visit(TimeKeyExpression timeKeyExpression, S context) {
649-
return visitExpression(timeKeyExpression, context);
649+
return applyExpression(timeKeyExpression, context);
650650
}
651651

652652
@Override
653653
public <S> T visit(DateTimeLiteralExpression dateTimeLiteralExpression, S context) {
654-
return visitExpression(dateTimeLiteralExpression, context);
654+
return applyExpression(dateTimeLiteralExpression, context);
655655
}
656656

657657
@Override
658658
public <S> T visit(NextValExpression nextValExpression, S context) {
659-
return visitExpression(nextValExpression, context);
659+
return applyExpression(nextValExpression, context);
660660
}
661661

662662
@Override

src/main/java/net/sf/jsqlparser/expression/FilterOverImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,17 @@ public FilterOverImpl withOrderByElements(List<OrderByElement> orderByElements)
5151
return this;
5252
}
5353

54-
public ExpressionList getPartitionExpressionList() {
55-
return partitionBy.getPartitionExpressionList();
54+
public ExpressionList<Expression> getPartitionExpressionList() {
55+
return partitionBy;
5656
}
5757

58-
public void setPartitionExpressionList(ExpressionList partitionExpressionList) {
58+
public void setPartitionExpressionList(ExpressionList<Expression> partitionExpressionList) {
5959
setPartitionExpressionList(partitionExpressionList, false);
6060
}
6161

62-
public void setPartitionExpressionList(ExpressionList partitionExpressionList,
62+
public void setPartitionExpressionList(ExpressionList<Expression> partitionExpressionList,
6363
boolean brackets) {
64-
partitionBy.setPartitionExpressionList(partitionExpressionList, brackets);
64+
partitionBy.setExpressions(partitionExpressionList, brackets);
6565
}
6666

6767
public boolean isPartitionByBrackets() {

src/main/java/net/sf/jsqlparser/expression/PartitionByClause.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,39 @@
1414

1515
import java.io.Serializable;
1616

17-
public class PartitionByClause implements Serializable {
18-
ExpressionList partitionExpressionList;
17+
public class PartitionByClause extends ExpressionList<Expression> implements Serializable {
1918
boolean brackets = false;
2019

21-
public ExpressionList getPartitionExpressionList() {
22-
return partitionExpressionList;
20+
@Deprecated
21+
public ExpressionList<Expression> getPartitionExpressionList() {
22+
return this;
2323
}
2424

25-
public void setPartitionExpressionList(ExpressionList partitionExpressionList) {
25+
@Deprecated
26+
public void setPartitionExpressionList(ExpressionList<Expression> partitionExpressionList) {
2627
setPartitionExpressionList(partitionExpressionList, false);
2728
}
2829

29-
public void setPartitionExpressionList(ExpressionList partitionExpressionList,
30+
@Deprecated
31+
public void setPartitionExpressionList(ExpressionList<Expression> partitionExpressionList,
32+
boolean brackets) {
33+
setExpressions(partitionExpressionList, brackets);
34+
}
35+
36+
public PartitionByClause setExpressions(ExpressionList<Expression> partitionExpressionList,
3037
boolean brackets) {
31-
this.partitionExpressionList = partitionExpressionList;
38+
clear();
39+
if (partitionExpressionList != null) {
40+
addAll(partitionExpressionList);
41+
}
3242
this.brackets = brackets;
43+
return this;
3344
}
3445

3546
public void toStringPartitionBy(StringBuilder b) {
36-
if (partitionExpressionList != null
37-
&& !partitionExpressionList.getExpressions().isEmpty()) {
47+
if (!isEmpty()) {
3848
b.append("PARTITION BY ");
39-
b.append(PlainSelect.getStringList(partitionExpressionList.getExpressions(), true,
49+
b.append(PlainSelect.getStringList(this, true,
4050
brackets));
4151
b.append(" ");
4252
}
@@ -46,7 +56,9 @@ public boolean isBrackets() {
4656
return brackets;
4757
}
4858

49-
public PartitionByClause withPartitionExpressionList(ExpressionList partitionExpressionList) {
59+
@Deprecated
60+
public PartitionByClause withPartitionExpressionList(
61+
ExpressionList<Expression> partitionExpressionList) {
5062
this.setPartitionExpressionList(partitionExpressionList);
5163
return this;
5264
}

src/main/java/net/sf/jsqlparser/expression/PreferringClause.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ public PreferringClause(Expression preferring) {
2121
this.preferring = preferring;
2222
}
2323

24-
public void setPartitionExpressionList(ExpressionList expressionList,
24+
public void setPartitionExpressionList(ExpressionList<Expression> expressionList,
2525
boolean brackets) {
2626
if (this.partitionBy == null) {
2727
this.partitionBy = new PartitionByClause();
2828
}
29-
partitionBy.setPartitionExpressionList(expressionList, brackets);
29+
partitionBy.setExpressions(expressionList, brackets);
3030
}
3131

3232
public void toStringPreferring(StringBuilder b) {

0 commit comments

Comments
 (0)