Skip to content

Commit d991bbe

Browse files
committed
started multivalue set
1 parent 7cd189c commit d991bbe

File tree

3 files changed

+53
-39
lines changed

3 files changed

+53
-39
lines changed

src/main/java/net/sf/jsqlparser/statement/SetStatement.java

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,55 +39,84 @@
3939
*/
4040
package net.sf.jsqlparser.statement;
4141

42+
import java.util.ArrayList;
43+
import java.util.List;
4244
import net.sf.jsqlparser.expression.Expression;
4345

4446
/**
4547
*
4648
* @author toben
4749
*/
48-
public class SetStatement implements Statement {
50+
public final class SetStatement implements Statement {
4951

50-
private String name;
51-
private Expression expression;
52-
private boolean useEqual;
52+
private final List<NameExpr> values = new ArrayList<>();
5353

5454
public SetStatement(String name, Expression expression) {
55-
this.name = name;
56-
this.expression = expression;
55+
add(name, expression, true);
56+
}
57+
58+
public void add(String name, Expression expression, boolean useEqual) {
59+
values.add(new NameExpr(name, expression, useEqual));
5760
}
5861

5962
public boolean isUseEqual() {
60-
return useEqual;
63+
return values.get(0).useEqual;
6164
}
6265

6366
public SetStatement setUseEqual(boolean useEqual) {
64-
this.useEqual = useEqual;
67+
values.get(0).useEqual = useEqual;
6568
return this;
6669
}
6770

6871
public String getName() {
69-
return name;
72+
return values.get(0).name;
7073
}
7174

7275
public void setName(String name) {
73-
this.name = name;
76+
values.get(0).name = name;
7477
}
7578

7679
public Expression getExpression() {
77-
return expression;
80+
return values.get(0).expression;
7881
}
7982

8083
public void setExpression(Expression expression) {
81-
this.expression = expression;
84+
values.get(0).expression = expression;
85+
}
86+
87+
private String toString(NameExpr ne) {
88+
return "SET " + ne.name + (ne.useEqual ? " = " : " ") + ne.expression.toString();
8289
}
8390

8491
@Override
8592
public String toString() {
86-
return "SET " + name + (useEqual ? " = " : " ") + expression.toString();
93+
StringBuilder b = new StringBuilder("SET ");
94+
95+
for (NameExpr ne : values) {
96+
if (b.length() != 4) {
97+
b.append(", ");
98+
}
99+
b.append(toString(ne));
100+
}
101+
102+
return b.toString();
87103
}
88104

89105
@Override
90106
public void accept(StatementVisitor statementVisitor) {
91107
statementVisitor.visit(this);
92108
}
109+
110+
static class NameExpr {
111+
112+
private String name;
113+
private Expression expression;
114+
private boolean useEqual;
115+
116+
public NameExpr(String name, Expression expr, boolean useEqual) {
117+
this.name = name;
118+
this.expression = expr;
119+
this.useEqual = useEqual;
120+
}
121+
}
93122
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -521,12 +521,15 @@ SetStatement Set(): {
521521
String name;
522522
Expression value;
523523
boolean useEqual = false;
524+
SetStatement set;
524525
}
525526
{
526527
<K_SET> name = RelObjectNameExt() ["=" { useEqual=true; } ] value=SimpleExpression()
527-
{
528-
return new SetStatement(name,value).setUseEqual(useEqual);
529-
}
528+
{ set = new SetStatement(name,value).setUseEqual(useEqual); }
529+
( { useEqual=false; } "," name = RelObjectNameExt() ["=" { useEqual=true; } ] value=SimpleExpression()
530+
{ set.add(name, value, useEqual); } )*
531+
532+
{ return set; }
530533
}
531534

532535
DescribeStatement Describe(): {

src/test/java/net/sf/jsqlparser/statement/SetStatementTest.java

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@
2020

2121
import net.sf.jsqlparser.JSQLParserException;
2222
import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed;
23-
import org.junit.After;
24-
import org.junit.AfterClass;
25-
import org.junit.Before;
26-
import org.junit.BeforeClass;
2723
import org.junit.Test;
2824

2925
/**
@@ -32,25 +28,6 @@
3228
*/
3329
public class SetStatementTest {
3430

35-
public SetStatementTest() {
36-
}
37-
38-
@BeforeClass
39-
public static void setUpClass() {
40-
}
41-
42-
@AfterClass
43-
public static void tearDownClass() {
44-
}
45-
46-
@Before
47-
public void setUp() {
48-
}
49-
50-
@After
51-
public void tearDown() {
52-
}
53-
5431
@Test
5532
public void testSimpleSet() throws JSQLParserException {
5633
assertSqlCanBeParsedAndDeparsed("SET statement_timeout = 0");
@@ -65,4 +42,9 @@ public void testIssue373() throws JSQLParserException {
6542
public void testIssue373_2() throws JSQLParserException {
6643
assertSqlCanBeParsedAndDeparsed("SET tester 5");
6744
}
45+
46+
@Test
47+
public void testMultiValue() throws JSQLParserException {
48+
assertSqlCanBeParsedAndDeparsed("SET v=1, c=3");
49+
}
6850
}

0 commit comments

Comments
 (0)