Skip to content

Commit df1b890

Browse files
committed
Add support for SQL "union" operator.
1 parent 10b67de commit df1b890

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

httprpc-client/src/main/java/org/httprpc/sql/QueryBuilder.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,22 @@ public QueryBuilder forUpdate() {
222222
return this;
223223
}
224224

225+
/**
226+
* Appends a "union" clause to a query.
227+
*
228+
* @param queryBuilder
229+
* The query builder to append.
230+
*
231+
* @return
232+
* The {@link QueryBuilder} instance.
233+
*/
234+
public QueryBuilder union(QueryBuilder queryBuilder) {
235+
sqlBuilder.append(" union ");
236+
sqlBuilder.append(queryBuilder.toString());
237+
238+
return this;
239+
}
240+
225241
/**
226242
* Creates an "insert into" query.
227243
*
@@ -272,7 +288,7 @@ public static QueryBuilder insertInto(String table, Map<String, ?> values) {
272288

273289
if (value instanceof QueryBuilder) {
274290
sqlBuilder.append("(");
275-
sqlBuilder.append(value.toString());
291+
sqlBuilder.append(value);
276292
sqlBuilder.append(")");
277293
} else {
278294
sqlBuilder.append(encode(value));
@@ -336,7 +352,7 @@ public QueryBuilder set(Map<String, ?> values) {
336352

337353
if (value instanceof QueryBuilder) {
338354
sqlBuilder.append("(");
339-
sqlBuilder.append(value.toString());
355+
sqlBuilder.append(value);
340356
sqlBuilder.append(")");
341357
} else {
342358
sqlBuilder.append(encode(value));

httprpc-client/src/test/java/org/httprpc/sql/QueryBuilderTest.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ public void testSelect() {
3131
.where("(a > 10 or b < 200) and c = :c")
3232
.orderBy("a", "b")
3333
.limit(10)
34-
.forUpdate().toString();
34+
.forUpdate()
35+
.union(QueryBuilder.select("a", "b", "c")
36+
.from("C")).toString();
3537

3638
assertEquals("select a, b, c from A "
3739
+ "join B on A.id = B.id and x = 50 "
@@ -40,7 +42,9 @@ public void testSelect() {
4042
+ "where (a > 10 or b < 200) and c = :c "
4143
+ "order by a, b "
4244
+ "limit 10 "
43-
+ "for update", sql);
45+
+ "for update "
46+
+ "union "
47+
+ "select a, b, c from C", sql);
4448
}
4549

4650
@Test
@@ -74,8 +78,7 @@ public void testUpdate() {
7478
@Test
7579
public void testDelete() {
7680
String sql = QueryBuilder.deleteFrom("A")
77-
.where("a < 150")
78-
.toString();
81+
.where("a < 150").toString();
7982

8083
assertEquals("delete from A where a < 150", sql);
8184
}

0 commit comments

Comments
 (0)