diff --git a/pom.xml b/pom.xml index 530667df21..54463383f5 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-relational-parent - 3.1.0-SNAPSHOT + 3.1.0-full-outer-joins-SNAPSHOT pom Spring Data Relational Parent diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml index 6e018ca17d..eec446f003 100644 --- a/spring-data-jdbc-distribution/pom.xml +++ b/spring-data-jdbc-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 3.1.0-SNAPSHOT + 3.1.0-full-outer-joins-SNAPSHOT ../pom.xml diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml index aa6936d760..7591361065 100644 --- a/spring-data-jdbc/pom.xml +++ b/spring-data-jdbc/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-jdbc - 3.1.0-SNAPSHOT + 3.1.0-full-outer-joins-SNAPSHOT Spring Data JDBC Spring Data module for JDBC repositories. @@ -15,7 +15,7 @@ org.springframework.data spring-data-relational-parent - 3.1.0-SNAPSHOT + 3.1.0-full-outer-joins-SNAPSHOT diff --git a/spring-data-r2dbc/pom.xml b/spring-data-r2dbc/pom.xml index ef55d4bd1b..2fa55fb5c9 100644 --- a/spring-data-r2dbc/pom.xml +++ b/spring-data-r2dbc/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-r2dbc - 3.1.0-SNAPSHOT + 3.1.0-full-outer-joins-SNAPSHOT Spring Data R2DBC Spring Data module for R2DBC @@ -15,7 +15,7 @@ org.springframework.data spring-data-relational-parent - 3.1.0-SNAPSHOT + 3.1.0-full-outer-joins-SNAPSHOT diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml index 71d009990b..afa2971351 100644 --- a/spring-data-relational/pom.xml +++ b/spring-data-relational/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-relational - 3.1.0-SNAPSHOT + 3.1.0-full-outer-joins-SNAPSHOT Spring Data Relational Spring Data Relational support @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 3.1.0-SNAPSHOT + 3.1.0-full-outer-joins-SNAPSHOT diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/DefaultSelectBuilder.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/DefaultSelectBuilder.java index 96936fd91a..b06581bd0f 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/DefaultSelectBuilder.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/DefaultSelectBuilder.java @@ -181,6 +181,11 @@ public SelectOn leftOuterJoin(TableLike table) { return new JoinBuilder(table, this, JoinType.LEFT_OUTER_JOIN); } + @Override + public SelectOn fullOuterJoin(TableLike table) { + return new JoinBuilder(table, this, JoinType.FULL_OUTER_JOIN); + } + public DefaultSelectBuilder join(Join join) { this.joins.add(join); @@ -323,6 +328,12 @@ public SelectOn leftOuterJoin(TableLike table) { return selectBuilder.leftOuterJoin(table); } + @Override + public SelectOn fullOuterJoin(TableLike table) { + selectBuilder.join(finishJoin()); + return selectBuilder.fullOuterJoin(table); + } + @Override public SelectFromAndJoin limitOffset(long limit, long offset) { selectBuilder.join(finishJoin()); diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/SelectBuilder.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/SelectBuilder.java index aa6e2bd367..ee3f9889e5 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/SelectBuilder.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/SelectBuilder.java @@ -486,6 +486,16 @@ interface SelectJoin extends SelectLock, BuildSelect { * @see SQL#table(String) */ SelectOn leftOuterJoin(TableLike table); + + /** + * Declare a {@code FULL OUTER JOIN} {@link Table}. + * + * @param table must not be {@literal null}. + * @return {@code this} builder. + * @see Join + * @see SQL#table(String) + */ + SelectOn fullOuterJoin(TableLike table); } /** diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/render/SelectRendererUnitTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/render/SelectRendererUnitTests.java index 5ebf971e4e..ddccb4d980 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/render/SelectRendererUnitTests.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/render/SelectRendererUnitTests.java @@ -154,6 +154,21 @@ void shouldRenderOuterJoin() { + "LEFT OUTER JOIN department ON employee.department_id = department.id"); } + @Test // GH-1421 + void shouldRenderFullOuterJoin() { + + Table employee = SQL.table("employee"); + Table department = SQL.table("department"); + + Select select = Select.builder().select(employee.column("id"), department.column("name")) // + .from(employee) // + .fullOuterJoin(department).on(employee.column("department_id")).equals(department.column("id")) // + .build(); + + assertThat(SqlRenderer.toString(select)).isEqualTo("SELECT employee.id, department.name FROM employee " + + "FULL OUTER JOIN department ON employee.department_id = department.id"); + } + @Test // DATAJDBC-309 void shouldRenderSimpleJoinWithAnd() {