|
9 | 9 | */ |
10 | 10 | package net.sf.jsqlparser.statement.replace; |
11 | 11 |
|
| 12 | +import net.sf.jsqlparser.expression.Expression; |
| 13 | +import net.sf.jsqlparser.expression.operators.relational.ExpressionList; |
| 14 | +import net.sf.jsqlparser.statement.upsert.Upsert; |
| 15 | + |
12 | 16 | import java.util.ArrayList; |
13 | 17 | import java.util.Collection; |
14 | 18 | import java.util.Collections; |
15 | 19 | import java.util.List; |
16 | 20 | import java.util.Optional; |
17 | | -import net.sf.jsqlparser.expression.Expression; |
18 | | -import net.sf.jsqlparser.expression.operators.relational.ItemsList; |
19 | | -import net.sf.jsqlparser.schema.Column; |
20 | | -import net.sf.jsqlparser.schema.Table; |
21 | | -import net.sf.jsqlparser.statement.Statement; |
22 | | -import net.sf.jsqlparser.statement.StatementVisitor; |
23 | | -import net.sf.jsqlparser.statement.select.PlainSelect; |
24 | | - |
25 | | -public class Replace implements Statement { |
26 | | - |
27 | | - private Table table; |
28 | | - private List<Column> columns; |
29 | | - private ItemsList itemsList; |
30 | | - private List<Expression> expressions; |
31 | | - private boolean useValues = true; |
32 | | - private boolean useIntoTables = false; |
33 | | - |
34 | | - @Override |
35 | | - public void accept(StatementVisitor statementVisitor) { |
36 | | - statementVisitor.visit(this); |
37 | | - } |
38 | 21 |
|
39 | | - public Table getTable() { |
40 | | - return table; |
41 | | - } |
| 22 | +/** |
| 23 | + * Not Standard compliant REPLACE Statement |
| 24 | + * @deprecated |
| 25 | + * This class has been merged into the UPSERT statement and should not longer been used. |
| 26 | + * <p> Use {@link Upsert} instead. |
| 27 | + * |
| 28 | + */ |
42 | 29 |
|
43 | | - public void setTable(Table name) { |
44 | | - table = name; |
45 | | - } |
| 30 | +@Deprecated |
| 31 | +public class Replace extends Upsert { |
46 | 32 |
|
| 33 | + @Deprecated |
47 | 34 | public boolean isUseIntoTables() { |
48 | | - return useIntoTables; |
| 35 | + return super.isUsingInto(); |
49 | 36 | } |
50 | 37 |
|
| 38 | + @Deprecated |
51 | 39 | public void setUseIntoTables(boolean useIntoTables) { |
52 | | - this.useIntoTables = useIntoTables; |
53 | | - } |
54 | | - |
55 | | - public List<Column> getColumns() { |
56 | | - return columns; |
57 | | - } |
58 | | - |
59 | | - public ItemsList getItemsList() { |
60 | | - return itemsList; |
61 | | - } |
62 | | - |
63 | | - public void setColumns(List<Column> list) { |
64 | | - columns = list; |
65 | | - } |
66 | | - |
67 | | - public void setItemsList(ItemsList list) { |
68 | | - itemsList = list; |
| 40 | + super.setUsingInto( useIntoTables ); |
69 | 41 | } |
70 | 42 |
|
| 43 | + @Deprecated |
71 | 44 | /** |
72 | 45 | * A list of {@link net.sf.jsqlparser.expression.Expression}s (from a "REPLACE mytab SET |
73 | 46 | * col1=exp1, col2=exp2"). <br> |
74 | 47 | * it is null in case of a "REPLACE mytab (col1, col2) [...]" |
75 | 48 | */ |
76 | 49 | public List<Expression> getExpressions() { |
77 | | - return expressions; |
| 50 | + return super.getSetExpressions(); |
78 | 51 | } |
79 | 52 |
|
| 53 | + @Deprecated |
80 | 54 | public void setExpressions(List<Expression> list) { |
81 | | - expressions = list; |
82 | | - } |
83 | | - |
84 | | - public boolean isUseValues() { |
85 | | - return useValues; |
86 | | - } |
87 | | - |
88 | | - public void setUseValues(boolean useValues) { |
89 | | - this.useValues = useValues; |
90 | | - } |
91 | | - |
92 | | - @Override |
93 | | - public String toString() { |
94 | | - StringBuilder sql = new StringBuilder(); |
95 | | - sql.append("REPLACE "); |
96 | | - if (isUseIntoTables()) { |
97 | | - sql.append("INTO "); |
98 | | - } |
99 | | - sql.append(table); |
100 | | - |
101 | | - if (expressions != null && columns != null) { |
102 | | - // the SET col1=exp1, col2=exp2 case |
103 | | - sql.append(" SET "); |
104 | | - // each element from expressions match up with a column from columns. |
105 | | - for (int i = 0, s = columns.size(); i < s; i++) { |
106 | | - sql.append(columns.get(i)).append("=").append(expressions.get(i)); |
107 | | - sql.append( i < s - 1 |
108 | | - ? ", " |
109 | | - : "" ); |
110 | | - } |
111 | | - } else if (columns != null) { |
112 | | - // the REPLACE mytab (col1, col2) [...] case |
113 | | - sql.append(" ").append(PlainSelect.getStringList(columns, true, true)); |
114 | | - } |
115 | | - |
116 | | - if (itemsList != null) { |
117 | | - // REPLACE mytab SELECT * FROM mytab2 |
118 | | - // or VALUES ('as', ?, 565) |
119 | | - |
120 | | - if (useValues) { |
121 | | - sql.append(" VALUES"); |
122 | | - } |
123 | | - |
124 | | - sql.append(" ").append(itemsList); |
125 | | - } |
126 | | - |
127 | | - return sql.toString(); |
128 | | - } |
129 | | - |
130 | | - public Replace withUseValues(boolean useValues) { |
131 | | - this.setUseValues(useValues); |
132 | | - return this; |
| 55 | + super.setItemsList( new ExpressionList(list) ); |
133 | 56 | } |
134 | 57 |
|
| 58 | + @Deprecated |
135 | 59 | public Replace withUseIntoTables(boolean useIntoTables) { |
136 | | - this.setUseIntoTables(useIntoTables); |
137 | | - return this; |
138 | | - } |
139 | | - |
140 | | - public Replace withTable(Table table) { |
141 | | - this.setTable(table); |
142 | | - return this; |
143 | | - } |
144 | | - |
145 | | - public Replace withColumns(List<Column> columns) { |
146 | | - this.setColumns(columns); |
147 | | - return this; |
148 | | - } |
149 | | - |
150 | | - public Replace withItemsList(ItemsList itemsList) { |
151 | | - this.setItemsList(itemsList); |
| 60 | + super.setUsingInto(useIntoTables); |
152 | 61 | return this; |
153 | 62 | } |
154 | 63 |
|
| 64 | + @Deprecated |
155 | 65 | public Replace withExpressions(List<Expression> expressions) { |
156 | | - this.setExpressions(expressions); |
| 66 | + super.setItemsList( new ExpressionList(expressions) ); |
157 | 67 | return this; |
158 | 68 | } |
159 | 69 |
|
160 | | - public Replace addColumns(Column... columns) { |
161 | | - List<Column> collection = Optional.ofNullable(getColumns()).orElseGet(ArrayList::new); |
162 | | - Collections.addAll(collection, columns); |
163 | | - return this.withColumns(collection); |
164 | | - } |
165 | | - |
166 | | - public Replace addColumns(Collection<? extends Column> columns) { |
167 | | - List<Column> collection = Optional.ofNullable(getColumns()).orElseGet(ArrayList::new); |
168 | | - collection.addAll(columns); |
169 | | - return this.withColumns(collection); |
170 | | - } |
171 | | - |
| 70 | + @Deprecated |
172 | 71 | public Replace addExpressions(Expression... expressions) { |
173 | | - List<Expression> collection = Optional.ofNullable(getExpressions()).orElseGet(ArrayList::new); |
| 72 | + List<Expression> collection = Optional.ofNullable( super.getSetExpressions() ).orElseGet(ArrayList::new); |
174 | 73 | Collections.addAll(collection, expressions); |
175 | 74 | return this.withExpressions(collection); |
176 | 75 | } |
177 | 76 |
|
| 77 | + @Deprecated |
178 | 78 | public Replace addExpressions(Collection<? extends Expression> expressions) { |
179 | | - List<Expression> collection = Optional.ofNullable(getExpressions()).orElseGet(ArrayList::new); |
| 79 | + List<Expression> collection = Optional.ofNullable( super.getSetExpressions() ).orElseGet(ArrayList::new); |
180 | 80 | collection.addAll(expressions); |
181 | 81 | return this.withExpressions(collection); |
182 | 82 | } |
183 | | - |
184 | | - public <E extends ItemsList> E getItemsList(Class<E> type) { |
185 | | - return type.cast(getItemsList()); |
186 | | - } |
187 | 83 | } |
0 commit comments