154154import net .sf .jsqlparser .statement .select .FunctionAllColumns ;
155155import net .sf .jsqlparser .statement .select .Join ;
156156import net .sf .jsqlparser .statement .select .LateralSubSelect ;
157+ import net .sf .jsqlparser .statement .select .LateralView ;
157158import net .sf .jsqlparser .statement .select .OrderByElement ;
158159import net .sf .jsqlparser .statement .select .ParenthesedFromItem ;
159160import net .sf .jsqlparser .statement .select .ParenthesedSelect ;
161+ import net .sf .jsqlparser .statement .select .Pivot ;
160162import net .sf .jsqlparser .statement .select .PivotQuery ;
163+ import net .sf .jsqlparser .statement .select .PivotVisitor ;
164+ import net .sf .jsqlparser .statement .select .PivotXml ;
161165import net .sf .jsqlparser .statement .select .PlainSelect ;
162166import net .sf .jsqlparser .statement .select .Select ;
163167import net .sf .jsqlparser .statement .select .SelectItem ;
164168import net .sf .jsqlparser .statement .select .SelectItemVisitor ;
165169import net .sf .jsqlparser .statement .select .SelectVisitor ;
166170import net .sf .jsqlparser .statement .select .SetOperationList ;
167171import net .sf .jsqlparser .statement .select .TableFunction ;
172+ import net .sf .jsqlparser .statement .select .UnPivot ;
168173import net .sf .jsqlparser .statement .select .TableStatement ;
169174import net .sf .jsqlparser .statement .select .Values ;
170175import net .sf .jsqlparser .statement .select .WithItem ;
187192public class TablesNamesFinder <Void >
188193 implements SelectVisitor <Void >, FromItemVisitor <Void >, ExpressionVisitor <Void >,
189194 SelectItemVisitor <Void >, StatementVisitor <Void >, MergeOperationVisitor <Void >,
190- PipeOperatorVisitor <Void , Void > {
195+ PipeOperatorVisitor <Void , Void >, PivotVisitor < Void > {
191196
192197 private Set <String > tables ;
193198 private boolean allowColumnProcessing = false ;
@@ -330,6 +335,20 @@ public <S> Void visit(ParenthesedSelect select, S context) {
330335 }
331336 }
332337 select .getSelect ().accept ((SelectVisitor <?>) this , context );
338+ visitOrderBy (select .getOrderByElements (), context );
339+ if (select .getPivot () != null ) {
340+ select .getPivot ().accept (this , context );
341+ }
342+ if (select .getUnPivot () != null ) {
343+ select .getUnPivot ().accept (this , context );
344+ }
345+ visitLimit (select .getLimit (), context );
346+ if (select .getOffset () != null ) {
347+ select .getOffset ().getOffset ().accept (this , context );
348+ }
349+ if (select .getFetch () != null ) {
350+ select .getFetch ().getExpression ().accept (this , context );
351+ }
333352 return null ;
334353 }
335354
@@ -346,6 +365,11 @@ public <S> Void visit(PlainSelect plainSelect, S context) {
346365 withItem .accept ((SelectVisitor <?>) this , context );
347366 }
348367 }
368+ if (plainSelect .getDistinct () != null ) {
369+ visitSelectItems (plainSelect .getDistinct ().getOnSelectItems (), context );
370+ }
371+ visitTables (plainSelect .getIntoTables (), context );
372+
349373 if (plainSelect .getSelectItems () != null ) {
350374 for (SelectItem <?> item : plainSelect .getSelectItems ()) {
351375 item .accept (this , context );
@@ -356,6 +380,12 @@ public <S> Void visit(PlainSelect plainSelect, S context) {
356380 plainSelect .getFromItem ().accept (this , context );
357381 }
358382
383+ if (plainSelect .getLateralViews () != null ) {
384+ for (LateralView lateralView : plainSelect .getLateralViews ()) {
385+ lateralView .getGeneratorFunction ().accept (this , context );
386+ }
387+ }
388+
359389 visitJoins (plainSelect .getJoins (), context );
360390 if (plainSelect .getPreWhere () != null ) {
361391 plainSelect .getPreWhere ().accept (this , context );
@@ -364,13 +394,46 @@ public <S> Void visit(PlainSelect plainSelect, S context) {
364394 plainSelect .getWhere ().accept (this , context );
365395 }
366396
397+ visitPreferringClause (plainSelect .getPreferringClause (), context );
398+ visit (plainSelect .getGroupBy (), context );
399+
367400 if (plainSelect .getHaving () != null ) {
368401 plainSelect .getHaving ().accept (this , context );
369402 }
370403
404+ if (plainSelect .getQualify () != null ) {
405+ plainSelect .getQualify ().accept (this , context );
406+ }
407+
371408 if (plainSelect .getOracleHierarchical () != null ) {
372409 plainSelect .getOracleHierarchical ().accept (this , context );
373410 }
411+
412+ if (plainSelect .getWindowDefinitions () != null ) {
413+ for (WindowDefinition windowDefinition : plainSelect .getWindowDefinitions ()) {
414+ visitExpressions (windowDefinition .getPartitionExpressionList (), context );
415+ visitOrderBy (windowDefinition .getOrderByElements (), context );
416+ }
417+ }
418+
419+ if (plainSelect .getPivot () != null ) {
420+ plainSelect .getPivot ().accept (this , context );
421+ }
422+ if (plainSelect .getUnPivot () != null ) {
423+ plainSelect .getUnPivot ().accept (this , context );
424+ }
425+
426+ visitOrderBy (plainSelect .getOrderByElements (), context );
427+ visitLimit (plainSelect .getLimit (), context );
428+ visitLimit (plainSelect .getLimitBy (), context );
429+ if (plainSelect .getOffset () != null ) {
430+ plainSelect .getOffset ().getOffset ().accept (this , context );
431+ }
432+ if (plainSelect .getFetch () != null ) {
433+ plainSelect .getFetch ().getExpression ().accept (this , context );
434+ }
435+ visitUpdateSets (plainSelect .getSettings (), context );
436+ visitFromItem (plainSelect .getIntoTempTable (), context );
374437 return null ;
375438 }
376439
@@ -431,6 +494,12 @@ public <S> Void visit(Table table, S context) {
431494 if (!otherItemNames .contains (tableWholeName )) {
432495 tables .add (tableWholeName );
433496 }
497+ if (table .getPivot () != null ) {
498+ table .getPivot ().accept (this , context );
499+ }
500+ if (table .getUnPivot () != null ) {
501+ table .getUnPivot ().accept (this , context );
502+ }
434503 return null ;
435504 }
436505
@@ -883,6 +952,14 @@ public <S> Void visit(SetOperationList list, S context) {
883952 for (Select selectBody : list .getSelects ()) {
884953 selectBody .accept ((SelectVisitor <?>) this , context );
885954 }
955+ visitOrderBy (list .getOrderByElements (), context );
956+ visitLimit (list .getLimit (), context );
957+ if (list .getOffset () != null ) {
958+ list .getOffset ().getOffset ().accept (this , context );
959+ }
960+ if (list .getFetch () != null ) {
961+ list .getFetch ().getExpression ().accept (this , context );
962+ }
886963 return null ;
887964 }
888965
@@ -941,6 +1018,36 @@ public <S> Void visit(FromQuery fromQuery, S context) {
9411018 return null ;
9421019 }
9431020
1021+ @ Override
1022+ public <S > Void visit (Pivot pivot , S context ) {
1023+ visitSelectItems (pivot .getFunctionItems (), context );
1024+ visitExpressions (pivot .getForColumns (), context );
1025+ visitSelectItems (pivot .getSingleInItems (), context );
1026+ visitSelectItems (pivot .getMultiInItems (), context );
1027+ return null ;
1028+ }
1029+
1030+ @ Override
1031+ public <S > Void visit (PivotXml pivotXml , S context ) {
1032+ visit ((Pivot ) pivotXml , context );
1033+ if (pivotXml .getInSelect () != null ) {
1034+ pivotXml .getInSelect ().accept ((SelectVisitor <?>) this , context );
1035+ }
1036+ return null ;
1037+ }
1038+
1039+ @ Override
1040+ public <S > Void visit (UnPivot unpivot , S context ) {
1041+ for (Column column : unpivot .getUnPivotClause ()) {
1042+ column .accept (this , context );
1043+ }
1044+ for (Column column : unpivot .getUnPivotForClause ()) {
1045+ column .accept (this , context );
1046+ }
1047+ visitSelectItems (unpivot .getUnPivotInClause (), context );
1048+ return null ;
1049+ }
1050+
9441051 @ Override
9451052 public Void visit (AggregatePipeOperator aggregate , Void context ) {
9461053 for (SelectItem <?> selectItem : aggregate .getSelectItems ()) {
@@ -1790,6 +1897,14 @@ public void visit(Comment comment) {
17901897 @ Override
17911898 public <S > Void visit (Values values , S context ) {
17921899 values .getExpressions ().accept (this , context );
1900+ visitOrderBy (values .getOrderByElements (), context );
1901+ visitLimit (values .getLimit (), context );
1902+ if (values .getOffset () != null ) {
1903+ values .getOffset ().getOffset ().accept (this , context );
1904+ }
1905+ if (values .getFetch () != null ) {
1906+ values .getFetch ().getExpression ().accept (this , context );
1907+ }
17931908 return null ;
17941909 }
17951910
0 commit comments