Skip to content

Commit 275fbbe

Browse files
chrychengwumpz
authored andcommitted
Fix issue #446 (#447)
* Test current behavior of ExecuteDeParser * Fix issue #446
1 parent 22c8b48 commit 275fbbe

File tree

3 files changed

+91
-3
lines changed

3 files changed

+91
-3
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@
3737
<version>4.12</version>
3838
<scope>test</scope>
3939
</dependency>
40+
<dependency>
41+
<groupId>org.mockito</groupId>
42+
<artifactId>mockito-core</artifactId>
43+
<version>2.7.22</version>
44+
<scope>test</scope>
45+
</dependency>
4046
</dependencies>
4147

4248
<developers>

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121
*/
2222
package net.sf.jsqlparser.util.deparser;
2323

24+
import java.util.List;
25+
26+
import net.sf.jsqlparser.expression.Expression;
2427
import net.sf.jsqlparser.expression.ExpressionVisitor;
2528
import net.sf.jsqlparser.statement.execute.Execute;
26-
import net.sf.jsqlparser.statement.select.PlainSelect;
2729

2830
public class ExecuteDeParser {
2931

@@ -51,8 +53,14 @@ public void setBuffer(StringBuilder buffer) {
5153

5254
public void deParse(Execute execute) {
5355
buffer.append("EXECUTE ").append(execute.getName());
54-
buffer.append(" ").append(PlainSelect.
55-
getStringList(execute.getExprList().getExpressions(), true, false));
56+
List<Expression> expressions = execute.getExprList().getExpressions();
57+
for (int i = 0; i < expressions.size(); i++) {
58+
if (i > 0) {
59+
buffer.append(",");
60+
}
61+
buffer.append(" ");
62+
expressions.get(i).accept(expressionVisitor);
63+
}
5664
}
5765

5866
public ExpressionVisitor getExpressionVisitor() {
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package net.sf.jsqlparser.util.deparser;
2+
3+
import static org.junit.Assert.assertTrue;
4+
import static org.mockito.BDDMockito.then;
5+
import static org.mockito.Mockito.mock;
6+
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
import org.mockito.Mock;
13+
14+
import net.sf.jsqlparser.expression.Expression;
15+
import net.sf.jsqlparser.expression.ExpressionVisitor;
16+
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
17+
import net.sf.jsqlparser.statement.execute.Execute;
18+
19+
public class ExecuteDeParserTest {
20+
private ExecuteDeParser executeDeParser;
21+
22+
@Mock
23+
private ExpressionVisitor expressionVisitor;
24+
25+
private StringBuilder buffer;
26+
27+
@Before
28+
public void setUp() {
29+
buffer = new StringBuilder();
30+
executeDeParser = new ExecuteDeParser(expressionVisitor, buffer);
31+
}
32+
33+
@Test
34+
public void shouldDeParseExecute() {
35+
Execute execute = new Execute();
36+
String name = "name";
37+
ExpressionList exprList = new ExpressionList();
38+
List<Expression> expressions = new ArrayList<Expression>();
39+
Expression expression1 = mock(Expression.class);
40+
Expression expression2 = mock(Expression.class);
41+
42+
execute.setName(name);
43+
execute.setExprList(exprList);
44+
exprList.setExpressions(expressions);
45+
expressions.add(expression1);
46+
expressions.add(expression2);
47+
48+
executeDeParser.deParse(execute);
49+
50+
String actual = buffer.toString();
51+
assertTrue(actual.matches("EXECUTE " + name + " .*?, .*"));
52+
}
53+
54+
@Test
55+
public void shouldUseProvidedExpressionVisitorWhenDeParsingExecute() {
56+
Execute execute = new Execute();
57+
String name = "name";
58+
ExpressionList exprList = new ExpressionList();
59+
List<Expression> expressions = new ArrayList<Expression>();
60+
Expression expression1 = mock(Expression.class);
61+
Expression expression2 = mock(Expression.class);
62+
63+
execute.setName(name);
64+
execute.setExprList(exprList);
65+
exprList.setExpressions(expressions);
66+
expressions.add(expression1);
67+
expressions.add(expression2);
68+
69+
executeDeParser.deParse(execute);
70+
71+
then(expression1).should().accept(expressionVisitor);
72+
then(expression2).should().accept(expressionVisitor);
73+
}
74+
}

0 commit comments

Comments
 (0)