Skip to content

Commit fc35416

Browse files
committed
Merge origin/master
2 parents 6711f60 + 13503ed commit fc35416

File tree

17 files changed

+294
-36
lines changed

17 files changed

+294
-36
lines changed

src/main/java/net/sf/jsqlparser/parser/feature/Feature.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import net.sf.jsqlparser.statement.DescribeStatement;
2323
import net.sf.jsqlparser.statement.ExplainStatement;
2424
import net.sf.jsqlparser.statement.SetStatement;
25+
import net.sf.jsqlparser.statement.ResetStatement;
2526
import net.sf.jsqlparser.statement.ShowColumnsStatement;
2627
import net.sf.jsqlparser.statement.ShowStatement;
2728
import net.sf.jsqlparser.statement.UseStatement;
@@ -603,7 +604,10 @@ public enum Feature {
603604
* @see SetStatement
604605
*/
605606
set,
606-
607+
/**
608+
* @see ResetStatement
609+
*/
610+
reset,
607611
/**
608612
* @see Pivot
609613
*/
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2019 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement;
11+
12+
13+
public final class ResetStatement implements Statement {
14+
15+
private String name = "";
16+
17+
public ResetStatement() {
18+
// empty constructor
19+
}
20+
21+
public ResetStatement(String name) {
22+
add(name);
23+
}
24+
25+
public void add(String name) {
26+
this.name = name;
27+
}
28+
29+
public String getName() {
30+
return name;
31+
}
32+
33+
public void setName(String name) {
34+
this.name = name;
35+
}
36+
37+
@Override
38+
public String toString() {
39+
StringBuilder b = new StringBuilder("RESET ").append(name);
40+
return b.toString();
41+
}
42+
43+
@Override
44+
public void accept(StatementVisitor statementVisitor) {
45+
statementVisitor.visit(this);
46+
}
47+
48+
}

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

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,23 @@
1212
import java.util.ArrayList;
1313
import java.util.List;
1414
import net.sf.jsqlparser.expression.Expression;
15+
import net.sf.jsqlparser.statement.select.PlainSelect;
1516

1617
public final class SetStatement implements Statement {
1718

19+
private String effectParameter;
1820
private final List<NameExpr> values = new ArrayList<>();
1921

2022
public SetStatement() {
2123
// empty constructor
2224
}
2325

24-
public SetStatement(String name, Expression expression) {
25-
add(name, expression, true);
26+
public SetStatement(String name, List<Expression> value) {
27+
add(name, value, true);
2628
}
2729

28-
public void add(String name, Expression expression, boolean useEqual) {
29-
values.add(new NameExpr(name, expression, useEqual));
30+
public void add(String name, List<Expression> value, boolean useEqual) {
31+
values.add(new NameExpr(name, value, useEqual));
3032
}
3133

3234
public void remove(int idx) {
@@ -80,33 +82,39 @@ public void setName(int idx, String name) {
8082
values.get(idx).name = name;
8183
}
8284

83-
public Expression getExpression(int idx) {
84-
return values.get(idx).expression;
85+
public List<Expression> getExpressions(int idx) {
86+
return values.get(idx).expressions;
8587
}
8688

87-
public Expression getExpression() {
88-
return getExpression(0);
89+
public List<Expression> getExpressions() {
90+
return getExpressions(0);
8991
}
9092

91-
public void setExpression(int idx, Expression expression) {
92-
values.get(idx).expression = expression;
93+
public void setExpressions(int idx, List<Expression> expressions) {
94+
values.get(idx).expressions = expressions;
9395
}
9496

95-
public void setExpression(Expression expression) {
96-
setExpression(0, expression);
97+
public void setExpressions(List<Expression> expressions) {
98+
setExpressions(0, expressions);
9799
}
98100

99101
private String toString(NameExpr ne) {
100-
return ne.name + (ne.useEqual ? " = " : " ") + ne.expression.toString();
102+
return ne.name + (ne.useEqual ? " = " : " ") +
103+
PlainSelect.getStringList(ne.expressions, true, false);
101104
}
102105

103106
@Override
104107
public String toString() {
105108
StringBuilder b = new StringBuilder("SET ");
106-
109+
if (effectParameter != null) {
110+
b.append(effectParameter).append(" ");
111+
}
112+
boolean addComma = false;
107113
for (NameExpr ne : values) {
108-
if (b.length() != 4) {
114+
if (addComma) {
109115
b.append(", ");
116+
} else {
117+
addComma = true;
110118
}
111119
b.append(toString(ne));
112120
}
@@ -119,20 +127,28 @@ public void accept(StatementVisitor statementVisitor) {
119127
statementVisitor.visit(this);
120128
}
121129

122-
public <E extends Expression> E getExpression(Class<E> type) {
123-
return type.cast(getExpression());
124-
}
125-
126130
static class NameExpr {
127131

128132
private String name;
129-
private Expression expression;
133+
private List<Expression> expressions;
130134
private boolean useEqual;
131135

132-
public NameExpr(String name, Expression expr, boolean useEqual) {
136+
public NameExpr(String name, List<Expression> expressions, boolean useEqual) {
133137
this.name = name;
134-
this.expression = expr;
138+
this.expressions = expressions;
135139
this.useEqual = useEqual;
136140
}
137141
}
142+
143+
public String getEffectParameter() {
144+
return effectParameter;
145+
}
146+
147+
public void setEffectParameter(String effectParameter) {
148+
this.effectParameter = effectParameter;
149+
}
150+
public SetStatement withEffectParameter(String effectParameter) {
151+
this.effectParameter = effectParameter;
152+
return this;
153+
}
138154
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ public interface StatementVisitor {
7070

7171
void visit(SetStatement set);
7272

73+
void visit(ResetStatement reset);
74+
7375
void visit(ShowColumnsStatement set);
7476

7577
void visit(ShowTablesStatement showTables);

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,11 @@ public void visit(SetStatement set) {
123123

124124
}
125125

126+
@Override
127+
public void visit(ResetStatement reset) {
128+
129+
}
130+
126131
@Override
127132
public void visit(Merge merge) {
128133

src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,11 @@ public void visit(SetStatement set) {
771771
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
772772
}
773773

774+
@Override
775+
public void visit(ResetStatement reset) {
776+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
777+
}
778+
774779
@Override
775780
public void visit(ShowColumnsStatement set) {
776781
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2019 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.util.deparser;
11+
12+
import net.sf.jsqlparser.expression.ExpressionVisitor;
13+
import net.sf.jsqlparser.statement.ResetStatement;
14+
15+
public class ResetStatementDeParser extends AbstractDeParser<ResetStatement> {
16+
17+
private ExpressionVisitor expressionVisitor;
18+
19+
public ResetStatementDeParser(ExpressionVisitor expressionVisitor, StringBuilder buffer) {
20+
super(buffer);
21+
this.expressionVisitor = expressionVisitor;
22+
}
23+
24+
@Override
25+
public void deParse(ResetStatement set) {
26+
buffer.append("RESET ");
27+
buffer.append(set.getName());
28+
}
29+
30+
public ExpressionVisitor getExpressionVisitor() {
31+
return expressionVisitor;
32+
}
33+
34+
public void setExpressionVisitor(ExpressionVisitor visitor) {
35+
expressionVisitor = visitor;
36+
}
37+
}

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@
99
*/
1010
package net.sf.jsqlparser.util.deparser;
1111

12+
import net.sf.jsqlparser.expression.Expression;
1213
import net.sf.jsqlparser.expression.ExpressionVisitor;
1314
import net.sf.jsqlparser.statement.SetStatement;
1415

16+
import java.util.List;
17+
1518
public class SetStatementDeParser extends AbstractDeParser<SetStatement> {
1619

1720
private ExpressionVisitor expressionVisitor;
@@ -24,7 +27,9 @@ public SetStatementDeParser(ExpressionVisitor expressionVisitor, StringBuilder b
2427
@Override
2528
public void deParse(SetStatement set) {
2629
buffer.append("SET ");
27-
30+
if (set.getEffectParameter() != null) {
31+
buffer.append(set.getEffectParameter()).append(" ");
32+
}
2833
for (int i = 0; i < set.getCount(); i++) {
2934
if (i > 0) {
3035
buffer.append(", ");
@@ -34,7 +39,13 @@ public void deParse(SetStatement set) {
3439
buffer.append(" =");
3540
}
3641
buffer.append(" ");
37-
set.getExpression(i).accept(expressionVisitor);
42+
List<Expression> expressions = set.getExpressions(i);
43+
for (int j = 0; j < expressions.size(); j++) {
44+
if (j > 0) {
45+
buffer.append(", ");
46+
}
47+
expressions.get(j).accept(expressionVisitor);
48+
}
3849
}
3950

4051
}

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import net.sf.jsqlparser.statement.DeclareStatement;
1919
import net.sf.jsqlparser.statement.DescribeStatement;
2020
import net.sf.jsqlparser.statement.ExplainStatement;
21+
import net.sf.jsqlparser.statement.ResetStatement;
2122
import net.sf.jsqlparser.statement.SetStatement;
2223
import net.sf.jsqlparser.statement.ShowColumnsStatement;
2324
import net.sf.jsqlparser.statement.ShowStatement;
@@ -53,9 +54,9 @@
5354

5455
public class StatementDeParser extends AbstractDeParser<Statement> implements StatementVisitor {
5556

56-
private ExpressionDeParser expressionDeParser;
57+
private final ExpressionDeParser expressionDeParser;
5758

58-
private SelectDeParser selectDeParser;
59+
private final SelectDeParser selectDeParser;
5960

6061
public StatementDeParser(StringBuilder buffer) {
6162
this(new ExpressionDeParser(), new SelectDeParser(), buffer);
@@ -199,6 +200,16 @@ public void visit(SetStatement set) {
199200
setStatementDeparser.deParse(set);
200201
}
201202

203+
@Override
204+
public void visit(ResetStatement reset) {
205+
selectDeParser.setBuffer(buffer);
206+
expressionDeParser.setSelectVisitor(selectDeParser);
207+
expressionDeParser.setBuffer(buffer);
208+
ResetStatementDeParser setStatementDeparser = new ResetStatementDeParser(expressionDeParser, buffer);
209+
selectDeParser.setExpressionVisitor(expressionDeParser);
210+
setStatementDeparser.deParse(reset);
211+
}
212+
202213
@Override
203214
public void visit(Merge merge) {
204215
// TODO implementation of a deparser

src/main/java/net/sf/jsqlparser/util/validation/feature/PostgresqlVersion.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ public enum PostgresqlVersion implements Version {
144144
Feature.grant,
145145
// https://www.postgresql.org/docs/current/sql-set.html
146146
Feature.set,
147+
// https://www.postgresql.org/docs/current/sql-reset.html
148+
Feature.reset,
147149
// https://www.postgresql.org/docs/current/sql-commit.html
148150
Feature.commit
149151
)),

0 commit comments

Comments
 (0)