Skip to content

Commit 76982f7

Browse files
committed
fixes #303
1 parent cb8ddd7 commit 76982f7

File tree

2 files changed

+43
-13
lines changed

2 files changed

+43
-13
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -965,7 +965,7 @@ List<WithItem> WithList():
965965
{ return withItemsList; }
966966
}
967967

968-
WithItem WithItem():
968+
WithItem WithItem() #WithItem:
969969
{
970970
WithItem with = new WithItem();
971971
String name = null;
@@ -2387,7 +2387,7 @@ CastExpression CastExpression():
23872387
}
23882388
}
23892389

2390-
Expression CaseWhenExpression():
2390+
Expression CaseWhenExpression() #CaseWhenExpression:
23912391
{
23922392
CaseExpression caseExp = new CaseExpression();
23932393
Expression switchExp = null;
@@ -2479,7 +2479,7 @@ Execute Execute(): {
24792479
}
24802480
}
24812481

2482-
Function Function():
2482+
Function Function() #Function:
24832483
{
24842484
Function retval = new Function();
24852485
String funcName = null;
@@ -2539,7 +2539,7 @@ TableFunction TableFunction():
25392539
{ return functionItem; }
25402540
}
25412541

2542-
SubSelect SubSelect():
2542+
SubSelect SubSelect() #SubSelect:
25432543
{
25442544
SelectBody selectBody = null;
25452545
SubSelect subSelect = new SubSelect();

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

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
package net.sf.jsqlparser.test.select;
2020

2121
import net.sf.jsqlparser.JSQLParserException;
22+
import net.sf.jsqlparser.parser.CCJSqlParserDefaultVisitor;
2223
import net.sf.jsqlparser.parser.CCJSqlParserTreeConstants;
2324
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
2425
import net.sf.jsqlparser.parser.SimpleNode;
26+
import net.sf.jsqlparser.parser.Token;
2527
import net.sf.jsqlparser.schema.Column;
2628
import net.sf.jsqlparser.statement.Statement;
2729
import net.sf.jsqlparser.statement.select.OrderByElement;
@@ -38,35 +40,63 @@
3840
* @author toben
3941
*/
4042
public class SelectASTTest {
41-
43+
4244
@Test
4345
public void testSelectASTColumn() throws JSQLParserException {
4446
String sql = "SELECT a, b FROM mytable order by b, c";
4547
StringBuilder b = new StringBuilder(sql);
4648
Statement stmt = CCJSqlParserUtil.parse(sql);
47-
Select select = (Select)stmt;
48-
PlainSelect ps = (PlainSelect)select.getSelectBody();
49+
Select select = (Select) stmt;
50+
PlainSelect ps = (PlainSelect) select.getSelectBody();
4951
for (SelectItem item : ps.getSelectItems()) {
50-
SelectExpressionItem sei = (SelectExpressionItem)item;
51-
Column c = (Column)sei.getExpression();
52+
SelectExpressionItem sei = (SelectExpressionItem) item;
53+
Column c = (Column) sei.getExpression();
5254
SimpleNode astNode = c.getASTNode();
5355
assertNotNull(astNode);
54-
b.setCharAt(astNode.jjtGetFirstToken().beginColumn-1, '*');
56+
b.setCharAt(astNode.jjtGetFirstToken().beginColumn - 1, '*');
5557
}
5658
for (OrderByElement item : ps.getOrderByElements()) {
57-
Column c = (Column)item.getExpression();
59+
Column c = (Column) item.getExpression();
5860
SimpleNode astNode = c.getASTNode();
5961
assertNotNull(astNode);
60-
b.setCharAt(astNode.jjtGetFirstToken().beginColumn-1, '#');
62+
b.setCharAt(astNode.jjtGetFirstToken().beginColumn - 1, '#');
6163
}
6264
assertEquals("SELECT *, * FROM mytable order by #, #", b.toString());
6365
}
64-
66+
6567
@Test
6668
public void testSelectASTNode() throws JSQLParserException {
6769
String sql = "SELECT a, b FROM mytable order by b, c";
6870
SimpleNode node = (SimpleNode) CCJSqlParserUtil.parseAST(sql);
6971
node.dump("*");
7072
assertEquals(CCJSqlParserTreeConstants.JJTSTATEMENT, node.getId());
7173
}
74+
75+
private Token subSelectStart;
76+
private Token subSelectEnd;
77+
78+
@Test
79+
public void testSelectASTNodeSubSelect() throws JSQLParserException {
80+
String sql = "SELECT * FROM mytable where 0<(select count(*) from mytable2)";
81+
SimpleNode node = (SimpleNode) CCJSqlParserUtil.parseAST(sql);
82+
node.dump("*");
83+
assertEquals(CCJSqlParserTreeConstants.JJTSTATEMENT, node.getId());
84+
node.jjtAccept(new CCJSqlParserDefaultVisitor() {
85+
@Override
86+
public Object visit(SimpleNode node, Object data) {
87+
if (node.getId() == CCJSqlParserTreeConstants.JJTSUBSELECT) {
88+
subSelectStart = node.jjtGetFirstToken();
89+
subSelectEnd = node.jjtGetLastToken();
90+
return super.visit(node, data);
91+
} else {
92+
return super.visit(node, data);
93+
}
94+
}
95+
}, null);
96+
97+
assertNotNull(subSelectStart);
98+
assertNotNull(subSelectEnd);
99+
assertEquals(34, subSelectStart.beginColumn);
100+
assertEquals(62, subSelectEnd.endColumn);
101+
}
72102
}

0 commit comments

Comments
 (0)