You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/01/12 14:31:08 UTC
svn commit: r898317 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/access/jdbc/
main/java/org/apache/cayenne/ejbql/parser/
test/java/org/apache/cayenne/access/
test/java/org/apache/cayenne/testdo/relatio...
Author: aadamchik
Date: Tue Jan 12 13:31:05 2010
New Revision: 898317
URL: http://svn.apache.org/viewvc?rev=898317&view=rev
Log:
CAY-1069 EJBQL: support paths across flattened relationships
patch by Ksenia Khailenko
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/FlattenedTest4.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/Relationships.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_FlattenedTest4.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_Relationships.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLFlattenedRelationshipsTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_FlattenedTest1.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLFlattenedRelationshipsTest.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/embeddable.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/generic.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/inheritance.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/locking.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/map-db1.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/map-db2.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/multi-tier.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/people.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/qualified.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/quotemap.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/relationships.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/sus-map.map.xml
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/testmap.map.xml
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java Tue Jan 12 13:31:05 2010
@@ -46,6 +46,7 @@
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbJoin;
import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.ObjRelationship;
import org.apache.cayenne.reflect.AttributeProperty;
import org.apache.cayenne.reflect.ClassDescriptor;
import org.apache.cayenne.reflect.Property;
@@ -164,19 +165,39 @@
String subqueryId = context.createIdAlias(id);
ClassDescriptor targetDescriptor = context.getEntityDescriptor(subqueryId);
+
+ if (expression.isNegated()) {
+ context.append(" NOT");
+ }
+
+ context.append(" EXISTS (SELECT 1 FROM ");
+
String subqueryTableName = targetDescriptor
.getEntity()
.getDbEntity()
.getFullyQualifiedName();
String subqueryRootAlias = context.getTableAlias(subqueryId, subqueryTableName);
- context.append(" (SELECT COUNT(1) FROM ");
- // not using "AS" to separate table name and alias name - OpenBase doesn't
- // support "AS", and the rest of the databases do not care
- context.append(subqueryTableName).append(' ').append(subqueryRootAlias);
+ ObjRelationship relationship = (ObjRelationship) correlatedEntityDescriptor
+ .getEntity()
+ .getRelationship(path.getRelativePath());
+
+ if (relationship.getDbRelationshipPath().contains(".")) {
+ // if the DbRelationshipPath contains '.', the relationship is flattened
+ subqueryRootAlias = processFlattenedRelationShip(
+ subqueryRootAlias,
+ relationship);
+ }
+ else {
+ // not using "AS" to separate table name and alias name - OpenBase doesn't
+ // support "AS", and the rest of the databases do not care
+ context.append(subqueryTableName).append(' ').append(subqueryRootAlias);
+
+ }
context.append(" WHERE");
// TODO: andrus, 8/11/2007 flattened?
+ // 11/01/2010 flattened relationship are processing earlier
DbRelationship correlatedJoinRelationship = context.getIncomingRelationships(
new EJBQLTableId(id)).get(0);
Iterator<DbJoin> it = correlatedJoinRelationship.getJoins().iterator();
@@ -238,23 +259,40 @@
String subqueryId = context.createIdAlias(id);
ClassDescriptor targetDescriptor = context.getEntityDescriptor(subqueryId);
+
+ if (expression.isNegated()) {
+ context.append(" NOT");
+ }
+
+ context.append(" EXISTS (SELECT 1 FROM ");
+
String subqueryTableName = targetDescriptor
.getEntity()
.getDbEntity()
.getFullyQualifiedName();
String subqueryRootAlias = context.getTableAlias(subqueryId, subqueryTableName);
- if (expression.isNegated()) {
- context.append(" NOT");
+ ObjRelationship relationship = (ObjRelationship) correlatedEntityDescriptor
+ .getEntity()
+ .getRelationship(path.getRelativePath());
+
+ if (relationship.getDbRelationshipPath().contains(".")) {
+ // if the DbRelationshipPath contains '.', the relationship is flattened
+ subqueryRootAlias = processFlattenedRelationShip(
+ subqueryRootAlias,
+ relationship);
+ }
+ else {
+ // not using "AS" to separate table name and alias name - OpenBase doesn't
+ // support "AS", and the rest of the databases do not care
+ context.append(subqueryTableName).append(' ').append(subqueryRootAlias);
+
}
- context.append(" EXISTS (SELECT 1 FROM ");
- // not using "AS" to separate table name and alias name - OpenBase doesn't
- // support "AS", and the rest of the databases do not care
- context.append(subqueryTableName).append(' ').append(subqueryRootAlias);
context.append(" WHERE");
// TODO: andrus, 8/11/2007 flattened?
+ // 11/01/2010 flattened relationship are processing earlier
DbRelationship correlatedJoinRelationship = context.getIncomingRelationships(
new EJBQLTableId(id)).get(0);
@@ -278,6 +316,60 @@
return false;
}
+ private String processFlattenedRelationShip(
+ String subqueryRootAlias,
+ ObjRelationship relationship) {
+ List<DbRelationship> dbRelationships = relationship
+ .getDbRelationships();
+ // reverse order to get the nearest to the correlated of the direct relation
+ for (int i = dbRelationships.size() - 1; i > 0; i--) {
+ DbRelationship dbRelationship = dbRelationships.get(i);
+ String subqueryTargetTableName = dbRelationship.getTargetEntityName();
+ String subqueryTargetAlias;
+ if (i == dbRelationships.size() - 1) {
+ subqueryTargetAlias = subqueryRootAlias;
+ context.append(subqueryTargetTableName).append(' ').append(
+ subqueryTargetAlias);
+ }
+ else {
+ subqueryTargetAlias = context.getTableAlias(
+ subqueryTargetTableName,
+ subqueryTargetTableName);
+ }
+
+
+ context.append(" JOIN ");
+
+ String subquerySourceTableName = dbRelationship
+ .getSourceEntity()
+ .getName();
+ String subquerySourceAlias = context.getTableAlias(
+ subquerySourceTableName,
+ subquerySourceTableName);
+
+ context.append(subquerySourceTableName).append(' ').append(subquerySourceAlias);
+
+ context.append(" ON (");
+
+ List<DbJoin> joins = dbRelationship.getJoins();
+ Iterator<DbJoin> it = joins.iterator();
+ while (it.hasNext()) {
+ DbJoin join = it.next();
+ context.append(' ').append(subqueryTargetAlias).append('.').append(
+ join.getTargetName()).append(" = ");
+ context.append(subquerySourceAlias).append('.').append(
+ join.getSourceName());
+ if (it.hasNext()) {
+ context.append(" AND");
+ }
+ }
+ context.append(" )");
+ subqueryRootAlias = subquerySourceAlias;
+
+ }
+ return subqueryRootAlias;
+ }
+
@Override
public boolean visitAll(EJBQLExpression expression) {
context.append(" ALL");
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java Tue Jan 12 13:31:05 2010
@@ -53,7 +53,7 @@
public boolean visitFromItem(EJBQLFromItem expression, int finishedChildIndex) {
String id = expression.getId();
-
+
if (lastId != null) {
context.append(',');
context.markCurrentPosition(EJBQLJoinAppender.makeJoinTailMarker(lastId));
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java Tue Jan 12 13:31:05 2010
@@ -99,6 +99,7 @@
}
// TODO: andrus, 4/8/2007 - support for flattened relationships
+ // 11/01/2010 support for flattened relationships is represented below
DbRelationship incomingDB = joinRelationships.get(0);
// TODO: andrus, 1/6/2008 - move reusable join check here...
@@ -107,9 +108,10 @@
String tableName;
if (sourceEntity instanceof DbEntity) {
- tableName = ((DbEntity) sourceEntity).getFullyQualifiedName();
- } else {
- tableName = sourceEntity.getName();
+ tableName = ((DbEntity) sourceEntity).getFullyQualifiedName();
+ }
+ else {
+ tableName = sourceEntity.getName();
}
String sourceAlias = context.getTableAlias(lhsId.getEntityId(), tableName);
@@ -121,47 +123,110 @@
try {
context.append(" ").append(semantics);
- String targetAlias = appendTable(rhsId);
- context.append(" ON (");
+ String targetAlias = "";
+ if (joinRelationships.size() > 1) {
+ // if size of relationship list greater than 1,
+ // it's a flattened relationship
+ context.append(" ");
+
+ for (int i = 1; i < joinRelationships.size(); i++) {
+ DbRelationship dbRelationship = joinRelationships.get(i);
+
+ String subquerySourceTableName = dbRelationship
+ .getSourceEntity()
+ .getName();
+ String subquerySourceAlias = context.getTableAlias(
+ subquerySourceTableName,
+ subquerySourceTableName);
+
+ String subqueryTargetTableName = dbRelationship.getTargetEntityName();
+
+ String subqueryTargetAlias = "";
+ if(i==joinRelationships.size()-1){
+ // it's the last table alias
+ subqueryTargetAlias = context.getTableAlias(rhsId.getEntityId(), subqueryTargetTableName);
+ } else {
+ subqueryTargetAlias = context.getTableAlias(
+ subqueryTargetTableName,
+ subqueryTargetTableName);
+ }
+ if (i == 1) {
+ // first apply the joins defined in query
+ context.append(subquerySourceTableName).append(' ').append(
+ subquerySourceAlias);
+
+ generateJoiningExpression(
+ incomingDB,
+ sourceAlias,
+ subquerySourceAlias);
+
+ }
+
+ context.append(" JOIN ");
+ context.append(subqueryTargetTableName).append(' ').append(
+ subqueryTargetAlias);
+ generateJoiningExpression(
+ dbRelationship,
+ subquerySourceAlias,
+ subqueryTargetAlias);
+ }
- Iterator<DbJoin> it = incomingDB.getJoins().iterator();
- if (it.hasNext()) {
- DbJoin dbJoin = it.next();
- context
- .append(sourceAlias)
- .append('.')
- .append(dbJoin.getSourceName())
- .append(" = ")
- .append(targetAlias)
- .append('.')
- .append(dbJoin.getTargetName());
}
-
- while (it.hasNext()) {
- context.append(", ");
- DbJoin dbJoin = it.next();
- context
- .append(sourceAlias)
- .append('.')
- .append(dbJoin.getSourceName())
- .append(" = ")
- .append(targetAlias)
- .append('.')
- .append(dbJoin.getTargetName());
+ else {
+ // non-flattened relationship
+ targetAlias = appendTable(rhsId);
+ // apply the joins defined in query
+ generateJoiningExpression(incomingDB, sourceAlias, targetAlias);
}
- context.append(")");
}
finally {
if (marker != null) {
context.popMarker();
}
}
+
+ }
+
+ private void generateJoiningExpression(
+ DbRelationship incomingDB,
+ String sourceAlias,
+ String targetAlias) {
+ context.append(" ON (");
+
+ Iterator<DbJoin> it = incomingDB.getJoins().iterator();
+ if (it.hasNext()) {
+ DbJoin dbJoin = it.next();
+ context
+ .append(sourceAlias)
+ .append('.')
+ .append(dbJoin.getSourceName())
+ .append(" = ")
+ .append(targetAlias)
+ .append('.')
+ .append(dbJoin.getTargetName());
+ }
+
+ while (it.hasNext()) {
+ context.append(", ");
+ DbJoin dbJoin = it.next();
+ context
+ .append(sourceAlias)
+ .append('.')
+ .append(dbJoin.getSourceName())
+ .append(" = ")
+ .append(targetAlias)
+ .append('.')
+ .append(dbJoin.getTargetName());
+ }
+
+ context.append(")");
}
public String appendTable(EJBQLTableId id) {
- String tableName = id.getDbEntity(context).getFullyQualifiedName();
+ DbEntity dbEntity = id.getDbEntity(context);
+ String tableName = dbEntity.getFullyQualifiedName();
String alias;
if (context.isUsingAliases()) {
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java Tue Jan 12 13:31:05 2010
@@ -120,8 +120,21 @@
if (oldPath != null) {
this.idPath = oldPath;
- this.lastAlias = context.getTableAlias(oldPath, currentEntity
- .getDbEntity().getFullyQualifiedName());
+ Relationship lastRelationship = currentEntity
+ .getRelationship(lastPathComponent);
+ if (lastRelationship != null) {
+ ObjEntity targetEntity = (ObjEntity) lastRelationship.getTargetEntity();
+
+ this.lastAlias = context.getTableAlias(fullPath, targetEntity
+ .getDbEntity()
+ .getFullyQualifiedName());
+ }
+ else {
+ this.lastAlias = context.getTableAlias(oldPath, currentEntity
+ .getDbEntity()
+ .getFullyQualifiedName());
+
+ }
}
else {
@@ -217,13 +230,15 @@
resolveJoin(false);
// TODO: andrus, 6/21/2007 - flattened support
- DbRelationship dbRelationship = relationship.getDbRelationships().get(0);
+ // 11/01/2010 flattened support added in chooseDbRelationship
+ DbRelationship dbRelationship = chooseDbRelationship(relationship);
DbEntity table = (DbEntity) dbRelationship.getTargetEntity();
String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(
idPath,
table.getFullyQualifiedName());
-
+
+
Collection<DbAttribute> pks = table.getPrimaryKeys();
if (pks.size() == 1) {
@@ -238,12 +253,14 @@
throw new EJBQLException(
"Multi-column PK to-many matches are not yet supported.");
}
+
}
else {
// match FK against the target object
// TODO: andrus, 6/21/2007 - flattened support
- DbRelationship dbRelationship = relationship.getDbRelationships().get(0);
+ // 11/01/2010 flattened support added in chooseDbRelationship
+ DbRelationship dbRelationship = chooseDbRelationship(relationship);
DbEntity table = (DbEntity) dbRelationship.getSourceEntity();
String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(
@@ -278,6 +295,34 @@
}
}
}
+
+ /**
+ * Checks if the object relationship is flattened and then chooses
+ * the corresponding db relationship. The last in idPath if isFlattened and
+ * the first in list otherwise.
+ *
+ * @param relationship the object relationship
+ *
+ * @return {@link DbRelationship}
+ */
+ protected DbRelationship chooseDbRelationship(ObjRelationship relationship) {
+
+ List<DbRelationship> dbRelationships = relationship.getDbRelationships();
+ String dbRelationshipPath = relationship.getDbRelationshipPath();
+
+ if (dbRelationshipPath.contains(".")) {
+ String dbRelName = dbRelationshipPath.substring(dbRelationshipPath
+ .lastIndexOf(".") + 1);
+ for (DbRelationship dbR : dbRelationships) {
+ if (dbR.getName().equals(dbRelName)) {
+ return dbR;
+ }
+
+ }
+ }
+ return relationship.getDbRelationships().get(0);
+
+ }
public boolean isUsingAliases() {
return usingAliases;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java Tue Jan 12 13:31:05 2010
@@ -172,9 +172,12 @@
EJBQLIdentifier ident = new EJBQLIdentifier(0);
ident.text = pathRelationshipString;
- resultComponents.remove(pathsInSelect.get(path).intValue());
- resultComponents.add(pathsInSelect.get(path).intValue(), ident);
- rootId = pathRelationshipString;
+ Integer integer = pathsInSelect.get(path);
+ if(integer!=null){
+ resultComponents.remove(integer.intValue());
+ resultComponents.add(pathsInSelect.get(path).intValue(), ident);
+ rootId = pathRelationshipString;
+ }
};
elenent++;
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLFlattenedRelationshipsTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLFlattenedRelationshipsTest.java?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLFlattenedRelationshipsTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLFlattenedRelationshipsTest.java Tue Jan 12 13:31:05 2010
@@ -18,8 +18,14 @@
****************************************************************/
package org.apache.cayenne.access;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
import org.apache.cayenne.Cayenne;
import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.Persistent;
import org.apache.cayenne.query.EJBQLQuery;
import org.apache.cayenne.testdo.relationship.FlattenedTest1;
import org.apache.cayenne.unit.RelationshipCase;
@@ -33,23 +39,223 @@
+ "WHERE f MEMBER OF ft.ft3Array AND ft = :ft";
ObjectContext context = createDataContext();
+ FlattenedTest1 ft = Cayenne.objectForPK(context, FlattenedTest1.class, 2);
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ query.setParameter("ft", ft);
+
+ List<?> objects = context.performQuery(query);
+ assertEquals(2, objects.size());
+
+ Set<Object> ids = new HashSet<Object>();
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = Cayenne.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+
+ assertTrue(ids.contains(new Integer(2)));
+ assertTrue(ids.contains(new Integer(3)));
+ }
+
+ public void testCollectionMemberOfThetaJoinLongRelationshipSequence() throws Exception {
+ String ejbql = "SELECT f FROM FlattenedTest4 f, FlattenedTest1 ft "
+ + "WHERE f MEMBER OF ft.ft4ArrayFor1 AND ft = :ft";
+
+ ObjectContext context = createDataContext();
+ FlattenedTest1 ft = Cayenne.objectForPK(context, FlattenedTest1.class, 1);
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ query.setParameter("ft", ft);
+
+ List<?> objects = context.performQuery(query);
+ assertEquals(1, objects.size());
+
+ Set<Object> ids = new HashSet<Object>();
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = Cayenne.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+
+ assertTrue(ids.contains(new Integer(1)));
+
+
+ ft = Cayenne.objectForPK(context, FlattenedTest1.class, 2);
+ query = new EJBQLQuery(ejbql);
+ query.setParameter("ft", ft);
+
+ objects = context.performQuery(query);
+ assertEquals(0, objects.size());
+ }
+
+ public void testCollectionInnerJoin() throws Exception {
+ String ejbql = "SELECT ft FROM FlattenedTest1 ft INNER JOIN ft.ft3Array f WHERE ft = :ft";
+
+ ObjectContext context = createDataContext();
+ FlattenedTest1 ft = Cayenne.objectForPK(context, FlattenedTest1.class, 1);
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ query.setParameter("ft", ft);
+
+ List<?> objects = context.performQuery(query);
+ assertNotNull(objects);
+ assertFalse(objects.isEmpty());
+ assertEquals(1, objects.size());
+
+ Set<Object> ids = new HashSet<Object>();
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = Cayenne.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+
+ assertTrue(ids.contains(new Integer(1)));
+
+ }
+
+
+ public void testCollectionAsInnerJoin() throws Exception {
+ // this query is equivalent to the previous INNER JOIN example
+ String ejbql = "SELECT OBJECT(ft) FROM FlattenedTest1 ft, IN(ft.ft3Array) f WHERE ft = :ft";
+
+ ObjectContext context = createDataContext();
+ FlattenedTest1 ft = Cayenne.objectForPK(context, FlattenedTest1.class, 1);
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ query.setParameter("ft", ft);
+
+ List<?> objects = context.performQuery(query);
+ assertNotNull(objects);
+ assertFalse(objects.isEmpty());
+ assertEquals(1, objects.size());
+
+ Set<Object> ids = new HashSet<Object>();
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = Cayenne.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+
+ assertTrue(ids.contains(new Integer(1)));
+
+ }
+
+ public void testCollectionThetaJoin() throws Exception {
+ String ejbql = "SELECT DISTINCT ft FROM FlattenedTest1 ft , FlattenedTest3 f3 WHERE f3.toFT1 = ft";
+
+ ObjectContext context = createDataContext();
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+
+ List<?> objects = context.performQuery(query);
+ assertNotNull(objects);
+ assertFalse(objects.isEmpty());
+ assertEquals(2, objects.size());
+
+ Set<Object> ids = new HashSet<Object>();
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = Cayenne.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+ assertTrue(ids.contains(new Integer(1)));
+ assertTrue(ids.contains(new Integer(2)));
+
+ }
+
+ public void testCollectionIdentificationVariable() throws Exception {
+ String ejbql = "SELECT ft.ft3Array FROM FlattenedTest1 ft WHERE ft = :ft";
+
+ ObjectContext context = createDataContext();
+ FlattenedTest1 ft = Cayenne.objectForPK(context, FlattenedTest1.class, 2);
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ query.setParameter("ft", ft);
+
+ List<?> objects = context.performQuery(query);
+ assertNotNull(objects);
+ assertFalse(objects.isEmpty());
+ assertEquals(2, objects.size());
+
+ Set<Object> ids = new HashSet<Object>();
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = Cayenne.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+
+ assertTrue(ids.contains(new Integer(2)));
+ assertTrue(ids.contains(new Integer(3)));
+
+ }
+
+ public void testAssociationFieldSelect() throws Exception {
+
+ String ejbql = "SELECT ft3.toFT1 FROM FlattenedTest3 ft3 WHERE ft3.toFT1 = :ft";
+
+ ObjectContext context = createDataContext();
FlattenedTest1 ft = Cayenne.objectForPK(context, FlattenedTest1.class, 1);
EJBQLQuery query = new EJBQLQuery(ejbql);
query.setParameter("ft", ft);
- // TODO: andrus 2008/06/09 - this fails until we fix CAY-1069 (for correlated join
- // case see EJBQLConditionTranslator.visitMemberOf(..)
- // List<?> objects = context.performQuery(query);
- // assertEquals(2, objects.size());
- //
- // Set<Object> ids = new HashSet<Object>();
- // Iterator<?> it = objects.iterator();
- // while (it.hasNext()) {
- // Object id = Cayenne.pkForObject((Persistent) it.next());
- // ids.add(id);
- // }
- //
- // assertTrue(ids.contains(new Integer(2)));
- // assertTrue(ids.contains(new Integer(3)));
+ List<?> objects = context.performQuery(query);
+ assertEquals(1, objects.size());
+
+ Set<Object> ids = new HashSet<Object>();
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = Cayenne.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+
+ assertTrue(ids.contains(new Integer(1)));
+
+ }
+
+ public void testCollectionSubquery() throws Exception {
+ String ejbql = "SELECT ft FROM FlattenedTest1 ft "
+ + "WHERE (SELECT COUNT(f) FROM ft.ft3Array f) = 1";
+
+ ObjectContext context = createDataContext();
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+
+ // TODO fails but not because of flattened relationship,
+ // the reason is that property "ft3Array" inside the subquery
+ // parses as unmapped
+ /*List<?> objects = context.performQuery(query);
+ assertNotNull(objects);
+ assertFalse(objects.isEmpty());
+ assertEquals(1, objects.size());
+
+ Set<Object> ids = new HashSet<Object>();
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = Cayenne.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+
+ assertTrue(ids.contains(new Integer(2)));*/
+
+
+ }
+
+ public void testCollectionSubquery1() throws Exception {
+ String ejbql = "SELECT ft FROM FlattenedTest1 ft "
+ + "WHERE (SELECT COUNT(f3) FROM FlattenedTest3 f3 WHERE f3 MEMBER OF ft.ft3Array) > 1";
+
+ ObjectContext context = createDataContext();
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+
+ List<?> objects = context.performQuery(query);
+
+ assertNotNull(objects);
+ assertFalse(objects.isEmpty());
+ assertEquals(1, objects.size());
+
+ Set<Object> ids = new HashSet<Object>();
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = Cayenne.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+
+ assertTrue(ids.contains(new Integer(2)));
+
}
+
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesTest.java?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesTest.java Tue Jan 12 13:31:05 2010
@@ -200,7 +200,105 @@
assertEquals(PersistenceState.COMMITTED, painting.getPersistenceState());
}
}
-
+
+ public void testSelectEJQBQLCollectionTheta() throws Exception {
+ populateTables();
+ EJBQLQuery query = new EJBQLQuery("SELECT a FROM CompoundPainting cp, Artist a "
+ + "WHERE a.artistName=cp.artistName ORDER BY a.artistName");
+
+ //TODO fails while the support for flattened attributes would not be added
+ /*List<?> objects = context.performQuery(query);
+
+ assertNotNull(objects);
+ assertEquals(4, objects.size());
+ Iterator<?> i = objects.iterator();
+ int index=1;
+ while (i.hasNext()) {
+ Artist artist = (Artist) i.next();
+ assertEquals("artist" + index, artist.getArtistName());
+ index++;
+ }*/
+ }
+
+ public void testSelectEJQBQLLike() throws Exception {
+ populateTables();
+ EJBQLQuery query = new EJBQLQuery(
+ "SELECT a FROM CompoundPainting a WHERE a.artistName LIKE 'artist%'");
+
+ List<?> objects = context.performQuery(query);
+
+ assertNotNull(objects);
+ assertEquals(8, objects.size());
+ Iterator<?> i = objects.iterator();
+ int index=1;
+ while (i.hasNext()) {
+ CompoundPainting painting = (CompoundPainting) i.next();
+ assertEquals("painting" + index, painting.getPaintingTitle());
+ index++;
+ }
+ }
+
+ public void testSelectEJQBQLBetween() throws Exception {
+ populateTables();
+ EJBQLQuery query = new EJBQLQuery(
+ "SELECT a FROM CompoundPainting a WHERE a.artistName BETWEEN 'artist1' AND 'artist4'");
+
+ List<?> objects = context.performQuery(query);
+
+ assertNotNull(objects);
+ assertEquals(8, objects.size());
+ Iterator<?> i = objects.iterator();
+ int index=1;
+ while (i.hasNext()) {
+ CompoundPainting painting = (CompoundPainting) i.next();
+ assertEquals("painting" + index, painting.getPaintingTitle());
+ index++;
+ }
+ }
+
+ public void testSelectEJQBQLSubquery() throws Exception {
+ populateTables();
+ EJBQLQuery query = new EJBQLQuery(
+ "SELECT g FROM Gallery g WHERE " +
+ "(SELECT COUNT(cp) FROM CompoundPainting cp WHERE g.galleryName=cp.galleryName) = 4");
+
+
+ // TODO fails while the support for flattened attributes would not be added
+ /*List<?> objects = context.performQuery(query);
+
+ assertNotNull(objects);
+ assertEquals(2, objects.size());
+ Iterator<?> i = objects.iterator();
+ int index=1;
+ while (i.hasNext()) {
+ Gallery gallery = (Gallery) i.next();
+ assertEquals("gallery" + index, gallery.getGalleryName());
+ index++;
+ }*/
+ }
+
+ public void testSelectEJQBQLHaving() throws Exception {
+ populateTables();
+ EJBQLQuery query = new EJBQLQuery(
+ "SELECT cp.artistName FROM CompoundPainting cp " +
+ "GROUP BY cp.artistName " +
+ "HAVING cp.artistName IN ('artist1')");
+
+
+ // TODO fails while the support for flattened attributes would not be added
+ /* List<?> objects = context.performQuery(query);
+
+ assertNotNull(objects);
+ assertEquals(2, objects.size());
+ Iterator<?> i = objects.iterator();
+ int index=1;
+ while (i.hasNext()) {
+ CompoundPainting painting = (CompoundPainting) i.next();
+ assertEquals("painting" + index, painting.getPaintingTitle());
+ index++;
+ }*/
+ }
+
public void testInsert() {
CompoundPainting o1 = context.newObject(CompoundPainting.class);
o1.setArtistName("A1");
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/FlattenedTest4.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/FlattenedTest4.java?rev=898317&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/FlattenedTest4.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/FlattenedTest4.java Tue Jan 12 13:31:05 2010
@@ -0,0 +1,7 @@
+package org.apache.cayenne.testdo.relationship;
+
+import org.apache.cayenne.testdo.relationship.auto._FlattenedTest4;
+
+public class FlattenedTest4 extends _FlattenedTest4 {
+
+}
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/Relationships.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/Relationships.java?rev=898317&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/Relationships.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/Relationships.java Tue Jan 12 13:31:05 2010
@@ -0,0 +1,18 @@
+package org.apache.cayenne.testdo.relationship;
+
+import org.apache.cayenne.testdo.relationship.auto._Relationships;
+
+public class Relationships extends _Relationships {
+
+ private static Relationships instance;
+
+ private Relationships() {}
+
+ public static Relationships getInstance() {
+ if(instance == null) {
+ instance = new Relationships();
+ }
+
+ return instance;
+ }
+}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_FlattenedTest1.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_FlattenedTest1.java?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_FlattenedTest1.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_FlattenedTest1.java Tue Jan 12 13:31:05 2010
@@ -2,19 +2,25 @@
import java.util.List;
-/** Class _FlattenedTest1 was generated by Cayenne.
- * It is probably a good idea to avoid changing this class manually,
- * since it may be overwritten next time code is regenerated.
- * If you need to make any customizations, please use subclass.
- */
-public class _FlattenedTest1 extends org.apache.cayenne.CayenneDataObject {
+import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.testdo.relationship.FlattenedTest2;
+import org.apache.cayenne.testdo.relationship.FlattenedTest3;
+import org.apache.cayenne.testdo.relationship.FlattenedTest4;
+
+/**
+ * Class _FlattenedTest1 was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _FlattenedTest1 extends CayenneDataObject {
public static final String NAME_PROPERTY = "name";
public static final String FT2ARRAY_PROPERTY = "ft2Array";
public static final String FT3ARRAY_PROPERTY = "ft3Array";
public static final String FT3OVER_COMPLEX_PROPERTY = "ft3OverComplex";
+ public static final String FT4ARRAY_FOR1_PROPERTY = "ft4ArrayFor1";
- public static final String FT1_ID_PK_COLUMN = "FT1_ID";
public void setName(String name) {
writeProperty("name", name);
@@ -22,39 +28,41 @@
public String getName() {
return (String)readProperty("name");
}
-
-
- public void addToFt2Array(org.apache.cayenne.testdo.relationship.FlattenedTest2 obj) {
+
+ public void addToFt2Array(FlattenedTest2 obj) {
addToManyTarget("ft2Array", obj, true);
}
- public void removeFromFt2Array(org.apache.cayenne.testdo.relationship.FlattenedTest2 obj) {
+ public void removeFromFt2Array(FlattenedTest2 obj) {
removeToManyTarget("ft2Array", obj, true);
}
- public List getFt2Array() {
- return (List)readProperty("ft2Array");
+ @SuppressWarnings("unchecked")
+ public List<FlattenedTest2> getFt2Array() {
+ return (List<FlattenedTest2>)readProperty("ft2Array");
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public List<FlattenedTest3> getFt3Array() {
+ return (List<FlattenedTest3>)readProperty("ft3Array");
}
-
-
- public void addToFt3Array(org.apache.cayenne.testdo.relationship.FlattenedTest3 obj) {
- addToManyTarget("ft3Array", obj, true);
- }
- public void removeFromFt3Array(org.apache.cayenne.testdo.relationship.FlattenedTest3 obj) {
- removeToManyTarget("ft3Array", obj, true);
- }
- public List getFt3Array() {
- return (List)readProperty("ft3Array");
- }
-
-
- public void addToFt3OverComplex(org.apache.cayenne.testdo.relationship.FlattenedTest3 obj) {
+
+
+ public void addToFt3OverComplex(FlattenedTest3 obj) {
addToManyTarget("ft3OverComplex", obj, true);
}
- public void removeFromFt3OverComplex(org.apache.cayenne.testdo.relationship.FlattenedTest3 obj) {
+ public void removeFromFt3OverComplex(FlattenedTest3 obj) {
removeToManyTarget("ft3OverComplex", obj, true);
}
- public List getFt3OverComplex() {
- return (List)readProperty("ft3OverComplex");
+ @SuppressWarnings("unchecked")
+ public List<FlattenedTest3> getFt3OverComplex() {
+ return (List<FlattenedTest3>)readProperty("ft3OverComplex");
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public List<FlattenedTest4> getFt4ArrayFor1() {
+ return (List<FlattenedTest4>)readProperty("ft4ArrayFor1");
}
-
-
+
+
}
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_FlattenedTest4.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_FlattenedTest4.java?rev=898317&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_FlattenedTest4.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_FlattenedTest4.java Tue Jan 12 13:31:05 2010
@@ -0,0 +1,34 @@
+package org.apache.cayenne.testdo.relationship.auto;
+
+import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.testdo.relationship.FlattenedTest3;
+
+/**
+ * Class _FlattenedTest4 was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _FlattenedTest4 extends CayenneDataObject {
+
+ public static final String NAME_PROPERTY = "name";
+ public static final String TO_FT3_PROPERTY = "toFT3";
+
+
+ public void setName(String name) {
+ writeProperty("name", name);
+ }
+ public String getName() {
+ return (String)readProperty("name");
+ }
+
+ public void setToFT3(FlattenedTest3 toFT3) {
+ setToOneTarget("toFT3", toFT3, true);
+ }
+
+ public FlattenedTest3 getToFT3() {
+ return (FlattenedTest3)readProperty("toFT3");
+ }
+
+
+}
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_Relationships.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_Relationships.java?rev=898317&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_Relationships.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/relationship/auto/_Relationships.java Tue Jan 12 13:31:05 2010
@@ -0,0 +1,12 @@
+package org.apache.cayenne.testdo.relationship.auto;
+
+
+
+/**
+ * This class was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public class _Relationships {
+}
\ No newline at end of file
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLFlattenedRelationshipsTest.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLFlattenedRelationshipsTest.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLFlattenedRelationshipsTest.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLFlattenedRelationshipsTest.xml Tue Jan 12 13:31:05 2010
@@ -45,6 +45,12 @@
insert into FLATTENED_TEST_3 (FT3_ID, FT2_ID, NAME) values (3, 2, 'ft3-b')
</value></constructor-arg>
</bean>
+ <bean id="FT41" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.cayenne.testdo.relationship.FlattenedTest4</value></constructor-arg>
+ <constructor-arg><value>
+ insert into FLATTENED_TEST_4 (FT4_ID, FT3_ID, NAME) values (1, 1, 'ft4')
+ </value></constructor-arg>
+ </bean>
<bean id="testCollectionMemberOfThetaJoin" class="java.util.ArrayList">
<constructor-arg>
@@ -56,6 +62,7 @@
<ref bean="FT31"/>
<ref bean="FT32"/>
<ref bean="FT33"/>
+ <ref bean="FT41"/>
</list>
</constructor-arg>
</bean>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/embeddable.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/embeddable.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/embeddable.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/embeddable.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.embeddable"/>
<embeddable className="org.apache.cayenne.testdo.embeddable.Embeddable1">
<embeddable-attribute name="embedded10" type="java.lang.String" db-attribute-name="EMBEDDED10"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/generic.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/generic.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/generic.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/generic.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.generic"/>
<db-entity name="GENERIC1">
<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/inheritance.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/inheritance.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/inheritance.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/inheritance.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.horizontalinherit"/>
<db-entity name="INHERITANCE_SUB_ENTITY1">
<db-attribute name="ID" type="BIGINT" isPrimaryKey="true" isMandatory="true"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/locking.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/locking.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/locking.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/locking.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.locking"/>
<db-entity name="DATE_LOCKING_TEST">
<db-attribute name="DATE_LOCK" type="DATE"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/map-db1.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/map-db1.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/map-db1.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/map-db1.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.db1"/>
<db-entity name="CROSSDB_M1E1">
<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/map-db2.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/map-db2.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/map-db2.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/map-db2.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.db2"/>
<db-entity name="CROSSDB_M2E1">
<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/multi-tier.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/multi-tier.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/multi-tier.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/multi-tier.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.mt"/>
<property name="clientSupported" value="true"/>
<property name="defaultClientPackage" value="org.apache.cayenne.testdo.mt"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/people.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/people.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/people.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/people.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.inherit"/>
<db-entity name="ADDRESS">
<db-attribute name="ADDRESS_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/qualified.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/qualified.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/qualified.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/qualified.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.qualified"/>
<db-entity name="QUALIFIED1">
<db-attribute name="DELETED" type="BOOLEAN"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/quotemap.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/quotemap.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/quotemap.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/quotemap.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.quotemap"/>
<property name="quoteSqlIdentifiers" value="true"/>
<db-entity name="QUOTE_ADRESS">
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/relationships.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/relationships.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/relationships.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/relationships.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.cayenne.testdo.relationship"/>
<db-entity name="CLOB_DETAIL">
<db-attribute name="CLOB_DETAIL_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
@@ -73,6 +73,11 @@
<db-attribute name="FT3_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
<db-attribute name="NAME" type="VARCHAR" isMandatory="true" length="100"/>
</db-entity>
+ <db-entity name="FLATTENED_TEST_4">
+ <db-attribute name="FT3_ID" type="INTEGER"/>
+ <db-attribute name="FT4_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+ <db-attribute name="NAME" type="VARCHAR" isMandatory="true" length="100"/>
+ </db-entity>
<db-entity name="ID_MAP_TO_MANY">
<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
</db-entity>
@@ -164,6 +169,9 @@
<obj-entity name="FlattenedTest3" className="org.apache.cayenne.testdo.relationship.FlattenedTest3" dbEntityName="FLATTENED_TEST_3">
<obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
</obj-entity>
+ <obj-entity name="FlattenedTest4" className="org.apache.cayenne.testdo.relationship.FlattenedTest4" dbEntityName="FLATTENED_TEST_4">
+ <obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
+ </obj-entity>
<obj-entity name="IdMapToMany" className="org.apache.cayenne.testdo.relationship.IdMapToMany" dbEntityName="ID_MAP_TO_MANY">
</obj-entity>
<obj-entity name="IdMapToManyTarget" className="org.apache.cayenne.testdo.relationship.IdMapToManyTarget" dbEntityName="ID_MAP_TO_MANY_TARGET">
@@ -276,9 +284,15 @@
<db-relationship name="complexJoins" source="FLATTENED_TEST_3" target="COMPLEX_JOIN" toMany="true">
<db-attribute-pair source="FT3_ID" target="FT3_FK"/>
</db-relationship>
+ <db-relationship name="ft4Array" source="FLATTENED_TEST_3" target="FLATTENED_TEST_4" toMany="true">
+ <db-attribute-pair source="FT3_ID" target="FT3_ID"/>
+ </db-relationship>
<db-relationship name="toFT2" source="FLATTENED_TEST_3" target="FLATTENED_TEST_2" toMany="false">
<db-attribute-pair source="FT2_ID" target="FT2_ID"/>
</db-relationship>
+ <db-relationship name="toFT3" source="FLATTENED_TEST_4" target="FLATTENED_TEST_3" toMany="false">
+ <db-attribute-pair source="FT3_ID" target="FT3_ID"/>
+ </db-relationship>
<db-relationship name="targets" source="ID_MAP_TO_MANY" target="ID_MAP_TO_MANY_TARGET" toMany="true">
<db-attribute-pair source="ID" target="MAP_TO_MANY_ID"/>
</db-relationship>
@@ -352,10 +366,13 @@
<obj-relationship name="ft2Array" source="FlattenedTest1" target="FlattenedTest2" db-relationship-path="ft2Array"/>
<obj-relationship name="ft3Array" source="FlattenedTest1" target="FlattenedTest3" db-relationship-path="ft2Array.ft3Array"/>
<obj-relationship name="ft3OverComplex" source="FlattenedTest1" target="FlattenedTest3" db-relationship-path="complexJoins.toFT3"/>
+ <obj-relationship name="ft4ArrayFor1" source="FlattenedTest1" target="FlattenedTest4" db-relationship-path="ft2Array.ft3Array.ft4Array"/>
<obj-relationship name="ft3Array" source="FlattenedTest2" target="FlattenedTest3" db-relationship-path="ft3Array"/>
<obj-relationship name="toFT1" source="FlattenedTest2" target="FlattenedTest1" db-relationship-path="toFT1"/>
+ <obj-relationship name="ft4Array" source="FlattenedTest3" target="FlattenedTest4" db-relationship-path="ft4Array"/>
<obj-relationship name="toFT1" source="FlattenedTest3" target="FlattenedTest1" db-relationship-path="toFT2.toFT1"/>
<obj-relationship name="toFT2" source="FlattenedTest3" target="FlattenedTest2" db-relationship-path="toFT2"/>
+ <obj-relationship name="toFT3" source="FlattenedTest4" target="FlattenedTest3" db-relationship-path="toFT3"/>
<obj-relationship name="targets" source="IdMapToMany" target="IdMapToManyTarget" collection-type="java.util.Map" db-relationship-path="targets"/>
<obj-relationship name="mapToMany" source="IdMapToManyTarget" target="IdMapToMany" db-relationship-path="mapToMany"/>
<obj-relationship name="targets" source="MapToMany" target="MapToManyTarget" collection-type="java.util.Map" map-key="name" db-relationship-path="targets"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/sus-map.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/sus-map.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/sus-map.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/sus-map.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<db-entity name="SUS1">
<db-attribute name="id" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
<db-attribute name="strNoMandatory" type="VARCHAR" length="200"/>
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/testmap.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/testmap.map.xml?rev=898317&r1=898316&r2=898317&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/testmap.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/testmap.map.xml Tue Jan 12 13:31:05 2010
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="3.0.0.1">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ >
<property name="defaultPackage" value="org.apache.art"/>
<property name="defaultSuperclass" value="org.apache.cayenne.CayenneDataObject"/>
<property name="clientSupported" value="true"/>
@@ -633,6 +633,10 @@
<query name="QueryWithSharedCache" factory="org.apache.cayenne.map.SelectQueryBuilder" root="obj-entity" root-name="Artist">
<property name="cayenne.GenericSelectQuery.cacheStrategy" value="SHARED_CACHE"/>
</query>
+ <query name="SelectDateTest" factory="org.apache.cayenne.map.SQLTemplateBuilder" root="data-map" root-name="testmap">
+ <property name="cayenne.GenericSelectQuery.fetchingDataRows" value="true"/>
+ <sql><![CDATA[SELECT * FROM DATE_TEST]]></sql>
+ </query>
<query name="SelectTestLower" factory="org.apache.cayenne.map.SQLTemplateBuilder" root="data-map" root-name="testmap">
<property name="cayenne.GenericSelectQuery.fetchingDataRows" value="true"/>
<property name="cayenne.SQLTemplate.columnNameCapitalization" value="LOWER"/>
@@ -643,10 +647,6 @@
<property name="cayenne.SQLTemplate.columnNameCapitalization" value="UPPER"/>
<sql><![CDATA[select * from ARTIST]]></sql>
</query>
- <query name="SelectDateTest" factory="org.apache.cayenne.map.SQLTemplateBuilder" root="data-map" root-name="testmap">
- <property name="cayenne.GenericSelectQuery.fetchingDataRows" value="true"/>
- <sql><![CDATA[SELECT * FROM DATE_TEST]]></sql>
- </query>
<entity-listener class="org.apache.art.EntityListenerDataMap">
<post-add method-name="prePersistDataMap1"/>
<post-add method-name="prePersistDataMap2"/>