Skip to content

Commit e2e4d80

Browse files
committed
- insertet toString in Update
- modified Update deparser to deliver better results
1 parent 0d5c88f commit e2e4d80

File tree

4 files changed

+69
-3
lines changed

4 files changed

+69
-3
lines changed

src/main/java/net/sf/jsqlparser/statement/update/Update.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import net.sf.jsqlparser.schema.Table;
2929
import net.sf.jsqlparser.statement.Statement;
3030
import net.sf.jsqlparser.statement.StatementVisitor;
31+
import net.sf.jsqlparser.statement.select.FromItem;
32+
import net.sf.jsqlparser.statement.select.Join;
3133

3234
/**
3335
* The update statement.
@@ -38,6 +40,8 @@ public class Update implements Statement {
3840
private Expression where;
3941
private List<Column> columns;
4042
private List<Expression> expressions;
43+
private FromItem fromItem;
44+
private List<Join> joins;
4145

4246
@Override
4347
public void accept(StatementVisitor statementVisitor) {
@@ -87,4 +91,39 @@ public void setColumns(List<Column> list) {
8791
public void setExpressions(List<Expression> list) {
8892
expressions = list;
8993
}
94+
95+
public FromItem getFromItem() {
96+
return fromItem;
97+
}
98+
99+
public void setFromItem(FromItem fromItem) {
100+
this.fromItem = fromItem;
101+
}
102+
103+
public List<Join> getJoins() {
104+
return joins;
105+
}
106+
107+
public void setJoins(List<Join> joins) {
108+
this.joins = joins;
109+
}
110+
111+
@Override
112+
public String toString() {
113+
StringBuilder b = new StringBuilder("UPDATE ");
114+
b.append(getTable()).append(" SET ");
115+
for (int i = 0; i < getColumns().size(); i++) {
116+
if (i !=0 ) {
117+
b.append(", ");
118+
}
119+
b.append(columns.get(i)).append(" = ");
120+
b.append(expressions.get(i));
121+
}
122+
123+
if (where != null) {
124+
b.append(" WHERE ");
125+
b.append(where);
126+
}
127+
return b.toString();
128+
}
90129
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ public void setBuffer(StringBuilder buffer) {
5858
}
5959

6060
public void deParse(Update update) {
61-
buffer.append("UPDATE ").append(update.getTable().getWholeTableName()).append(" SET ");
61+
buffer.append("UPDATE ").append(update.getTable()).append(" SET ");
6262
for (int i = 0; i < update.getColumns().size(); i++) {
6363
Column column = (Column) update.getColumns().get(i);
64-
buffer.append(column.getWholeColumnName()).append("=");
64+
buffer.append(column.getWholeColumnName()).append(" = ");
6565

6666
Expression expression = (Expression) update.getExpressions().get(i);
6767
expression.accept(expressionVisitor);

src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,18 +319,25 @@ Update Update():
319319
List<Expression> expList = new ArrayList<Expression>();
320320
List<Column> columns = new ArrayList<Column>();
321321
Expression value = null;
322-
322+
FromItem fromItem = null;
323+
List<Join> joins = null;
323324
}
324325
{
325326
<K_UPDATE> table=TableWithAlias()
326327
<K_SET> tableColumn=Column() "=" value=SimpleExpression() { columns.add(tableColumn); expList.add(value); }
327328
("," tableColumn=Column() "=" value=SimpleExpression() { columns.add(tableColumn); expList.add(value); } )*
328329

330+
[ <K_FROM>
331+
fromItem=FromItem()
332+
joins=JoinsList() ]
333+
329334
[ where=WhereClause() { update.setWhere(where); } ]
330335
{
331336
update.setColumns(columns);
332337
update.setExpressions(expList);
333338
update.setTable(table);
339+
update.setFromItem(fromItem);
340+
update.setJoins(joins);
334341
return update;
335342
}
336343
}

src/test/java/net/sf/jsqlparser/test/update/UpdateTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.sf.jsqlparser.test.update;
22

33
import java.io.StringReader;
4+
import static junit.framework.Assert.assertEquals;
45

56
import junit.framework.TestCase;
67
import net.sf.jsqlparser.JSQLParserException;
@@ -10,7 +11,9 @@
1011
import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals;
1112
import net.sf.jsqlparser.parser.CCJSqlParserManager;
1213
import net.sf.jsqlparser.schema.Column;
14+
import net.sf.jsqlparser.statement.Statement;
1315
import net.sf.jsqlparser.statement.update.Update;
16+
import net.sf.jsqlparser.util.deparser.StatementDeParser;
1417

1518
public class UpdateTest extends TestCase {
1619

@@ -39,4 +42,21 @@ public void testUpdateWAlias() throws JSQLParserException {
3942
String statement = "UPDATE table1 A SET A.column = 'XXX' WHERE A.cod_table = 'YYY'";
4043
Update update = (Update) parserManager.parse(new StringReader(statement));
4144
}
45+
46+
public void testUpdateWithDeparser() throws JSQLParserException {
47+
assertSqlCanBeParsedAndDeparsed("UPDATE table1 AS A SET A.column = 'XXX' WHERE A.cod_table = 'YYY'");
48+
}
49+
50+
private void assertSqlCanBeParsedAndDeparsed(String statement) throws JSQLParserException {
51+
Statement parsed = parserManager.parse(new StringReader(statement));
52+
assertStatementCanBeDeparsedAs(parsed, statement);
53+
}
54+
55+
private void assertStatementCanBeDeparsedAs(Statement parsed, String statement) {
56+
assertEquals(statement, parsed.toString());
57+
58+
StatementDeParser deParser = new StatementDeParser(new StringBuilder());
59+
parsed.accept(deParser);
60+
assertEquals(statement, deParser.getBuffer().toString());
61+
}
4262
}

0 commit comments

Comments
 (0)