Skip to content

Commit 2497543

Browse files
committed
On join conditions (from, to) we should use Column and not Alias Column.
if we use Alias column on Join Conditions we will have alias used, what will cause an error. We should not have `join b on a.col = b.alias`. b.alias should not be present in the join, it will raise an error. The correct version should be `join b on a.col = b.col`.
1 parent 378736c commit 2497543

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ public class Column extends AbstractSegment implements Expression, Named {
3232
private final SqlIdentifier name;
3333
private final Table table;
3434

35+
Column(Column column) {
36+
this(column.name, column.table);
37+
}
38+
3539
Column(String name, Table table) {
3640

3741
super(table);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ static class JoinBuilder implements SelectOn, SelectOnConditionComparison, Selec
320320
@Override
321321
public SelectOnConditionComparison on(Expression column) {
322322

323-
this.from = column;
323+
this.from = new Column((Column) column);
324324
return this;
325325
}
326326

@@ -330,7 +330,7 @@ public SelectOnConditionComparison on(Expression column) {
330330
*/
331331
@Override
332332
public JoinBuilder equals(Expression column) {
333-
this.to = column;
333+
this.to = new Column((Column) column);
334334
return this;
335335
}
336336

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,4 +349,23 @@ public void shouldRenderWithRenderContext() {
349349
assertThat(rendered).isEqualTo(
350350
"SELECT COUNT(\"my_table\".*) AS counter, \"my_table\".\"reserved_keyword\" FROM \"my_table\" JOIN \"join_table\" ON \"my_table\".source = \"join_table\".target");
351351
}
352+
353+
@Test // DATAJDBC-353
354+
public void shouldRenderWithColumnAlias() {
355+
Table a = SQL.table("a").as("a_alias"); Column aColumn = a.column("a_col").as("a_col_alias");
356+
Table b = SQL.table("b").as("b_alias"); Column bColumn = b.column("a_col").as("b_col_alias");
357+
358+
Select select = Select.builder().select(aColumn, bColumn)
359+
.from(a)
360+
.join(b).on(aColumn).equals(bColumn)
361+
.build();
362+
363+
String target = SqlRenderer.toString(select);
364+
assertThat(target)
365+
.isEqualTo(
366+
"SELECT a_alias.a_col AS a_col_alias, b_alias.a_col AS b_col_alias "
367+
+ "FROM a a_alias "
368+
+ "JOIN b b_alias ON a_alias.a_col = b_alias.a_col"
369+
);
370+
}
352371
}

0 commit comments

Comments
 (0)