Skip to content

Commit 8f4cc66

Browse files
committed
Merge origin/master
2 parents 07a14dc + c1289c3 commit 8f4cc66

File tree

4 files changed

+58
-12
lines changed

4 files changed

+58
-12
lines changed

src/main/java/net/sf/jsqlparser/expression/CaseExpression.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
public class CaseExpression implements Expression {
6060

6161
private Expression switchExpression;
62-
private List<Expression> whenClauses;
62+
private List<WhenClause> whenClauses;
6363
private Expression elseExpression;
6464

6565
@Override
@@ -98,14 +98,14 @@ public void setElseExpression(Expression elseExpression) {
9898
/**
9999
* @return Returns the whenClauses.
100100
*/
101-
public List<Expression> getWhenClauses() {
101+
public List<WhenClause> getWhenClauses() {
102102
return whenClauses;
103103
}
104104

105105
/**
106106
* @param whenClauses The whenClauses to set.
107107
*/
108-
public void setWhenClauses(List<Expression> whenClauses) {
108+
public void setWhenClauses(List<WhenClause> whenClauses) {
109109
this.whenClauses = whenClauses;
110110
}
111111

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

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ public class TablesNamesFinder implements SelectVisitor, FromItemVisitor, Expres
137137
private static final String NOT_SUPPORTED_YET = "Not supported yet.";
138138
private List<String> tables;
139139
/**
140-
* There are special names, that are not table names but are parsed as tables. These names are
141-
* collected here and are not included in the tables - names anymore.
140+
* There are special names, that are not table names but are parsed as tables. These names are collected here and
141+
* are not included in the tables - names anymore.
142142
*/
143143
private List<String> otherItemNames;
144144

@@ -395,6 +395,17 @@ public void visit(TimeValue timeValue) {
395395
*/
396396
@Override
397397
public void visit(CaseExpression caseExpression) {
398+
if (caseExpression.getSwitchExpression() != null) {
399+
caseExpression.getSwitchExpression().accept(this);
400+
}
401+
if (caseExpression.getWhenClauses() != null) {
402+
for (WhenClause when : caseExpression.getWhenClauses()) {
403+
when.accept(this);
404+
}
405+
}
406+
if (caseExpression.getElseExpression()!=null) {
407+
caseExpression.getElseExpression().accept(this);
408+
}
398409
}
399410

400411
/*
@@ -404,6 +415,12 @@ public void visit(CaseExpression caseExpression) {
404415
*/
405416
@Override
406417
public void visit(WhenClause whenClause) {
418+
if (whenClause.getWhenExpression() != null) {
419+
whenClause.getWhenExpression().accept(this);
420+
}
421+
if (whenClause.getThenExpression() != null) {
422+
whenClause.getThenExpression().accept(this);
423+
}
407424
}
408425

409426
@Override
@@ -716,10 +733,10 @@ public void visit(TimeKeyExpression timeKeyExpression) {
716733
public void visit(DateTimeLiteralExpression literal) {
717734

718735
}
719-
736+
720737
@Override
721738
public void visit(Commit commit) {
722-
739+
723740
}
724741

725742
@Override

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2631,7 +2631,7 @@ Expression CaseWhenExpression() #CaseWhenExpression:
26312631
CaseExpression caseExp = new CaseExpression();
26322632
Expression switchExp = null;
26332633
WhenClause clause;
2634-
List whenClauses = new ArrayList();
2634+
List<WhenClause> whenClauses = new ArrayList<WhenClause>();
26352635
Expression elseExp = null;
26362636
}
26372637
{
@@ -3471,4 +3471,4 @@ Commit Commit():
34713471
{
34723472
return commit;
34733473
}
3474-
}
3474+
}

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

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ public void testGetTableListForMergeUsingQuery() throws Exception {
415415
assertEquals("employees", (String) tableList.get(0));
416416
assertEquals("hr_records", (String) tableList.get(1));
417417
}
418-
418+
419419
@Test
420420
public void testUpsertValues() throws Exception {
421421
String sql = "UPSERT INTO MY_TABLE1 (a) VALUES (5)";
@@ -427,7 +427,7 @@ public void testUpsertValues() throws Exception {
427427
assertEquals(1, tableList.size());
428428
assertTrue(tableList.contains("MY_TABLE1"));
429429
}
430-
430+
431431
@Test
432432
public void testUpsertSelect() throws Exception {
433433
String sql = "UPSERT INTO mytable (mycolumn) SELECT mycolumn FROM mytable2";
@@ -440,5 +440,34 @@ public void testUpsertSelect() throws Exception {
440440
assertTrue(tableList.contains("mytable"));
441441
assertTrue(tableList.contains("mytable2"));
442442
}
443-
443+
444+
@Test
445+
public void testCaseWhenSubSelect() throws JSQLParserException {
446+
String sql = "select case (select count(*) from mytable2) when 1 then 0 else -1 end";
447+
Statement stmt = CCJSqlParserUtil.parse(sql);
448+
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
449+
List<String> tableList = tablesNamesFinder.getTableList(stmt);
450+
assertEquals(1, tableList.size());
451+
assertTrue(tableList.contains("mytable2"));
452+
}
453+
454+
@Test
455+
public void testCaseWhenSubSelect2() throws JSQLParserException {
456+
String sql = "select case when (select count(*) from mytable2) = 1 then 0 else -1 end";
457+
Statement stmt = CCJSqlParserUtil.parse(sql);
458+
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
459+
List<String> tableList = tablesNamesFinder.getTableList(stmt);
460+
assertEquals(1, tableList.size());
461+
assertTrue(tableList.contains("mytable2"));
462+
}
463+
464+
@Test
465+
public void testCaseWhenSubSelect3() throws JSQLParserException {
466+
String sql = "select case when 1 = 2 then 0 else (select count(*) from mytable2) end";
467+
Statement stmt = CCJSqlParserUtil.parse(sql);
468+
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
469+
List<String> tableList = tablesNamesFinder.getTableList(stmt);
470+
assertEquals(1, tableList.size());
471+
assertTrue(tableList.contains("mytable2"));
472+
}
444473
}

0 commit comments

Comments
 (0)