Skip to content

Commit

Permalink
fixes #129
Browse files Browse the repository at this point in the history
  • Loading branch information
wumpz committed Apr 30, 2015
1 parent 70f5fee commit 45132a7
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 12 deletions.
28 changes: 19 additions & 9 deletions src/main/java/net/sf/jsqlparser/expression/JdbcParameter.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,27 @@
package net.sf.jsqlparser.expression;

/**
* A '?' in a statement
* A '?' in a statement or a ?<number> e.g. ?4
*/
public class JdbcParameter implements Expression {

@Override
public void accept(ExpressionVisitor expressionVisitor) {
expressionVisitor.visit(this);
}
private Integer index;

@Override
public String toString() {
return "?";
}
public Integer getIndex() {
return index;
}

public void setIndex(Integer index) {
this.index = index;
}

@Override
public void accept(ExpressionVisitor expressionVisitor) {
expressionVisitor.visit(this);
}

@Override
public String toString() {
return "?" + (index == null ? "" : index);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -177,12 +177,15 @@ public void visit(IsNullExpression isNullExpression) {
@Override
public void visit(JdbcParameter jdbcParameter) {
buffer.append("?");
if (jdbcParameter.getIndex() != null) {
buffer.append(jdbcParameter.getIndex());
}

}

@Override
public void visit(LikeExpression likeExpression) {
visitBinaryExpression(likeExpression, likeExpression.isCaseInsensitive()?" ILIKE ":" LIKE ");
visitBinaryExpression(likeExpression, likeExpression.isCaseInsensitive() ? " ILIKE " : " LIKE ");
String escape = likeExpression.getEscape();
if (escape != null) {
buffer.append(" ESCAPE '").append(escape).append('\'');
Expand Down
4 changes: 2 additions & 2 deletions src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj
Original file line number Diff line number Diff line change
Expand Up @@ -1277,7 +1277,7 @@ Top Top():
| "?" { top.setRowCountJdbcParameter(true);} )
{ top.setParenthesis(true);}
")"
) [ <K_PERCENT> { top.setPercentage(true); } ]
) [ LOOKAHEAD(2) <K_PERCENT> { top.setPercentage(true); } ]
{
return top;
}
Expand Down Expand Up @@ -1767,7 +1767,7 @@ Expression PrimaryExpression():

| retval=CaseWhenExpression()

| "?" { retval = new JdbcParameter(); }
| "?" { retval = new JdbcParameter(); } [ token = <S_LONG> { ((JdbcParameter)retval).setIndex(Integer.valueOf(token.image)); } ]

| LOOKAHEAD(2) retval=JdbcNamedParameter()

Expand Down
3 changes: 3 additions & 0 deletions src/test/java/net/sf/jsqlparser/test/select/SelectTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1725,4 +1725,7 @@ public void testSelectKeywordPercent() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("SELECT percent FROM MY_TABLE");
}

public void testSelectJPQLPositionalParameter() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("SELECT email FROM users WHERE (type LIKE 'B') AND (username LIKE ?1)");
}
}

0 comments on commit 45132a7

Please sign in to comment.