Skip to content

Commit 4231853

Browse files
jujusharpwumpz
authored andcommitted
add support for LIMIT with only one row count JDBC parameter (#404)
small but powerfull change 👍
1 parent 1315d03 commit 4231853

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1463,7 +1463,7 @@ Limit LimitWithOffset():
14631463
}
14641464
{
14651465
(
1466-
LOOKAHEAD(3)
1466+
LOOKAHEAD(5)
14671467
// mysql-> LIMIT offset,row_count
14681468
<K_LIMIT>
14691469
(

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,16 @@ public void testLimit3() throws JSQLParserException {
376376
assertNotNull(((JdbcParameter)rowCount).getIndex());
377377
assertFalse(((JdbcParameter)rowCount).isUseFixedIndex());
378378
assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isLimitAll());
379+
380+
statement = "SELECT * FROM mytable WHERE mytable.col = 9 LIMIT ?1";
381+
select = (Select) parserManager.parse(new StringReader(statement));
382+
383+
offset = ((PlainSelect) select.getSelectBody()).getLimit().getOffset();
384+
rowCount = ((PlainSelect) select.getSelectBody()).getLimit().getRowCount();
385+
386+
assertNull(offset);
387+
assertEquals(1, ((JdbcParameter)rowCount).getIndex().intValue());
388+
assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isLimitAll());
379389
}
380390

381391
public void testLimit4() throws JSQLParserException {
@@ -421,6 +431,14 @@ public void testLimit4() throws JSQLParserException {
421431
assertEquals(1, (int)(((JdbcParameter)rowCount).getIndex()));
422432
assertEquals("name1", (((JdbcNamedParameter)offset).getName()));
423433
assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isLimitAll());
434+
435+
statement = "SELECT * FROM mytable WHERE mytable.col = 9 LIMIT :param_name";
436+
select = (Select) parserManager.parse(new StringReader(statement));
437+
offset = ((PlainSelect) select.getSelectBody()).getLimit().getOffset();
438+
rowCount = ((PlainSelect) select.getSelectBody()).getLimit().getRowCount();
439+
assertNull(offset);
440+
assertEquals("param_name", (((JdbcNamedParameter)rowCount).getName()));
441+
assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isLimitAll());
424442
}
425443

426444
public void testLimitSqlServer1() throws JSQLParserException {

0 commit comments

Comments
 (0)