From e2287574948f28cb9d5a26db930ee346ce88de28 Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Thu, 13 Oct 2022 18:30:28 +0200 Subject: [PATCH] Add failing test with multiple joins and `InlineQuery`. Adds a test demonstrating that the join condition of inline queries messes up those of outer joins. Closes: #1362 Original pull request: #1368 --- .../sql/render/SelectRendererUnitTests.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) 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 8119d5578..16d383d0d 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 @@ -232,6 +232,36 @@ class SelectRendererUnitTests { + "ON one.department_id = department.id"); } + @Test // GH-1362 + void shouldRenderNestedJoins() { + + Table merchantCustomers = Table.create("merchants_customers"); + Table customerDetails = Table.create("customer_details"); + + Select innerSelect = Select.builder() + .select(customerDetails.column("cd_user_id")) + .from(customerDetails).join(merchantCustomers) + .on(merchantCustomers.column("mc_user_id").isEqualTo(customerDetails.column("cd_user_id"))) + .build(); + + InlineQuery innerTable = InlineQuery.create(innerSelect, "inner"); + + Select select = Select.builder().select(merchantCustomers.asterisk()) // + .from(merchantCustomers) // + .join(innerTable).on(innerTable.column("i_user_id").isEqualTo(merchantCustomers.column("mc_user_id"))) // + .build(); + + String sql = SqlRenderer.toString(select); + + assertThat(sql).isEqualTo("SELECT merchants_customers.* FROM merchants_customers " + // + "JOIN (" + // + "SELECT customer_details.cd_user_id " + // + "FROM customer_details " + // + "JOIN merchants_customers ON merchants_customers.mc_user_id = customer_details.cd_user_id" + // + ") inner " + // + "ON inner.i_user_id = merchants_customers.mc_user_id"); + } + @Test // GH-1003 void shouldRenderJoinWithTwoInlineQueries() {