Skip to content

Commit 2897935

Browse files
committed
fixed NPE in ExpressionVisitorAdapter when SubSelect doesn't has withItemsList
1 parent 66e44c9 commit 2897935

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,10 @@ public void visit(Column column) {
213213
@Override
214214
public void visit(SubSelect subSelect) {
215215
if (selectVisitor != null) {
216-
for (WithItem item : subSelect.getWithItemsList()) {
217-
item.accept(selectVisitor);
216+
if (subSelect.getWithItemsList() != null) {
217+
for (WithItem item : subSelect.getWithItemsList()) {
218+
item.accept(selectVisitor);
219+
}
218220
}
219221
subSelect.getSelectBody().accept(selectVisitor);
220222
}

src/test/java/net/sf/jsqlparser/expression/ExpressionVisitorAdapterTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,15 @@
2727
import net.sf.jsqlparser.schema.Column;
2828
import net.sf.jsqlparser.statement.select.PlainSelect;
2929
import net.sf.jsqlparser.statement.select.Select;
30+
import net.sf.jsqlparser.statement.select.SelectVisitorAdapter;
3031
import org.junit.After;
3132
import org.junit.AfterClass;
3233
import static org.junit.Assert.assertNotNull;
3334
import static org.junit.Assert.assertNull;
3435
import static org.junit.Assert.assertTrue;
3536
import static org.junit.Assert.assertFalse;
3637
import static org.junit.Assert.assertEquals;
38+
import static org.junit.Assert.fail;
3739
import org.junit.Before;
3840
import org.junit.BeforeClass;
3941
import org.junit.Test;
@@ -169,4 +171,19 @@ public void visit(Column column) {
169171
assertEquals(1, columnList.size());
170172
assertEquals("bar", columnList.get(0));
171173
}
174+
175+
@Test
176+
public void testSubSelectExpressionProblem() throws JSQLParserException {
177+
Select select = (Select) CCJSqlParserUtil.parse( "SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t2.col2 = t1.col1)" );
178+
PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
179+
Expression where = plainSelect.getWhere();
180+
ExpressionVisitorAdapter adapter = new ExpressionVisitorAdapter();
181+
adapter.setSelectVisitor(new SelectVisitorAdapter());
182+
try {
183+
where.accept(adapter);
184+
} catch (NullPointerException npe){
185+
fail();
186+
}
187+
}
188+
172189
}

0 commit comments

Comments
 (0)