1818import net .sf .jsqlparser .expression .WindowDefinition ;
1919import net .sf .jsqlparser .schema .Column ;
2020import net .sf .jsqlparser .schema .Table ;
21+ import net .sf .jsqlparser .statement .select .Distinct ;
2122import net .sf .jsqlparser .statement .select .Fetch ;
2223import net .sf .jsqlparser .statement .select .First ;
2324import net .sf .jsqlparser .statement .select .FromItem ;
2728import net .sf .jsqlparser .statement .select .LateralView ;
2829import net .sf .jsqlparser .statement .select .Offset ;
2930import net .sf .jsqlparser .statement .select .OptimizeFor ;
31+ import net .sf .jsqlparser .statement .select .OrderByElement ;
3032import net .sf .jsqlparser .statement .select .ParenthesedFromItem ;
3133import net .sf .jsqlparser .statement .select .ParenthesedSelect ;
3234import 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 );
0 commit comments