51
51
* @author Erik Pellizzon
52
52
* @author Pranav HS
53
53
* @author Eduard Dudar
54
+ * @author Mark Paluch
54
55
*/
55
56
class QueryUtilsUnitTests {
56
57
@@ -130,13 +131,13 @@ void detectsAliasCorrectly() {
130
131
.isEqualTo ("u" );
131
132
assertThat (detectAlias (
132
133
"from Foo f left join f.bar b with type(b) = BarChild where (f.id = (select max(f.id) from Foo f2 where type(f2) = FooChild) or 1 <> 1) and 1=1" ))
133
- .isEqualTo ("f" );
134
+ .isEqualTo ("f" );
134
135
assertThat (detectAlias (
135
136
"(from Foo f max(f) ((((select * from Foo f2 (from Foo f3) max(*)) (from Foo f4)) max(f5)) (f6)) (from Foo f7))" ))
136
- .isEqualTo ("f" );
137
+ .isEqualTo ("f" );
137
138
assertThat (detectAlias (
138
139
"SELECT e FROM DbEvent e WHERE (CAST(:modifiedFrom AS date) IS NULL OR e.modificationDate >= :modifiedFrom)" ))
139
- .isEqualTo ("e" );
140
+ .isEqualTo ("e" );
140
141
assertThat (detectAlias ("from User u where (cast(:effective as date) is null) OR :effective >= u.createdAt" ))
141
142
.isEqualTo ("u" );
142
143
assertThat (detectAlias ("from User u where (cast(:effectiveDate as date) is null) OR :effectiveDate >= u.createdAt" ))
@@ -145,7 +146,7 @@ void detectsAliasCorrectly() {
145
146
.isEqualTo ("u" );
146
147
assertThat (
147
148
detectAlias ("from User u where (cast(:e1f2f3ectiveFrom as date) is null) OR :effectiveFrom >= u.createdAt" ))
148
- .isEqualTo ("u" );
149
+ .isEqualTo ("u" );
149
150
}
150
151
151
152
@ Test // GH-2260
@@ -175,13 +176,13 @@ void testRemoveSubqueries() throws Exception {
175
176
.isEqualTo ("(select u from User u where not exists )" );
176
177
assertThat (normalizeWhitespace (
177
178
removeSubqueries ("select u from User u where not exists (from User u2 where not exists (from User u3))" )))
178
- .isEqualTo ("select u from User u where not exists" );
179
+ .isEqualTo ("select u from User u where not exists" );
179
180
assertThat (normalizeWhitespace (
180
181
removeSubqueries ("select u from User u where not exists ((from User u2 where not exists (from User u3)))" )))
181
- .isEqualTo ("select u from User u where not exists ( )" );
182
+ .isEqualTo ("select u from User u where not exists ( )" );
182
183
assertThat (normalizeWhitespace (
183
184
removeSubqueries ("(select u from User u where not exists ((from User u2 where not exists (from User u3))))" )))
184
- .isEqualTo ("(select u from User u where not exists ( ))" );
185
+ .isEqualTo ("(select u from User u where not exists ( ))" );
185
186
}
186
187
187
188
@ Test // GH-2581
@@ -543,6 +544,32 @@ void doesNotPrefixAliasedFunctionCallNameWhenQueryStringContainsMultipleWhiteSpa
543
544
assertThat (applySorting (query , sort , "m" )).endsWith ("order by avgPrice asc" );
544
545
}
545
546
547
+ @ Test // GH-3911
548
+ void discoversFunctionAliasesCorrectly () {
549
+
550
+ assertThat (getFunctionAliases ("SELECT COUNT(1) a alias1,2 s alias2" )).isEmpty ();
551
+ assertThat (getFunctionAliases ("SELECT COUNT(1) as alias1,2 as alias2" )).containsExactly ("alias1" );
552
+ assertThat (getFunctionAliases ("SELECT COUNT(1) as alias1,COUNT(2) as alias2" )).contains ("alias1" , "alias2" );
553
+ assertThat (getFunctionAliases ("SELECT COUNT(1) as alias1, 2 as alias2" )).containsExactly ("alias1" );
554
+ assertThat (getFunctionAliases ("SELECT COUNT(1) as alias1, COUNT(2) as alias2" )).contains ("alias1" , "alias2" );
555
+ assertThat (getFunctionAliases ("COUNT(1) as alias1,COUNT(2) as alias2" )).contains ("alias1" , "alias2" );
556
+ assertThat (getFunctionAliases ("COUNT(1) as alias1,COUNT(2) as alias2" )).contains ("alias1" , "alias2" );
557
+ assertThat (getFunctionAliases ("1 as alias1, COUNT(2) as alias2" )).containsExactly ("alias2" );
558
+ assertThat (getFunctionAliases ("1 as alias1, COUNT(2) as alias2" )).containsExactly ("alias2" );
559
+ assertThat (getFunctionAliases ("COUNT(1) as alias1,2 as alias2" )).containsExactly ("alias1" );
560
+ assertThat (getFunctionAliases ("COUNT(1) as alias1, 2 as alias2" )).containsExactly ("alias1" );
561
+ }
562
+
563
+ @ Test // GH-3911
564
+ void discoversFieldAliasesCorrectly () {
565
+
566
+ assertThat (getFieldAliases ("SELECT 1 a alias1,2 s alias2" )).isEmpty ();
567
+ assertThat (getFieldAliases ("SELECT 1 as alias1,2 as alias2" )).contains ("alias1" , "alias2" );
568
+ assertThat (getFieldAliases ("SELECT 1 as alias1,2 as alias2" )).contains ("alias1" , "alias2" );
569
+ assertThat (getFieldAliases ("1 as alias1,2 as alias2" )).contains ("alias1" , "alias2" );
570
+ assertThat (getFieldAliases ("1 as alias1, 2 as alias2" )).contains ("alias1" , "alias2" );
571
+ }
572
+
546
573
@ Test // DATAJPA-1000
547
574
void discoversCorrectAliasForJoinFetch () {
548
575
@@ -564,7 +591,7 @@ void discoversAliasWithComplexFunction() {
564
591
565
592
assertThat (
566
593
QueryUtils .getFunctionAliases ("select new MyDto(sum(case when myEntity.prop3=0 then 1 else 0 end) as myAlias" )) //
567
- .contains ("myAlias" );
594
+ .contains ("myAlias" );
568
595
}
569
596
570
597
@ Test // DATAJPA-1506
@@ -784,18 +811,19 @@ void applySortingAccountsForNativeWindowFunction() {
784
811
// order by in over clause + at the end
785
812
assertThat (
786
813
QueryUtils .applySorting ("select dense_rank() over (order by lastname) from user u order by u.lastname" , sort ))
787
- .isEqualTo ("select dense_rank() over (order by lastname) from user u order by u.lastname, u.age desc" );
814
+ .isEqualTo ("select dense_rank() over (order by lastname) from user u order by u.lastname, u.age desc" );
788
815
789
816
// partition by + order by in over clause
790
- assertThat (QueryUtils .applySorting (
791
- "select dense_rank() over (partition by active, age order by lastname) from user u" , sort )).isEqualTo (
817
+ assertThat (QueryUtils
818
+ .applySorting ("select dense_rank() over (partition by active, age order by lastname) from user u" , sort ))
819
+ .isEqualTo (
792
820
"select dense_rank() over (partition by active, age order by lastname) from user u order by u.age desc" );
793
821
794
822
// partition by + order by in over clause + order by at the end
795
823
assertThat (QueryUtils .applySorting (
796
824
"select dense_rank() over (partition by active, age order by lastname) from user u order by active" , sort ))
797
- .isEqualTo (
798
- "select dense_rank() over (partition by active, age order by lastname) from user u order by active, u.age desc" );
825
+ .isEqualTo (
826
+ "select dense_rank() over (partition by active, age order by lastname) from user u order by active, u.age desc" );
799
827
800
828
// partition by + order by in over clause + frame clause
801
829
assertThat (QueryUtils .applySorting (
@@ -812,8 +840,7 @@ void applySortingAccountsForNativeWindowFunction() {
812
840
// order by in subselect (select expression)
813
841
assertThat (
814
842
QueryUtils .applySorting ("select lastname, (select i.id from item i order by i.id limit 1) from user u" , sort ))
815
- .isEqualTo (
816
- "select lastname, (select i.id from item i order by i.id limit 1) from user u order by u.age desc" );
843
+ .isEqualTo ("select lastname, (select i.id from item i order by i.id limit 1) from user u order by u.age desc" );
817
844
818
845
// order by in subselect (select expression) + at the end
819
846
assertThat (QueryUtils .applySorting (
@@ -949,7 +976,7 @@ select q.specialist_id, listagg(q.points, '%s') as points
949
976
950
977
@ Test // GH-3324
951
978
void createCountQueryForSimpleQuery () {
952
- assertCountQuery ("select * from User" ,"select count(*) from User" );
953
- assertCountQuery ("select * from User u" ,"select count(u) from User u" );
979
+ assertCountQuery ("select * from User" , "select count(*) from User" );
980
+ assertCountQuery ("select * from User u" , "select count(u) from User u" );
954
981
}
955
982
}
0 commit comments