Skip to content

Commit a8b3e71

Browse files
committed
fixes #684
1 parent c283311 commit a8b3e71

File tree

4 files changed

+47
-17
lines changed

4 files changed

+47
-17
lines changed

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222
package net.sf.jsqlparser.statement.execute;
2323

24+
import java.util.List;
2425
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
2526
import net.sf.jsqlparser.statement.Statement;
2627
import net.sf.jsqlparser.statement.StatementVisitor;
@@ -44,6 +45,16 @@ public void setName(String name) {
4445
this.name = name;
4546
}
4647

48+
public void setName(List<String> names) {
49+
for (String item : names) {
50+
if (this.name != null) {
51+
this.name = this.name + "." + item;
52+
} else {
53+
this.name = item;
54+
}
55+
}
56+
}
57+
4758
public ExpressionList getExprList() {
4859
return exprList;
4960
}
@@ -67,10 +78,11 @@ public void accept(StatementVisitor statementVisitor) {
6778

6879
@Override
6980
public String toString() {
70-
return execType.name() + " " + name + " " + PlainSelect.
71-
getStringList(exprList.getExpressions(), true, false);
81+
return execType.name() + " " + name
82+
+ (exprList != null && exprList.getExpressions() != null ? " "
83+
+ PlainSelect.getStringList(exprList.getExpressions(), true, false) : "");
7284
}
73-
85+
7486
public static enum EXEC_TYPE {
7587
EXECUTE,
7688
EXEC,

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
package net.sf.jsqlparser.util.deparser;
2323

2424
import java.util.List;
25-
2625
import net.sf.jsqlparser.expression.Expression;
2726
import net.sf.jsqlparser.expression.ExpressionVisitor;
2827
import net.sf.jsqlparser.statement.execute.Execute;
@@ -53,13 +52,15 @@ public void setBuffer(StringBuilder buffer) {
5352

5453
public void deParse(Execute execute) {
5554
buffer.append(execute.getExecType().name()).append(" ").append(execute.getName());
56-
List<Expression> expressions = execute.getExprList().getExpressions();
57-
for (int i = 0; i < expressions.size(); i++) {
58-
if (i > 0) {
59-
buffer.append(",");
55+
if (execute.getExprList() != null) {
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);
6063
}
61-
buffer.append(" ");
62-
expressions.get(i).accept(expressionVisitor);
6364
}
6465
}
6566

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -954,17 +954,29 @@ MergeInsert MergeInsertClause() : {
954954
}
955955
}
956956

957+
List<String> RelObjectNameList() : {
958+
String token = null;
959+
List<String> data = new ArrayList<String>();
960+
} {
961+
token = RelObjectName() { data.add(token); }
962+
( LOOKAHEAD (2) "." ("." { data.add(null); })* token = RelObjectName() { data.add(token); } ) *
963+
964+
{ return data; }
965+
}
966+
957967
// See: http://technet.microsoft.com/en-us/library/ms187879%28v=sql.105%29.aspx
958968

959969
Column Column() #Column :
960970
{
961971
//String databaseName = null, schemaName = null, tableName = null, columnName = null;
962-
String token = null;
972+
//String token = null;
963973
List<String> data = new ArrayList<String>();
964974
}
965975
{
966-
token = RelObjectName() { data.add(token); }
976+
/* token = RelObjectName() { data.add(token); }
967977
( LOOKAHEAD (2) "." ("." { data.add(null); })* token = RelObjectName() { data.add(token); } ) *
978+
*/
979+
data = RelObjectNameList()
968980

969981
/*columnName = RelObjectName()
970982
( "." [LOOKAHEAD(2) token = RelObjectName()] { tableName = columnName; columnName = token; token = null;}
@@ -2882,7 +2894,7 @@ RowConstructor RowConstructor(): {
28822894
}
28832895

28842896
Execute Execute(): {
2885-
String funcName = null;
2897+
List<String> funcName;
28862898
ExpressionList expressionList = null;
28872899
Execute execute = new Execute();
28882900
}
@@ -2891,7 +2903,7 @@ Execute Execute(): {
28912903
| <K_EXECUTE> { execute.setExecType(Execute.EXEC_TYPE.EXECUTE); }
28922904
| <K_CALL> { execute.setExecType(Execute.EXEC_TYPE.CALL); } )
28932905

2894-
funcName=RelObjectName() { execute.setName(funcName); }
2906+
funcName=RelObjectNameList() { execute.setName(funcName); }
28952907

28962908
[ expressionList=SimpleExpressionList() ]
28972909

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
package net.sf.jsqlparser.statement.execute;
2020

2121
import net.sf.jsqlparser.JSQLParserException;
22+
import static net.sf.jsqlparser.test.TestUtils.*;
2223
import org.junit.After;
2324
import org.junit.AfterClass;
2425
import org.junit.Before;
2526
import org.junit.BeforeClass;
2627
import org.junit.Test;
27-
import static net.sf.jsqlparser.test.TestUtils.*;
2828

2929
/**
3030
*
@@ -60,14 +60,19 @@ public void tearDown() {
6060
public void testAcceptExecute() throws JSQLParserException {
6161
assertSqlCanBeParsedAndDeparsed("EXECUTE myproc 'a', 2, 'b'");
6262
}
63-
63+
6464
@Test
6565
public void testAcceptExec() throws JSQLParserException {
6666
assertSqlCanBeParsedAndDeparsed("EXEC myproc 'a', 2, 'b'");
6767
}
68-
68+
6969
@Test
7070
public void testAcceptCall() throws JSQLParserException {
7171
assertSqlCanBeParsedAndDeparsed("CALL myproc 'a', 2, 'b'");
7272
}
73+
74+
@Test
75+
public void testCallWithMultiname() throws JSQLParserException {
76+
assertSqlCanBeParsedAndDeparsed("CALL BAR.FOO");
77+
}
7378
}

0 commit comments

Comments
 (0)