Skip to content

Commit 9cdadc6

Browse files
authored
fix: traverse missing query and DML children in TablesNamesFinder (#2749)
Signed-off-by: 付典 <fudianchn@gmail.com>
1 parent bb55bb9 commit 9cdadc6

2 files changed

Lines changed: 335 additions & 70 deletions

File tree

‎src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java‎

Lines changed: 94 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -9,59 +9,15 @@
99
*/
1010
package net.sf.jsqlparser.util;
1111

12-
import net.sf.jsqlparser.statement.create.accessmethod.CreateAccessMethod;
13-
14-
import net.sf.jsqlparser.statement.create.fdw.CreateForeignDataWrapper;
15-
import net.sf.jsqlparser.statement.alter.AlterForeignDataWrapper;
16-
import net.sf.jsqlparser.statement.create.server.CreateServer;
17-
import net.sf.jsqlparser.statement.alter.AlterServer;
18-
import net.sf.jsqlparser.statement.create.usermapping.CreateUserMapping;
19-
import net.sf.jsqlparser.statement.alter.AlterUserMapping;
20-
import net.sf.jsqlparser.statement.create.textsearch.CreateTextSearchConfiguration;
21-
import net.sf.jsqlparser.statement.alter.AlterTextSearchConfiguration;
22-
import net.sf.jsqlparser.statement.create.rule.CreateRule;
23-
import net.sf.jsqlparser.statement.notify.NotifyStatement;
24-
import net.sf.jsqlparser.statement.create.collation.CreateCollation;
25-
import net.sf.jsqlparser.statement.alter.AlterCollation;
26-
import net.sf.jsqlparser.statement.alter.AlterPolicy;
27-
import net.sf.jsqlparser.statement.drop.DropPolicy;
28-
import net.sf.jsqlparser.statement.create.statistics.CreateStatistics;
29-
import net.sf.jsqlparser.statement.alter.AlterStatistics;
30-
import net.sf.jsqlparser.statement.alter.AlterRelation;
31-
import net.sf.jsqlparser.statement.alter.AlterTablespaceMove;
32-
import net.sf.jsqlparser.statement.alter.database.AlterDatabase;
33-
import net.sf.jsqlparser.statement.alter.schema.AlterSchema;
34-
import net.sf.jsqlparser.statement.select.MatchRecognize;
35-
import net.sf.jsqlparser.expression.RowPatternFunction;
36-
37-
import net.sf.jsqlparser.expression.AliasedExpression;
38-
39-
import net.sf.jsqlparser.statement.oracle.OracleBlock;
40-
import net.sf.jsqlparser.statement.oracle.OracleAssignment;
41-
import net.sf.jsqlparser.statement.oracle.OracleNullStatement;
42-
43-
import net.sf.jsqlparser.statement.role.CreateRole;
44-
import net.sf.jsqlparser.statement.role.AlterRole;
45-
import net.sf.jsqlparser.statement.grant.Revoke;
46-
import net.sf.jsqlparser.statement.grant.AlterDefaultPrivileges;
47-
import net.sf.jsqlparser.statement.create.type.CreateType;
48-
import net.sf.jsqlparser.statement.alter.AlterType;
49-
import net.sf.jsqlparser.statement.create.domain.CreateDomain;
50-
import net.sf.jsqlparser.statement.alter.AlterDomain;
51-
import net.sf.jsqlparser.statement.create.extension.CreateExtension;
52-
import net.sf.jsqlparser.statement.alter.AlterExtension;
53-
import net.sf.jsqlparser.statement.create.publication.CreatePublication;
54-
import net.sf.jsqlparser.statement.alter.AlterPublication;
55-
import net.sf.jsqlparser.statement.create.subscription.CreateSubscription;
56-
import net.sf.jsqlparser.statement.alter.AlterSubscription;
57-
5812
import java.util.ArrayList;
5913
import java.util.HashSet;
6014
import java.util.List;
6115
import java.util.Map;
6216
import java.util.Set;
6317
import net.sf.jsqlparser.JSQLParserException;
6418
import net.sf.jsqlparser.expression.*;
19+
import net.sf.jsqlparser.expression.AliasedExpression;
20+
import net.sf.jsqlparser.expression.RowPatternFunction;
6521
import net.sf.jsqlparser.expression.operators.arithmetic.Addition;
6622
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd;
6723
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseLeftShift;
@@ -95,9 +51,9 @@
9551
import net.sf.jsqlparser.expression.operators.relational.Intersects;
9652
import net.sf.jsqlparser.expression.operators.relational.IsBooleanExpression;
9753
import net.sf.jsqlparser.expression.operators.relational.IsDistinctExpression;
54+
import net.sf.jsqlparser.expression.operators.relational.IsJsonExpression;
9855
import net.sf.jsqlparser.expression.operators.relational.IsNullExpression;
9956
import net.sf.jsqlparser.expression.operators.relational.IsUnknownExpression;
100-
import net.sf.jsqlparser.expression.operators.relational.IsJsonExpression;
10157
import net.sf.jsqlparser.expression.operators.relational.JsonOperator;
10258
import net.sf.jsqlparser.expression.operators.relational.LikeExpression;
10359
import net.sf.jsqlparser.expression.operators.relational.Matches;
@@ -114,60 +70,105 @@
11470
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
11571
import net.sf.jsqlparser.schema.Column;
11672
import net.sf.jsqlparser.schema.Table;
73+
import net.sf.jsqlparser.statement.AssertStatement;
74+
import net.sf.jsqlparser.statement.AttachStatement;
11775
import net.sf.jsqlparser.statement.Block;
11876
import net.sf.jsqlparser.statement.Commit;
119-
import net.sf.jsqlparser.statement.StartTransaction;
120-
import net.sf.jsqlparser.statement.ReleaseSavepointStatement;
77+
import net.sf.jsqlparser.statement.ConnectStatement;
78+
import net.sf.jsqlparser.statement.CopyStatement;
12179
import net.sf.jsqlparser.statement.CreateFunctionalStatement;
80+
import net.sf.jsqlparser.statement.DeallocateStatement;
12281
import net.sf.jsqlparser.statement.DeclareStatement;
12382
import net.sf.jsqlparser.statement.DescribeStatement;
83+
import net.sf.jsqlparser.statement.DetachStatement;
84+
import net.sf.jsqlparser.statement.DisconnectStatement;
12485
import net.sf.jsqlparser.statement.DoStatement;
12586
import net.sf.jsqlparser.statement.ExplainStatement;
87+
import net.sf.jsqlparser.statement.ExtensionStatement;
12688
import net.sf.jsqlparser.statement.IfElseStatement;
12789
import net.sf.jsqlparser.statement.OutputClause;
90+
import net.sf.jsqlparser.statement.PragmaStatement;
91+
import net.sf.jsqlparser.statement.PrepareStatement;
12892
import net.sf.jsqlparser.statement.PurgeObjectType;
12993
import net.sf.jsqlparser.statement.PurgeStatement;
94+
import net.sf.jsqlparser.statement.ReleaseSavepointStatement;
13095
import net.sf.jsqlparser.statement.ResetStatement;
13196
import net.sf.jsqlparser.statement.ReturningClause;
13297
import net.sf.jsqlparser.statement.RollbackStatement;
13398
import net.sf.jsqlparser.statement.SavepointStatement;
13499
import net.sf.jsqlparser.statement.SessionStatement;
100+
import net.sf.jsqlparser.statement.SetIdentityInsertStatement;
135101
import net.sf.jsqlparser.statement.SetStatement;
136102
import net.sf.jsqlparser.statement.ShowColumnsStatement;
137103
import net.sf.jsqlparser.statement.ShowStatement;
104+
import net.sf.jsqlparser.statement.StartTransaction;
138105
import net.sf.jsqlparser.statement.Statement;
139106
import net.sf.jsqlparser.statement.StatementVisitor;
140107
import net.sf.jsqlparser.statement.Statements;
141108
import net.sf.jsqlparser.statement.UnsupportedStatement;
142109
import net.sf.jsqlparser.statement.UseStatement;
143-
import net.sf.jsqlparser.statement.SetIdentityInsertStatement;
144110
import net.sf.jsqlparser.statement.alter.Alter;
111+
import net.sf.jsqlparser.statement.alter.AlterCollation;
112+
import net.sf.jsqlparser.statement.alter.AlterDomain;
113+
import net.sf.jsqlparser.statement.alter.AlterExtension;
114+
import net.sf.jsqlparser.statement.alter.AlterForeignDataWrapper;
115+
import net.sf.jsqlparser.statement.alter.AlterPolicy;
116+
import net.sf.jsqlparser.statement.alter.AlterPublication;
117+
import net.sf.jsqlparser.statement.alter.AlterRelation;
118+
import net.sf.jsqlparser.statement.alter.AlterServer;
145119
import net.sf.jsqlparser.statement.alter.AlterSession;
120+
import net.sf.jsqlparser.statement.alter.AlterStatistics;
121+
import net.sf.jsqlparser.statement.alter.AlterSubscription;
146122
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
123+
import net.sf.jsqlparser.statement.alter.AlterTablespaceMove;
124+
import net.sf.jsqlparser.statement.alter.AlterTextSearchConfiguration;
125+
import net.sf.jsqlparser.statement.alter.AlterType;
126+
import net.sf.jsqlparser.statement.alter.AlterUserMapping;
147127
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
128+
import net.sf.jsqlparser.statement.alter.database.AlterDatabase;
129+
import net.sf.jsqlparser.statement.alter.schema.AlterSchema;
148130
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
149131
import net.sf.jsqlparser.statement.analyze.Analyze;
150132
import net.sf.jsqlparser.statement.comment.Comment;
133+
import net.sf.jsqlparser.statement.create.accessmethod.CreateAccessMethod;
134+
import net.sf.jsqlparser.statement.create.collation.CreateCollation;
151135
import net.sf.jsqlparser.statement.create.database.CreateDatabase;
136+
import net.sf.jsqlparser.statement.create.domain.CreateDomain;
152137
import net.sf.jsqlparser.statement.create.event.AlterEvent;
153138
import net.sf.jsqlparser.statement.create.event.CreateEvent;
139+
import net.sf.jsqlparser.statement.create.extension.CreateExtension;
140+
import net.sf.jsqlparser.statement.create.extension.CreateExtensionRepository;
141+
import net.sf.jsqlparser.statement.create.fdw.CreateForeignDataWrapper;
154142
import net.sf.jsqlparser.statement.create.index.CreateIndex;
143+
import net.sf.jsqlparser.statement.create.macro.CreateMacro;
155144
import net.sf.jsqlparser.statement.create.policy.CreatePolicy;
145+
import net.sf.jsqlparser.statement.create.publication.CreatePublication;
146+
import net.sf.jsqlparser.statement.create.rule.CreateRule;
156147
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
157148
import net.sf.jsqlparser.statement.create.sequence.CreateSequence;
149+
import net.sf.jsqlparser.statement.create.server.CreateServer;
150+
import net.sf.jsqlparser.statement.create.statistics.CreateStatistics;
151+
import net.sf.jsqlparser.statement.create.subscription.CreateSubscription;
158152
import net.sf.jsqlparser.statement.create.synonym.CreateSynonym;
159153
import net.sf.jsqlparser.statement.create.table.CreateTable;
154+
import net.sf.jsqlparser.statement.create.textsearch.CreateTextSearchConfiguration;
160155
import net.sf.jsqlparser.statement.create.trigger.CreateTrigger;
156+
import net.sf.jsqlparser.statement.create.type.CreateType;
161157
import net.sf.jsqlparser.statement.create.user.CreateUser;
158+
import net.sf.jsqlparser.statement.create.usermapping.CreateUserMapping;
162159
import net.sf.jsqlparser.statement.create.view.AlterView;
163160
import net.sf.jsqlparser.statement.create.view.CreateView;
164161
import net.sf.jsqlparser.statement.delete.Delete;
165162
import net.sf.jsqlparser.statement.delete.ParenthesedDelete;
166163
import net.sf.jsqlparser.statement.drop.Drop;
164+
import net.sf.jsqlparser.statement.drop.DropPolicy;
167165
import net.sf.jsqlparser.statement.execute.Execute;
168166
import net.sf.jsqlparser.statement.execute.ExecuteArgument;
169167
import net.sf.jsqlparser.statement.export.Export;
168+
import net.sf.jsqlparser.statement.export.ExportDataStatement;
169+
import net.sf.jsqlparser.statement.grant.AlterDefaultPrivileges;
170170
import net.sf.jsqlparser.statement.grant.Grant;
171+
import net.sf.jsqlparser.statement.grant.Revoke;
171172
import net.sf.jsqlparser.statement.imprt.Import;
172173
import net.sf.jsqlparser.statement.insert.Insert;
173174
import net.sf.jsqlparser.statement.insert.InsertBulk;
@@ -176,13 +177,18 @@
176177
import net.sf.jsqlparser.statement.insert.OracleMultiInsertBranch;
177178
import net.sf.jsqlparser.statement.insert.OracleMultiInsertClause;
178179
import net.sf.jsqlparser.statement.insert.ParenthesedInsert;
180+
import net.sf.jsqlparser.statement.load.LoadDataStatement;
179181
import net.sf.jsqlparser.statement.lock.LockStatement;
180182
import net.sf.jsqlparser.statement.merge.Merge;
181183
import net.sf.jsqlparser.statement.merge.MergeDelete;
182184
import net.sf.jsqlparser.statement.merge.MergeInsert;
183185
import net.sf.jsqlparser.statement.merge.MergeOperation;
184186
import net.sf.jsqlparser.statement.merge.MergeOperationVisitor;
185187
import net.sf.jsqlparser.statement.merge.MergeUpdate;
188+
import net.sf.jsqlparser.statement.notify.NotifyStatement;
189+
import net.sf.jsqlparser.statement.oracle.OracleAssignment;
190+
import net.sf.jsqlparser.statement.oracle.OracleBlock;
191+
import net.sf.jsqlparser.statement.oracle.OracleNullStatement;
186192
import net.sf.jsqlparser.statement.piped.AggregatePipeOperator;
187193
import net.sf.jsqlparser.statement.piped.AsPipeOperator;
188194
import net.sf.jsqlparser.statement.piped.CallPipeOperator;
@@ -204,6 +210,8 @@
204210
import net.sf.jsqlparser.statement.piped.WherePipeOperator;
205211
import net.sf.jsqlparser.statement.piped.WindowPipeOperator;
206212
import net.sf.jsqlparser.statement.refresh.RefreshMaterializedViewStatement;
213+
import net.sf.jsqlparser.statement.role.AlterRole;
214+
import net.sf.jsqlparser.statement.role.CreateRole;
207215
import net.sf.jsqlparser.statement.select.AllColumns;
208216
import net.sf.jsqlparser.statement.select.AllTableColumns;
209217
import net.sf.jsqlparser.statement.select.FromItem;
@@ -212,12 +220,12 @@
212220
import net.sf.jsqlparser.statement.select.Join;
213221
import net.sf.jsqlparser.statement.select.LateralSubSelect;
214222
import net.sf.jsqlparser.statement.select.LateralView;
223+
import net.sf.jsqlparser.statement.select.MatchRecognize;
215224
import net.sf.jsqlparser.statement.select.OrderByElement;
216225
import net.sf.jsqlparser.statement.select.ParenthesedFromItem;
217226
import net.sf.jsqlparser.statement.select.ParenthesedSelect;
218227
import net.sf.jsqlparser.statement.select.Pivot;
219228
import net.sf.jsqlparser.statement.select.PivotQuery;
220-
import net.sf.jsqlparser.statement.select.UnPivotQuery;
221229
import net.sf.jsqlparser.statement.select.PivotVisitor;
222230
import net.sf.jsqlparser.statement.select.PivotXml;
223231
import net.sf.jsqlparser.statement.select.PlainSelect;
@@ -227,8 +235,9 @@
227235
import net.sf.jsqlparser.statement.select.SelectVisitor;
228236
import net.sf.jsqlparser.statement.select.SetOperationList;
229237
import net.sf.jsqlparser.statement.select.TableFunction;
230-
import net.sf.jsqlparser.statement.select.UnPivot;
231238
import net.sf.jsqlparser.statement.select.TableStatement;
239+
import net.sf.jsqlparser.statement.select.UnPivot;
240+
import net.sf.jsqlparser.statement.select.UnPivotQuery;
232241
import net.sf.jsqlparser.statement.select.Values;
233242
import net.sf.jsqlparser.statement.select.WithItem;
234243
import net.sf.jsqlparser.statement.show.ShowIndexStatement;
@@ -238,20 +247,6 @@
238247
import net.sf.jsqlparser.statement.update.Update;
239248
import net.sf.jsqlparser.statement.update.UpdateSet;
240249
import net.sf.jsqlparser.statement.upsert.Upsert;
241-
import net.sf.jsqlparser.statement.PragmaStatement;
242-
import net.sf.jsqlparser.statement.ExtensionStatement;
243-
import net.sf.jsqlparser.statement.AttachStatement;
244-
import net.sf.jsqlparser.statement.DetachStatement;
245-
import net.sf.jsqlparser.statement.ConnectStatement;
246-
import net.sf.jsqlparser.statement.DisconnectStatement;
247-
import net.sf.jsqlparser.statement.PrepareStatement;
248-
import net.sf.jsqlparser.statement.DeallocateStatement;
249-
import net.sf.jsqlparser.statement.CopyStatement;
250-
import net.sf.jsqlparser.statement.create.macro.CreateMacro;
251-
import net.sf.jsqlparser.statement.create.extension.CreateExtensionRepository;
252-
import net.sf.jsqlparser.statement.AssertStatement;
253-
import net.sf.jsqlparser.statement.export.ExportDataStatement;
254-
import net.sf.jsqlparser.statement.load.LoadDataStatement;
255250

256251

257252
/**
@@ -649,6 +644,9 @@ public <S> Void visit(Column tableColumn, S context) {
649644
MatchRecognize.normalizeVariableName(tableColumn.getTable().getName()))) {
650645
visit(tableColumn.getTable(), context);
651646
}
647+
if (tableColumn.getArrayConstructor() != null) {
648+
tableColumn.getArrayConstructor().accept(this, context);
649+
}
652650
return null;
653651
}
654652

@@ -686,6 +684,10 @@ public <S> Void visit(Function function, S context) {
686684
if (exprList != null) {
687685
visit(exprList, context);
688686
}
687+
exprList = function.getNamedParameters();
688+
if (exprList != null) {
689+
visit(exprList, context);
690+
}
689691
return null;
690692
}
691693

@@ -1020,6 +1022,9 @@ public <S> Void visit(AnalyticExpression analytic, S context) {
10201022
if (analytic.getFilterExpression() != null) {
10211023
analytic.getFilterExpression().accept(this, context);
10221024
}
1025+
if (analytic.getPartitionExpressionList() != null) {
1026+
visit(analytic.getPartitionExpressionList(), context);
1027+
}
10231028
if (analytic.getFuncOrderBy() != null) {
10241029
for (OrderByElement element : analytic.getFuncOrderBy()) {
10251030
element.getExpression().accept(this, context);
@@ -1126,6 +1131,12 @@ public <S> Void visit(FromQuery fromQuery, S context) {
11261131
if (fromQuery.getFromItem() != null) {
11271132
fromQuery.getFromItem().accept(this, context);
11281133
}
1134+
if (fromQuery.getLateralViews() != null) {
1135+
for (LateralView lateralView : fromQuery.getLateralViews()) {
1136+
lateralView.getGeneratorFunction().accept(this, context);
1137+
}
1138+
}
1139+
visitJoins(fromQuery.getJoins(), context);
11291140
for (PipeOperator pipeOperator : fromQuery.getPipeOperators()) {
11301141
pipeOperator.accept(this, null);
11311142
}
@@ -1578,9 +1589,17 @@ private <S> void visitInsertAction(InsertConflictAction action, S context) {
15781589

15791590
@Override
15801591
public <S> Void visitOutputClause(OutputClause outputClause, S context) {
1581-
if (outputClause != null && outputClause.getSelectItemList() != null) {
1582-
for (SelectItem<?> selectItem : outputClause.getSelectItemList()) {
1583-
selectItem.accept(this, context);
1592+
if (outputClause != null) {
1593+
if (outputClause.getSelectItemList() != null) {
1594+
for (SelectItem<?> selectItem : outputClause.getSelectItemList()) {
1595+
selectItem.accept(this, context);
1596+
}
1597+
}
1598+
if (outputClause.getOutputTable() != null) {
1599+
visit(outputClause.getOutputTable(), context);
1600+
}
1601+
if (outputClause.getTableVariable() != null) {
1602+
outputClause.getTableVariable().accept(this, context);
15841603
}
15851604
}
15861605
return null;
@@ -1902,6 +1921,7 @@ public <S> Void visit(Merge merge, S context) {
19021921
operation.accept(this, context);
19031922
}
19041923
}
1924+
visitOutputClause(merge.getOutputClause(), context);
19051925
visitReturningClause(merge.getReturningClause(), context);
19061926
return null;
19071927
}
@@ -2032,6 +2052,9 @@ public <S> Void visit(Upsert upsert, S context) {
20322052
if (upsert.getSelect() != null) {
20332053
visit(upsert.getSelect(), context);
20342054
}
2055+
if (upsert.getDuplicateAction() != null) {
2056+
visitInsertAction(upsert.getDuplicateAction(), context);
2057+
}
20352058
return null;
20362059
}
20372060

@@ -2207,7 +2230,7 @@ public void visit(Grant grant) {
22072230
@Override
22082231
public <S> Void visit(ArrayExpression array, S context) {
22092232
array.getObjExpression().accept(this, context);
2210-
if (array.getStartIndexExpression() != null) {
2233+
if (array.getIndexExpression() != null) {
22112234
array.getIndexExpression().accept(this, context);
22122235
}
22132236
if (array.getStartIndexExpression() != null) {
@@ -2520,6 +2543,7 @@ public <S> Void visit(KeyExpression keyExpression, S context) {
25202543

25212544
@Override
25222545
public <S> Void visit(IfElseStatement ifElseStatement, S context) {
2546+
ifElseStatement.getCondition().accept(this, context);
25232547
ifElseStatement.getIfStatement().accept(this, context);
25242548
if (ifElseStatement.getElseStatement() != null) {
25252549
ifElseStatement.getElseStatement().accept(this, context);

0 commit comments

Comments
 (0)