Jurgen Doll created CAY-2863:
--------------------------------
Summary: DbEntity qualifiers are no longer applied to JOIN
conditions
Key: CAY-2863
URL: https://issues.apache.org/jira/browse/CAY-2863
Project: Cayenne
Issue Type: Bug
Components: Core Library
Affects Versions: 4.2.1, 4.2, 5.0-M2
Reporter: Jurgen Doll
This is a regression from 3.1.3
DbEntity qualifiers used to be applied to JOIN conditions but have now moved to
the WHERE clause. This results in queries returning no results when there are
OR conditions in the WHERE part that could satisfy the query.
Here's a possible test case for DefaultSelectTranslatorIT.java
{code:java}
@Test
public void testDbEntityQualifier_JoinQuery() throws Exception {
final DbEntity entity =
context.getEntityResolver().getDbEntity("ARTIST");
entity.setQualifier(ExpressionFactory.exp("ARTIST_NAME = 'Should be on
JOIN condition and not WHERE'"));
ObjectSelect<Painting> q = ObjectSelect.query(Painting.class)
.where
(
Painting.TO_ARTIST.dot(Artist.DATE_OF_BIRTH).eq(new
java.sql.Date(1,0,1))
.orExp( Painting.TO_GALLERY.dot( Gallery.GALLERY_NAME ).like(
"G%" ) )
);
// If the DbEntity qualifier is set on the WHERE condition then the OR
expression will fail to find matches
SelectTranslator transl = new DefaultSelectTranslator(q,
dataNode.getAdapter(), dataNode.getEntityResolver());
try {
String generatedSql = transl.getSql();
int whereNdx = generatedSql.indexOf(" WHERE ");
int joinNdx = generatedSql.indexOf(" JOIN ARTIST ");
assertTrue(generatedSql.substring(joinNdx,
whereNdx).indexOf("ARTIST_NAME") > 0); // Should be in JOIN condition
assertTrue(generatedSql.indexOf("ARTIST_NAME", whereNdx) < 0); //
Should not be part of WHERE
}
finally {
entity.setQualifier(null);
}
}
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)