Skip to content

Commit e80ea68

Browse files
committed
fixes #600
1 parent c28a549 commit e80ea68

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

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

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@
135135

136136
/**
137137
* Find all used tables within an select statement.
138+
*
139+
* Override extractTableName method to modify the extracted table names (e.g. without schema).
138140
*/
139141
public class TablesNamesFinder implements SelectVisitor, FromItemVisitor, ExpressionVisitor, ItemsListVisitor, SelectItemVisitor, StatementVisitor {
140142

@@ -218,9 +220,18 @@ public void visit(PlainSelect plainSelect) {
218220
}
219221
}
220222

223+
/**
224+
* Override to adapt the tableName generation (e.g. with / without schema).
225+
* @param table
226+
* @return
227+
*/
228+
protected String extractTableName(Table table) {
229+
return table.getFullyQualifiedName();
230+
}
231+
221232
@Override
222233
public void visit(Table tableName) {
223-
String tableWholeName = tableName.getFullyQualifiedName();
234+
String tableWholeName = extractTableName(tableName);
224235
if (!otherItemNames.contains(tableWholeName.toLowerCase())
225236
&& !tables.contains(tableWholeName)) {
226237
tables.add(tableWholeName);
@@ -618,7 +629,7 @@ public void visit(ValueListExpression valueList) {
618629

619630
@Override
620631
public void visit(Delete delete) {
621-
tables.add(delete.getTable().getName());
632+
visit(delete.getTable());
622633

623634
if (delete.getJoins() != null) {
624635
for (Join join : delete.getJoins()) {
@@ -634,7 +645,7 @@ public void visit(Delete delete) {
634645
@Override
635646
public void visit(Update update) {
636647
for (Table table : update.getTables()) {
637-
tables.add(table.getName());
648+
visit(table);
638649
}
639650
if (update.getExpressions() != null) {
640651
for (Expression expression : update.getExpressions()) {
@@ -659,7 +670,7 @@ public void visit(Update update) {
659670

660671
@Override
661672
public void visit(Insert insert) {
662-
tables.add(insert.getTable().getName());
673+
visit(insert.getTable());
663674
if (insert.getItemsList() != null) {
664675
insert.getItemsList().accept(this);
665676
}
@@ -670,7 +681,7 @@ public void visit(Insert insert) {
670681

671682
@Override
672683
public void visit(Replace replace) {
673-
tables.add(replace.getTable().getName());
684+
visit(replace.getTable());
674685
if (replace.getExpressions() != null) {
675686
for (Expression expression : replace.getExpressions()) {
676687
expression.accept(this);
@@ -698,7 +709,7 @@ public void visit(CreateIndex createIndex) {
698709

699710
@Override
700711
public void visit(CreateTable create) {
701-
tables.add(create.getTable().getFullyQualifiedName());
712+
visit(create.getTable());
702713
if (create.getSelect() != null) {
703714
create.getSelect().accept(this);
704715
}
@@ -743,7 +754,7 @@ public void visit(HexValue hexValue) {
743754

744755
@Override
745756
public void visit(Merge merge) {
746-
tables.add(merge.getTable().getName());
757+
visit(merge.getTable());
747758
if (merge.getUsingTable() != null) {
748759
merge.getUsingTable().accept(this);
749760
} else if (merge.getUsingSelect() != null) {
@@ -780,7 +791,7 @@ public void visit(Commit commit) {
780791

781792
@Override
782793
public void visit(Upsert upsert) {
783-
tables.add(upsert.getTable().getName());
794+
visit(upsert.getTable());
784795
if (upsert.getItemsList() != null) {
785796
upsert.getItemsList().accept(this);
786797
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,4 +506,13 @@ public void testMySQLValueListExpression() throws JSQLParserException {
506506
assertTrue(tableList.contains("TABLE1"));
507507
}
508508

509+
@Test
510+
public void testSkippedSchemaIssue600() throws JSQLParserException {
511+
String sql = "delete from schema.table where id = 1";
512+
TablesNamesFinder finder = new TablesNamesFinder();
513+
List<String> tableList = finder.getTableList(CCJSqlParserUtil.parse(sql));
514+
assertEquals(1, tableList.size());
515+
assertTrue(tableList.contains("schema.table"));
516+
}
517+
509518
}

0 commit comments

Comments
 (0)