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 2007/06/11 22:08:08 UTC
svn commit: r546239 - in
/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src:
main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java
test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java
Author: aadamchik
Date: Mon Jun 11 13:08:06 2007
New Revision: 546239
URL: http://svn.apache.org/viewvc?view=rev&rev=546239
Log:
EJBQL joins processing - support for mixed implicit/explicit joins
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java?view=diff&rev=546239&r1=546238&r2=546239
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java Mon Jun 11 13:08:06 2007
@@ -37,8 +37,9 @@
private ObjEntity currentEntity;
private ObjRelationship currentIncoming;
private String lastPathComponent;
+ private String lastAlias;
private String idPath;
- private String unresolvedPath;
+ private String fullPath;
private EJBQLFromTranslator joinAppender;
EJBQLPathTranslator(EJBQLTranslationContext context) {
@@ -71,7 +72,7 @@
this.currentEntity = descriptor.getEntity();
this.idPath = expression.getText();
- this.unresolvedPath = idPath;
+ this.fullPath = idPath;
return true;
}
@@ -91,11 +92,12 @@
String newPath = idPath + '.' + lastPathComponent;
String oldPath = context.registerReusableJoin(idPath, lastPathComponent, newPath);
-
- this.unresolvedPath = unresolvedPath + '.' + lastPathComponent;
+
+ this.fullPath = fullPath + '.' + lastPathComponent;
if (oldPath != null) {
this.idPath = oldPath;
+ this.lastAlias = context.getAlias(oldPath, currentEntity.getDbEntityName());
}
else {
// register join
@@ -110,7 +112,7 @@
path.jjtAddChild(idVar, 1);
EJBQLIdentifier joinId = new EJBQLIdentifier(-1);
- joinId.setText(unresolvedPath);
+ joinId.setText(fullPath);
EJBQLInnerJoin join = new EJBQLInnerJoin(-1);
join.jjtAddChild(path, 0);
@@ -129,9 +131,8 @@
context.switchToMainBuffer();
this.idPath = newPath;
+ this.lastAlias = context.getAlias(fullPath, currentEntity.getDbEntityName());
}
-
-
}
private void processIntermediatePath() {
@@ -155,7 +156,9 @@
.getAttribute(lastPathComponent);
DbEntity table = currentEntity.getDbEntity();
- String alias = context.getAlias(idPath, table.getFullyQualifiedName());
+ String alias = this.lastAlias != null ? lastAlias : context.getAlias(
+ idPath,
+ table.getFullyQualifiedName());
context.append(' ').append(alias).append('.').append(
attribute.getDbAttributeName());
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java?view=diff&rev=546239&r1=546238&r2=546239
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java Mon Jun 11 13:08:06 2007
@@ -35,28 +35,28 @@
}
public void testThetaJoins() throws Exception {
- createTestData("testThetaJoins");
-
+ // createTestData("testThetaJoins");
+ //
// String ejbql = "SELECT DISTINCT a "
// + "FROM Artist a, Painting b "
// + "WHERE a.artistName = b.paintingTitle";
- //
+ //
// EJBQLQuery query = new EJBQLQuery(ejbql);
- //
+ //
// System.out.println(""
// + query.getExpression(getDomain().getEntityResolver()).getExpression());
// List artists = createDataContext().performQuery(query);
// assertEquals(2, artists.size());
- //
+ //
// Set names = new HashSet(2);
// Iterator it = artists.iterator();
// while (it.hasNext()) {
// Artist a = (Artist) it.next();
// names.add(a.getArtistName());
- // }
- //
- // assertTrue(names.contains("AA1"));
- // assertTrue(names.contains("BB2"));
+ // }
+ //
+ // assertTrue(names.contains("AA1"));
+ // assertTrue(names.contains("BB2"));
}
public void testInnerJoins() throws Exception {
@@ -107,25 +107,41 @@
}
public void testImplicitJoins() throws Exception {
- // createTestData("testChainedJoins");
- // String ejbql = "SELECT a "
- // + "FROM Artist a "
- // + "WHERE a.paintingArray.toGallery.galleryName = 'gallery2'";
- //
- // List artists = createDataContext().performQuery(new EJBQLQuery(ejbql));
- // assertEquals(1, artists.size());
- // assertEquals(33002, DataObjectUtils.intPKForObject((Artist) artists.get(0)));
+ createTestData("testChainedJoins");
+ String ejbql = "SELECT a "
+ + "FROM Artist a "
+ + "WHERE a.paintingArray.toGallery.galleryName = 'gallery2'";
+
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+
+ System.out.println(""
+ + query.getExpression(getDomain().getEntityResolver()).getExpression());
+
+ List artists = createDataContext().performQuery(query);
+ assertEquals(1, artists.size());
+ assertEquals(33002, DataObjectUtils.intPKForObject((Artist) artists.get(0)));
}
- public void testPartialImplicitJoins() throws Exception {
+ public void testPartialImplicitJoins1() throws Exception {
createTestData("testChainedJoins");
- // String ejbql = "SELECT a "
- // + "FROM Artist a JOIN a.paintingArray b "
- // + "WHERE a.paintingArray.toGallery.galleryName = 'gallery2'";
- //
- // List artists = createDataContext().performQuery(new EJBQLQuery(ejbql));
- // assertEquals(1, artists.size());
- // assertEquals(33002, DataObjectUtils.intPKForObject((Artist) artists.get(0)));
+ String ejbql = "SELECT a "
+ + "FROM Artist a JOIN a.paintingArray b "
+ + "WHERE a.paintingArray.toGallery.galleryName = 'gallery2'";
+
+ List artists = createDataContext().performQuery(new EJBQLQuery(ejbql));
+ assertEquals(1, artists.size());
+ assertEquals(33002, DataObjectUtils.intPKForObject((Artist) artists.get(0)));
+ }
+
+ public void testPartialImplicitJoins2() throws Exception {
+ createTestData("testChainedJoins");
+ String ejbql = "SELECT a "
+ + "FROM Artist a JOIN a.paintingArray b "
+ + "WHERE a.paintingArray.paintingTitle = 'CC2'";
+
+ List artists = createDataContext().performQuery(new EJBQLQuery(ejbql));
+ assertEquals(1, artists.size());
+ assertEquals(33002, DataObjectUtils.intPKForObject((Artist) artists.get(0)));
}
public void testMultipleJoinsToTheSameTable() throws Exception {