Skip to content

Commit a4de602

Browse files
committed
improved insert clause
1 parent 24dc08d commit a4de602

File tree

6 files changed

+264
-184
lines changed

6 files changed

+264
-184
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ Also I would like to know about needed examples or documentation stuff.
2323

2424
## Extensions in the latest SNAPSHOT version 0.9.1
2525

26+
* Improved support for insert table using with clause.
27+
28+
```sql
29+
INSERT INTO mytable (mycolumn) WITH a AS (SELECT mycolumn FROM mytable) SELECT mycolumn FROM a
30+
```
31+
2632
* Support for ```limit 0``` and ```limit null``` clause.
2733
* Window functions now allow simple expressions for partition by.
2834
* Support for create table as select syntax:

src/main/java/net/sf/jsqlparser/statement/insert/Insert.java

Lines changed: 107 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -29,70 +29,72 @@
2929
import net.sf.jsqlparser.statement.Statement;
3030
import net.sf.jsqlparser.statement.StatementVisitor;
3131
import net.sf.jsqlparser.statement.select.PlainSelect;
32+
import net.sf.jsqlparser.statement.select.Select;
3233
import net.sf.jsqlparser.statement.select.SelectExpressionItem;
3334

3435
/**
35-
* The insert statement. Every column name in
36-
* <code>columnNames</code> matches an item in
37-
* <code>itemsList</code>
36+
* The insert statement. Every column name in <code>columnNames</code> matches
37+
* an item in <code>itemsList</code>
3838
*/
3939
public class Insert implements Statement {
4040

41-
private Table table;
42-
private List<Column> columns;
43-
private ItemsList itemsList;
44-
private boolean useValues = true;
45-
41+
private Table table;
42+
private List<Column> columns;
43+
private ItemsList itemsList;
44+
private boolean useValues = true;
45+
private Select select;
46+
private boolean useSelectBrackets = true;
47+
4648
private boolean returningAllColumns = false;
47-
49+
4850
private List<SelectExpressionItem> returningExpressionList = null;
4951

50-
@Override
51-
public void accept(StatementVisitor statementVisitor) {
52-
statementVisitor.visit(this);
53-
}
54-
55-
public Table getTable() {
56-
return table;
57-
}
58-
59-
public void setTable(Table name) {
60-
table = name;
61-
}
62-
63-
/**
64-
* Get the columns (found in "INSERT INTO (col1,col2..) [...]" )
65-
*
66-
* @return a list of {@link net.sf.jsqlparser.schema.Column}
67-
*/
68-
public List<Column> getColumns() {
69-
return columns;
70-
}
71-
72-
public void setColumns(List<Column> list) {
73-
columns = list;
74-
}
75-
76-
/**
77-
* Get the values (as VALUES (...) or SELECT)
78-
*
79-
* @return the values of the insert
80-
*/
81-
public ItemsList getItemsList() {
82-
return itemsList;
83-
}
84-
85-
public void setItemsList(ItemsList list) {
86-
itemsList = list;
87-
}
88-
89-
public boolean isUseValues() {
90-
return useValues;
91-
}
92-
93-
public void setUseValues(boolean useValues) {
94-
this.useValues = useValues;
95-
}
52+
@Override
53+
public void accept(StatementVisitor statementVisitor) {
54+
statementVisitor.visit(this);
55+
}
56+
57+
public Table getTable() {
58+
return table;
59+
}
60+
61+
public void setTable(Table name) {
62+
table = name;
63+
}
64+
65+
/**
66+
* Get the columns (found in "INSERT INTO (col1,col2..) [...]" )
67+
*
68+
* @return a list of {@link net.sf.jsqlparser.schema.Column}
69+
*/
70+
public List<Column> getColumns() {
71+
return columns;
72+
}
73+
74+
public void setColumns(List<Column> list) {
75+
columns = list;
76+
}
77+
78+
/**
79+
* Get the values (as VALUES (...) or SELECT)
80+
*
81+
* @return the values of the insert
82+
*/
83+
public ItemsList getItemsList() {
84+
return itemsList;
85+
}
86+
87+
public void setItemsList(ItemsList list) {
88+
itemsList = list;
89+
}
90+
91+
public boolean isUseValues() {
92+
return useValues;
93+
}
94+
95+
public void setUseValues(boolean useValues) {
96+
this.useValues = useValues;
97+
}
9698

9799
public boolean isReturningAllColumns() {
98100
return returningAllColumns;
@@ -110,26 +112,56 @@ public void setReturningExpressionList(List<SelectExpressionItem> returningExpre
110112
this.returningExpressionList = returningExpressionList;
111113
}
112114

113-
@Override
114-
public String toString() {
115-
String sql = "";
116-
117-
sql = "INSERT INTO ";
118-
sql += table + " ";
119-
sql += ((columns != null) ? PlainSelect.getStringList(columns, true, true) + " " : "");
120-
121-
if (useValues) {
122-
sql += "VALUES " + itemsList + "";
123-
} else {
124-
sql += "" + itemsList + "";
125-
}
126-
127-
if (isReturningAllColumns())
128-
sql += " RETURNING *";
129-
else if (getReturningExpressionList()!=null) {
130-
sql+= " RETURNING " + PlainSelect.getStringList(getReturningExpressionList(), true, false);
115+
public Select getSelect() {
116+
return select;
117+
}
118+
119+
public void setSelect(Select select) {
120+
this.select = select;
121+
}
122+
123+
public boolean isUseSelectBrackets() {
124+
return useSelectBrackets;
125+
}
126+
127+
public void setUseSelectBrackets(boolean useSelectBrackets) {
128+
this.useSelectBrackets = useSelectBrackets;
129+
}
130+
131+
@Override
132+
public String toString() {
133+
StringBuilder sql = new StringBuilder();
134+
135+
sql.append("INSERT INTO ");
136+
sql.append(table).append(" ");
137+
if (columns != null) {
138+
sql.append(PlainSelect.getStringList(columns, true, true)).append(" ");
139+
}
140+
141+
if (useValues) {
142+
sql.append("VALUES ");
131143
}
132144

133-
return sql;
134-
}
145+
if (itemsList != null) {
146+
sql.append(itemsList);
147+
}
148+
149+
if (useSelectBrackets) {
150+
sql.append("(");
151+
}
152+
if (select != null) {
153+
sql.append(select);
154+
}
155+
if (useSelectBrackets) {
156+
sql.append(")");
157+
}
158+
159+
if (isReturningAllColumns()) {
160+
sql.append(" RETURNING *");
161+
} else if (getReturningExpressionList() != null) {
162+
sql.append(" RETURNING ").append(PlainSelect.getStringList(getReturningExpressionList(), true, false));
163+
}
164+
165+
return sql.toString();
166+
}
135167
}

0 commit comments

Comments
 (0)