Skip to content

Commit a5031b4

Browse files
committed
fixes #84
1 parent 92efe5b commit a5031b4

File tree

2 files changed

+47
-7
lines changed

2 files changed

+47
-7
lines changed

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

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
/**
4141
* Find all used tables within an select statement.
4242
*/
43-
public class TablesNamesFinder implements SelectVisitor, FromItemVisitor, ExpressionVisitor, ItemsListVisitor {
43+
public class TablesNamesFinder implements SelectVisitor, FromItemVisitor, ExpressionVisitor, ItemsListVisitor, SelectItemVisitor {
4444

4545
private List<String> tables;
4646
/**
@@ -163,6 +163,12 @@ public void visit(WithItem withItem) {
163163

164164
@Override
165165
public void visit(PlainSelect plainSelect) {
166+
if (plainSelect.getSelectItems() != null) {
167+
for (SelectItem item : plainSelect.getSelectItems()) {
168+
item.accept(this);
169+
}
170+
}
171+
166172
plainSelect.getFromItem().accept(this);
167173

168174
if (plainSelect.getJoins() != null) {
@@ -173,7 +179,9 @@ public void visit(PlainSelect plainSelect) {
173179
if (plainSelect.getWhere() != null) {
174180
plainSelect.getWhere().accept(this);
175181
}
176-
182+
if (plainSelect.getOracleHierarchical() != null) {
183+
plainSelect.getOracleHierarchical().accept(this);
184+
}
177185
}
178186

179187
@Override
@@ -455,6 +463,13 @@ public void visit(JdbcNamedParameter jdbcNamedParameter) {
455463

456464
@Override
457465
public void visit(OracleHierarchicalExpression oexpr) {
466+
if (oexpr.getStartExpression() != null) {
467+
oexpr.getStartExpression().accept(this);
468+
}
469+
470+
if (oexpr.getConnectExpression() != null) {
471+
oexpr.getConnectExpression().accept(this);
472+
}
458473
}
459474

460475
@Override
@@ -463,13 +478,24 @@ public void visit(RegExpMatchOperator rexpr) {
463478
}
464479

465480
@Override
466-
public void visit(RegExpMySQLOperator rexpr) {
467-
visitBinaryExpression(rexpr);
468-
}
469-
481+
public void visit(RegExpMySQLOperator rexpr) {
482+
visitBinaryExpression(rexpr);
483+
}
484+
470485
@Override
471486
public void visit(JsonExpression jsonExpr) {
472487
}
473488

474-
489+
@Override
490+
public void visit(AllColumns allColumns) {
491+
}
492+
493+
@Override
494+
public void visit(AllTableColumns allTableColumns) {
495+
}
496+
497+
@Override
498+
public void visit(SelectExpressionItem item) {
499+
item.getExpression().accept(this);
500+
}
475501
}

src/test/java/net/sf/jsqlparser/util/TablesNamesFinderTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,20 @@ public void testGetTableListFromUpdate3() throws Exception {
264264
assertTrue(tableList.contains("MY_TABLE2"));
265265
assertTrue(tableList.contains("MY_TABLE3"));
266266
}
267+
268+
@Test
269+
public void testCmplxSelectProblem() throws Exception {
270+
String sql = "SELECT cid, (SELECT name FROM tbl0 WHERE tbl0.id = cid) AS name, original_id AS bc_id FROM tbl WHERE crid = ? AND user_id is null START WITH ID = (SELECT original_id FROM tbl2 WHERE USER_ID = ?) CONNECT BY prior parent_id = id AND rownum = 1";
271+
net.sf.jsqlparser.statement.Statement statement = pm.parse(new StringReader(sql));
272+
273+
Select selectStatement = (Select) statement;
274+
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
275+
List<String> tableList = tablesNamesFinder.getTableList(selectStatement);
276+
assertEquals(3, tableList.size());
277+
assertTrue(tableList.contains("tbl0"));
278+
assertTrue(tableList.contains("tbl"));
279+
assertTrue(tableList.contains("tbl2"));
280+
}
267281

268282
private String getLine(BufferedReader in) throws Exception {
269283
return CCJSqlParserManagerTest.getLine(in);

0 commit comments

Comments
 (0)