Skip to content

Commit 9287a08

Browse files
committed
feat: add support for Oracle INSERT ALL/FIRST with WHEN branches
1 parent 107c08d commit 9287a08

File tree

2 files changed

+163
-0
lines changed

2 files changed

+163
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2019 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.insert;
11+
12+
import net.sf.jsqlparser.expression.Expression;
13+
14+
import java.io.Serializable;
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
18+
public class OracleMultiInsertBranch implements Serializable {
19+
20+
private Expression whenExpression;
21+
private boolean elseClause;
22+
private List<OracleMultiInsertClause> clauses = new ArrayList<>();
23+
24+
public Expression getWhenExpression() {
25+
return whenExpression;
26+
}
27+
28+
public void setWhenExpression(Expression whenExpression) {
29+
this.whenExpression = whenExpression;
30+
if (whenExpression != null) {
31+
this.elseClause = false;
32+
}
33+
}
34+
35+
public boolean isElseClause() {
36+
return elseClause;
37+
}
38+
39+
public void setElseClause(boolean elseClause) {
40+
this.elseClause = elseClause;
41+
if (elseClause) {
42+
this.whenExpression = null;
43+
}
44+
}
45+
46+
public List<OracleMultiInsertClause> getClauses() {
47+
return clauses;
48+
}
49+
50+
public void setClauses(List<OracleMultiInsertClause> clauses) {
51+
this.clauses = clauses == null ? new ArrayList<>() : clauses;
52+
}
53+
54+
public void addClause(OracleMultiInsertClause clause) {
55+
if (clause == null) {
56+
return;
57+
}
58+
clauses.add(clause);
59+
}
60+
61+
public OracleMultiInsertBranch withWhenExpression(Expression whenExpression) {
62+
this.setWhenExpression(whenExpression);
63+
return this;
64+
}
65+
66+
public OracleMultiInsertBranch withElseClause(boolean elseClause) {
67+
this.setElseClause(elseClause);
68+
return this;
69+
}
70+
71+
public OracleMultiInsertBranch withClauses(List<OracleMultiInsertClause> clauses) {
72+
this.setClauses(clauses);
73+
return this;
74+
}
75+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2019 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.insert;
11+
12+
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
13+
import net.sf.jsqlparser.schema.Column;
14+
import net.sf.jsqlparser.schema.Table;
15+
import net.sf.jsqlparser.statement.select.Select;
16+
17+
import java.io.Serializable;
18+
import java.util.Iterator;
19+
20+
public class OracleMultiInsertClause implements Serializable {
21+
22+
private Table table;
23+
private ExpressionList<Column> columns;
24+
private Select select;
25+
26+
public Table getTable() {
27+
return table;
28+
}
29+
30+
public void setTable(Table table) {
31+
this.table = table;
32+
}
33+
34+
public ExpressionList<Column> getColumns() {
35+
return columns;
36+
}
37+
38+
public void setColumns(ExpressionList<Column> columns) {
39+
this.columns = columns;
40+
}
41+
42+
public Select getSelect() {
43+
return select;
44+
}
45+
46+
public void setSelect(Select select) {
47+
this.select = select;
48+
}
49+
50+
@Override
51+
public String toString() {
52+
StringBuilder sql = new StringBuilder("INTO ");
53+
sql.append(table);
54+
55+
if (columns != null && !columns.isEmpty()) {
56+
sql.append(" (");
57+
for (Iterator<Column> iter = columns.iterator(); iter.hasNext();) {
58+
Column column = iter.next();
59+
sql.append(column.getColumnName());
60+
if (iter.hasNext()) {
61+
sql.append(", ");
62+
}
63+
}
64+
sql.append(")");
65+
}
66+
67+
if (select != null) {
68+
sql.append(" ").append(select);
69+
}
70+
71+
return sql.toString();
72+
}
73+
74+
public OracleMultiInsertClause withTable(Table table) {
75+
this.setTable(table);
76+
return this;
77+
}
78+
79+
public OracleMultiInsertClause withColumns(ExpressionList<Column> columns) {
80+
this.setColumns(columns);
81+
return this;
82+
}
83+
84+
public OracleMultiInsertClause withSelect(Select select) {
85+
this.setSelect(select);
86+
return this;
87+
}
88+
}

0 commit comments

Comments
 (0)