Skip to content

Commit c07a43b

Browse files
feat: JdbcNamedParameter allows "&" (instead of ":")
- fixes #1785
1 parent 7cecd29 commit c07a43b

4 files changed

Lines changed: 47 additions & 8 deletions

File tree

build.gradle

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,6 @@ test {
150150
// set heap size for the test JVM(s)
151151
minHeapSize = "128m"
152152
maxHeapSize = "1G"
153-
154-
finalizedBy check
155153
}
156154

157155
jacocoTestReport {

src/main/java/net/sf/jsqlparser/expression/JdbcNamedParameter.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,24 @@
1212
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
1313

1414
public class JdbcNamedParameter extends ASTNodeAccessImpl implements Expression {
15-
15+
private String parameterCharacter = ":";
1616
private String name;
1717

18-
public JdbcNamedParameter() {
19-
}
18+
public JdbcNamedParameter() {}
2019

2120
public JdbcNamedParameter(String name) {
2221
this.name = name;
2322
}
2423

24+
public String getParameterCharacter() {
25+
return parameterCharacter;
26+
}
27+
28+
public JdbcNamedParameter setParameterCharacter(String parameterCharacter) {
29+
this.parameterCharacter = parameterCharacter;
30+
return this;
31+
}
32+
2533
public String getName() {
2634
return name;
2735
}
@@ -37,7 +45,7 @@ public void accept(ExpressionVisitor expressionVisitor) {
3745

3846
@Override
3947
public String toString() {
40-
return ":" + name;
48+
return parameterCharacter + name;
4149
}
4250

4351
public JdbcNamedParameter withName(String name) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3623,7 +3623,7 @@ Expression BitwiseAndOr():
36233623
{
36243624
leftExpression=AdditiveExpression() { result = leftExpression; }
36253625
(
3626-
(
3626+
LOOKAHEAD(2) (
36273627
"|" { result = new BitwiseOr(); }
36283628
|
36293629
"&" { result = new BitwiseAnd(); }
@@ -3918,7 +3918,7 @@ JdbcNamedParameter JdbcNamedParameter() : {
39183918
String namePart;
39193919
}
39203920
{
3921-
":"
3921+
(":" | "&" { parameter.setParameterCharacter("&"); } )
39223922
name=IdentifierChain()
39233923
{
39243924
parameter.setName(name);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package net.sf.jsqlparser.expression;
2+
3+
import net.sf.jsqlparser.JSQLParserException;
4+
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd;
5+
import net.sf.jsqlparser.statement.select.PlainSelect;
6+
import net.sf.jsqlparser.test.TestUtils;
7+
import org.junit.jupiter.api.Test;
8+
9+
import static org.junit.jupiter.api.Assertions.assertTrue;
10+
11+
class JdbcNamedParameterTest {
12+
@Test
13+
void testDoubleColon() throws JSQLParserException {
14+
String sqlStr = "select :test";
15+
PlainSelect select = (PlainSelect) TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true);
16+
assertTrue(select.getSelectItems().get(0).getExpression() instanceof JdbcNamedParameter);
17+
}
18+
19+
@Test
20+
void testAmpersand() throws JSQLParserException {
21+
String sqlStr = "select &test, 'a & b', a & b";
22+
PlainSelect select = (PlainSelect) TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true);
23+
assertTrue(select.getSelectItems().get(0).getExpression() instanceof JdbcNamedParameter);
24+
assertTrue(select.getSelectItems().get(2).getExpression() instanceof BitwiseAnd);
25+
}
26+
27+
@Test
28+
void testIssue1785() throws JSQLParserException {
29+
String sqlStr = "select * from all_tables\n"
30+
+ "where owner = &myowner";
31+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true);
32+
}
33+
}

0 commit comments

Comments
 (0)