2929import net .sf .jsqlparser .statement .Statement ;
3030import net .sf .jsqlparser .statement .StatementVisitor ;
3131import net .sf .jsqlparser .statement .select .PlainSelect ;
32+ import net .sf .jsqlparser .statement .select .Select ;
3233import 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 */
3939public 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