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() {