Search in sources :

Example 46 with SelectQuery

use of org.apache.cayenne.query.SelectQuery in project cayenne by apache.

the class DefaultSelectTranslatorIT method testDbEntityQualifier_RelatedMatch.

@Test
public void testDbEntityQualifier_RelatedMatch() throws Exception {
    SelectQuery<Artist> q = new SelectQuery(Painting.class, ExpressionFactory.matchExp("toArtist.artistName", "foo"));
    final DbEntity entity = context.getEntityResolver().getDbEntity("ARTIST");
    final DbEntity middleEntity = context.getEntityResolver().getDbEntity("ARTIST_GROUP");
    DefaultSelectTranslator transl = new DefaultSelectTranslator(q, dataNode.getAdapter(), dataNode.getEntityResolver());
    entity.setQualifier(ExpressionFactory.exp("ARTIST_NAME = \"123\""));
    middleEntity.setQualifier(ExpressionFactory.exp("GROUP_ID = 1987"));
    try {
        String generatedSql = transl.getSql();
        // do some simple assertions to make sure all parts are in
        assertNotNull(generatedSql);
        assertTrue(generatedSql.startsWith("SELECT "));
        assertTrue(generatedSql.indexOf(" FROM ") > 0);
        if (generatedSql.contains("RTRIM")) {
            assertTrue(generatedSql.indexOf("ARTIST_NAME) = ") > generatedSql.indexOf("RTRIM("));
        } else if (generatedSql.contains("TRIM")) {
            assertTrue(generatedSql.indexOf("ARTIST_NAME) = ") > generatedSql.indexOf("TRIM("));
        } else {
            assertTrue(generatedSql.indexOf("ARTIST_NAME = ") > 0);
        }
    } finally {
        entity.setQualifier(null);
        middleEntity.setQualifier(null);
    }
}
Also used : Artist(org.apache.cayenne.testdo.testmap.Artist) SelectQuery(org.apache.cayenne.query.SelectQuery) DbEntity(org.apache.cayenne.map.DbEntity) Test(org.junit.Test)

Example 47 with SelectQuery

use of org.apache.cayenne.query.SelectQuery in project cayenne by apache.

the class DefaultSelectTranslatorIT method testCreateSqlStringWithQuoteSqlIdentifiers.

@Test
public void testCreateSqlStringWithQuoteSqlIdentifiers() throws Exception {
    try {
        SelectQuery q = new SelectQuery(Artist.class);
        DbEntity entity = context.getEntityResolver().getDbEntity("ARTIST");
        entity.getDataMap().setQuotingSQLIdentifiers(true);
        q.addOrdering("dateOfBirth", SortOrder.ASCENDING);
        String charStart = unitAdapter.getIdentifiersStartQuote();
        String charEnd = unitAdapter.getIdentifiersEndQuote();
        String s = new DefaultSelectTranslator(q, dataNode.getAdapter(), dataNode.getEntityResolver()).getSql();
        assertTrue(s.startsWith("SELECT "));
        int iFrom = s.indexOf(" FROM ");
        assertTrue(iFrom > 0);
        int artistName = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "ARTIST_NAME" + charEnd);
        assertTrue(artistName > 0 && artistName < iFrom);
        int artistId = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "ARTIST_ID" + charEnd);
        assertTrue(artistId > 0 && artistId < iFrom);
        int dateOfBirth = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "DATE_OF_BIRTH" + charEnd);
        assertTrue(dateOfBirth > 0 && dateOfBirth < iFrom);
        int iArtist = s.indexOf(charStart + "ARTIST" + charEnd + " " + charStart + "t0" + charEnd);
        assertTrue(iArtist > iFrom);
        int iOrderBy = s.indexOf(" ORDER BY ");
        int dateOfBirth2 = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "DATE_OF_BIRTH" + charEnd, iOrderBy);
        assertTrue(iOrderBy > iArtist);
        assertTrue(dateOfBirth2 > iOrderBy);
    } finally {
        DbEntity entity = context.getEntityResolver().getDbEntity("ARTIST");
        entity.getDataMap().setQuotingSQLIdentifiers(false);
    }
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) DbEntity(org.apache.cayenne.map.DbEntity) Test(org.junit.Test)

Example 48 with SelectQuery

use of org.apache.cayenne.query.SelectQuery in project cayenne by apache.

the class DefaultSelectTranslatorIT method testCreateSqlString2.

/**
 * Tests query creation with "distinct" specified.
 */
@Test
public void testCreateSqlString2() throws Exception {
    // query with "distinct" set
    SelectQuery q = new SelectQuery(Artist.class);
    q.setDistinct(true);
    String generatedSql = new DefaultSelectTranslator(q, dataNode.getAdapter(), dataNode.getEntityResolver()).getSql();
    // do some simple assertions to make sure all parts are in
    assertNotNull(generatedSql);
    assertTrue(generatedSql.startsWith("SELECT DISTINCT"));
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) Test(org.junit.Test)

Example 49 with SelectQuery

use of org.apache.cayenne.query.SelectQuery in project cayenne by apache.

the class DefaultSelectTranslatorIT method testCreateSqlString6.

/**
 * Test aliases when the same table used in more then 1 relationship. Check
 * translation of relationship path "ArtistExhibit.toArtist.artistName" and
 * "ArtistExhibit.toArtist.paintingArray.paintingTitle".
 */
@Test
public void testCreateSqlString6() throws Exception {
    // query with qualifier and ordering
    SelectQuery q = new SelectQuery(ArtistExhibit.class);
    q.setQualifier(ExpressionFactory.likeExp("toArtist.artistName", "a%"));
    q.andQualifier(ExpressionFactory.likeExp("toArtist.paintingArray.paintingTitle", "p%"));
    String generatedSql = new DefaultSelectTranslator(q, dataNode.getAdapter(), dataNode.getEntityResolver()).getSql();
    // do some simple assertions to make sure all parts are in
    assertNotNull(generatedSql);
    assertTrue(generatedSql.startsWith("SELECT "));
    assertTrue(generatedSql.indexOf(" FROM ") > 0);
    assertTrue(generatedSql.indexOf(" WHERE ") > generatedSql.indexOf(" FROM "));
    // check that there is only one distinct alias for the ARTIST
    // table
    int ind1 = generatedSql.indexOf("ARTIST t", generatedSql.indexOf(" FROM "));
    assertTrue(ind1 > 0);
    int ind2 = generatedSql.indexOf("ARTIST t", ind1 + 1);
    assertTrue(generatedSql, ind2 < 0);
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) Test(org.junit.Test)

Example 50 with SelectQuery

use of org.apache.cayenne.query.SelectQuery in project cayenne by apache.

the class DefaultSelectTranslatorIT method testCreateSqlStringWithQuoteSqlIdentifiers3.

@Test
public void testCreateSqlStringWithQuoteSqlIdentifiers3() throws Exception {
    // and with QuoteSqlIdentifiers = true
    try {
        SelectQuery q = new SelectQuery(Artist.class, ExpressionFactory.exp("paintingArray.paintingTitle = 'a'"));
        q.addPrefetch(Artist.PAINTING_ARRAY.joint());
        DbEntity entity = context.getEntityResolver().getDbEntity("ARTIST");
        entity.getDataMap().setQuotingSQLIdentifiers(true);
        String charStart = unitAdapter.getIdentifiersStartQuote();
        String charEnd = unitAdapter.getIdentifiersEndQuote();
        String s = new DefaultSelectTranslator(q, dataNode.getAdapter(), dataNode.getEntityResolver()).getSql();
        assertTrue(s.startsWith("SELECT DISTINCT "));
        int iFrom = s.indexOf(" FROM ");
        assertTrue(iFrom > 0);
        int artistName = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "ARTIST_NAME" + charEnd);
        assertTrue(artistName > 0 && artistName < iFrom);
        int artistId = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "ARTIST_ID" + charEnd);
        assertTrue(artistId > 0 && artistId < iFrom);
        int dateOfBirth = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "DATE_OF_BIRTH" + charEnd);
        assertTrue(dateOfBirth > 0 && dateOfBirth < iFrom);
        int estimatedPrice = s.indexOf(charStart + "t1" + charEnd + "." + charStart + "ESTIMATED_PRICE" + charEnd);
        assertTrue(estimatedPrice > 0 && estimatedPrice < iFrom);
        int paintingDescription = s.indexOf(charStart + "t1" + charEnd + "." + charStart + "PAINTING_DESCRIPTION" + charEnd);
        assertTrue(paintingDescription > 0 && paintingDescription < iFrom);
        int paintingTitle = s.indexOf(charStart + "t1" + charEnd + "." + charStart + "PAINTING_TITLE" + charEnd);
        assertTrue(paintingTitle > 0 && paintingTitle < iFrom);
        int artistIdT1 = s.indexOf(charStart + "t1" + charEnd + "." + charStart + "ARTIST_ID" + charEnd);
        assertTrue(artistIdT1 > 0 && artistIdT1 < iFrom);
        int galleryId = s.indexOf(charStart + "t1" + charEnd + "." + charStart + "GALLERY_ID" + charEnd);
        assertTrue(galleryId > 0 && galleryId < iFrom);
        int paintingId = s.indexOf(charStart + "t1" + charEnd + "." + charStart + "PAINTING_ID" + charEnd);
        assertTrue(paintingId > 0 && paintingId < iFrom);
        int iArtist = s.indexOf(charStart + "ARTIST" + charEnd + " " + charStart + "t0" + charEnd);
        assertTrue(iArtist > iFrom);
        int iLeftJoin = s.indexOf("LEFT JOIN");
        assertTrue(iLeftJoin > iFrom);
        int iPainting = s.indexOf(charStart + "PAINTING" + charEnd + " " + charStart + "t1" + charEnd);
        assertTrue(iPainting > iLeftJoin);
        int iOn = s.indexOf(" ON ");
        assertTrue(iOn > iLeftJoin);
        int iArtistId = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "ARTIST_ID" + charEnd, iLeftJoin);
        assertTrue(iArtistId > iOn);
        int iArtistIdT1 = s.indexOf(charStart + "t1" + charEnd + "." + charStart + "ARTIST_ID" + charEnd, iLeftJoin);
        assertTrue(iArtistIdT1 > iOn);
        int i = s.indexOf("=", iLeftJoin);
        assertTrue(iArtistIdT1 > i || iArtistId > i);
        int iJoin = s.indexOf("JOIN");
        assertTrue(iJoin > iLeftJoin);
        int iPainting2 = s.indexOf(charStart + "PAINTING" + charEnd + " " + charStart + "t2" + charEnd);
        assertTrue(iPainting2 > iJoin);
        int iOn2 = s.indexOf(" ON ");
        assertTrue(iOn2 > iJoin);
        int iArtistId2 = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "ARTIST_ID" + charEnd, iJoin);
        assertTrue(iArtistId2 > iOn2);
        int iArtistId2T2 = s.indexOf(charStart + "t2" + charEnd + "." + charStart + "ARTIST_ID" + charEnd, iJoin);
        assertTrue(iArtistId2T2 > iOn2);
        int i2 = s.indexOf("=", iJoin);
        assertTrue(iArtistId2T2 > i2 || iArtistId2 > i2);
        int iWhere = s.indexOf(" WHERE ");
        assertTrue(iWhere > iJoin);
        int paintingTitle2 = s.indexOf(charStart + "t2" + charEnd + "." + charStart + "PAINTING_TITLE" + charEnd + " = ?");
        assertTrue(paintingTitle2 > iWhere);
    } finally {
        DbEntity entity = context.getEntityResolver().getDbEntity("ARTIST");
        entity.getDataMap().setQuotingSQLIdentifiers(false);
    }
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) DbEntity(org.apache.cayenne.map.DbEntity) Test(org.junit.Test)

Aggregations

SelectQuery (org.apache.cayenne.query.SelectQuery)360 Test (org.junit.Test)348 Artist (org.apache.cayenne.testdo.testmap.Artist)128 Painting (org.apache.cayenne.testdo.testmap.Painting)75 UnitTestClosure (org.apache.cayenne.unit.di.UnitTestClosure)64 Expression (org.apache.cayenne.exp.Expression)47 List (java.util.List)43 ClientMtTable1 (org.apache.cayenne.testdo.mt.ClientMtTable1)26 ValueHolder (org.apache.cayenne.ValueHolder)21 ReturnTypesMap1 (org.apache.cayenne.testdo.return_types.ReturnTypesMap1)18 ArrayList (java.util.ArrayList)16 Date (java.util.Date)13 DataRow (org.apache.cayenne.DataRow)12 ObjectContext (org.apache.cayenne.ObjectContext)12 DbEntity (org.apache.cayenne.map.DbEntity)12 SQLTemplate (org.apache.cayenne.query.SQLTemplate)11 ROArtist (org.apache.cayenne.testdo.testmap.ROArtist)11 HashMap (java.util.HashMap)10 ObjectId (org.apache.cayenne.ObjectId)10 Query (org.apache.cayenne.query.Query)10