Skip to content

Commit ec6cef2

Browse files
committed
set statemet with optional equals
1 parent d439643 commit ec6cef2

File tree

4 files changed

+54
-31
lines changed

4 files changed

+54
-31
lines changed

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,22 @@ public class SetStatement implements Statement {
4949

5050
private String name;
5151
private Expression expression;
52+
private boolean useEqual;
5253

5354
public SetStatement(String name, Expression expression) {
5455
this.name = name;
5556
this.expression = expression;
5657
}
5758

59+
public boolean isUseEqual() {
60+
return useEqual;
61+
}
62+
63+
public SetStatement setUseEqual(boolean useEqual) {
64+
this.useEqual = useEqual;
65+
return this;
66+
}
67+
5868
public String getName() {
5969
return name;
6070
}
@@ -73,7 +83,7 @@ public void setExpression(Expression expression) {
7383

7484
@Override
7585
public String toString() {
76-
return "SET " + name + " = " + expression.toString();
86+
return "SET " + name + (useEqual?" = ":" ") + expression.toString();
7787
}
7888

7989
@Override

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

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -27,39 +27,42 @@
2727

2828
public class SetStatementDeParser {
2929

30-
private StringBuilder buffer;
31-
private ExpressionVisitor expressionVisitor;
30+
private StringBuilder buffer;
31+
private ExpressionVisitor expressionVisitor;
3232

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 SetStatementDeParser(ExpressionVisitor expressionVisitor, StringBuilder buffer) {
40-
this.buffer = buffer;
41-
this.expressionVisitor = expressionVisitor;
42-
}
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 SetStatementDeParser(ExpressionVisitor expressionVisitor, StringBuilder buffer) {
40+
this.buffer = buffer;
41+
this.expressionVisitor = expressionVisitor;
42+
}
4343

44-
public StringBuilder getBuffer() {
45-
return buffer;
46-
}
44+
public StringBuilder getBuffer() {
45+
return buffer;
46+
}
4747

48-
public void setBuffer(StringBuilder buffer) {
49-
this.buffer = buffer;
50-
}
48+
public void setBuffer(StringBuilder buffer) {
49+
this.buffer = buffer;
50+
}
5151

52-
public void deParse(SetStatement set) {
53-
buffer.append("SET ").append(set.getName());
54-
buffer.append(" = ");
52+
public void deParse(SetStatement set) {
53+
buffer.append("SET ").append(set.getName());
54+
if (set.isUseEqual()) {
55+
buffer.append(" =");
56+
}
57+
buffer.append(" ");
5558
set.getExpression().accept(expressionVisitor);
56-
}
59+
}
5760

58-
public ExpressionVisitor getExpressionVisitor() {
59-
return expressionVisitor;
60-
}
61+
public ExpressionVisitor getExpressionVisitor() {
62+
return expressionVisitor;
63+
}
6164

62-
public void setExpressionVisitor(ExpressionVisitor visitor) {
63-
expressionVisitor = visitor;
64-
}
65+
public void setExpressionVisitor(ExpressionVisitor visitor) {
66+
expressionVisitor = visitor;
67+
}
6568
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,11 +411,12 @@ void error_skipto(int kind) {
411411
SetStatement Set(): {
412412
String name;
413413
Expression value;
414+
boolean useEqual = false;
414415
}
415416
{
416-
<K_SET> name = RelObjectNameExt() "=" value=SimpleExpression()
417+
<K_SET> name = RelObjectNameExt() ["=" { useEqual=true; } ] value=SimpleExpression()
417418
{
418-
return new SetStatement(name,value);
419+
return new SetStatement(name,value).setUseEqual(useEqual);
419420
}
420421
}
421422

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,13 @@ public void testSimpleSet() throws JSQLParserException {
5757
assertSqlCanBeParsedAndDeparsed("SET statement_timeout = 0");
5858
}
5959

60+
@Test
61+
public void testIssue373() throws JSQLParserException {
62+
assertSqlCanBeParsedAndDeparsed("SET deferred_name_resolution true");
63+
}
64+
65+
@Test
66+
public void testIssue373_2() throws JSQLParserException {
67+
assertSqlCanBeParsedAndDeparsed("SET tester 5");
68+
}
6069
}

0 commit comments

Comments
 (0)