Skip to content

Commit 7479342

Browse files
authored
support custom DeParser (#2013)
1 parent 4af6450 commit 7479342

File tree

5 files changed

+95
-48
lines changed

5 files changed

+95
-48
lines changed

src/main/java/net/sf/jsqlparser/util/deparser/DeleteDeParser.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,7 @@ public void deParse(Delete delete) {
9090
}
9191
}
9292

93-
if (delete.getWhere() != null) {
94-
buffer.append(" WHERE ");
95-
delete.getWhere().accept(expressionVisitor);
96-
}
93+
deparseWhereClause(delete);
9794

9895
if (delete.getOrderByElements() != null) {
9996
new OrderByDeParser(expressionVisitor, buffer).deParse(delete.getOrderByElements());
@@ -108,6 +105,13 @@ public void deParse(Delete delete) {
108105

109106
}
110107

108+
protected void deparseWhereClause(Delete delete) {
109+
if (delete.getWhere() != null) {
110+
buffer.append(" WHERE ");
111+
delete.getWhere().accept(expressionVisitor);
112+
}
113+
}
114+
111115
public ExpressionVisitor getExpressionVisitor() {
112116
return expressionVisitor;
113117
}

src/main/java/net/sf/jsqlparser/util/deparser/MergeDeParser.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public MergeDeParser(ExpressionDeParser expressionDeParser, SelectDeParser selec
2828
}
2929

3030
@Override
31-
void deParse(Merge merge) {
31+
public void deParse(Merge merge) {
3232
List<WithItem> withItemsList = merge.getWithItemsList();
3333
if (withItemsList != null && !withItemsList.isEmpty()) {
3434
buffer.append("WITH ");
@@ -115,4 +115,11 @@ public void visit(MergeInsert mergeInsert) {
115115
}
116116
}
117117

118+
public ExpressionDeParser getExpressionDeParser() {
119+
return expressionDeParser;
120+
}
121+
122+
public SelectDeParser getSelectDeParser() {
123+
return selectDeParser;
124+
}
118125
}

src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import net.sf.jsqlparser.expression.WindowDefinition;
1919
import net.sf.jsqlparser.schema.Column;
2020
import net.sf.jsqlparser.schema.Table;
21+
import net.sf.jsqlparser.statement.select.Distinct;
2122
import net.sf.jsqlparser.statement.select.Fetch;
2223
import net.sf.jsqlparser.statement.select.First;
2324
import net.sf.jsqlparser.statement.select.FromItem;
@@ -27,6 +28,7 @@
2728
import net.sf.jsqlparser.statement.select.LateralView;
2829
import net.sf.jsqlparser.statement.select.Offset;
2930
import net.sf.jsqlparser.statement.select.OptimizeFor;
31+
import net.sf.jsqlparser.statement.select.OrderByElement;
3032
import net.sf.jsqlparser.statement.select.ParenthesedFromItem;
3133
import net.sf.jsqlparser.statement.select.ParenthesedSelect;
3234
import net.sf.jsqlparser.statement.select.Pivot;
@@ -158,26 +160,7 @@ public void visit(PlainSelect plainSelect) {
158160
buffer.append(first).append(" ");
159161
}
160162

161-
if (plainSelect.getDistinct() != null) {
162-
if (plainSelect.getDistinct().isUseUnique()) {
163-
buffer.append("UNIQUE ");
164-
} else {
165-
buffer.append("DISTINCT ");
166-
}
167-
if (plainSelect.getDistinct().getOnSelectItems() != null) {
168-
buffer.append("ON (");
169-
for (Iterator<SelectItem<?>> iter =
170-
plainSelect.getDistinct().getOnSelectItems().iterator(); iter.hasNext();) {
171-
SelectItem<?> selectItem = iter.next();
172-
selectItem.accept(this);
173-
if (iter.hasNext()) {
174-
buffer.append(", ");
175-
}
176-
}
177-
buffer.append(") ");
178-
}
179-
180-
}
163+
deparseDistinctClause(plainSelect, plainSelect.getDistinct());
181164

182165
Top top = plainSelect.getTop();
183166
if (top != null) {
@@ -192,16 +175,7 @@ public void visit(PlainSelect plainSelect) {
192175
buffer.append("SQL_CALC_FOUND_ROWS").append(" ");
193176
}
194177

195-
final List<SelectItem<?>> selectItems = plainSelect.getSelectItems();
196-
if (selectItems != null) {
197-
for (Iterator<SelectItem<?>> iter = selectItems.iterator(); iter.hasNext();) {
198-
SelectItem<?> selectItem = iter.next();
199-
selectItem.accept(this);
200-
if (iter.hasNext()) {
201-
buffer.append(", ");
202-
}
203-
}
204-
}
178+
deparseSelectItemsClause(plainSelect, plainSelect.getSelectItems());
205179

206180
if (plainSelect.getIntoTables() != null) {
207181
buffer.append(" INTO ");
@@ -249,10 +223,7 @@ public void visit(PlainSelect plainSelect) {
249223
buffer.append(plainSelect.getKsqlWindow().toString());
250224
}
251225

252-
if (plainSelect.getWhere() != null) {
253-
buffer.append(" WHERE ");
254-
plainSelect.getWhere().accept(expressionVisitor);
255-
}
226+
deparseWhereClause(plainSelect);
256227

257228
if (plainSelect.getOracleHierarchical() != null) {
258229
plainSelect.getOracleHierarchical().accept(expressionVisitor);
@@ -280,10 +251,7 @@ public void visit(PlainSelect plainSelect) {
280251
plainSelect.getForClause().appendTo(buffer);
281252
}
282253

283-
if (plainSelect.getOrderByElements() != null) {
284-
new OrderByDeParser(expressionVisitor, buffer).deParse(plainSelect.isOracleSiblings(),
285-
plainSelect.getOrderByElements());
286-
}
254+
deparseOrderByElementsClause(plainSelect, plainSelect.getOrderByElements());
287255
if (plainSelect.isEmitChanges()) {
288256
buffer.append(" EMIT CHANGES");
289257
}
@@ -334,6 +302,56 @@ public void visit(PlainSelect plainSelect) {
334302

335303
}
336304

305+
protected void deparseWhereClause(PlainSelect plainSelect) {
306+
if (plainSelect.getWhere() != null) {
307+
buffer.append(" WHERE ");
308+
plainSelect.getWhere().accept(expressionVisitor);
309+
}
310+
}
311+
312+
protected void deparseDistinctClause(PlainSelect plainSelect, Distinct distinct) {
313+
if (distinct != null) {
314+
if (distinct.isUseUnique()) {
315+
buffer.append("UNIQUE ");
316+
} else {
317+
buffer.append("DISTINCT ");
318+
}
319+
if (distinct.getOnSelectItems() != null) {
320+
buffer.append("ON (");
321+
for (Iterator<SelectItem<?>> iter =
322+
distinct.getOnSelectItems().iterator(); iter.hasNext();) {
323+
SelectItem<?> selectItem = iter.next();
324+
selectItem.accept(this);
325+
if (iter.hasNext()) {
326+
buffer.append(", ");
327+
}
328+
}
329+
buffer.append(") ");
330+
}
331+
}
332+
}
333+
334+
protected void deparseSelectItemsClause(PlainSelect plainSelect,
335+
List<SelectItem<?>> selectItems) {
336+
if (selectItems != null) {
337+
for (Iterator<SelectItem<?>> iter = selectItems.iterator(); iter.hasNext();) {
338+
SelectItem<?> selectItem = iter.next();
339+
selectItem.accept(this);
340+
if (iter.hasNext()) {
341+
buffer.append(", ");
342+
}
343+
}
344+
}
345+
}
346+
347+
protected void deparseOrderByElementsClause(PlainSelect plainSelect,
348+
List<OrderByElement> orderByElements) {
349+
if (orderByElements != null) {
350+
new OrderByDeParser(expressionVisitor, buffer).deParse(plainSelect.isOracleSiblings(),
351+
orderByElements);
352+
}
353+
}
354+
337355
@Override
338356
public void visit(SelectItem selectExpressionItem) {
339357
selectExpressionItem.getExpression().accept(expressionVisitor);

src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,4 +361,12 @@ public void visit(AlterSystemStatement alterSystemStatement) {
361361
public void visit(UnsupportedStatement unsupportedStatement) {
362362
unsupportedStatement.appendTo(buffer);
363363
}
364+
365+
public ExpressionDeParser getExpressionDeParser() {
366+
return expressionDeParser;
367+
}
368+
369+
public SelectDeParser getSelectDeParser() {
370+
return selectDeParser;
371+
}
364372
}

src/main/java/net/sf/jsqlparser/util/deparser/UpdateDeParser.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public void deParse(Update update) {
6969
}
7070
buffer.append(" SET ");
7171

72-
deparseUpdateSets(update.getUpdateSets(), buffer, expressionVisitor);
72+
deparseUpdateSetsClause(update);
7373

7474
if (update.getOutputClause() != null) {
7575
update.getOutputClause().appendTo(buffer);
@@ -88,10 +88,8 @@ public void deParse(Update update) {
8888
}
8989
}
9090

91-
if (update.getWhere() != null) {
92-
buffer.append(" WHERE ");
93-
update.getWhere().accept(expressionVisitor);
94-
}
91+
deparseWhereClause(update);
92+
9593
if (update.getOrderByElements() != null) {
9694
new OrderByDeParser(expressionVisitor, buffer).deParse(update.getOrderByElements());
9795
}
@@ -104,6 +102,18 @@ public void deParse(Update update) {
104102
}
105103
}
106104

105+
protected void deparseWhereClause(Update update) {
106+
if (update.getWhere() != null) {
107+
buffer.append(" WHERE ");
108+
update.getWhere().accept(expressionVisitor);
109+
}
110+
}
111+
112+
protected void deparseUpdateSetsClause(Update update) {
113+
deparseUpdateSets(update.getUpdateSets(), buffer, expressionVisitor);
114+
}
115+
116+
107117
public ExpressionVisitor getExpressionVisitor() {
108118
return expressionVisitor;
109119
}

0 commit comments

Comments
 (0)