use of org.apache.cayenne.map.DbEntity in project cayenne by apache.
the class DefaultSelectTranslatorIT method testCreateSqlStringWithQuoteSqlIdentifiers4.
@Test
public void testCreateSqlStringWithQuoteSqlIdentifiers4() throws Exception {
// and with QuoteSqlIdentifiers = true
try {
SelectQuery q = new SelectQuery(Painting.class);
q.addPrefetch(Painting.TO_ARTIST.joint());
DbEntity entity = context.getEntityResolver().getDbEntity("PAINTING");
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 "));
int iFrom = s.indexOf(" FROM ");
assertTrue(iFrom > 0);
int paintingDescription = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "PAINTING_DESCRIPTION" + charEnd);
assertTrue(paintingDescription > 0 && paintingDescription < iFrom);
int paintingTitle = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "PAINTING_TITLE" + charEnd);
assertTrue(paintingTitle > 0 && paintingTitle < iFrom);
int artistIdT1 = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "ARTIST_ID" + charEnd);
assertTrue(artistIdT1 > 0 && artistIdT1 < iFrom);
int estimatedPrice = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "ESTIMATED_PRICE" + charEnd);
assertTrue(estimatedPrice > 0 && estimatedPrice < iFrom);
int galleryId = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "GALLERY_ID" + charEnd);
assertTrue(galleryId > 0 && galleryId < iFrom);
int paintingId = s.indexOf(charStart + "t0" + charEnd + "." + charStart + "PAINTING_ID" + charEnd);
assertTrue(paintingId > 0 && paintingId < iFrom);
int artistName = s.indexOf(charStart + "t1" + charEnd + "." + charStart + "ARTIST_NAME" + charEnd);
assertTrue(artistName > 0 && artistName < iFrom);
int artistId = s.indexOf(charStart + "t1" + charEnd + "." + charStart + "ARTIST_ID" + charEnd);
assertTrue(artistId > 0 && artistId < iFrom);
int dateOfBirth = s.indexOf(charStart + "t1" + charEnd + "." + charStart + "DATE_OF_BIRTH" + charEnd);
assertTrue(dateOfBirth > 0 && dateOfBirth < iFrom);
int iPainting = s.indexOf(charStart + "PAINTING" + charEnd + " " + charStart + "t0" + charEnd);
assertTrue(iPainting > iFrom);
int iLeftJoin = s.indexOf("LEFT JOIN");
assertTrue(iLeftJoin > iFrom);
int iArtist = s.indexOf(charStart + "ARTIST" + charEnd + " " + charStart + "t1" + charEnd);
assertTrue(iArtist > 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);
} finally {
DbEntity entity = context.getEntityResolver().getDbEntity("PAINTING");
entity.getDataMap().setQuotingSQLIdentifiers(false);
}
}
use of org.apache.cayenne.map.DbEntity in project cayenne by apache.
the class DefaultSelectTranslatorIT method testDbEntityQualifier_FlattenedRel.
@Test
public void testDbEntityQualifier_FlattenedRel() throws Exception {
SelectQuery<Artist> q = new SelectQuery<Artist>(Artist.class, ExpressionFactory.matchExp("groupArray.name", "bar"));
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);
}
}
use of org.apache.cayenne.map.DbEntity in project cayenne by apache.
the class IdentityColumnsIT method testGeneratedJoinInFlattenedRelationship.
@Test
public void testGeneratedJoinInFlattenedRelationship() throws Exception {
// before saving objects, let's manually access PKGenerator to get a
// base PK value
// for comparison
DbEntity joinTableEntity = context.getEntityResolver().getDbEntity(joinTable.getTableName());
DbAttribute pkAttribute = joinTableEntity.getAttribute("ID");
Number pk = (Number) adapter.getPkGenerator().generatePk(node, pkAttribute);
GeneratedF1 f1 = context.newObject(GeneratedF1.class);
GeneratedF2 f2 = context.newObject(GeneratedF2.class);
f1.addToF2(f2);
context.commitChanges();
int id = joinTable.getInt("ID");
assertTrue(id > 0);
// base value
if (adapter.supportsGeneratedKeys()) {
assertFalse("Looks like auto-increment wasn't used for the join table. ID: " + id, id == pk.intValue() + 1);
} else {
assertEquals(id, pk.intValue() + 1);
}
}
use of org.apache.cayenne.map.DbEntity in project cayenne by apache.
the class QuotedIdentifiersIT method testPrefetchQuote.
@Test
public void testPrefetchQuote() throws Exception {
DbEntity entity = context.getEntityResolver().getObjEntity(QuoteAdress.class).getDbEntity();
List idAttributes = Collections.singletonList(entity.getAttribute("City"));
List updatedAttributes = Collections.singletonList(entity.getAttribute("City"));
UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes, Collections.<String>emptySet(), 1);
List objects3 = context.performQuery(updateQuery);
assertEquals(0, objects3.size());
SelectQuery qQuote_Person2 = new SelectQuery(Quote_Person.class);
List objects4 = context.performQuery(qQuote_Person2);
assertEquals(2, objects4.size());
SelectQuery qQuote_Person3 = new SelectQuery(Quote_Person.class, ExpressionFactory.matchExp("salary", 100));
List objects5 = context.performQuery(qQuote_Person3);
assertEquals(1, objects5.size());
SelectQuery qQuote_Person4 = new SelectQuery(Quote_Person.class, ExpressionFactory.matchExp("group", "107324"));
List objects6 = context.performQuery(qQuote_Person4);
assertEquals(1, objects6.size());
SelectQuery quoteAdress1 = new SelectQuery(QuoteAdress.class, ExpressionFactory.matchExp("group", "324"));
List objects7 = context.performQuery(quoteAdress1);
assertEquals(1, objects7.size());
ObjectIdQuery queryObjectId = new ObjectIdQuery(new ObjectId("QuoteAdress", QuoteAdress.GROUP.getName(), "324"));
List objects8 = context.performQuery(queryObjectId);
assertEquals(1, objects8.size());
ObjectIdQuery queryObjectId2 = new ObjectIdQuery(new ObjectId("Quote_Person", "GROUP", "1111"));
List objects9 = context.performQuery(queryObjectId2);
assertEquals(1, objects9.size());
SelectQuery person2Query = new SelectQuery(Quote_Person.class, ExpressionFactory.matchExp("name", "Name"));
Quote_Person quote_Person2 = (Quote_Person) context.performQuery(person2Query).get(0);
RelationshipQuery relationshipQuery = new RelationshipQuery(quote_Person2.getObjectId(), "address_Rel");
List objects10 = context.performQuery(relationshipQuery);
assertEquals(1, objects10.size());
}
use of org.apache.cayenne.map.DbEntity in project cayenne by apache.
the class DefaultDbAdapterFactoryTest method testCreatedAdapter_Auto.
@Test
public void testCreatedAdapter_Auto() throws Exception {
final DbAdapter adapter = mock(DbAdapter.class);
when(adapter.createTable(any(DbEntity.class))).thenReturn("XXXXX");
List<DbAdapterDetector> detectors = new ArrayList<DbAdapterDetector>();
detectors.add(new DbAdapterDetector() {
public DbAdapter createAdapter(DatabaseMetaData md) throws SQLException {
return adapter;
}
});
MockConnection connection = new MockConnection();
MockDataSource dataSource = new MockDataSource();
dataSource.setupConnection(connection);
Module testModule = binder -> {
ServerModule.contributeProperties(binder);
binder.bind(JdbcEventLogger.class).to(Slf4jJdbcEventLogger.class);
binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);
};
Injector injector = DIBootstrap.createInjector(testModule);
DefaultDbAdapterFactory factory = new DefaultDbAdapterFactory(detectors);
injector.injectMembers(factory);
DbAdapter createdAdapter = factory.createAdapter(new DataNodeDescriptor(), dataSource);
assertTrue(createdAdapter instanceof AutoAdapter);
assertEquals("XXXXX", createdAdapter.createTable(new DbEntity("Test")));
}
Aggregations