Skip to content

Commit 7034cb1

Browse files
committed
fixes limit as name for jdbc named parameters
1 parent 8679239 commit 7034cb1

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,7 +1104,7 @@ String RelObjectNameExt():
11041104
String result=null;
11051105
}
11061106
{
1107-
( result=RelObjectName() | tk=<K_LEFT> | tk=<K_RIGHT> | tk=<K_SET> | tk=<K_DOUBLE> | tk=<K_IF> | <K_OPTIMIZE>)
1107+
( result=RelObjectName() | tk=<K_LEFT> | tk=<K_RIGHT> | tk=<K_SET> | tk=<K_DOUBLE> | tk=<K_IF> | <K_OPTIMIZE> | tk=<K_LIMIT> | tk=<K_OFFSET>)
11081108
{
11091109
if (tk!=null) result=tk.image;
11101110
return result;
@@ -1952,10 +1952,10 @@ JdbcParameter SimpleJdbcParameter() : {
19521952
}
19531953

19541954
JdbcNamedParameter SimpleJdbcNamedParameter() : {
1955-
Token token;
1955+
String name;
19561956
}
19571957
{
1958-
":" token = <S_IDENTIFIER>
1958+
":" name = RelObjectNameExt()
19591959
{
19601960
return new JdbcNamedParameter(token.image);
19611961
}
@@ -1965,6 +1965,7 @@ Limit LimitWithOffset() #LimitWithOffset:
19651965
{
19661966
Limit limit = new Limit();
19671967
Token token = null;
1968+
String name;
19681969
JdbcParameter jdbc = null;
19691970
}
19701971
{
@@ -1977,7 +1978,7 @@ Limit LimitWithOffset() #LimitWithOffset:
19771978
|
19781979
jdbc = SimpleJdbcParameter() { limit.setOffset(jdbc); }
19791980
|
1980-
":" { limit.setOffset(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)limit.getOffset()).setName(token.image); } ]
1981+
":" { limit.setOffset(new JdbcNamedParameter()); } [ LOOKAHEAD(2) name = RelObjectNameExt() { ((JdbcNamedParameter)limit.getOffset()).setName(name); } ]
19811982

19821983
)
19831984
","
@@ -1987,7 +1988,7 @@ Limit LimitWithOffset() #LimitWithOffset:
19871988
|
19881989
jdbc = SimpleJdbcParameter() { limit.setRowCount(jdbc); }
19891990
|
1990-
":" { limit.setRowCount(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)limit.getRowCount()).setName(token.image); } ]
1991+
":" { limit.setRowCount(new JdbcNamedParameter()); } [ LOOKAHEAD(2) name = RelObjectNameExt() { ((JdbcNamedParameter)limit.getRowCount()).setName(name); } ]
19911992
)
19921993
|
19931994
limit = PlainLimit()
@@ -2003,6 +2004,7 @@ Limit PlainLimit() #PlainLimit:
20032004
Limit limit = new Limit();
20042005
Token token = null;
20052006
JdbcParameter jdbc;
2007+
String name;
20062008
}
20072009
{
20082010
// mysql-postgresql-> LIMIT (row_count | ALL | NULL)
@@ -2012,7 +2014,7 @@ Limit PlainLimit() #PlainLimit:
20122014
|
20132015
jdbc = SimpleJdbcParameter() { limit.setRowCount(jdbc); }
20142016
|
2015-
":" { limit.setRowCount(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)limit.getRowCount()).setName(token.image); } ]
2017+
":" { limit.setRowCount(new JdbcNamedParameter()); } [ LOOKAHEAD(2) name = RelObjectNameExt() { ((JdbcNamedParameter)limit.getRowCount()).setName(name); } ]
20162018
|
20172019
<K_ALL> { limit.setLimitAll(true);}
20182020
|

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,16 @@ public void testLimitOffsetIssue462_2() throws JSQLParserException {
588588
assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytable LIMIT ?1 OFFSET ?2");
589589
}
590590

591+
@Test
592+
public void testLimitOffsetKeyWordAsNamedParameter() throws JSQLParserException {
593+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytable LIMIT :limit");
594+
}
595+
596+
@Test
597+
public void testLimitOffsetKeyWordAsNamedParameter2() throws JSQLParserException {
598+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytable LIMIT :limit OFFSET :offset");
599+
}
600+
591601
@Test
592602
public void testTop() throws JSQLParserException {
593603
String statement = "SELECT TOP 3 * FROM mytable WHERE mytable.col = 9";

0 commit comments

Comments
 (0)