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;