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 2026/05/31 19:32:14 UTC
(cayenne) 01/03: Translators as stateless services producing immutable TranslatedXyz records
This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch past-M2
in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 7a915c1d86bc2c15be0d6006aa481aebfa42db21
Author: Andrus Adamchik <an...@objectstyle.com>
AuthorDate: Sun May 31 15:06:15 2026 -0400
Translators as stateless services producing immutable TranslatedXyz records
* EJBQL translators
---
.../java/org/apache/cayenne/access/DataNode.java | 16 ++++
.../apache/cayenne/access/jdbc/EJBQLAction.java | 5 +-
...java => DbAdapterDelegatedEJBQLTranslator.java} | 85 ++++++++++------------
.../translator/ejbql/EJBQLDbPathTranslator.java | 19 +++--
.../translator/ejbql/EJBQLTranslationContext.java | 16 +++-
...TranslatorFactory.java => EJBQLTranslator.java} | 8 +-
...slatorFactory.java => JdbcEJBQLTranslator.java} | 6 +-
.../translator/procedure/ProcedureTranslator.java | 4 +-
.../access/translator/select/SelectTranslator.java | 4 +-
.../cayenne/configuration/runtime/CoreModule.java | 3 +
.../runtime/DefaultDataNodeFactory.java | 5 ++
.../java/org/apache/cayenne/dba/AutoAdapter.java | 8 +-
.../java/org/apache/cayenne/dba/DbAdapter.java | 16 +++-
.../java/org/apache/cayenne/dba/JdbcAdapter.java | 49 +++++++------
.../org/apache/cayenne/dba/db2/DB2Adapter.java | 14 ++--
...nslatorFactory.java => DB2EJBQLTranslator.java} | 4 +-
.../org/apache/cayenne/dba/derby/DerbyAdapter.java | 8 +-
...latorFactory.java => DerbyEJBQLTranslator.java} | 4 +-
.../cayenne/dba/firebird/FirebirdAdapter.java | 9 ++-
...orFactory.java => FirebirdEJBQLTranslator.java} | 4 +-
.../java/org/apache/cayenne/dba/h2/H2Adapter.java | 8 +-
...anslatorFactory.java => H2EJBQLTranslator.java} | 4 +-
.../apache/cayenne/dba/hsqldb/HSQLDBAdapter.java | 8 +-
...slatorFactory.java => HSQLEJBQLTranslator.java} | 4 +-
.../org/apache/cayenne/dba/mysql/MySQLAdapter.java | 8 +-
...latorFactory.java => MySQLEJBQLTranslator.java} | 4 +-
.../apache/cayenne/dba/oracle/OracleAdapter.java | 6 +-
...atorFactory.java => OracleEJBQLTranslator.java} | 4 +-
.../cayenne/dba/sqlserver/SQLServerAdapter.java | 6 +-
...rFactory.java => SQLServerEJBQLTranslator.java} | 4 +-
.../apache/cayenne/dba/sybase/SybaseAdapter.java | 6 +-
...atorFactory.java => SybaseEJBQLTranslator.java} | 4 +-
.../translator/ejbql/EJBQLSelectTranslatorIT.java | 6 +-
.../runtime/DataDomainProviderTest.java | 3 +
.../java/org/apache/cayenne/dba/AutoAdapterIT.java | 4 +-
35 files changed, 206 insertions(+), 160 deletions(-)
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java b/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java
index 049e4fc36..3096c520c 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java
@@ -26,6 +26,7 @@ import org.apache.cayenne.access.jdbc.RowDescriptor;
import org.apache.cayenne.access.jdbc.reader.RowReader;
import org.apache.cayenne.access.jdbc.reader.RowReaderFactory;
import org.apache.cayenne.access.translator.batch.BatchTranslator;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.access.translator.procedure.ProcedureTranslator;
import org.apache.cayenne.access.translator.select.SelectTranslator;
import org.apache.cayenne.access.translator.sqltemplate.SQLTemplateTranslator;
@@ -77,6 +78,7 @@ public class DataNode {
private BatchTranslator<DeleteBatchQuery> deleteBatchTranslator;
private SelectTranslator selectTranslator;
private ProcedureTranslator procedureTranslator;
+ private EJBQLTranslator ejbqlTranslator;
private SQLTemplateTranslator sqlTemplateTranslator;
TransactionDataSource readThroughDataSource;
@@ -441,6 +443,20 @@ public class DataNode {
this.procedureTranslator = procedureTranslator;
}
+ /**
+ * @since 5.0
+ */
+ public EJBQLTranslator getEjbqlTranslator() {
+ return ejbqlTranslator;
+ }
+
+ /**
+ * @since 5.0
+ */
+ public void setEjbqlTranslator(EJBQLTranslator ejbqlTranslator) {
+ this.ejbqlTranslator = ejbqlTranslator;
+ }
+
// a read-through DataSource that ensures returning the same connection
// within
// transaction.
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAction.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAction.java
index df36695b5..44f4688eb 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAction.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAction.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.access.jdbc;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.OperationObserver;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
import org.apache.cayenne.ejbql.EJBQLExpression;
@@ -53,12 +53,13 @@ public class EJBQLAction extends BaseSQLAction {
@Override
public void performAction(Connection connection, OperationObserver observer) throws Exception {
EJBQLCompiledExpression compiledExpression = query.getExpression(dataNode.getEntityResolver());
- EJBQLTranslatorFactory translatorFactory = dataNode.getAdapter().getEjbqlTranslatorFactory();
+ EJBQLTranslator translatorFactory = dataNode.getEjbqlTranslator();
EJBQLTranslationContext context = new EJBQLTranslationContext(
dataNode.getEntityResolver(),
query,
compiledExpression,
translatorFactory,
+ dataNode.getAdapter(),
dataNode.getAdapter().getQuotingStrategy());
compiledExpression.getExpression().visit(new EJBQLBaseVisitor(false) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/JdbcEJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/DbAdapterDelegatedEJBQLTranslator.java
similarity index 52%
copy from cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/JdbcEJBQLTranslatorFactory.java
copy to cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/DbAdapterDelegatedEJBQLTranslator.java
index 42c539506..e53e641aa 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/JdbcEJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/DbAdapterDelegatedEJBQLTranslator.java
@@ -16,89 +16,80 @@
* specific language governing permissions and limitations
* under the License.
****************************************************************/
+
package org.apache.cayenne.access.translator.ejbql;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
/**
- * A default EJBQLTranslatorFactory.
- *
- * @since 3.0
+ * An {@link EJBQLTranslator} that resolves the actual translator from {@link org.apache.cayenne.dba.DbAdapter#getEjbqlTranslator()}
+ * allowing adapters to customize translation. The adapter is obtained from the {@link EJBQLTranslationContext}.
+ *
+ * @since 5.0
*/
-public class JdbcEJBQLTranslatorFactory implements EJBQLTranslatorFactory {
-
- protected static final String JOIN_APPENDER_KEY = "$JoinAppender";
-
- protected boolean caseInsensitive = false;
+public class DbAdapterDelegatedEJBQLTranslator implements EJBQLTranslator {
+ @Override
public EJBQLJoinAppender getJoinAppender(EJBQLTranslationContext context) {
- EJBQLJoinAppender appender = (EJBQLJoinAppender) context
- .getAttribute(JOIN_APPENDER_KEY);
-
- if (appender == null) {
- appender = new EJBQLJoinAppender(context);
- context.setAttribute(JOIN_APPENDER_KEY, appender);
- }
-
- return appender;
+ return delegate(context).getJoinAppender(context);
}
- public EJBQLExpressionVisitor getDeleteTranslator(EJBQLTranslationContext context) {
- context.setUsingAliases(false);
- return new EJBQLDeleteTranslator(context);
+ @Override
+ public EJBQLExpressionVisitor getSelectTranslator(EJBQLTranslationContext context) {
+ return delegate(context).getSelectTranslator(context);
}
- public EJBQLExpressionVisitor getSelectTranslator(EJBQLTranslationContext context) {
- return new EJBQLSelectTranslator(context);
+ @Override
+ public EJBQLExpressionVisitor getDeleteTranslator(EJBQLTranslationContext context) {
+ return delegate(context).getDeleteTranslator(context);
}
+ @Override
public EJBQLExpressionVisitor getUpdateTranslator(EJBQLTranslationContext context) {
- context.setUsingAliases(false);
- return new EJBQLUpdateTranslator(context);
+ return delegate(context).getUpdateTranslator(context);
}
- public EJBQLExpressionVisitor getAggregateColumnTranslator(
- EJBQLTranslationContext context) {
- return new EJBQLAggregateColumnTranslator(context);
+ @Override
+ public EJBQLExpressionVisitor getAggregateColumnTranslator(EJBQLTranslationContext context) {
+ return delegate(context).getAggregateColumnTranslator(context);
}
+ @Override
public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
- context.setCaseInsensitive(caseInsensitive);
- return new EJBQLConditionTranslator(context);
+ return delegate(context).getConditionTranslator(context);
}
+ @Override
public EJBQLExpressionVisitor getFromTranslator(EJBQLTranslationContext context) {
- return new EJBQLFromTranslator(context);
+ return delegate(context).getFromTranslator(context);
}
+ @Override
public EJBQLExpressionVisitor getGroupByTranslator(EJBQLTranslationContext context) {
- return new EJBQLGroupByTranslator(context);
+ return delegate(context).getGroupByTranslator(context);
}
- public EJBQLExpressionVisitor getIdentifierColumnsTranslator(
- EJBQLTranslationContext context) {
- if(context.getMetadata().getPageSize() > 0){
- return new EJBQLIdColumnsTranslator(context);
- }
- else{
- return new EJBQLIdentifierColumnsTranslator(context);
- }
+ @Override
+ public EJBQLExpressionVisitor getIdentifierColumnsTranslator(EJBQLTranslationContext context) {
+ return delegate(context).getIdentifierColumnsTranslator(context);
}
+ @Override
public EJBQLExpressionVisitor getOrderByTranslator(EJBQLTranslationContext context) {
- return new EJBQLOrderByTranslator(context);
+ return delegate(context).getOrderByTranslator(context);
}
- public EJBQLExpressionVisitor getSelectColumnsTranslator(
- EJBQLTranslationContext context) {
- return new EJBQLSelectColumnsTranslator(context);
+ @Override
+ public EJBQLExpressionVisitor getSelectColumnsTranslator(EJBQLTranslationContext context) {
+ return delegate(context).getSelectColumnsTranslator(context);
}
+ @Override
public EJBQLExpressionVisitor getUpdateItemTranslator(EJBQLTranslationContext context) {
- return new EJBQLUpdateItemTranslator(context);
+ return delegate(context).getUpdateItemTranslator(context);
}
-
- public void setCaseInsensitive(boolean caseInsensitive) {
- this.caseInsensitive = caseInsensitive;
+
+ private EJBQLTranslator delegate(EJBQLTranslationContext context) {
+ return context.getAdapter().getEjbqlTranslator();
}
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLDbPathTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLDbPathTranslator.java
index 672c882a1..b90a366bd 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLDbPathTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLDbPathTranslator.java
@@ -25,7 +25,6 @@ import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbJoin;
import org.apache.cayenne.map.DbRelationship;
-import org.apache.cayenne.map.Relationship;
import org.apache.cayenne.reflect.ClassDescriptor;
import java.util.Collection;
@@ -35,7 +34,7 @@ import java.util.Map;
public abstract class EJBQLDbPathTranslator extends EJBQLBaseVisitor {
- private EJBQLTranslationContext context;
+ private final EJBQLTranslationContext context;
protected DbEntity currentEntity;
private String lastPathComponent;
protected String lastAlias;
@@ -121,8 +120,8 @@ public abstract class EJBQLDbPathTranslator extends EJBQLBaseVisitor {
} else {
joinAppender.appendOuterJoin(joinMarker, new EJBQLTableId(idPath), new EJBQLTableId(fullPath));
- Relationship lastRelationship = currentEntity.getRelationship(lastPathComponent);
- DbEntity targetEntity = (DbEntity) lastRelationship.getTargetEntity();
+ DbRelationship lastRelationship = currentEntity.getRelationship(lastPathComponent);
+ DbEntity targetEntity = lastRelationship.getTargetEntity();
this.lastAlias = context.getTableAlias(fullPath,
context.getQuotingStrategy().quotedFullyQualifiedName(targetEntity));
@@ -139,7 +138,7 @@ public abstract class EJBQLDbPathTranslator extends EJBQLBaseVisitor {
+ currentEntity.getName() + "'");
}
- this.currentEntity = (DbEntity) relationship.getTargetEntity();
+ this.currentEntity = relationship.getTargetEntity();
}
private void processLastPathComponent() {
@@ -162,7 +161,7 @@ public abstract class EJBQLDbPathTranslator extends EJBQLBaseVisitor {
protected void processTerminatingAttribute(DbAttribute attribute) {
- DbEntity table = (DbEntity) attribute.getEntity();
+ DbEntity table = attribute.getEntity();
if (isUsingAliases()) {
String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(idPath, context
@@ -180,7 +179,7 @@ public abstract class EJBQLDbPathTranslator extends EJBQLBaseVisitor {
// use an outer join for to-many matches
resolveJoin(false);
- DbEntity table = (DbEntity) relationship.getTargetEntity();
+ DbEntity table = relationship.getTargetEntity();
String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(idPath, context
.getQuotingStrategy().quotedFullyQualifiedName(table));
@@ -200,7 +199,7 @@ public abstract class EJBQLDbPathTranslator extends EJBQLBaseVisitor {
} else {
// match FK against the target object
- DbEntity table = (DbEntity) relationship.getSourceEntity();
+ DbEntity table = relationship.getSourceEntity();
String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(idPath, context
.getQuotingStrategy().quotedFullyQualifiedName(table));
@@ -208,7 +207,7 @@ public abstract class EJBQLDbPathTranslator extends EJBQLBaseVisitor {
List<DbJoin> joins = relationship.getJoins();
if (joins.size() == 1) {
- DbJoin join = joins.get(0);
+ DbJoin join = joins.getFirst();
context.append(' ');
if (isUsingAliases()) {
context.append(alias).append('.');
@@ -260,7 +259,7 @@ public abstract class EJBQLDbPathTranslator extends EJBQLBaseVisitor {
} else {
DbRelationship lastRelationship = currentEntity.getRelationship(lastPathComponent);
- DbEntity targetEntity = null;
+ DbEntity targetEntity;
if (lastRelationship != null) {
targetEntity = lastRelationship.getTargetEntity();
} else {
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTranslationContext.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTranslationContext.java
index 493d0ccb2..22295d2d3 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTranslationContext.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTranslationContext.java
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.access.translator.ejbql;
+import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
import org.apache.cayenne.ejbql.EJBQLException;
@@ -49,7 +50,8 @@ public class EJBQLTranslationContext {
private EJBQLCompiledExpression compiledExpression;
protected Map<String, Object> namedParameters;
protected Map<Integer, Object> positionalParameters;
- private EJBQLTranslatorFactory translatorFactory;
+ private EJBQLTranslator translatorFactory;
+ private DbAdapter adapter;
private QuotingStrategy quotingStrategy;
private EntityResolver entityResolver;
private List<Object> resultSetMetadata;
@@ -73,7 +75,7 @@ public class EJBQLTranslationContext {
public EJBQLTranslationContext(EntityResolver entityResolver, EJBQLQuery query,
EJBQLCompiledExpression compiledExpression,
- EJBQLTranslatorFactory translatorFactory, QuotingStrategy quotingStrategy) {
+ EJBQLTranslator translatorFactory, DbAdapter adapter, QuotingStrategy quotingStrategy) {
this.entityResolver = entityResolver;
this.compiledExpression = compiledExpression;
@@ -82,6 +84,7 @@ public class EJBQLTranslationContext {
this.namedParameters = query.getNamedParameters();
this.positionalParameters = query.getPositionalParameters();
this.translatorFactory = translatorFactory;
+ this.adapter = adapter;
this.usingAliases = true;
this.caseInsensitive = false;
this.queryMetadata = query.getMetaData(entityResolver);
@@ -133,10 +136,17 @@ public class EJBQLTranslationContext {
return id;
}
- EJBQLTranslatorFactory getTranslatorFactory() {
+ EJBQLTranslator getTranslatorFactory() {
return translatorFactory;
}
+ /**
+ * @since 5.0
+ */
+ DbAdapter getAdapter() {
+ return adapter;
+ }
+
EntityResolver getEntityResolver() {
return entityResolver;
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTranslator.java
similarity index 91%
rename from cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTranslator.java
index 15a14c064..ce8a02888 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTranslator.java
@@ -21,12 +21,12 @@ package org.apache.cayenne.access.translator.ejbql;
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.
- *
+ * A stateless service that produces translation visitors of EJBQL. DbAdapters can customize EJBQL
+ * translation by providing their own implementation.
+ *
* @since 3.0
*/
-public interface EJBQLTranslatorFactory {
+public interface EJBQLTranslator {
EJBQLJoinAppender getJoinAppender(EJBQLTranslationContext context);
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/JdbcEJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/JdbcEJBQLTranslator.java
similarity index 96%
rename from cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/JdbcEJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/JdbcEJBQLTranslator.java
index 42c539506..cc6eecc0f 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/JdbcEJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/JdbcEJBQLTranslator.java
@@ -21,11 +21,11 @@ package org.apache.cayenne.access.translator.ejbql;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
/**
- * A default EJBQLTranslatorFactory.
- *
+ * A default {@link EJBQLTranslator}.
+ *
* @since 3.0
*/
-public class JdbcEJBQLTranslatorFactory implements EJBQLTranslatorFactory {
+public class JdbcEJBQLTranslator implements EJBQLTranslator {
protected static final String JOIN_APPENDER_KEY = "$JoinAppender";
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
index 9d7df9fd2..de8b32ba7 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
@@ -24,12 +24,12 @@ import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.query.ProcedureQuery;
/**
- * A stateless service that translates a {@link ProcedureQuery} into an immutable {@link TranslatedProcedure}.
+ * A service that translates a {@link ProcedureQuery} into a {@link TranslatedProcedure}.
*/
public interface ProcedureTranslator {
/**
- * Translates the provided query into an immutable {@link TranslatedProcedure}.
+ * Translates the provided query into a {@link TranslatedProcedure}.
*
* @since 5.0
*/
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/SelectTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/SelectTranslator.java
index 30e444fd7..95638683a 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/SelectTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/SelectTranslator.java
@@ -24,14 +24,14 @@ import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.query.Select;
/**
- * A stateless service that translates a {@link Select} query into an immutable {@link TranslatedSelect}.
+ * A service that translates a {@link Select} query into a {@link TranslatedSelect}.
*
* @since 4.0
*/
public interface SelectTranslator {
/**
- * Translates the provided query into an immutable {@link TranslatedSelect}.
+ * Translates the provided query into a {@link TranslatedSelect}.
*
* @since 5.0
*/
diff --git a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModule.java b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModule.java
index d71c9d892..49427e36d 100644
--- a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModule.java
+++ b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModule.java
@@ -42,6 +42,8 @@ import org.apache.cayenne.access.translator.batch.BatchTranslator;
import org.apache.cayenne.access.translator.batch.DeleteBatchTranslator;
import org.apache.cayenne.access.translator.batch.InsertBatchTranslator;
import org.apache.cayenne.access.translator.batch.UpdateBatchTranslator;
+import org.apache.cayenne.access.translator.ejbql.DbAdapterDelegatedEJBQLTranslator;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.access.translator.procedure.DbAdapterDelegatedProcedureTranslator;
import org.apache.cayenne.access.translator.procedure.ProcedureTranslator;
import org.apache.cayenne.access.translator.select.DbAdapterDelegatedSelectTranslator;
@@ -470,6 +472,7 @@ public class CoreModule implements Module {
binder.bind(Key.get(BatchTranslator.class, BatchTranslator.DELETE)).to(DeleteBatchTranslator.class);
binder.bind(SelectTranslator.class).to(DbAdapterDelegatedSelectTranslator.class);
binder.bind(ProcedureTranslator.class).to(DbAdapterDelegatedProcedureTranslator.class);
+ binder.bind(EJBQLTranslator.class).to(DbAdapterDelegatedEJBQLTranslator.class);
// a default ObjectMapRetainStrategy used to create objects map for
// ObjectStore
diff --git a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DefaultDataNodeFactory.java b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DefaultDataNodeFactory.java
index 23349873d..3ba714037 100644
--- a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DefaultDataNodeFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DefaultDataNodeFactory.java
@@ -23,6 +23,7 @@ import org.apache.cayenne.access.dbsync.SchemaUpdateStrategyFactory;
import org.apache.cayenne.access.translator.sqltemplate.SQLTemplateTranslator;
import org.apache.cayenne.access.jdbc.reader.RowReaderFactory;
import org.apache.cayenne.access.translator.batch.BatchTranslator;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.access.translator.procedure.ProcedureTranslator;
import org.apache.cayenne.access.translator.select.SelectTranslator;
import org.apache.cayenne.query.DeleteBatchQuery;
@@ -64,6 +65,9 @@ public class DefaultDataNodeFactory implements DataNodeFactory {
@Inject
protected ProcedureTranslator procedureTranslator;
+ @Inject
+ protected EJBQLTranslator ejbqlTranslator;
+
@Inject
protected DbAdapterFactory adapterFactory;
@@ -88,6 +92,7 @@ public class DefaultDataNodeFactory implements DataNodeFactory {
dataNode.setDeleteBatchTranslator(deleteBatchTranslator);
dataNode.setSelectTranslator(selectTranslator);
dataNode.setProcedureTranslator(procedureTranslator);
+ dataNode.setEjbqlTranslator(ejbqlTranslator);
dataNode.setSqlTemplateTranslator(sqlTemplateTranslator);
DataSource dataSource = dataSourceFactory.getDataSource(nodeDescriptor);
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
index 255512782..1f9f14e3b 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
@@ -23,7 +23,7 @@ import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
import org.apache.cayenne.access.translator.ParameterBinding;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.access.translator.procedure.ProcedureTranslator;
import org.apache.cayenne.access.translator.select.SelectTranslator;
import org.apache.cayenne.access.types.ExtendedTypeMap;
@@ -268,11 +268,11 @@ public class AutoAdapter implements DbAdapter {
}
/**
- * @since 4.0
+ * @since 5.0
*/
@Override
- public EJBQLTranslatorFactory getEjbqlTranslatorFactory() {
- return getAdapter().getEjbqlTranslatorFactory();
+ public EJBQLTranslator getEjbqlTranslator() {
+ return getAdapter().getEjbqlTranslator();
}
@Override
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java
index ac54919fa..6590b4ce0 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.dba;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
import org.apache.cayenne.access.translator.ParameterBinding;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.access.translator.procedure.ProcedureTranslator;
import org.apache.cayenne.access.translator.select.SelectTranslator;
import org.apache.cayenne.access.types.ExtendedTypeMap;
@@ -262,11 +262,19 @@ public interface DbAdapter {
DbAdapter unwrap();
/**
- * Returns a translator factory for EJBQL to SQL translation.
+ * Returns the {@link EJBQLTranslator} for EJBQL to SQL translation.
*
- * @since 4.0
+ * @since 5.0
+ */
+ EJBQLTranslator getEjbqlTranslator();
+
+ /**
+ * @deprecated since 5.0 in favor of {@link #getEjbqlTranslator()}.
*/
- EJBQLTranslatorFactory getEjbqlTranslatorFactory();
+ @Deprecated(since = "5.0")
+ default EJBQLTranslator getEjbqlTranslatorFactory() {
+ return getEjbqlTranslator();
+ }
/**
* @since 4.1
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
index f23027b16..e60fc76fa 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
@@ -23,8 +23,8 @@ import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
import org.apache.cayenne.access.translator.ParameterBinding;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.access.translator.procedure.DefaultProcedureTranslator;
import org.apache.cayenne.access.translator.procedure.ProcedureTranslator;
import org.apache.cayenne.access.translator.select.DefaultSelectTranslator;
@@ -74,7 +74,7 @@ public class JdbcAdapter implements DbAdapter {
protected boolean supportsBatchUpdates;
protected boolean supportsUniqueConstraints;
protected boolean supportsGeneratedKeys;
- protected EJBQLTranslatorFactory ejbqlTranslatorFactory;
+ protected EJBQLTranslator ejbqlTranslator;
protected ResourceLocator resourceLocator;
protected boolean caseInsensitiveCollations;
@@ -100,7 +100,7 @@ public class JdbcAdapter implements DbAdapter {
this.quotingStrategy = createQuotingStrategy();
- this.ejbqlTranslatorFactory = createEJBQLTranslatorFactory();
+ this.ejbqlTranslator = createEJBQLTranslator();
this.typesHandler = TypesHandler.getHandler(findResource("/types.xml"));
this.extendedTypes = new ExtendedTypeMap();
initExtendedTypes(defaultExtendedTypes, userExtendedTypes, extendedTypeFactories, valueObjectTypeRegistry);
@@ -186,14 +186,14 @@ public class JdbcAdapter implements DbAdapter {
}
/**
- * Creates and returns an {@link EJBQLTranslatorFactory} used to generate
+ * Creates and returns an {@link EJBQLTranslator} 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() {
- JdbcEJBQLTranslatorFactory translatorFactory = new JdbcEJBQLTranslatorFactory();
+ protected EJBQLTranslator createEJBQLTranslator() {
+ JdbcEJBQLTranslator translatorFactory = new JdbcEJBQLTranslator();
translatorFactory.setCaseInsensitive(caseInsensitiveCollations);
return translatorFactory;
}
@@ -579,15 +579,15 @@ public class JdbcAdapter implements DbAdapter {
}
/**
- * Returns a translator factory for EJBQL to SQL translation. The factory is
- * normally initialized in constructor by calling
- * {@link #createEJBQLTranslatorFactory()}, and can be changed later by
- * calling {@link #setEjbqlTranslatorFactory(EJBQLTranslatorFactory)}.
+ * Returns the {@link EJBQLTranslator} for EJBQL to SQL translation. It is normally initialized in the
+ * constructor by calling {@link #createEJBQLTranslator()}, and can be changed later by calling
+ * {@link #setEjbqlTranslator(EJBQLTranslator)}.
*
- * @since 3.0
+ * @since 5.0
*/
- public EJBQLTranslatorFactory getEjbqlTranslatorFactory() {
- return ejbqlTranslatorFactory;
+ @Override
+ public EJBQLTranslator getEjbqlTranslator() {
+ return ejbqlTranslator;
}
@Override
@@ -601,15 +601,22 @@ public class JdbcAdapter implements DbAdapter {
}
/**
- * 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.
+ * Sets the {@link EJBQLTranslator} for EJBQL to SQL translation. This property is normally initialized in the
+ * constructor by calling {@link #createEJBQLTranslator()}, so users would only override it if they need to
+ * customize EJBQL translation.
*
- * @since 3.0
+ * @since 5.0
+ */
+ public void setEjbqlTranslator(EJBQLTranslator ejbqlTranslator) {
+ this.ejbqlTranslator = ejbqlTranslator;
+ }
+
+ /**
+ * @deprecated since 5.0 in favor of {@link #setEjbqlTranslator(EJBQLTranslator)}.
*/
- public void setEjbqlTranslatorFactory(EJBQLTranslatorFactory ejbqlTranslatorFactory) {
- this.ejbqlTranslatorFactory = ejbqlTranslatorFactory;
+ @Deprecated(since = "5.0")
+ public void setEjbqlTranslatorFactory(EJBQLTranslator ejbqlTranslator) {
+ setEjbqlTranslator(ejbqlTranslator);
}
/**
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
index 801e7e35b..21f5a793d 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
@@ -27,8 +27,8 @@ import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
import org.apache.cayenne.access.translator.ParameterBinding;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.access.types.BooleanType;
import org.apache.cayenne.access.types.ByteArrayType;
import org.apache.cayenne.access.types.CharType;
@@ -150,13 +150,13 @@ public class DB2Adapter extends JdbcAdapter {
}
/**
- * @since 4.0
+ * @since 5.0
*/
@Override
- public EJBQLTranslatorFactory getEjbqlTranslatorFactory() {
- JdbcEJBQLTranslatorFactory translatorFactory = new DB2EJBQLTranslatorFactory();
- translatorFactory.setCaseInsensitive(caseInsensitiveCollations);
- return translatorFactory;
+ public EJBQLTranslator getEjbqlTranslator() {
+ JdbcEJBQLTranslator translator = new DB2EJBQLTranslator();
+ translator.setCaseInsensitive(caseInsensitiveCollations);
+ return translator;
}
@Override
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2EJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2EJBQLTranslator.java
similarity index 94%
rename from cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2EJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2EJBQLTranslator.java
index d57b291d1..9b0b6606e 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2EJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2EJBQLTranslator.java
@@ -20,13 +20,13 @@
package org.apache.cayenne.dba.db2;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
/**
* @since 4.0
*/
-public class DB2EJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+public class DB2EJBQLTranslator extends JdbcEJBQLTranslator {
@Override
public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
index a9007e37b..954c90476 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
@@ -23,8 +23,8 @@ import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
import org.apache.cayenne.access.translator.ParameterBinding;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.access.types.ByteType;
import org.apache.cayenne.access.types.CharType;
import org.apache.cayenne.access.types.ExtendedType;
@@ -185,8 +185,8 @@ public class DerbyAdapter extends JdbcAdapter {
* @since 3.1
*/
@Override
- protected EJBQLTranslatorFactory createEJBQLTranslatorFactory() {
- JdbcEJBQLTranslatorFactory translatorFactory = new DerbyEJBQLTranslatorFactory();
+ protected EJBQLTranslator createEJBQLTranslator() {
+ JdbcEJBQLTranslator translatorFactory = new DerbyEJBQLTranslator();
translatorFactory.setCaseInsensitive(caseInsensitiveCollations);
return translatorFactory;
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslator.java
similarity index 93%
rename from cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslator.java
index e0d89c4e3..31d6be619 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslator.java
@@ -19,13 +19,13 @@
package org.apache.cayenne.dba.derby;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
/**
* @since 3.1
*/
-public class DerbyEJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+public class DerbyEJBQLTranslator extends JdbcEJBQLTranslator {
@Override
public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java
index 065a03a62..1c804391a 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java
@@ -22,7 +22,7 @@ package org.apache.cayenne.dba.firebird;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.access.types.ByteArrayType;
import org.apache.cayenne.access.types.CharType;
import org.apache.cayenne.access.types.ExtendedType;
@@ -108,9 +108,12 @@ public class FirebirdAdapter extends JdbcAdapter {
return new FirebirdSQLTreeProcessor();
}
+ /**
+ * @since 5.0
+ */
@Override
- public EJBQLTranslatorFactory getEjbqlTranslatorFactory() {
- return new FirebirdEJBQLTranslatorFactory();
+ public EJBQLTranslator getEjbqlTranslator() {
+ return new FirebirdEJBQLTranslator();
}
@Override
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLTranslator.java
similarity index 93%
rename from cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLTranslator.java
index 3c4b6ccf0..d3afd2e30 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLTranslator.java
@@ -20,13 +20,13 @@
package org.apache.cayenne.dba.firebird;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
/**
* @since 4.0
*/
-public class FirebirdEJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+public class FirebirdEJBQLTranslator extends JdbcEJBQLTranslator {
@Override
public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
index 013a52dd5..0a2383cba 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
@@ -21,8 +21,8 @@ package org.apache.cayenne.dba.h2;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.access.types.ExtendedTypeFactory;
import org.apache.cayenne.access.types.ExtendedTypeMap;
@@ -87,8 +87,8 @@ public class H2Adapter extends JdbcAdapter {
* @since 5.0
*/
@Override
- protected EJBQLTranslatorFactory createEJBQLTranslatorFactory() {
- JdbcEJBQLTranslatorFactory translatorFactory = new H2EJBQLTranslatorFactory();
+ protected EJBQLTranslator createEJBQLTranslator() {
+ JdbcEJBQLTranslator translatorFactory = new H2EJBQLTranslator();
translatorFactory.setCaseInsensitive(caseInsensitiveCollations);
return translatorFactory;
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2EJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2EJBQLTranslator.java
similarity index 93%
rename from cayenne/src/main/java/org/apache/cayenne/dba/h2/H2EJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/dba/h2/H2EJBQLTranslator.java
index 8497515d8..21d63eac2 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2EJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2EJBQLTranslator.java
@@ -20,13 +20,13 @@
package org.apache.cayenne.dba.h2;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
/**
* @since 5.0
*/
-public class H2EJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+public class H2EJBQLTranslator extends JdbcEJBQLTranslator {
@Override
public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
index 2ab9b619f..8178768a7 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
@@ -22,8 +22,8 @@ package org.apache.cayenne.dba.hsqldb;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.access.translator.procedure.ProcedureTranslator;
import org.apache.cayenne.access.types.CharType;
import org.apache.cayenne.access.types.ExtendedType;
@@ -110,8 +110,8 @@ public class HSQLDBAdapter extends JdbcAdapter {
* @since 4.0
*/
@Override
- protected EJBQLTranslatorFactory createEJBQLTranslatorFactory() {
- JdbcEJBQLTranslatorFactory translatorFactory = new HSQLEJBQLTranslatorFactory();
+ protected EJBQLTranslator createEJBQLTranslator() {
+ JdbcEJBQLTranslator translatorFactory = new HSQLEJBQLTranslator();
translatorFactory.setCaseInsensitive(caseInsensitiveCollations);
return translatorFactory;
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLEJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLEJBQLTranslator.java
similarity index 93%
rename from cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLEJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLEJBQLTranslator.java
index 9a0a2695f..b7ba23cde 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLEJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLEJBQLTranslator.java
@@ -20,13 +20,13 @@
package org.apache.cayenne.dba.hsqldb;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
/**
* @since 4.0
*/
-public class HSQLEJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+public class HSQLEJBQLTranslator extends JdbcEJBQLTranslator {
@Override
public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
index 14c537586..190726e79 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
@@ -23,8 +23,8 @@ import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
import org.apache.cayenne.access.translator.ParameterBinding;
import org.apache.cayenne.access.translator.procedure.ProcedureTranslator;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.access.types.ByteArrayType;
import org.apache.cayenne.access.types.CharType;
import org.apache.cayenne.access.types.DateType;
@@ -252,8 +252,8 @@ public class MySQLAdapter extends JdbcAdapter {
* @since 3.0
*/
@Override
- protected EJBQLTranslatorFactory createEJBQLTranslatorFactory() {
- JdbcEJBQLTranslatorFactory translatorFactory = new MySQLEJBQLTranslatorFactory();
+ protected EJBQLTranslator createEJBQLTranslator() {
+ JdbcEJBQLTranslator translatorFactory = new MySQLEJBQLTranslator();
translatorFactory.setCaseInsensitive(caseInsensitiveCollations);
return translatorFactory;
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslator.java
similarity index 94%
rename from cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslator.java
index add3fe126..053f387f2 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLEJBQLTranslator.java
@@ -19,13 +19,13 @@
package org.apache.cayenne.dba.mysql;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
/**
* @since 3.0
*/
-class MySQLEJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+class MySQLEJBQLTranslator extends JdbcEJBQLTranslator {
@Override
public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
index aa7673555..d457f7da7 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
@@ -23,7 +23,7 @@ import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
import org.apache.cayenne.access.translator.ParameterBinding;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.access.types.ByteType;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.access.types.ExtendedTypeFactory;
@@ -185,8 +185,8 @@ public class OracleAdapter extends JdbcAdapter {
* @since 3.0
*/
@Override
- protected EJBQLTranslatorFactory createEJBQLTranslatorFactory() {
- return new OracleEJBQLTranslatorFactory();
+ protected EJBQLTranslator createEJBQLTranslator() {
+ return new OracleEJBQLTranslator();
}
/**
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleEJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleEJBQLTranslator.java
similarity index 94%
rename from cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleEJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleEJBQLTranslator.java
index b4d7c3e6d..1456d79e0 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleEJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleEJBQLTranslator.java
@@ -19,13 +19,13 @@
package org.apache.cayenne.dba.oracle;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
/**
* @since 3.0
*/
-class OracleEJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+class OracleEJBQLTranslator extends JdbcEJBQLTranslator {
@Override
public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
index 9873b183d..f4af22cdf 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
@@ -23,7 +23,7 @@ import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
import org.apache.cayenne.access.translator.ParameterBinding;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.access.types.ByteArrayType;
import org.apache.cayenne.access.types.ByteType;
import org.apache.cayenne.access.types.CharType;
@@ -122,8 +122,8 @@ public class SQLServerAdapter extends JdbcAdapter {
}
@Override
- protected EJBQLTranslatorFactory createEJBQLTranslatorFactory() {
- return new SQLServerEJBQLTranslatorFactory();
+ protected EJBQLTranslator createEJBQLTranslator() {
+ return new SQLServerEJBQLTranslator();
}
/**
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerEJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerEJBQLTranslator.java
similarity index 93%
rename from cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerEJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerEJBQLTranslator.java
index b56112a7e..d2f5c654b 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerEJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerEJBQLTranslator.java
@@ -19,10 +19,10 @@
package org.apache.cayenne.dba.sqlserver;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
-class SQLServerEJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+class SQLServerEJBQLTranslator extends JdbcEJBQLTranslator {
@Override
public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
index 9ddff72a7..59eb79823 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.dba.sybase;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
import org.apache.cayenne.access.translator.ParameterBinding;
-import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.access.types.ByteArrayType;
import org.apache.cayenne.access.types.ByteType;
import org.apache.cayenne.access.types.CharType;
@@ -68,8 +68,8 @@ public class SybaseAdapter extends JdbcAdapter {
* @since 3.0
*/
@Override
- protected EJBQLTranslatorFactory createEJBQLTranslatorFactory() {
- return new SybaseEJBQLTranslatorFactory();
+ protected EJBQLTranslator createEJBQLTranslator() {
+ return new SybaseEJBQLTranslator();
}
/**
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseEJBQLTranslatorFactory.java b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseEJBQLTranslator.java
similarity index 94%
rename from cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseEJBQLTranslatorFactory.java
rename to cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseEJBQLTranslator.java
index 3a60c62ff..10fb8907f 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseEJBQLTranslatorFactory.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseEJBQLTranslator.java
@@ -19,10 +19,10 @@
package org.apache.cayenne.dba.sybase;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
-import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslator;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
-class SybaseEJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+class SybaseEJBQLTranslator extends JdbcEJBQLTranslator {
@Override
public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
diff --git a/cayenne/src/test/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectTranslatorIT.java b/cayenne/src/test/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectTranslatorIT.java
index fa3a7237e..3cc2fec2c 100644
--- a/cayenne/src/test/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectTranslatorIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectTranslatorIT.java
@@ -56,7 +56,7 @@ public class EJBQLSelectTranslatorIT {
};
EJBQLTranslationContext tr = new EJBQLTranslationContext(env.runtime().getDataDomain().getEntityResolver(), query,
- select, new JdbcEJBQLTranslatorFactory(), env.dataNode().getAdapter().getQuotingStrategy());
+ select, new JdbcEJBQLTranslator(), env.dataNode().getAdapter(), env.dataNode().getAdapter().getQuotingStrategy());
select.getExpression().visit(new EJBQLSelectTranslator(tr));
return tr.getQuery();
}
@@ -308,7 +308,7 @@ public class EJBQLSelectTranslatorIT {
query.setParameter("x", null);
EJBQLTranslationContext tr = new EJBQLTranslationContext(env.runtime().getDataDomain().getEntityResolver(), query,
- select, new JdbcEJBQLTranslatorFactory(), env.dataNode().getAdapter().getQuotingStrategy());
+ select, new JdbcEJBQLTranslator(), env.dataNode().getAdapter(), env.dataNode().getAdapter().getQuotingStrategy());
select.getExpression().visit(new EJBQLSelectTranslator(tr));
String sql = tr.getQuery().getDefaultTemplate();
assertTrue(sql.endsWith("t0.ARTIST_ID IS NULL"), sql);
@@ -325,7 +325,7 @@ public class EJBQLSelectTranslatorIT {
query.setParameter("b", "Y");
EJBQLTranslationContext tr = new EJBQLTranslationContext(env.runtime().getDataDomain().getEntityResolver(), query,
- select, new JdbcEJBQLTranslatorFactory(), env.dataNode().getAdapter().getQuotingStrategy());
+ select, new JdbcEJBQLTranslator(), env.dataNode().getAdapter(), env.dataNode().getAdapter().getQuotingStrategy());
select.getExpression().visit(new EJBQLSelectTranslator(tr));
String sql = tr.getQuery().getDefaultTemplate();
assertTrue(sql.endsWith("t0.ARTIST_ID IS NULL OR t1.ARTIST_NAME = #bind($id0)"), sql);
diff --git a/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/DataDomainProviderTest.java b/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/DataDomainProviderTest.java
index 1dfd33bd3..691d2f839 100644
--- a/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/DataDomainProviderTest.java
+++ b/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/DataDomainProviderTest.java
@@ -38,6 +38,8 @@ import org.apache.cayenne.access.translator.batch.InsertBatchTranslator;
import org.apache.cayenne.access.translator.batch.UpdateBatchTranslator;
import org.apache.cayenne.access.translator.procedure.DbAdapterDelegatedProcedureTranslator;
import org.apache.cayenne.access.translator.procedure.ProcedureTranslator;
+import org.apache.cayenne.access.translator.ejbql.DbAdapterDelegatedEJBQLTranslator;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslator;
import org.apache.cayenne.access.translator.select.DbAdapterDelegatedSelectTranslator;
import org.apache.cayenne.access.translator.select.SelectTranslator;
import org.apache.cayenne.access.types.DefaultValueObjectTypeRegistry;
@@ -231,6 +233,7 @@ public class DataDomainProviderTest {
b.bind(Key.get(BatchTranslator.class, BatchTranslator.DELETE)).to(DeleteBatchTranslator.class);
b.bind(SelectTranslator.class).to(DbAdapterDelegatedSelectTranslator.class);
b.bind(ProcedureTranslator.class).to(DbAdapterDelegatedProcedureTranslator.class);
+ b.bind(EJBQLTranslator.class).to(DbAdapterDelegatedEJBQLTranslator.class);
b.bind(DataSourceFactory.class).toInstance(new MockDataSourceFactory());
b.bind(JdbcEventLogger.class).to(Slf4jJdbcEventLogger.class);
diff --git a/cayenne/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java b/cayenne/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java
index aa0d588f8..dd459dd9a 100644
--- a/cayenne/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java
@@ -83,8 +83,8 @@ public class AutoAdapterIT {
autoAdapter.getSqlTreeProcessor().getClass());
assertSame(adapter.getExtendedTypes(),
autoAdapter.getExtendedTypes());
- assertSame(adapter.getEjbqlTranslatorFactory(),
- autoAdapter.getEjbqlTranslatorFactory());
+ assertSame(adapter.getEjbqlTranslator(),
+ autoAdapter.getEjbqlTranslator());
// returns a new instance for each call
assertSame(adapter.getSelectTranslator(select, env.dataNode().getEntityResolver()).getClass(),
autoAdapter.getSelectTranslator(select, env.dataNode().getEntityResolver()).getClass());