Skip to content

Commit cb0e0b7

Browse files
committed
integrated some additional AST - Nodes for InExpression and SimpleExpressionList
1 parent 4e0a732 commit cb0e0b7

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2243,7 +2243,7 @@ Expression SQLCondition():
22432243
{ return result; }
22442244
}
22452245

2246-
Expression InExpression() :
2246+
Expression InExpression() #InExpression :
22472247
{
22482248
InExpression result = new InExpression();
22492249
ItemsList leftItemsList = null;
@@ -2265,6 +2265,7 @@ Expression InExpression() :
22652265
[<K_NOT> { result.setNot(true); } ] <K_IN> "(" (LOOKAHEAD(3) rightItemsList=SubSelect() | rightItemsList=SimpleExpressionList() ) ")"
22662266
{
22672267
result.setRightItemsList(rightItemsList);
2268+
linkAST(result,jjtThis);
22682269
return result;
22692270
}
22702271
}
@@ -2349,7 +2350,7 @@ ExpressionList SQLExpressionList():
23492350
}
23502351
}
23512352

2352-
ExpressionList SimpleExpressionList():
2353+
ExpressionList SimpleExpressionList() #ExpressionList:
23532354
{
23542355
ExpressionList retval = new ExpressionList();
23552356
List<Expression> expressions = new ArrayList<Expression>();

src/test/java/net/sf/jsqlparser/statement/select/SelectASTTest.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
import net.sf.jsqlparser.parser.CCJSqlParserDefaultVisitor;
2323
import net.sf.jsqlparser.parser.CCJSqlParserTreeConstants;
2424
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
25-
import net.sf.jsqlparser.schema.Column;
26-
import net.sf.jsqlparser.parser.Token;
2725
import net.sf.jsqlparser.parser.SimpleNode;
26+
import net.sf.jsqlparser.parser.Token;
27+
import net.sf.jsqlparser.schema.Column;
2828
import net.sf.jsqlparser.statement.Statement;
2929
import static org.junit.Assert.assertEquals;
3030
import static org.junit.Assert.assertNotNull;
@@ -94,7 +94,7 @@ public Object visit(SimpleNode node, Object data) {
9494
assertEquals(34, subSelectStart.beginColumn);
9595
assertEquals(62, subSelectEnd.endColumn);
9696
}
97-
97+
9898
@Test
9999
public void testSelectASTColumnLF() throws JSQLParserException {
100100
String sql = "SELECT a, b FROM mytable \n order by b, c";
@@ -117,7 +117,7 @@ public void testSelectASTColumnLF() throws JSQLParserException {
117117
}
118118
assertEquals("SELECT *, * FROM mytable \n order by #, #", b.toString());
119119
}
120-
120+
121121
@Test
122122
public void testSelectASTCommentLF() throws JSQLParserException {
123123
String sql = "SELECT /* testcomment */ \n a, b FROM -- testcomment2 \n mytable \n order by b, c";
@@ -140,7 +140,7 @@ public void testSelectASTCommentLF() throws JSQLParserException {
140140
}
141141
assertEquals("SELECT /* testcomment */ \n *, * FROM -- testcomment2 \n mytable \n order by #, #", b.toString());
142142
}
143-
143+
144144
@Test
145145
public void testSelectASTCommentCRLF() throws JSQLParserException {
146146
String sql = "SELECT /* testcomment */ \r\n a, b FROM -- testcomment2 \r\n mytable \r\n order by b, c";
@@ -163,4 +163,29 @@ public void testSelectASTCommentCRLF() throws JSQLParserException {
163163
}
164164
assertEquals("SELECT /* testcomment */ \r\n *, * FROM -- testcomment2 \r\n mytable \r\n order by #, #", b.toString());
165165
}
166+
167+
@Test
168+
public void testDetectInExpressions() throws JSQLParserException {
169+
String sql = "SELECT * FROM mytable WHERE a IN (1,2,3,4,5,6,7)";
170+
SimpleNode node = (SimpleNode) CCJSqlParserUtil.parseAST(sql);
171+
node.dump("*");
172+
assertEquals(CCJSqlParserTreeConstants.JJTSTATEMENT, node.getId());
173+
node.jjtAccept(new CCJSqlParserDefaultVisitor() {
174+
@Override
175+
public Object visit(SimpleNode node, Object data) {
176+
if (node.getId() == CCJSqlParserTreeConstants.JJTINEXPRESSION) {
177+
subSelectStart = node.jjtGetFirstToken();
178+
subSelectEnd = node.jjtGetLastToken();
179+
return super.visit(node, data);
180+
} else {
181+
return super.visit(node, data);
182+
}
183+
}
184+
}, null);
185+
186+
assertNotNull(subSelectStart);
187+
assertNotNull(subSelectEnd);
188+
assertEquals(30, subSelectStart.beginColumn);
189+
assertEquals(49, subSelectEnd.endColumn);
190+
}
166191
}

0 commit comments

Comments
 (0)