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/08/13 16:25:59 UTC

svn commit: r565364 - in /cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src: main/java/org/apache/cayenne/access/jdbc/ main/java/org/apache/cayenne/dba/ main/java/org/apache/cayenne/dba/frontbase/ main/java/org/apache/cayenne/dba/hsqldb/ main...

Author: aadamchik
Date: Mon Aug 13 07:25:56 2007
New Revision: 565364

URL: http://svn.apache.org/viewvc?view=rev&rev=565364
Log:
CAY-819 Support for per-adapter customization of EJBQL translator

Added:
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslatorFactory.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JdbcEJBQLTranslatorFactory.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslatorFactory.java
Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAction.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLDeleteTranslator.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLGroupByTranslator.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/EJBQLSelectColumnsTranslator.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLUpdateItemTranslator.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLUpdateTranslator.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/JdbcActionBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseActionBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLActionBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLActionBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseActionBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/oracle/Oracle8ActionBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleActionBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresActionBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerActionBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAction.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAction.java Mon Aug 13 07:25:56 2007
@@ -22,10 +22,11 @@
 import java.sql.SQLException;
 
 import org.apache.cayenne.access.OperationObserver;
-import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
 import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
 import org.apache.cayenne.ejbql.EJBQLExpression;
+import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.EJBQLQuery;
 import org.apache.cayenne.query.SQLActionVisitor;
@@ -43,7 +44,7 @@
     protected EJBQLQuery query;
 
     public EJBQLAction(EJBQLQuery query, SQLActionVisitor actionFactory,
-            DbAdapter adapter, EntityResolver entityResolver) {
+            JdbcAdapter adapter, EntityResolver entityResolver) {
         super(adapter, entityResolver);
 
         this.query = query;
@@ -54,26 +55,32 @@
             throws SQLException, Exception {
         EJBQLCompiledExpression compiledExpression = query
                 .getExpression(getEntityResolver());
+        final EJBQLTranslatorFactory translatorFactory = ((JdbcAdapter) getAdapter())
+                .getEjbqlTranslatorFactory();
         final EJBQLTranslationContext context = new EJBQLTranslationContext(
                 compiledExpression,
-                query.getParameters());
+                query.getParameters(),
+                translatorFactory);
 
         compiledExpression.getExpression().visit(new EJBQLBaseVisitor(false) {
 
             public boolean visitSelect(EJBQLExpression expression) {
-                EJBQLSelectTranslator visitor = new EJBQLSelectTranslator(context);
+                EJBQLExpressionVisitor visitor = translatorFactory
+                        .getSelectTranslator(context);
                 expression.visit(visitor);
                 return false;
             }
 
             public boolean visitDelete(EJBQLExpression expression) {
-                EJBQLDeleteTranslator visitor = new EJBQLDeleteTranslator(context);
+                EJBQLExpressionVisitor visitor = translatorFactory
+                        .getDeleteTranslator(context);
                 expression.visit(visitor);
                 return false;
             }
 
             public boolean visitUpdate(EJBQLExpression expression) {
-                EJBQLUpdateTranslator visitor = new EJBQLUpdateTranslator(context);
+                EJBQLExpressionVisitor visitor = translatorFactory
+                        .getUpdateTranslator(context);
                 expression.visit(visitor);
                 return false;
             }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java Mon Aug 13 07:25:56 2007
@@ -66,7 +66,7 @@
     }
 
     public boolean visitAggregate(EJBQLExpression expression) {
-        expression.visit(new EJBQLAggregateColumnTranslator(context));
+        expression.visit(context.getTranslatorFactory().getAggregateColumnTranslator(context));
         return false;
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLDeleteTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLDeleteTranslator.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLDeleteTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLDeleteTranslator.java Mon Aug 13 07:25:56 2007
@@ -46,13 +46,13 @@
 
     public boolean visitFrom(EJBQLExpression expression, int finishedChildIndex) {
         context.append(" FROM");
-        expression.visit(new EJBQLFromTranslator(context));
+        expression.visit(context.getTranslatorFactory().getFromTranslator(context));
         return false;
     }
 
     public boolean visitWhere(EJBQLExpression expression) {
         context.append(" WHERE");
-        expression.visit(new EJBQLConditionTranslator(context));
+        expression.visit(context.getTranslatorFactory().getConditionTranslator(context));
         return false;
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLGroupByTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLGroupByTranslator.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLGroupByTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLGroupByTranslator.java Mon Aug 13 07:25:56 2007
@@ -37,7 +37,7 @@
     }
 
     public boolean visitIdentifier(EJBQLExpression expression) {
-        expression.visit(new EJBQLIdentifierColumnsTranslator(context));
+        expression.visit(context.getTranslatorFactory().getIdentifierColumnsTranslator(context));
         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=565364&r1=565363&r2=565364
==============================================================================
--- 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 Aug 13 07:25:56 2007
@@ -26,6 +26,7 @@
 import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
 import org.apache.cayenne.ejbql.EJBQLException;
 import org.apache.cayenne.ejbql.EJBQLExpression;
+import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
 import org.apache.cayenne.ejbql.parser.EJBQLIdentificationVariable;
 import org.apache.cayenne.ejbql.parser.EJBQLIdentifier;
 import org.apache.cayenne.ejbql.parser.EJBQLInnerJoin;
@@ -57,7 +58,7 @@
     protected String idPath;
     protected String joinMarker;
     private String fullPath;
-    private EJBQLFromTranslator joinAppender;
+    private EJBQLExpressionVisitor joinAppender;
 
     EJBQLPathTranslator(EJBQLTranslationContext context) {
         super(true);
@@ -107,9 +108,9 @@
         return true;
     }
 
-    private EJBQLFromTranslator getJoinAppender() {
+    private EJBQLExpressionVisitor getJoinAppender() {
         if (joinAppender == null) {
-            joinAppender = new EJBQLFromTranslator(context);
+            joinAppender = context.getTranslatorFactory().getFromTranslator(context);
         }
 
         return joinAppender;

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java Mon Aug 13 07:25:56 2007
@@ -49,7 +49,8 @@
     }
 
     public boolean visitAggregate(EJBQLExpression expression) {
-        expression.visit(new EJBQLAggregateColumnTranslator(context));
+        expression.visit(context.getTranslatorFactory().getAggregateColumnTranslator(
+                context));
         return false;
     }
 
@@ -79,7 +80,7 @@
 
                 if (context.isAppendingResultColumns()) {
                     String columnAlias = context.nextColumnAlias();
-                    
+
                     // TODO: andrus 6/27/2007 - the last parameter is an unofficial
                     // "jdbcType"
                     // pending CAY-813 implementation, switch to #column directive
@@ -101,7 +102,8 @@
     }
 
     public boolean visitIdentifier(EJBQLExpression expression) {
-        expression.visit(new EJBQLIdentifierColumnsTranslator(context));
+        expression.visit(context.getTranslatorFactory().getIdentifierColumnsTranslator(
+                context));
         return false;
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java Mon Aug 13 07:25:56 2007
@@ -55,25 +55,25 @@
     public boolean visitFrom(EJBQLExpression expression, int finishedChildIndex) {
         context.append(" FROM");
         context.setAppendingResultColumns(false);
-        expression.visit(new EJBQLFromTranslator(context));
+        expression.visit(context.getTranslatorFactory().getFromTranslator(context));
         return false;
     }
 
     public boolean visitGroupBy(EJBQLExpression expression) {
         context.append(" GROUP BY");
-        expression.visit(new EJBQLGroupByTranslator(context));
+        expression.visit(context.getTranslatorFactory().getGroupByTranslator(context));
         return false;
     }
 
     public boolean visitHaving(EJBQLExpression expression) {
         context.append(" HAVING");
-        expression.visit(new EJBQLConditionTranslator(context));
+        expression.visit(context.getTranslatorFactory().getConditionTranslator(context));
         return false;
     }
 
     public boolean visitOrderBy(EJBQLExpression expression) {
         context.append(" ORDER BY");
-        expression.visit(new EJBQLOrderByTranslator(context));
+        expression.visit(context.getTranslatorFactory().getOrderByTranslator(context));
         return false;
     }
 
@@ -91,13 +91,14 @@
     }
 
     public boolean visitSelectExpressions(EJBQLExpression expression) {
-        expression.visit(new EJBQLSelectColumnsTranslator(context));
+        expression.visit(context.getTranslatorFactory().getSelectColumnsTranslator(
+                context));
         return false;
     }
 
     public boolean visitWhere(EJBQLExpression expression) {
         context.append(" WHERE");
-        expression.visit(new EJBQLConditionTranslator(context));
+        expression.visit(context.getTranslatorFactory().getConditionTranslator(context));
         return false;
     }
 }

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=565364&r1=565363&r2=565364
==============================================================================
--- 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 Aug 13 07:25:56 2007
@@ -34,7 +34,7 @@
  * @since 3.0
  * @author Andrus Adamchik
  */
-class EJBQLTranslationContext {
+public class EJBQLTranslationContext {
 
     private Map tableAliases;
     private Map boundParameters;
@@ -46,16 +46,19 @@
     private Map parameters;
     private Map idAliases;
     private int columnAliasPosition;
+    private EJBQLTranslatorFactory translatorFactory;
 
     // a flag indicating whether column expressions should be treated as result columns or
     // not.
     private boolean appendingResultColumns;
 
-    EJBQLTranslationContext(EJBQLCompiledExpression compiledExpression, Map parameters) {
+    public EJBQLTranslationContext(EJBQLCompiledExpression compiledExpression, Map parameters,
+            EJBQLTranslatorFactory translatorFactory) {
         this.compiledExpression = compiledExpression;
         this.mainBuffer = new StringBuffer();
         this.currentBuffer = mainBuffer;
         this.parameters = parameters;
+        this.translatorFactory = translatorFactory;
     }
 
     SQLTemplate getQuery() {
@@ -78,6 +81,10 @@
         }
 
         return id;
+    }
+
+    EJBQLTranslatorFactory getTranslatorFactory() {
+        return translatorFactory;
     }
 
     /**

Added: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslatorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslatorFactory.java?view=auto&rev=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslatorFactory.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslatorFactory.java Mon Aug 13 07:25:56 2007
@@ -0,0 +1,53 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.access.jdbc;
+
+import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
+
+/**
+ * Defines a factory for translation visitors of EJBQL. DbAdapters can customize EJBQL
+ * translation by providing their own factory implementation.
+ * 
+ * @since 3.0
+ * @author Andrus Adamchik
+ */
+public interface EJBQLTranslatorFactory {
+
+    EJBQLExpressionVisitor getSelectTranslator(EJBQLTranslationContext context);
+
+    EJBQLExpressionVisitor getDeleteTranslator(EJBQLTranslationContext context);
+
+    EJBQLExpressionVisitor getUpdateTranslator(EJBQLTranslationContext context);
+
+    EJBQLExpressionVisitor getAggregateColumnTranslator(EJBQLTranslationContext context);
+
+    EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context);
+
+    EJBQLExpressionVisitor getFromTranslator(EJBQLTranslationContext context);
+
+    EJBQLExpressionVisitor getGroupByTranslator(EJBQLTranslationContext context);
+
+    EJBQLExpressionVisitor getIdentifierColumnsTranslator(EJBQLTranslationContext context);
+
+    EJBQLExpressionVisitor getOrderByTranslator(EJBQLTranslationContext context);
+
+    EJBQLExpressionVisitor getSelectColumnsTranslator(EJBQLTranslationContext context);
+
+    EJBQLExpressionVisitor getUpdateItemTranslator(EJBQLTranslationContext context);
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLUpdateItemTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLUpdateItemTranslator.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLUpdateItemTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLUpdateItemTranslator.java Mon Aug 13 07:25:56 2007
@@ -29,7 +29,7 @@
  */
 class EJBQLUpdateItemTranslator extends EJBQLConditionTranslator {
 
-    public EJBQLUpdateItemTranslator(EJBQLTranslationContext context) {
+    EJBQLUpdateItemTranslator(EJBQLTranslationContext context) {
         super(context);
     }
 
@@ -111,7 +111,7 @@
             context.append(" NULL");
             return false;
         }
-        
+
         return true;
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLUpdateTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLUpdateTranslator.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLUpdateTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLUpdateTranslator.java Mon Aug 13 07:25:56 2007
@@ -47,12 +47,12 @@
 
     public boolean visitWhere(EJBQLExpression expression) {
         context.append(" WHERE");
-        expression.visit(new EJBQLConditionTranslator(context));
+        expression.visit(context.getTranslatorFactory().getConditionTranslator(context));
         return false;
     }
 
     public boolean visitFrom(EJBQLExpression expression, int finishedChildIndex) {
-        expression.visit(new EJBQLFromTranslator(context));
+        expression.visit(context.getTranslatorFactory().getFromTranslator(context));
 
         return false;
     }
@@ -65,7 +65,7 @@
             context.append(" SET");
         }
 
-        expression.visit(new EJBQLUpdateItemTranslator(context));
+        expression.visit(context.getTranslatorFactory().getUpdateItemTranslator(context));
         return false;
     }
 }

Added: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JdbcEJBQLTranslatorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JdbcEJBQLTranslatorFactory.java?view=auto&rev=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JdbcEJBQLTranslatorFactory.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JdbcEJBQLTranslatorFactory.java Mon Aug 13 07:25:56 2007
@@ -0,0 +1,77 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.access.jdbc;
+
+import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
+
+/**
+ * A default EJBQLTranslatorFactory.
+ * 
+ * @since 3.0
+ * @author Andrus Adamchik
+ */
+public class JdbcEJBQLTranslatorFactory implements EJBQLTranslatorFactory {
+
+    public EJBQLExpressionVisitor getDeleteTranslator(EJBQLTranslationContext context) {
+        return new EJBQLDeleteTranslator(context);
+    }
+
+    public EJBQLExpressionVisitor getSelectTranslator(EJBQLTranslationContext context) {
+        return new EJBQLSelectTranslator(context);
+    }
+
+    public EJBQLExpressionVisitor getUpdateTranslator(EJBQLTranslationContext context) {
+        return new EJBQLUpdateTranslator(context);
+    }
+
+    public EJBQLExpressionVisitor getAggregateColumnTranslator(
+            EJBQLTranslationContext context) {
+        return new EJBQLAggregateColumnTranslator(context);
+    }
+
+    public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
+        return new EJBQLConditionTranslator(context);
+    }
+
+    public EJBQLExpressionVisitor getFromTranslator(EJBQLTranslationContext context) {
+        return new EJBQLFromTranslator(context);
+    }
+
+    public EJBQLExpressionVisitor getGroupByTranslator(EJBQLTranslationContext context) {
+        return new EJBQLGroupByTranslator(context);
+    }
+
+    public EJBQLExpressionVisitor getIdentifierColumnsTranslator(
+            EJBQLTranslationContext context) {
+        return new EJBQLIdentifierColumnsTranslator(context);
+    }
+
+    public EJBQLExpressionVisitor getOrderByTranslator(EJBQLTranslationContext context) {
+        return new EJBQLOrderByTranslator(context);
+    }
+
+    public EJBQLExpressionVisitor getSelectColumnsTranslator(
+            EJBQLTranslationContext context) {
+        return new EJBQLSelectColumnsTranslator(context);
+    }
+
+    public EJBQLExpressionVisitor getUpdateItemTranslator(EJBQLTranslationContext context) {
+        return new EJBQLUpdateItemTranslator(context);
+    }
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/JdbcActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/JdbcActionBuilder.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/JdbcActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/JdbcActionBuilder.java Mon Aug 13 07:25:56 2007
@@ -46,10 +46,23 @@
  */
 public class JdbcActionBuilder implements SQLActionVisitor {
 
-    protected DbAdapter adapter;
+    protected JdbcAdapter adapter;
     protected EntityResolver entityResolver;
 
+    /**
+     * @deprecated since 3.0 use "JdbcActionBuilder(JdbcAdapter,EntityResolver)"
+     *             constructor instead.
+     */
     public JdbcActionBuilder(DbAdapter adapter, EntityResolver resolver) {
+        if (!(adapter instanceof JdbcAdapter)) {
+            throw new IllegalArgumentException("Expected a non-null JdbcAdapter, got: "
+                    + adapter);
+        }
+        this.adapter = (JdbcAdapter) adapter;
+        this.entityResolver = resolver;
+    }
+
+    public JdbcActionBuilder(JdbcAdapter adapter, EntityResolver resolver) {
         this.adapter = adapter;
         this.entityResolver = resolver;
     }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java Mon Aug 13 07:25:56 2007
@@ -17,7 +17,6 @@
  *  under the License.
  ****************************************************************/
 
-
 package org.apache.cayenne.dba;
 
 import java.net.URL;
@@ -30,6 +29,8 @@
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.access.jdbc.EJBQLTranslatorFactory;
+import org.apache.cayenne.access.jdbc.JdbcEJBQLTranslatorFactory;
 import org.apache.cayenne.access.trans.QualifierTranslator;
 import org.apache.cayenne.access.trans.QueryAssembler;
 import org.apache.cayenne.access.types.BigIntegerType;
@@ -65,6 +66,7 @@
     protected boolean supportsFkConstraints;
     protected boolean supportsUniqueConstraints;
     protected boolean supportsGeneratedKeys;
+    protected EJBQLTranslatorFactory ejbqlTranslatorFactory;
 
     /**
      * Creates new JdbcAdapter with a set of default parameters.
@@ -75,10 +77,11 @@
         this.setSupportsUniqueConstraints(true);
         this.setSupportsFkConstraints(true);
 
-        this.pkGenerator = this.createPkGenerator();
+        this.pkGenerator = createPkGenerator();
         this.typesHandler = TypesHandler.getHandler(findAdapterResource("/types.xml"));
         this.extendedTypes = new ExtendedTypeMap();
         this.configureExtendedTypes(extendedTypes);
+        this.ejbqlTranslatorFactory = createEJBQLTranslatorFactory();
     }
 
     /**
@@ -137,13 +140,13 @@
 
         // enable "small" BLOBs
         map.registerType(new ByteArrayType(false, true));
-        
+
         // enable Calendar
         // TODO: andrus 9/1/2006 - maybe use ExtendedTypeFactory to handle all calendar
         // subclasses at once
         map.registerType(new CalendarType(GregorianCalendar.class));
         map.registerType(new CalendarType(Calendar.class));
-        
+
         map.registerType(new BigIntegerType());
     }
 
@@ -157,6 +160,17 @@
     }
 
     /**
+     * Creates and returns an {@link EJBQLTranslatorFactory} used to generate visitors for
+     * EJBQL to SQL translations. This method should be overriden by subclasses that need
+     * to customize EJBQL generation.
+     * 
+     * @since 3.0
+     */
+    protected EJBQLTranslatorFactory createEJBQLTranslatorFactory() {
+        return new JdbcEJBQLTranslatorFactory();
+    }
+
+    /**
      * Returns primary key generator associated with this DbAdapter.
      */
     public PkGenerator getPkGenerator() {
@@ -250,7 +264,6 @@
                 createTableAppendColumn(sqlBuffer, column);
             }
 
-            
             createTableAppendPKClause(sqlBuffer, entity);
         }
 
@@ -303,9 +316,7 @@
         // append size and precision (if applicable)
         if (TypesMapping.supportsLength(column.getType())) {
             int len = column.getMaxLength();
-            int scale = TypesMapping.isDecimal(column.getType())
-                    ? column.getScale()
-                    : -1;
+            int scale = TypesMapping.isDecimal(column.getType()) ? column.getScale() : -1;
 
             // sanity check
             if (scale > len) {
@@ -487,5 +498,28 @@
      */
     public void setSupportsGeneratedKeys(boolean flag) {
         this.supportsGeneratedKeys = flag;
+    }
+
+    /**
+     * Returns a translator factory for EJBQL to SQL translation. This property is
+     * normally initialized in constructor by calling
+     * {@link #createEJBQLTranslatorFactory()}, and can be overriden by calling
+     * {@link #setEjbqlTranslatorFactory(EJBQLTranslatorFactory)}.
+     * 
+     * @since 3.0
+     */
+    public EJBQLTranslatorFactory getEjbqlTranslatorFactory() {
+        return ejbqlTranslatorFactory;
+    }
+
+    /**
+     * Sets a translator factory for EJBQL to SQL translation. This property is normally
+     * initialized in constructor by calling {@link #createEJBQLTranslatorFactory()}, so
+     * users would only override it if they need to customize EJBQL translation.
+     * 
+     * @since 3.0
+     */
+    public void setEjbqlTranslatorFactory(EJBQLTranslatorFactory ejbqlTranslatorFactory) {
+        this.ejbqlTranslatorFactory = ejbqlTranslatorFactory;
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseActionBuilder.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseActionBuilder.java Mon Aug 13 07:25:56 2007
@@ -23,15 +23,15 @@
 
 import org.apache.cayenne.access.jdbc.SelectAction;
 import org.apache.cayenne.access.trans.SelectTranslator;
-import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.JdbcActionBuilder;
+import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.SQLAction;
 import org.apache.cayenne.query.SelectQuery;
 
 class FrontBaseActionBuilder extends JdbcActionBuilder {
 
-    FrontBaseActionBuilder(DbAdapter adapter, EntityResolver resolver) {
+    FrontBaseActionBuilder(JdbcAdapter adapter, EntityResolver resolver) {
         super(adapter, resolver);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLActionBuilder.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLActionBuilder.java Mon Aug 13 07:25:56 2007
@@ -25,8 +25,8 @@
 import org.apache.cayenne.access.jdbc.SelectAction;
 import org.apache.cayenne.access.trans.ProcedureTranslator;
 import org.apache.cayenne.access.trans.SelectTranslator;
-import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.JdbcActionBuilder;
+import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.ProcedureQuery;
 import org.apache.cayenne.query.SQLAction;
@@ -34,7 +34,7 @@
 
 class HSQLActionBuilder extends JdbcActionBuilder {
 
-    HSQLActionBuilder(DbAdapter adapter, EntityResolver resolver) {
+    HSQLActionBuilder(JdbcAdapter adapter, EntityResolver resolver) {
         super(adapter, resolver);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLActionBuilder.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLActionBuilder.java Mon Aug 13 07:25:56 2007
@@ -23,8 +23,8 @@
 
 import org.apache.cayenne.access.jdbc.SelectAction;
 import org.apache.cayenne.access.trans.SelectTranslator;
-import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.JdbcActionBuilder;
+import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.ProcedureQuery;
 import org.apache.cayenne.query.SQLAction;
@@ -36,7 +36,7 @@
  */
 class MySQLActionBuilder extends JdbcActionBuilder {
 
-    MySQLActionBuilder(DbAdapter adapter, EntityResolver resolver) {
+    MySQLActionBuilder(JdbcAdapter adapter, EntityResolver resolver) {
         super(adapter, resolver);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java Mon Aug 13 07:25:56 2007
@@ -27,6 +27,7 @@
 import java.util.List;
 
 import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.access.jdbc.EJBQLTranslatorFactory;
 import org.apache.cayenne.access.types.ByteArrayType;
 import org.apache.cayenne.access.types.CharType;
 import org.apache.cayenne.access.types.ExtendedTypeMap;
@@ -168,6 +169,13 @@
      */
     protected PkGenerator createPkGenerator() {
         return new MySQLPkGenerator();
+    }
+    
+    /**
+     * @since 3.0
+     */
+    protected EJBQLTranslatorFactory createEJBQLTranslatorFactory() {
+        return new MySQLEJBQLTranslatorFactory();
     }
 
     /**

Added: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslatorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslatorFactory.java?view=auto&rev=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslatorFactory.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslatorFactory.java Mon Aug 13 07:25:56 2007
@@ -0,0 +1,30 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.dba.mysql;
+
+import org.apache.cayenne.access.jdbc.JdbcEJBQLTranslatorFactory;
+
+/**
+ * @since 3.0
+ * @author Andrus Adamchik
+ */
+class MySQLEJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+
+    // TODO: andrus 8/13/2007 - implement TRIM CHAR translation
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseActionBuilder.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseActionBuilder.java Mon Aug 13 07:25:56 2007
@@ -23,8 +23,8 @@
 
 import org.apache.cayenne.access.jdbc.SelectAction;
 import org.apache.cayenne.access.trans.SelectTranslator;
-import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.JdbcActionBuilder;
+import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.SQLAction;
 import org.apache.cayenne.query.SelectQuery;
@@ -35,7 +35,7 @@
  */
 class OpenBaseActionBuilder extends JdbcActionBuilder {
 
-    OpenBaseActionBuilder(DbAdapter adapter, EntityResolver resolver) {
+    OpenBaseActionBuilder(JdbcAdapter adapter, EntityResolver resolver) {
         super(adapter, resolver);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/oracle/Oracle8ActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/oracle/Oracle8ActionBuilder.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/oracle/Oracle8ActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/oracle/Oracle8ActionBuilder.java Mon Aug 13 07:25:56 2007
@@ -19,7 +19,7 @@
 
 package org.apache.cayenne.dba.oracle;
 
-import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.SQLAction;
 import org.apache.cayenne.query.SQLTemplate;
@@ -32,7 +32,7 @@
  */
 class Oracle8ActionBuilder extends OracleActionBuilder {
 
-    Oracle8ActionBuilder(DbAdapter adapter, EntityResolver resolver) {
+    Oracle8ActionBuilder(JdbcAdapter adapter, EntityResolver resolver) {
         super(adapter, resolver);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleActionBuilder.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleActionBuilder.java Mon Aug 13 07:25:56 2007
@@ -19,8 +19,8 @@
 
 package org.apache.cayenne.dba.oracle;
 
-import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.JdbcActionBuilder;
+import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.BatchQuery;
 import org.apache.cayenne.query.ProcedureQuery;
@@ -33,7 +33,7 @@
  */
 class OracleActionBuilder extends JdbcActionBuilder {
 
-    OracleActionBuilder(DbAdapter adapter, EntityResolver resolver) {
+    OracleActionBuilder(JdbcAdapter adapter, EntityResolver resolver) {
         super(adapter, resolver);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresActionBuilder.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresActionBuilder.java Mon Aug 13 07:25:56 2007
@@ -23,8 +23,8 @@
 
 import org.apache.cayenne.access.jdbc.SelectAction;
 import org.apache.cayenne.access.trans.SelectTranslator;
-import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.JdbcActionBuilder;
+import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.ProcedureQuery;
 import org.apache.cayenne.query.SQLAction;
@@ -36,7 +36,7 @@
  */
 class PostgresActionBuilder extends JdbcActionBuilder {
 
-    public PostgresActionBuilder(DbAdapter adapter, EntityResolver resolver) {
+    public PostgresActionBuilder(JdbcAdapter adapter, EntityResolver resolver) {
         super(adapter, resolver);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerActionBuilder.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerActionBuilder.java Mon Aug 13 07:25:56 2007
@@ -20,8 +20,8 @@
 package org.apache.cayenne.dba.sqlserver;
 
 import org.apache.cayenne.access.jdbc.BatchAction;
-import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.JdbcActionBuilder;
+import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.BatchQuery;
 import org.apache.cayenne.query.ProcedureQuery;
@@ -33,7 +33,7 @@
  */
 public class SQLServerActionBuilder extends JdbcActionBuilder {
 
-    public SQLServerActionBuilder(DbAdapter adapter, EntityResolver resolver) {
+    public SQLServerActionBuilder(JdbcAdapter adapter, EntityResolver resolver) {
         super(adapter, resolver);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java?view=diff&rev=565364&r1=565363&r2=565364
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java Mon Aug 13 07:25:56 2007
@@ -39,7 +39,10 @@
         EJBQLCompiledExpression select = parser.compile(ejbql, getDomain()
                 .getEntityResolver());
 
-        EJBQLTranslationContext tr = new EJBQLTranslationContext(select, parameters);
+        EJBQLTranslationContext tr = new EJBQLTranslationContext(
+                select,
+                parameters,
+                new JdbcEJBQLTranslatorFactory());
         select.getExpression().visit(new EJBQLSelectTranslator(tr));
         return tr.getQuery();
     }