Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,9 @@ private <S> Void visitPlainSelectBody(PlainSelect plainSelect, S context) {
if (plainSelect.getDistinct() != null) {
visitSelectItems(plainSelect.getDistinct().getOnSelectItems(), context);
}
if (plainSelect.getTop() != null) {
visitExpression(plainSelect.getTop().getExpression(), context);
}
visitTables(plainSelect.getIntoTables(), context);

visitSelectItems(plainSelect.getSelectItems(), context);
Expand Down Expand Up @@ -1464,16 +1467,23 @@ public <S> Void visit(Intersects intersects, S context) {

@Override
public <S> Void visit(AllColumns allColumns, S context) {

visitColumnsTransformers(allColumns, context);
return null;
}

@Override
public <S> Void visit(AllTableColumns allTableColumns, S context) {

visitColumnsTransformers(allTableColumns, context);
return null;
}

private <S> void visitColumnsTransformers(AllColumns allColumns, S context) {
for (ColumnsTransformer transformer : allColumns.getTransformers()) {
visitExpression(transformer.getApplyExpression(), context);
visitSelectItems(transformer.getReplaceItems(), context);
}
}

@Override
public <S> Void visit(FunctionAllColumns functionAllColumns, S context) {
functionAllColumns.getFunction().accept(this, context);
Expand Down Expand Up @@ -2411,6 +2421,9 @@ public <S> Void visit(SimilarToExpression expr, S context) {

@Override
public <S> Void visit(DeclareStatement declareStatement, S context) {
for (DeclareStatement.TypeDefExpr typeDefExpr : declareStatement.getTypeDefExprList()) {
visitExpression(typeDefExpr.getDefaultExpr(), context);
}
return null;
}

Expand Down
19 changes: 19 additions & 0 deletions src/test/java/net/sf/jsqlparser/util/TablesNamesFinderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1198,6 +1198,25 @@ void testUpdateOrderByLimitSubquery() throws JSQLParserException {
"MY_TABLE2");
}

@ParameterizedTest
@ValueSource(strings = {
"SELECT TOP ((SELECT count(*) FROM secrets)) a FROM t",
"SELECT TOP ((SELECT count(*) FROM secrets)) PERCENT a FROM t",
"SELECT * REPLACE ((SELECT max(pw) FROM secrets) AS a) FROM t",
"SELECT * EXCLUDE (b) REPLACE ((SELECT max(pw) FROM secrets) AS a) FROM t",
"SELECT t.* REPLACE ((SELECT max(pw) FROM secrets) AS a) FROM t"})
void testSubqueryInTopOrStarReplaceIsFound(String sqlStr) throws JSQLParserException {
assertThat(TablesNamesFinder.findTables(sqlStr)).containsExactlyInAnyOrder("t", "secrets");
}

@ParameterizedTest
@ValueSource(strings = {
"DECLARE @x INT = (SELECT max(pw) FROM secrets)",
"DECLARE @x INT = 1, @y VARCHAR(10) = (SELECT max(pw) FROM secrets)"})
void testSubqueryInDeclareIsFound(String sqlStr) throws JSQLParserException {
assertThat(TablesNamesFinder.findTables(sqlStr)).containsExactly("secrets");
}

@Test
void testManyDerivedNamesDoNotScaleQuadratically() {
// Every plain table reference used to be matched against the CTE aliases with
Expand Down
Loading