Skip to content

Commit 531d617

Browse files
committed
simple execute clause support
1 parent d6f0101 commit 531d617

File tree

5 files changed

+85
-3
lines changed

5 files changed

+85
-3
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ Also I would like to know about needed examples or documentation stuff.
2323

2424
## Extensions in the latest SNAPSHOT version 0.9.1
2525

26+
* Simple suppor for EXECUTE.
27+
28+
```sql
29+
EXECUTE myproc 'a', 2, 'b'
30+
```
31+
2632
* Improved support for select into clause.
2733

2834
```sql

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
2525
import net.sf.jsqlparser.statement.Statement;
2626
import net.sf.jsqlparser.statement.StatementVisitor;
27+
import net.sf.jsqlparser.statement.select.PlainSelect;
2728

2829
/**
2930
*
@@ -54,5 +55,10 @@ public void setExprList(ExpressionList exprList) {
5455
public void accept(StatementVisitor statementVisitor) {
5556
statementVisitor.visit(this);
5657
}
57-
58+
59+
@Override
60+
public String toString() {
61+
return "EXECUTE " + name + " " + PlainSelect.getStringList(exprList.getExpressions(), true, false);
62+
}
63+
5864
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2013 JSQLParser
6+
* %%
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU Lesser General Public License as
9+
* published by the Free Software Foundation, either version 2.1 of the
10+
* License, or (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Lesser Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Lesser Public
18+
* License along with this program. If not, see
19+
* <http://www.gnu.org/licenses/lgpl-2.1.html>.
20+
* #L%
21+
*/
22+
package net.sf.jsqlparser.util.deparser;
23+
24+
import net.sf.jsqlparser.expression.ExpressionVisitor;
25+
import net.sf.jsqlparser.statement.execute.Execute;
26+
import net.sf.jsqlparser.statement.select.PlainSelect;
27+
28+
public class ExecuteDeParser {
29+
30+
private StringBuilder buffer;
31+
private ExpressionVisitor expressionVisitor;
32+
33+
/**
34+
* @param expressionVisitor a {@link ExpressionVisitor} to de-parse
35+
* expressions. It has to share the same<br>
36+
* StringBuilder (buffer parameter) as this object in order to work
37+
* @param buffer the buffer that will be filled with the select
38+
*/
39+
public ExecuteDeParser(ExpressionVisitor expressionVisitor, StringBuilder buffer) {
40+
this.buffer = buffer;
41+
this.expressionVisitor = expressionVisitor;
42+
}
43+
44+
public StringBuilder getBuffer() {
45+
return buffer;
46+
}
47+
48+
public void setBuffer(StringBuilder buffer) {
49+
this.buffer = buffer;
50+
}
51+
52+
public void deParse(Execute execute) {
53+
buffer.append("EXECUTE ").append(execute.getName());
54+
buffer.append(" ").append(PlainSelect.getStringList(execute.getExprList().getExpressions(), true, false));
55+
}
56+
57+
public ExpressionVisitor getExpressionVisitor() {
58+
return expressionVisitor;
59+
}
60+
61+
public void setExpressionVisitor(ExpressionVisitor visitor) {
62+
expressionVisitor = visitor;
63+
}
64+
}

src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,11 @@ public void visit(Statements stmts) {
156156

157157
@Override
158158
public void visit(Execute execute) {
159-
159+
SelectDeParser selectDeParser = new SelectDeParser();
160+
selectDeParser.setBuffer(buffer);
161+
ExpressionDeParser expressionDeParser = new ExpressionDeParser(selectDeParser, buffer);
162+
ExecuteDeParser executeDeParser = new ExecuteDeParser(expressionDeParser, buffer);
163+
selectDeParser.setExpressionVisitor(expressionDeParser);
164+
executeDeParser.deParse(execute);
160165
}
161166
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,10 @@ public void tearDown() {
5656

5757
/**
5858
* Test of accept method, of class Execute.
59+
* @throws net.sf.jsqlparser.JSQLParserException
5960
*/
6061
@Test
6162
public void testAccept() throws JSQLParserException {
62-
assertSqlCanBeParsedAndDeparsed("EXEC myproc 'a', 2, 'b'");
63+
assertSqlCanBeParsedAndDeparsed("EXECUTE myproc 'a', 2, 'b'");
6364
}
6465
}

0 commit comments

Comments
 (0)