@@ -150,14 +150,18 @@ public void testDbEntityQualifier_OuterJoin() throws Exception {
150150 // do some simple assertions to make sure all parts are in
151151 assertNotNull (generatedSql );
152152 assertTrue (generatedSql .startsWith ("SELECT " ));
153- assertTrue (generatedSql .indexOf (" FROM " ) > 0 );
154- if (generatedSql .contains ("RTRIM" )) {
155- assertTrue (generatedSql .indexOf ("ARTIST_NAME) =" ) > generatedSql .indexOf ("RTRIM(" ));
156- } else if (generatedSql .contains ("TRIM" )) {
157- assertTrue (generatedSql .indexOf ("ARTIST_NAME) =" ) > generatedSql .indexOf ("TRIM(" ));
158- } else {
159- assertTrue (generatedSql .indexOf ("ARTIST_NAME =" ) > 0 );
160- }
153+
154+ int iFrom = generatedSql .indexOf (" FROM " );
155+ int iPaintingTable = generatedSql .indexOf (" PAINTING " );
156+ int iArtistTable = generatedSql .indexOf (" ARTIST " );
157+ int iName = generatedSql .indexOf ("ARTIST_NAME =" );
158+ int iOrder = generatedSql .indexOf (" ORDER" );
159+
160+ assertTrue (iFrom > 0 );
161+ assertTrue (iPaintingTable > iFrom );
162+ assertTrue (iArtistTable > iPaintingTable );
163+ assertTrue (iName > iArtistTable );
164+ assertTrue (iOrder > iName );
161165
162166 } finally {
163167 entity .setQualifier (null );
@@ -856,4 +860,31 @@ public void testAliasedJoins_FlattenedRelationship() {
856860 int totalJoins = translator .getContext ().getTableCount () - 1 ;
857861 assertEquals (4 , totalJoins );
858862 }
863+
864+ @ Test
865+ public void testDbEntityQualifier_JoinQuery () throws Exception {
866+
867+ final DbEntity entity = context .getEntityResolver ().getDbEntity ("ARTIST" );
868+ entity .setQualifier (ExpressionFactory .exp ("ARTIST_NAME = 'Should be on JOIN condition and not WHERE'" ));
869+
870+ ObjectSelect <Painting > q = ObjectSelect .query (Painting .class )
871+ .where
872+ (
873+ Painting .TO_ARTIST .dot (Artist .DATE_OF_BIRTH ).eq (new java .sql .Date (1 , 0 , 1 ))
874+ .orExp (Painting .TO_GALLERY .dot (Gallery .GALLERY_NAME ).like ("G%" ))
875+ );
876+
877+ // If the DbEntity qualifier is set on the WHERE condition then the OR expression will fail to find matches
878+
879+ SelectTranslator transl = new DefaultSelectTranslator (q , dataNode .getAdapter (), dataNode .getEntityResolver ());
880+ try {
881+ String generatedSql = transl .getSql ();
882+ int whereNdx = generatedSql .indexOf (" WHERE " );
883+ int joinNdx = generatedSql .indexOf (" JOIN ARTIST " );
884+ assertTrue (generatedSql .substring (joinNdx , whereNdx ).indexOf ("ARTIST_NAME" ) > 0 ); // Should be in JOIN condition
885+ assertTrue (generatedSql .indexOf ("ARTIST_NAME" , whereNdx ) < 0 ); // Should not be part of WHERE
886+ } finally {
887+ entity .setQualifier (null );
888+ }
889+ }
859890}
0 commit comments