Skip to content

Commit b0a9ca0

Browse files
committed
Add support for full outer join to SelectBuilder.
Original pull request #1421
1 parent b702028 commit b0a9ca0

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/DefaultSelectBuilder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ public SelectOn join(TableLike table) {
180180
public SelectOn leftOuterJoin(TableLike table) {
181181
return new JoinBuilder(table, this, JoinType.LEFT_OUTER_JOIN);
182182
}
183+
@Override
184+
public SelectOn fullOuterJoin(TableLike table) {
185+
return new JoinBuilder(table, this, JoinType.FULL_OUTER_JOIN);
186+
}
183187

184188
public DefaultSelectBuilder join(Join join) {
185189
this.joins.add(join);
@@ -323,6 +327,12 @@ public SelectOn leftOuterJoin(TableLike table) {
323327
return selectBuilder.leftOuterJoin(table);
324328
}
325329

330+
@Override
331+
public SelectOn fullOuterJoin(TableLike table) {
332+
selectBuilder.join(finishJoin());
333+
return selectBuilder.fullOuterJoin(table);
334+
}
335+
326336
@Override
327337
public SelectFromAndJoin limitOffset(long limit, long offset) {
328338
selectBuilder.join(finishJoin());

spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/SelectBuilder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,16 @@ interface SelectJoin extends SelectLock, BuildSelect {
486486
* @see SQL#table(String)
487487
*/
488488
SelectOn leftOuterJoin(TableLike table);
489+
490+
/**
491+
* Declare a {@code FULL OUTER JOIN} {@link Table}.
492+
*
493+
* @param table must not be {@literal null}.
494+
* @return {@code this} builder.
495+
* @see Join
496+
* @see SQL#table(String)
497+
*/
498+
SelectOn fullOuterJoin(TableLike table);
489499
}
490500

491501
/**

spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/render/SelectRendererUnitTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,21 @@ void shouldRenderOuterJoin() {
154154
+ "LEFT OUTER JOIN department ON employee.department_id = department.id");
155155
}
156156

157+
@Test // GH-1421
158+
void shouldRenderFullOuterJoin() {
159+
160+
Table employee = SQL.table("employee");
161+
Table department = SQL.table("department");
162+
163+
Select select = Select.builder().select(employee.column("id"), department.column("name")) //
164+
.from(employee) //
165+
.fullOuterJoin(department).on(employee.column("department_id")).equals(department.column("id")) //
166+
.build();
167+
168+
assertThat(SqlRenderer.toString(select)).isEqualTo("SELECT employee.id, department.name FROM employee "
169+
+ "FULL OUTER JOIN department ON employee.department_id = department.id");
170+
}
171+
157172
@Test // DATAJDBC-309
158173
void shouldRenderSimpleJoinWithAnd() {
159174

0 commit comments

Comments
 (0)