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 <[email protected]> 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());
