Skip to content

Commit 955274b

Browse files
committed
corrected InsertDeParser to deliver same results like toString
1 parent a3ec55a commit 955274b

File tree

2 files changed

+100
-80
lines changed

2 files changed

+100
-80
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public void deParse(Insert insert) {
5353
buffer.append("INSERT INTO ");
5454
buffer.append(insert.getTable().getWholeTableName());
5555
if (insert.getColumns() != null) {
56-
buffer.append("(");
56+
buffer.append(" (");
5757
for (Iterator<Column> iter = insert.getColumns().iterator(); iter.hasNext();) {
5858
Column column = iter.next();
5959
buffer.append(column.getColumnName());
Lines changed: 99 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,99 @@
1-
package net.sf.jsqlparser.test.insert;
2-
3-
import java.io.StringReader;
4-
5-
import junit.framework.TestCase;
6-
import net.sf.jsqlparser.JSQLParserException;
7-
import net.sf.jsqlparser.expression.DoubleValue;
8-
import net.sf.jsqlparser.expression.JdbcParameter;
9-
import net.sf.jsqlparser.expression.LongValue;
10-
import net.sf.jsqlparser.expression.StringValue;
11-
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
12-
import net.sf.jsqlparser.parser.CCJSqlParserManager;
13-
import net.sf.jsqlparser.schema.Column;
14-
import net.sf.jsqlparser.schema.Table;
15-
import net.sf.jsqlparser.statement.insert.Insert;
16-
import net.sf.jsqlparser.statement.select.PlainSelect;
17-
import net.sf.jsqlparser.statement.select.SubSelect;
18-
19-
public class InsertTest extends TestCase {
20-
CCJSqlParserManager parserManager = new CCJSqlParserManager();
21-
22-
public InsertTest(String arg0) {
23-
super(arg0);
24-
}
25-
26-
public void testRegularInsert() throws JSQLParserException {
27-
String statement = "INSERT INTO mytable (col1, col2, col3) VALUES (?, 'sadfsd', 234)";
28-
Insert insert = (Insert) parserManager.parse(new StringReader(statement));
29-
assertEquals("mytable", insert.getTable().getName());
30-
assertEquals(3, insert.getColumns().size());
31-
assertEquals("col1", ((Column) insert.getColumns().get(0)).getColumnName());
32-
assertEquals("col2", ((Column) insert.getColumns().get(1)).getColumnName());
33-
assertEquals("col3", ((Column) insert.getColumns().get(2)).getColumnName());
34-
assertEquals(3, ((ExpressionList) insert.getItemsList()).getExpressions().size());
35-
assertTrue(((ExpressionList) insert.getItemsList()).getExpressions().get(0) instanceof JdbcParameter);
36-
assertEquals("sadfsd",
37-
((StringValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(1)).getValue());
38-
assertEquals(234, ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(2)).getValue());
39-
assertEquals(statement, "" + insert);
40-
41-
statement = "INSERT INTO myschema.mytable VALUES (?, ?, 2.3)";
42-
insert = (Insert) parserManager.parse(new StringReader(statement));
43-
assertEquals("myschema.mytable", insert.getTable().getWholeTableName());
44-
assertEquals(3, ((ExpressionList) insert.getItemsList()).getExpressions().size());
45-
assertTrue(((ExpressionList) insert.getItemsList()).getExpressions().get(0) instanceof JdbcParameter);
46-
assertEquals(2.3, ((DoubleValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(2)).getValue(),
47-
0.0);
48-
assertEquals(statement, "" + insert);
49-
50-
}
51-
52-
public void testInsertWithKeywordValue() throws JSQLParserException {
53-
String statement = "INSERT INTO mytable (col1) VALUE ('val1')";
54-
Insert insert = (Insert) parserManager.parse(new StringReader(statement));
55-
assertEquals("mytable", insert.getTable().getName());
56-
assertEquals(1, insert.getColumns().size());
57-
assertEquals("col1", ((Column) insert.getColumns().get(0)).getColumnName());
58-
assertEquals("val1",
59-
((StringValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(0)).getValue());
60-
assertEquals("INSERT INTO mytable (col1) VALUES ('val1')", insert.toString());
61-
}
62-
63-
public void testInsertFromSelect() throws JSQLParserException {
64-
String statement = "INSERT INTO mytable (col1, col2, col3) SELECT * FROM mytable2";
65-
Insert insert = (Insert) parserManager.parse(new StringReader(statement));
66-
assertEquals("mytable", insert.getTable().getName());
67-
assertEquals(3, insert.getColumns().size());
68-
assertEquals("col1", ((Column) insert.getColumns().get(0)).getColumnName());
69-
assertEquals("col2", ((Column) insert.getColumns().get(1)).getColumnName());
70-
assertEquals("col3", ((Column) insert.getColumns().get(2)).getColumnName());
71-
assertTrue(insert.getItemsList() instanceof SubSelect);
72-
assertEquals("mytable2",
73-
((Table) ((PlainSelect) ((SubSelect) insert.getItemsList()).getSelectBody()).getFromItem()).getName());
74-
75-
// toString uses brakets
76-
String statementToString = "INSERT INTO mytable (col1, col2, col3) (SELECT * FROM mytable2)";
77-
assertEquals(statementToString, "" + insert);
78-
}
79-
}
1+
package net.sf.jsqlparser.test.insert;
2+
3+
import java.io.StringReader;
4+
import static junit.framework.Assert.assertEquals;
5+
6+
import junit.framework.TestCase;
7+
import net.sf.jsqlparser.JSQLParserException;
8+
import net.sf.jsqlparser.expression.DoubleValue;
9+
import net.sf.jsqlparser.expression.JdbcParameter;
10+
import net.sf.jsqlparser.expression.LongValue;
11+
import net.sf.jsqlparser.expression.StringValue;
12+
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
13+
import net.sf.jsqlparser.parser.CCJSqlParserManager;
14+
import net.sf.jsqlparser.schema.Column;
15+
import net.sf.jsqlparser.schema.Table;
16+
import net.sf.jsqlparser.statement.Statement;
17+
import net.sf.jsqlparser.statement.insert.Insert;
18+
import net.sf.jsqlparser.statement.select.PlainSelect;
19+
import net.sf.jsqlparser.statement.select.SubSelect;
20+
import net.sf.jsqlparser.util.deparser.StatementDeParser;
21+
22+
public class InsertTest extends TestCase {
23+
CCJSqlParserManager parserManager = new CCJSqlParserManager();
24+
25+
public InsertTest(String arg0) {
26+
super(arg0);
27+
}
28+
29+
public void testRegularInsert() throws JSQLParserException {
30+
String statement = "INSERT INTO mytable (col1, col2, col3) VALUES (?, 'sadfsd', 234)";
31+
Insert insert = (Insert) parserManager.parse(new StringReader(statement));
32+
assertEquals("mytable", insert.getTable().getName());
33+
assertEquals(3, insert.getColumns().size());
34+
assertEquals("col1", ((Column) insert.getColumns().get(0)).getColumnName());
35+
assertEquals("col2", ((Column) insert.getColumns().get(1)).getColumnName());
36+
assertEquals("col3", ((Column) insert.getColumns().get(2)).getColumnName());
37+
assertEquals(3, ((ExpressionList) insert.getItemsList()).getExpressions().size());
38+
assertTrue(((ExpressionList) insert.getItemsList()).getExpressions().get(0) instanceof JdbcParameter);
39+
assertEquals("sadfsd",
40+
((StringValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(1)).getValue());
41+
assertEquals(234, ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(2)).getValue());
42+
assertEquals(statement, "" + insert);
43+
44+
statement = "INSERT INTO myschema.mytable VALUES (?, ?, 2.3)";
45+
insert = (Insert) parserManager.parse(new StringReader(statement));
46+
assertEquals("myschema.mytable", insert.getTable().getWholeTableName());
47+
assertEquals(3, ((ExpressionList) insert.getItemsList()).getExpressions().size());
48+
assertTrue(((ExpressionList) insert.getItemsList()).getExpressions().get(0) instanceof JdbcParameter);
49+
assertEquals(2.3, ((DoubleValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(2)).getValue(),
50+
0.0);
51+
assertEquals(statement, "" + insert);
52+
53+
}
54+
55+
public void testInsertWithKeywordValue() throws JSQLParserException {
56+
String statement = "INSERT INTO mytable (col1) VALUE ('val1')";
57+
Insert insert = (Insert) parserManager.parse(new StringReader(statement));
58+
assertEquals("mytable", insert.getTable().getName());
59+
assertEquals(1, insert.getColumns().size());
60+
assertEquals("col1", ((Column) insert.getColumns().get(0)).getColumnName());
61+
assertEquals("val1",
62+
((StringValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(0)).getValue());
63+
assertEquals("INSERT INTO mytable (col1) VALUES ('val1')", insert.toString());
64+
}
65+
66+
public void testInsertFromSelect() throws JSQLParserException {
67+
String statement = "INSERT INTO mytable (col1, col2, col3) SELECT * FROM mytable2";
68+
Insert insert = (Insert) parserManager.parse(new StringReader(statement));
69+
assertEquals("mytable", insert.getTable().getName());
70+
assertEquals(3, insert.getColumns().size());
71+
assertEquals("col1", ((Column) insert.getColumns().get(0)).getColumnName());
72+
assertEquals("col2", ((Column) insert.getColumns().get(1)).getColumnName());
73+
assertEquals("col3", ((Column) insert.getColumns().get(2)).getColumnName());
74+
assertTrue(insert.getItemsList() instanceof SubSelect);
75+
assertEquals("mytable2",
76+
((Table) ((PlainSelect) ((SubSelect) insert.getItemsList()).getSelectBody()).getFromItem()).getName());
77+
78+
// toString uses brakets
79+
String statementToString = "INSERT INTO mytable (col1, col2, col3) (SELECT * FROM mytable2)";
80+
assertEquals(statementToString, "" + insert);
81+
}
82+
83+
public void testInsertMultiRowValue() throws JSQLParserException {
84+
assertSqlCanBeParsedAndDeparsed("INSERT INTO mytable (col1, col2) VALUES (a, b)");
85+
}
86+
87+
private void assertSqlCanBeParsedAndDeparsed(String statement) throws JSQLParserException {
88+
Statement parsed = parserManager.parse(new StringReader(statement));
89+
assertStatementCanBeDeparsedAs(parsed, statement);
90+
}
91+
92+
private void assertStatementCanBeDeparsedAs(Statement parsed, String statement) {
93+
assertEquals(statement, parsed.toString());
94+
95+
StatementDeParser deParser = new StatementDeParser(new StringBuilder());
96+
parsed.accept(deParser);
97+
assertEquals(statement, deParser.getBuffer().toString());
98+
}
99+
}

0 commit comments

Comments
 (0)