File tree Expand file tree Collapse file tree 4 files changed +28
-12
lines changed
javacc/net/sf/jsqlparser/parser
test/java/net/sf/jsqlparser/test/select Expand file tree Collapse file tree 4 files changed +28
-12
lines changed Original file line number Diff line number Diff line change 2222package net .sf .jsqlparser .expression ;
2323
2424/**
25- * A '?' in a statement
25+ * A '?' in a statement or a ?<number> e.g. ?4
2626 */
2727public class JdbcParameter implements Expression {
2828
29- @ Override
30- public void accept (ExpressionVisitor expressionVisitor ) {
31- expressionVisitor .visit (this );
32- }
29+ private Integer index ;
3330
34- @ Override
35- public String toString () {
36- return "?" ;
37- }
31+ public Integer getIndex () {
32+ return index ;
33+ }
34+
35+ public void setIndex (Integer index ) {
36+ this .index = index ;
37+ }
38+
39+ @ Override
40+ public void accept (ExpressionVisitor expressionVisitor ) {
41+ expressionVisitor .visit (this );
42+ }
43+
44+ @ Override
45+ public String toString () {
46+ return "?" + (index == null ? "" : index );
47+ }
3848}
Original file line number Diff line number Diff line change @@ -177,12 +177,15 @@ public void visit(IsNullExpression isNullExpression) {
177177 @ Override
178178 public void visit (JdbcParameter jdbcParameter ) {
179179 buffer .append ("?" );
180+ if (jdbcParameter .getIndex () != null ) {
181+ buffer .append (jdbcParameter .getIndex ());
182+ }
180183
181184 }
182185
183186 @ Override
184187 public void visit (LikeExpression likeExpression ) {
185- visitBinaryExpression (likeExpression , likeExpression .isCaseInsensitive ()? " ILIKE " : " LIKE " );
188+ visitBinaryExpression (likeExpression , likeExpression .isCaseInsensitive () ? " ILIKE " : " LIKE " );
186189 String escape = likeExpression .getEscape ();
187190 if (escape != null ) {
188191 buffer .append (" ESCAPE '" ).append (escape ).append ('\'' );
Original file line number Diff line number Diff line change @@ -1277,7 +1277,7 @@ Top Top():
12771277 | "?" { top.setRowCountJdbcParameter(true);} )
12781278 { top.setParenthesis(true);}
12791279 ")"
1280- ) [ <K_PERCENT> { top.setPercentage(true); } ]
1280+ ) [ LOOKAHEAD(2) <K_PERCENT> { top.setPercentage(true); } ]
12811281 {
12821282 return top;
12831283 }
@@ -1767,7 +1767,7 @@ Expression PrimaryExpression():
17671767
17681768 | retval=CaseWhenExpression()
17691769
1770- | "?" { retval = new JdbcParameter(); }
1770+ | "?" { retval = new JdbcParameter(); } [ token = <S_LONG> { ((JdbcParameter)retval).setIndex(Integer.valueOf(token.image)); } ]
17711771
17721772 | LOOKAHEAD(2) retval=JdbcNamedParameter()
17731773
Original file line number Diff line number Diff line change @@ -1725,4 +1725,7 @@ public void testSelectKeywordPercent() throws JSQLParserException {
17251725 assertSqlCanBeParsedAndDeparsed ("SELECT percent FROM MY_TABLE" );
17261726 }
17271727
1728+ public void testSelectJPQLPositionalParameter () throws JSQLParserException {
1729+ assertSqlCanBeParsedAndDeparsed ("SELECT email FROM users WHERE (type LIKE 'B') AND (username LIKE ?1)" );
1730+ }
17281731}
You can’t perform that action at this time.
0 commit comments