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/25 11:23:24 UTC
svn commit: r550427 - in
/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc:
EJBQLFromTranslator.java EJBQLPathTranslator.java
EJBQLTranslationContext.java
Author: aadamchik
Date: Mon Jun 25 02:23:23 2007
New Revision: 550427
URL: http://svn.apache.org/viewvc?view=rev&rev=550427
Log:
CAY-452 EJB QL Cayenne Query
adding separate markers for implicit inner joins post-append, categorized by the root id variable
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java
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/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java?view=diff&rev=550427&r1=550426&r2=550427
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java Mon Jun 25 02:23:23 2007
@@ -37,30 +37,38 @@
class EJBQLFromTranslator extends EJBQLBaseVisitor {
private EJBQLTranslationContext context;
- private int fromCount;
+ private String lastId;
- public EJBQLFromTranslator(EJBQLTranslationContext context) {
+ static String makeJoinTailMarker(String id) {
+ return "FROM_TAIL" + id;
+ }
+
+ EJBQLFromTranslator(EJBQLTranslationContext context) {
super(true);
this.context = context;
}
public boolean visitFrom(EJBQLExpression expression, int finishedChildIndex) {
-
if (finishedChildIndex + 1 == expression.getChildrenCount()) {
- context.markCurrentPosition(EJBQLTranslationContext.FROM_TAIL_MARKER);
+ if (lastId != null) {
+ context.markCurrentPosition(makeJoinTailMarker(lastId));
+ }
}
return true;
}
- public boolean visitFromItem(EJBQLFromItem expression, int finishedChildIndex) {
- if (finishedChildIndex < 0) {
- if (fromCount++ > 0) {
- context.append(',');
- }
- appendTable(expression.getId());
+ public boolean visitFromItem(EJBQLFromItem expression) {
+
+ String id = expression.getId();
+
+ if (lastId != null) {
+ context.append(',');
+ context.markCurrentPosition(makeJoinTailMarker(lastId));
}
+ this.lastId = id;
+ appendTable(id);
return false;
}
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=550427&r1=550426&r2=550427
==============================================================================
--- 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 25 02:23:23 2007
@@ -51,6 +51,7 @@
private String lastPathComponent;
protected String lastAlias;
protected String idPath;
+ protected String joinMarker;
private String fullPath;
private EJBQLFromTranslator joinAppender;
@@ -86,6 +87,7 @@
this.currentEntity = descriptor.getEntity();
this.idPath = expression.getText();
+ this.joinMarker = EJBQLFromTranslator.makeJoinTailMarker(idPath);
this.fullPath = idPath;
return true;
}
@@ -141,7 +143,7 @@
join.jjtAddChild(path, 0);
join.jjtAddChild(joinId, 1);
- context.switchToMarker(EJBQLTranslationContext.FROM_TAIL_MARKER);
+ context.switchToMarker(joinMarker);
getJoinAppender().visitInnerJoin(join);
context.switchToMainBuffer();
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java?view=diff&rev=550427&r1=550426&r2=550427
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java Mon Jun 25 02:23:23 2007
@@ -34,8 +34,6 @@
*/
class EJBQLTranslationContext {
- static final String FROM_TAIL_MARKER = "FROM_TAIL_MARKER";
-
private Map tableAliases;
private Map boundParameters;
private StringBuffer mainBuffer;