Skip to content

Commit 82b287d

Browse files
committed
named exec procedure parameters
1 parent 479ee39 commit 82b287d

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Also I would like to know about needed examples or documentation stuff.
5555

5656
## Extensions in the latest SNAPSHOT version 2.0
5757

58+
* support of named parameters for execute: **EXEC procedure @param = 'foo'**
5859
* support multivalue set statement
5960
* support of **describe**
6061
* support of **explain**

src/main/java/net/sf/jsqlparser/statement/execute/Execute.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* #%L
33
* JSQLParser library
44
* %%
5-
* Copyright (C) 2004 - 2014 JSQLParser
5+
* Copyright (C) 2004 - 2019 JSQLParser
66
* %%
77
* This program is free software: you can redistribute it and/or modify
88
* it under the terms of the GNU Lesser General Public License as

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* #%L
33
* JSQLParser library
44
* %%
5-
* Copyright (C) 2004 - 2014 JSQLParser
5+
* Copyright (C) 2004 - 2019 JSQLParser
66
* %%
77
* This program is free software: you can redistribute it and/or modify
88
* it under the terms of the GNU Lesser General Public License as
@@ -3039,10 +3039,25 @@ RowConstructor RowConstructor(): {
30393039
}
30403040
}
30413041

3042+
EqualsTo VariableExpression(): {
3043+
Expression left;
3044+
Expression right;
3045+
} {
3046+
left = UserVariable() "=" right = SimpleExpression()
3047+
{
3048+
EqualsTo equals = new EqualsTo();
3049+
equals.setLeftExpression(left);
3050+
equals.setRightExpression(right);
3051+
return equals;
3052+
}
3053+
}
3054+
30423055
Execute Execute(): {
30433056
List<String> funcName;
30443057
ExpressionList expressionList = null;
30453058
Execute execute = new Execute();
3059+
List<Expression> namedExprList;
3060+
Expression expr;
30463061
}
30473062
{
30483063
(<K_EXEC> { execute.setExecType(Execute.EXEC_TYPE.EXEC); }
@@ -3052,6 +3067,10 @@ Execute Execute(): {
30523067
funcName=RelObjectNameList() { execute.setName(funcName); }
30533068

30543069
(
3070+
LOOKAHEAD(3) ( expr = VariableExpression() { namedExprList = new ArrayList<Expression>(); namedExprList.add( expr ); }
3071+
( "," expr = VariableExpression() { namedExprList.add(expr); })*
3072+
{ expressionList = new ExpressionList(namedExprList); } )
3073+
|
30553074
LOOKAHEAD(3) expressionList=SimpleExpressionList()
30563075
|
30573076
("(" expressionList=SimpleExpressionList() ")" { execute.setParenthesis(true); })

src/test/java/net/sf/jsqlparser/statement/execute/ExecuteTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,24 @@ public void testCallWithMultiname() throws JSQLParserException {
8080
public void testAcceptCallWithParenthesis() throws JSQLParserException {
8181
assertSqlCanBeParsedAndDeparsed("CALL myproc ('a', 2, 'b')");
8282
}
83+
84+
@Test
85+
public void testAcceptExecNamesParameters() throws JSQLParserException {
86+
assertSqlCanBeParsedAndDeparsed("EXEC procedure @param");
87+
}
88+
89+
@Test
90+
public void testAcceptExecNamesParameters2() throws JSQLParserException {
91+
assertSqlCanBeParsedAndDeparsed("EXEC procedure @param = 1");
92+
}
93+
94+
@Test
95+
public void testAcceptExecNamesParameters3() throws JSQLParserException {
96+
assertSqlCanBeParsedAndDeparsed("EXEC procedure @param = 'foo'");
97+
}
98+
99+
@Test
100+
public void testAcceptExecNamesParameters4() throws JSQLParserException {
101+
assertSqlCanBeParsedAndDeparsed("EXEC procedure @param = 'foo', @param2 = 'foo2'");
102+
}
83103
}

0 commit comments

Comments
 (0)