5151 * @author Erik Pellizzon 
5252 * @author Pranav HS 
5353 * @author Eduard Dudar 
54+  * @author Mark Paluch 
5455 */ 
5556class  QueryUtilsUnitTests  {
5657
@@ -130,13 +131,13 @@ void detectsAliasCorrectly() {
130131				.isEqualTo ("u" );
131132		assertThat (detectAlias (
132133				"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" );
134135		assertThat (detectAlias (
135136				"(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" );
137138		assertThat (detectAlias (
138139				"SELECT e FROM DbEvent e WHERE (CAST(:modifiedFrom AS date) IS NULL OR e.modificationDate >= :modifiedFrom)" ))
139- 						 .isEqualTo ("e" );
140+ 				.isEqualTo ("e" );
140141		assertThat (detectAlias ("from User u where (cast(:effective as date) is null) OR :effective >= u.createdAt" ))
141142				.isEqualTo ("u" );
142143		assertThat (detectAlias ("from User u where (cast(:effectiveDate as date) is null) OR :effectiveDate >= u.createdAt" ))
@@ -145,7 +146,7 @@ void detectsAliasCorrectly() {
145146				.isEqualTo ("u" );
146147		assertThat (
147148				detectAlias ("from User u where (cast(:e1f2f3ectiveFrom as date) is null) OR :effectiveFrom >= u.createdAt" ))
148- 						 .isEqualTo ("u" );
149+ 				.isEqualTo ("u" );
149150	}
150151
151152	@ Test  // GH-2260 
@@ -175,13 +176,13 @@ void testRemoveSubqueries() throws Exception {
175176				.isEqualTo ("(select u from User u where not exists )" );
176177		assertThat (normalizeWhitespace (
177178				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" );
179180		assertThat (normalizeWhitespace (
180181				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 ( )" );
182183		assertThat (normalizeWhitespace (
183184				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 ( ))" );
185186	}
186187
187188	@ Test  // GH-2581 
@@ -543,6 +544,32 @@ void doesNotPrefixAliasedFunctionCallNameWhenQueryStringContainsMultipleWhiteSpa
543544		assertThat (applySorting (query , sort , "m" )).endsWith ("order by avgPrice asc" );
544545	}
545546
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+ 
546573	@ Test  // DATAJPA-1000 
547574	void  discoversCorrectAliasForJoinFetch () {
548575
@@ -564,7 +591,7 @@ void discoversAliasWithComplexFunction() {
564591
565592		assertThat (
566593				QueryUtils .getFunctionAliases ("select new MyDto(sum(case when myEntity.prop3=0 then 1 else 0 end) as myAlias" )) // 
567- 						 .contains ("myAlias" );
594+ 				.contains ("myAlias" );
568595	}
569596
570597	@ Test  // DATAJPA-1506 
@@ -784,18 +811,19 @@ void applySortingAccountsForNativeWindowFunction() {
784811		// order by in over clause + at the end 
785812		assertThat (
786813				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" );
788815
789816		// 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 (
792820						"select dense_rank() over (partition by active, age order by lastname) from user u order by u.age desc" );
793821
794822		// partition by + order by in over clause + order by at the end 
795823		assertThat (QueryUtils .applySorting (
796824				"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" );
799827
800828		// partition by + order by in over clause + frame clause 
801829		assertThat (QueryUtils .applySorting (
@@ -812,8 +840,7 @@ void applySortingAccountsForNativeWindowFunction() {
812840		// order by in subselect (select expression) 
813841		assertThat (
814842				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" );
817844
818845		// order by in subselect (select expression) + at the end 
819846		assertThat (QueryUtils .applySorting (
@@ -949,7 +976,7 @@ select q.specialist_id, listagg(q.points, '%s') as points
949976
950977	@ Test  // GH-3324 
951978	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" );
954981	}
955982}
0 commit comments