Skip to content

Commit 2dce16c

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

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,11 @@ public SelectOn leftOuterJoin(TableLike table) {
181181
return new JoinBuilder(table, this, JoinType.LEFT_OUTER_JOIN);
182182
}
183183

184+
@Override
185+
public SelectOn fullOuterJoin(TableLike table) {
186+
return new JoinBuilder(table, this, JoinType.FULL_OUTER_JOIN);
187+
}
188+
184189
public DefaultSelectBuilder join(Join join) {
185190
this.joins.add(join);
186191

@@ -323,6 +328,12 @@ public SelectOn leftOuterJoin(TableLike table) {
323328
return selectBuilder.leftOuterJoin(table);
324329
}
325330

331+
@Override
332+
public SelectOn fullOuterJoin(TableLike table) {
333+
selectBuilder.join(finishJoin());
334+
return selectBuilder.fullOuterJoin(table);
335+
}
336+
326337
@Override
327338
public SelectFromAndJoin limitOffset(long limit, long offset) {
328339
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)