Skip to content

Commit 7d1ed85

Browse files
schaudermp911de
authored andcommitted
Use fully qualified names in ORDER BY clause.
Closes #968 Original pull request: #1080.
1 parent bc164cd commit 7d1ed85

File tree

7 files changed

+69
-26
lines changed

7 files changed

+69
-26
lines changed

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorUnitTests.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ public void findAllSortedBySingleField() {
218218
"FROM dummy_entity ", //
219219
"LEFT OUTER JOIN referenced_entity ref ON ref.dummy_entity = dummy_entity.id1", //
220220
"LEFT OUTER JOIN second_level_referenced_entity ref_further ON ref_further.referenced_entity = ref.x_l1id", //
221-
"ORDER BY x_name ASC");
221+
"ORDER BY dummy_entity.x_name ASC");
222222
}
223223

224224
@Test // DATAJDBC-101
@@ -238,7 +238,7 @@ public void findAllSortedByMultipleFields() {
238238
"FROM dummy_entity ", //
239239
"LEFT OUTER JOIN referenced_entity ref ON ref.dummy_entity = dummy_entity.id1", //
240240
"LEFT OUTER JOIN second_level_referenced_entity ref_further ON ref_further.referenced_entity = ref.x_l1id", //
241-
"ORDER BY x_name DESC", //
241+
"ORDER BY dummy_entity.x_name DESC", //
242242
"x_other ASC");
243243
}
244244

@@ -286,7 +286,7 @@ public void findAllPagedAndSorted() {
286286
"FROM dummy_entity ", //
287287
"LEFT OUTER JOIN referenced_entity ref ON ref.dummy_entity = dummy_entity.id1", //
288288
"LEFT OUTER JOIN second_level_referenced_entity ref_further ON ref_further.referenced_entity = ref.x_l1id", //
289-
"ORDER BY x_name ASC", //
289+
"ORDER BY dummy_entity.x_name ASC", //
290290
"OFFSET 30", //
291291
"LIMIT 10");
292292
}
@@ -371,7 +371,8 @@ public void findAllByPropertyWithKeyOrdered() {
371371
+ "FROM dummy_entity " //
372372
+ "LEFT OUTER JOIN referenced_entity ref ON ref.dummy_entity = dummy_entity.id1 " //
373373
+ "LEFT OUTER JOIN second_level_referenced_entity ref_further ON ref_further.referenced_entity = ref.x_l1id " //
374-
+ "WHERE dummy_entity.backref = :backref " + "ORDER BY key-column");
374+
+ "WHERE dummy_entity.backref = :backref " //
375+
+ "ORDER BY dummy_entity.key-column");
375376
}
376377

377378
@Test // DATAJDBC-219
@@ -493,7 +494,7 @@ public void readOnlyPropertyIncludedIntoQuery_when_generateFindAllByPropertySql(
493494
+ "entity_with_read_only_property.key-column AS key-column " //
494495
+ "FROM entity_with_read_only_property " //
495496
+ "WHERE entity_with_read_only_property.backref = :backref " //
496-
+ "ORDER BY key-column" //
497+
+ "ORDER BY entity_with_read_only_property.key-column" //
497498
);
498499
}
499500

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/PartTreeJdbcQueryUnitTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ public void createsQueryToFindAllEntitiesByIntegerAttributeWithDescendingOrderin
445445
ParametrizedQuery query = jdbcQuery.createQuery(accessor, returnedType);
446446

447447
assertThat(query.getQuery())
448-
.isEqualTo(BASE_SELECT + " WHERE " + TABLE + ".\"AGE\" = :age ORDER BY \"LAST_NAME\" DESC");
448+
.isEqualTo(BASE_SELECT + " WHERE " + TABLE + ".\"AGE\" = :age ORDER BY \"users\".\"LAST_NAME\" DESC");
449449
}
450450

451451
@Test // DATAJDBC-318
@@ -456,7 +456,7 @@ public void createsQueryToFindAllEntitiesByIntegerAttributeWithAscendingOrdering
456456
ParametrizedQuery query = jdbcQuery.createQuery(accessor, returnedType);
457457

458458
assertThat(query.getQuery())
459-
.isEqualTo(BASE_SELECT + " WHERE " + TABLE + ".\"AGE\" = :age ORDER BY \"LAST_NAME\" ASC");
459+
.isEqualTo(BASE_SELECT + " WHERE " + TABLE + ".\"AGE\" = :age ORDER BY \"users\".\"LAST_NAME\" ASC");
460460
}
461461

462462
@Test // DATAJDBC-318

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ Delegation leaveMatched(OrderByField segment) {
7777
Delegation leaveNested(Visitable segment) {
7878

7979
if (segment instanceof Column) {
80-
builder.append(NameRenderer.reference(context, (Column) segment));
80+
builder.append(NameRenderer.fullyQualifiedReference(context, (Column) segment));
8181
}
8282

8383
return super.leaveNested(segment);

spring-data-relational/src/test/java/org/springframework/data/relational/core/dialect/SqlServerDialectRenderingUnitTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public void shouldRenderSelectWithLimitOffsetAndOrderBy() {
112112

113113
String sql = SqlRenderer.create(factory.createRenderContext()).render(select);
114114

115-
assertThat(sql).isEqualTo("SELECT foo.* FROM foo ORDER BY column_1 OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY");
115+
assertThat(sql).isEqualTo("SELECT foo.* FROM foo ORDER BY foo.column_1 OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY");
116116
}
117117

118118
@Test // DATAJDBC-498
@@ -177,7 +177,7 @@ public void shouldRenderSelectWithLimitOffsetAndOrderByWithLockWrite() {
177177

178178
String sql = SqlRenderer.create(factory.createRenderContext()).render(select);
179179

180-
assertThat(sql).isEqualTo("SELECT foo.* FROM foo WITH (UPDLOCK, ROWLOCK) ORDER BY column_1 OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY");
180+
assertThat(sql).isEqualTo("SELECT foo.* FROM foo WITH (UPDLOCK, ROWLOCK) ORDER BY foo.column_1 OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY");
181181
}
182182

183183
@Test // DATAJDBC-498
@@ -190,6 +190,6 @@ public void shouldRenderSelectWithLimitOffsetAndOrderByWithLockRead() {
190190

191191
String sql = SqlRenderer.create(factory.createRenderContext()).render(select);
192192

193-
assertThat(sql).isEqualTo("SELECT foo.* FROM foo WITH (HOLDLOCK, ROWLOCK) ORDER BY column_1 OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY");
193+
assertThat(sql).isEqualTo("SELECT foo.* FROM foo WITH (HOLDLOCK, ROWLOCK) ORDER BY foo.column_1 OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY");
194194
}
195195
}

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,4 @@ void fullyQualifiedReference() {
4949

5050
assertThat(rendered).isEqualTo("tab_alias.col_alias");
5151
}
52-
53-
@Test // GH-1003
54-
void fullyQualifiedUnaliasedReference() {
55-
56-
Column column = Column.aliased("col", Table.aliased("table", "tab_alias"), "col_alias");
57-
58-
CharSequence rendered = NameRenderer.fullyQualifiedUnaliasedReference(context, column);
59-
60-
assertThat(rendered).isEqualTo("tab_alias.col");
61-
}
6252
}

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

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
public class OrderByClauseVisitorUnitTests {
3333

3434
@Test // DATAJDBC-309
35-
public void shouldRenderOrderByName() {
35+
public void shouldRenderOrderByAlias() {
3636

3737
Table employee = SQL.table("employee").as("emp");
3838
Column column = employee.column("name").as("emp_name");
@@ -42,9 +42,8 @@ public void shouldRenderOrderByName() {
4242
OrderByClauseVisitor visitor = new OrderByClauseVisitor(new SimpleRenderContext(NamingStrategies.asIs()));
4343
select.visit(visitor);
4444

45-
assertThat(visitor.getRenderedPart().toString()).isEqualTo("emp_name ASC");
45+
assertThat(visitor.getRenderedPart().toString()).isEqualTo("emp.emp_name ASC");
4646
}
47-
4847
@Test // DATAJDBC-309
4948
public void shouldApplyNamingStrategy() {
5049

@@ -56,6 +55,37 @@ public void shouldApplyNamingStrategy() {
5655
OrderByClauseVisitor visitor = new OrderByClauseVisitor(new SimpleRenderContext(NamingStrategies.toUpper()));
5756
select.visit(visitor);
5857

59-
assertThat(visitor.getRenderedPart().toString()).isEqualTo("EMP_NAME ASC");
58+
assertThat(visitor.getRenderedPart().toString()).isEqualTo("EMP.EMP_NAME ASC");
59+
}
60+
61+
@Test // GH-968
62+
public void shouldRenderOrderByFullyQualifiedName() {
63+
64+
Table employee = SQL.table("employee");
65+
Column column = employee.column("name");
66+
67+
Select select = Select.builder().select(column).from(employee).orderBy(OrderByField.from(column).asc()).build();
68+
69+
OrderByClauseVisitor visitor = new OrderByClauseVisitor(new SimpleRenderContext(NamingStrategies.asIs()));
70+
select.visit(visitor);
71+
72+
assertThat(visitor.getRenderedPart().toString()).isEqualTo("employee.name ASC");
6073
}
74+
75+
@Test // GH-968
76+
public void shouldRenderOrderByFullyQualifiedNameWithTableAlias() {
77+
78+
Table employee = SQL.table("employee").as("emp");
79+
Column column = employee.column("name");
80+
81+
Select select = Select.builder().select(column).from(employee).orderBy(OrderByField.from(column).asc()).build();
82+
83+
OrderByClauseVisitor visitor = new OrderByClauseVisitor(new SimpleRenderContext(NamingStrategies.asIs()));
84+
select.visit(visitor);
85+
86+
assertThat(visitor.getRenderedPart().toString()).isEqualTo("emp.name ASC");
87+
}
88+
89+
90+
6191
}

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ void shouldRenderOrderByName() {
266266
Select select = Select.builder().select(column).from(employee).orderBy(OrderByField.from(column).asc()).build();
267267

268268
assertThat(SqlRenderer.toString(select))
269-
.isEqualTo("SELECT emp.name AS emp_name FROM employee emp ORDER BY emp_name ASC");
269+
.isEqualTo("SELECT emp.name AS emp_name FROM employee emp ORDER BY emp.emp_name ASC");
270270
}
271271

272272
@Test // DATAJDBC-309
@@ -467,4 +467,26 @@ void shouldRenderCast() {
467467
final String rendered = SqlRenderer.toString(select);
468468
assertThat(rendered).isEqualTo("SELECT CAST(User.name AS VARCHAR2) FROM User");
469469
}
470+
471+
@Test // GH-968
472+
void rendersFullyQualifiedNamesInOrderBy() {
473+
474+
Table tableA = SQL.table("tableA");
475+
Column tableAName = tableA.column("name");
476+
Column tableAId = tableA.column("id");
477+
478+
Table tableB = SQL.table("tableB");
479+
Column tableBId = tableB.column("id");
480+
Column tableBName = tableB.column("name");
481+
482+
Select select = StatementBuilder.select(Expressions.asterisk()) //
483+
.from(tableA) //
484+
.join(tableB).on(tableAId.isEqualTo(tableBId)) //
485+
.orderBy(tableAName, tableBName) //
486+
.build();
487+
488+
final String rendered = SqlRenderer.toString(select);
489+
assertThat(rendered)
490+
.isEqualTo("SELECT * FROM tableA JOIN tableB ON tableA.id = tableB.id ORDER BY tableA.name, tableB.name");
491+
}
470492
}

0 commit comments

Comments
 (0)