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:13 UTC
(cayenne) branch past-M2 updated (58978fa31 -> 0229d4581)
This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a change to branch past-M2
in repository https://gitbox.apache.org/repos/asf/cayenne.git
from 58978fa31 Translators as stateless services producing immutable TranslatedXyz records
new 7a915c1d8 Translators as stateless services producing immutable TranslatedXyz records
new 482119c6a CAT-2957 Get rid of adaper for legacy HSQLDB <= 1.8
new 0229d4581 Translators as stateless services producing immutable TranslatedXyz records
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
RELEASE-NOTES.txt | 1 +
UPGRADE.md | 4 +
.../merge/factory/MergerTokenFactoryProvider.java | 4 +-
.../cayenne/mcp/tools/dbimport/DbImportRunIT.java | 4 +-
.../mcp/tools/dbimport/DbImportRunMcpIT.java | 4 +-
.../tools/dbimport/DbImportRunValidationTest.java | 4 +-
.../java/org/apache/cayenne/access/DataNode.java | 16 ++++
.../apache/cayenne/access/jdbc/EJBQLAction.java | 13 +--
...java => DbAdapterDelegatedEJBQLTranslator.java} | 85 +++++++++----------
.../translator/ejbql/EJBQLConditionTranslator.java | 2 +-
.../translator/ejbql/EJBQLDbPathTranslator.java | 23 +++--
.../translator/ejbql/EJBQLDeleteTranslator.java | 4 +-
.../translator/ejbql/EJBQLFromTranslator.java | 2 +-
.../translator/ejbql/EJBQLGroupByTranslator.java | 2 +-
.../ejbql/EJBQLIdentifierColumnsTranslator.java | 2 +-
.../access/translator/ejbql/EJBQLJoinAppender.java | 2 +-
.../translator/ejbql/EJBQLOrderByTranslator.java | 2 +-
.../translator/ejbql/EJBQLPathTranslator.java | 2 +-
.../ejbql/EJBQLSelectColumnsTranslator.java | 5 +-
.../translator/ejbql/EJBQLSelectTranslator.java | 12 +--
.../translator/ejbql/EJBQLTranslationContext.java | 50 ++++++-----
...TranslatorFactory.java => EJBQLTranslator.java} | 8 +-
.../translator/ejbql/EJBQLUpdateTranslator.java | 6 +-
...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 +-
.../cayenne/dba/hsqldb/HSQLDBNoSchemaAdapter.java | 97 ----------------------
.../apache/cayenne/dba/hsqldb/HSQLDBSniffer.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 +-
54 files changed, 264 insertions(+), 315 deletions(-)
copy cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/{JdbcEJBQLTranslatorFactory.java => DbAdapterDelegatedEJBQLTranslator.java} (52%)
rename cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/{EJBQLTranslatorFactory.java => EJBQLTranslator.java} (91%)
rename cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/{JdbcEJBQLTranslatorFactory.java => JdbcEJBQLTranslator.java} (96%)
rename cayenne/src/main/java/org/apache/cayenne/dba/db2/{DB2EJBQLTranslatorFactory.java => DB2EJBQLTranslator.java} (94%)
rename cayenne/src/main/java/org/apache/cayenne/dba/derby/{DerbyEJBQLTranslatorFactory.java => DerbyEJBQLTranslator.java} (93%)
rename cayenne/src/main/java/org/apache/cayenne/dba/firebird/{FirebirdEJBQLTranslatorFactory.java => FirebirdEJBQLTranslator.java} (93%)
rename cayenne/src/main/java/org/apache/cayenne/dba/h2/{H2EJBQLTranslatorFactory.java => H2EJBQLTranslator.java} (93%)
delete mode 100644 cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBNoSchemaAdapter.java
rename cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/{HSQLEJBQLTranslatorFactory.java => HSQLEJBQLTranslator.java} (93%)
rename cayenne/src/main/java/org/apache/cayenne/dba/mysql/{MySQLEJBQLTranslatorFactory.java => MySQLEJBQLTranslator.java} (94%)
rename cayenne/src/main/java/org/apache/cayenne/dba/oracle/{OracleEJBQLTranslatorFactory.java => OracleEJBQLTranslator.java} (94%)
rename cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/{SQLServerEJBQLTranslatorFactory.java => SQLServerEJBQLTranslator.java} (93%)
rename cayenne/src/main/java/org/apache/cayenne/dba/sybase/{SybaseEJBQLTranslatorFactory.java => SybaseEJBQLTranslator.java} (94%)
(cayenne) 03/03: Translators as stateless services producing immutable TranslatedXyz records
Posted by aa...@apache.org.
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 0229d4581cdd5e016fa1269b1b28cc641db578f0
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
---
.../apache/cayenne/access/jdbc/EJBQLAction.java | 10 +++---
.../translator/ejbql/EJBQLConditionTranslator.java | 2 +-
.../translator/ejbql/EJBQLDbPathTranslator.java | 4 +--
.../translator/ejbql/EJBQLDeleteTranslator.java | 4 +--
.../translator/ejbql/EJBQLFromTranslator.java | 2 +-
.../translator/ejbql/EJBQLGroupByTranslator.java | 2 +-
.../ejbql/EJBQLIdentifierColumnsTranslator.java | 2 +-
.../access/translator/ejbql/EJBQLJoinAppender.java | 2 +-
.../translator/ejbql/EJBQLOrderByTranslator.java | 2 +-
.../translator/ejbql/EJBQLPathTranslator.java | 2 +-
.../ejbql/EJBQLSelectColumnsTranslator.java | 5 ++-
.../translator/ejbql/EJBQLSelectTranslator.java | 12 +++----
.../translator/ejbql/EJBQLTranslationContext.java | 40 ++++++++++++----------
.../translator/ejbql/EJBQLUpdateTranslator.java | 6 ++--
14 files changed, 48 insertions(+), 47 deletions(-)
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 44f4688eb..3e05ae767 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
@@ -53,12 +53,12 @@ public class EJBQLAction extends BaseSQLAction {
@Override
public void performAction(Connection connection, OperationObserver observer) throws Exception {
EJBQLCompiledExpression compiledExpression = query.getExpression(dataNode.getEntityResolver());
- EJBQLTranslator translatorFactory = dataNode.getEjbqlTranslator();
+ EJBQLTranslator translator = dataNode.getEjbqlTranslator();
EJBQLTranslationContext context = new EJBQLTranslationContext(
dataNode.getEntityResolver(),
query,
compiledExpression,
- translatorFactory,
+ translator,
dataNode.getAdapter(),
dataNode.getAdapter().getQuotingStrategy());
@@ -66,21 +66,21 @@ public class EJBQLAction extends BaseSQLAction {
@Override
public boolean visitSelect(EJBQLExpression expression) {
- EJBQLExpressionVisitor visitor = translatorFactory.getSelectTranslator(context);
+ EJBQLExpressionVisitor visitor = translator.getSelectTranslator(context);
expression.visit(visitor);
return false;
}
@Override
public boolean visitDelete(EJBQLExpression expression) {
- EJBQLExpressionVisitor visitor = translatorFactory.getDeleteTranslator(context);
+ EJBQLExpressionVisitor visitor = translator.getDeleteTranslator(context);
expression.visit(visitor);
return false;
}
@Override
public boolean visitUpdate(EJBQLExpression expression) {
- EJBQLExpressionVisitor visitor = translatorFactory.getUpdateTranslator(context);
+ EJBQLExpressionVisitor visitor = translator.getUpdateTranslator(context);
expression.visit(visitor);
return false;
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLConditionTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLConditionTranslator.java
index 706b7080b..6a2be91aa 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLConditionTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLConditionTranslator.java
@@ -76,7 +76,7 @@ public class EJBQLConditionTranslator extends EJBQLBaseVisitor {
@Override
public boolean visitAggregate(EJBQLExpression expression) {
- expression.visit(context.getTranslatorFactory().getAggregateColumnTranslator(context));
+ expression.visit(context.getTranslator().getAggregateColumnTranslator(context));
return false;
}
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 b90a366bd..8b94a73dc 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
@@ -97,7 +97,7 @@ public abstract class EJBQLDbPathTranslator extends EJBQLBaseVisitor {
private void resolveJoin(boolean inner) {
- EJBQLJoinAppender joinAppender = context.getTranslatorFactory().getJoinAppender(context);
+ EJBQLJoinAppender joinAppender = context.getTranslator().getJoinAppender(context);
// TODO: andrus 1/6/2007 - conflict with object path naming... maybe
// 'registerReusableJoin' should normalize everything to a db path?
@@ -237,7 +237,7 @@ public abstract class EJBQLDbPathTranslator extends EJBQLBaseVisitor {
protected void resolveJoin() {
- EJBQLJoinAppender joinAppender = context.getTranslatorFactory().getJoinAppender(context);
+ EJBQLJoinAppender joinAppender = context.getTranslator().getJoinAppender(context);
String newPath = idPath + '.' + lastPathComponent;
String oldPath = joinAppender.registerReusableJoin(idPath, lastPathComponent, newPath);
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLDeleteTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLDeleteTranslator.java
index 9f23c20b4..4e3805e95 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLDeleteTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLDeleteTranslator.java
@@ -43,14 +43,14 @@ public class EJBQLDeleteTranslator extends EJBQLBaseVisitor {
@Override
public boolean visitFrom(EJBQLExpression expression, int finishedChildIndex) {
context.append(" FROM");
- expression.visit(context.getTranslatorFactory().getFromTranslator(context));
+ expression.visit(context.getTranslator().getFromTranslator(context));
return false;
}
@Override
public boolean visitWhere(EJBQLExpression expression) {
context.append(" WHERE");
- expression.visit(context.getTranslatorFactory().getConditionTranslator(context));
+ expression.visit(context.getTranslator().getConditionTranslator(context));
return false;
}
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
index d1f636ba9..3205ce10a 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
@@ -35,7 +35,7 @@ public class EJBQLFromTranslator extends EJBQLBaseVisitor {
public EJBQLFromTranslator(EJBQLTranslationContext context) {
super(true);
this.context = context;
- this.joinAppender = context.getTranslatorFactory().getJoinAppender(context);
+ this.joinAppender = context.getTranslator().getJoinAppender(context);
}
@Override
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLGroupByTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLGroupByTranslator.java
index 17ebb2b14..51f8690d5 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLGroupByTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLGroupByTranslator.java
@@ -50,7 +50,7 @@ class EJBQLGroupByTranslator extends EJBQLBaseVisitor {
context.append(',');
}
- expression.visit(context.getTranslatorFactory().getIdentifierColumnsTranslator(context));
+ expression.visit(context.getTranslator().getIdentifierColumnsTranslator(context));
return false;
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLIdentifierColumnsTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLIdentifierColumnsTranslator.java
index 654cc841f..af9adef5c 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLIdentifierColumnsTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLIdentifierColumnsTranslator.java
@@ -100,7 +100,7 @@ class EJBQLIdentifierColumnsTranslator extends EJBQLBaseVisitor {
if (marker == null) {
marker = EJBQLJoinAppender.makeJoinTailMarker(idVar);
- joinAppender = context.getTranslatorFactory().getJoinAppender(context);
+ joinAppender = context.getTranslator().getJoinAppender(context);
}
DbRelationship dr = (DbRelationship) pathPart;
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLJoinAppender.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLJoinAppender.java
index a6a3e1f7a..f69ad2a30 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLJoinAppender.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLJoinAppender.java
@@ -256,7 +256,7 @@ public class EJBQLJoinAppender {
context.pushMarker(context.makeEntityQualifierMarker(), false);
ejbqlQualifier.visit(context
- .getTranslatorFactory()
+ .getTranslator()
.getConditionTranslator(context));
context.popMarker();
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLOrderByTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLOrderByTranslator.java
index 4aef2522f..99c3b3c44 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLOrderByTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLOrderByTranslator.java
@@ -52,7 +52,7 @@ class EJBQLOrderByTranslator extends EJBQLBaseVisitor {
@Override
public boolean visitAggregate(EJBQLExpression expression) {
- expression.visit(context.getTranslatorFactory().getAggregateColumnTranslator(context));
+ expression.visit(context.getTranslator().getAggregateColumnTranslator(context));
return false;
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLPathTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLPathTranslator.java
index b2e997ce1..083e2c97d 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLPathTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLPathTranslator.java
@@ -121,7 +121,7 @@ public abstract class EJBQLPathTranslator extends EJBQLBaseVisitor {
protected void resolveJoin() {
- EJBQLJoinAppender joinAppender = context.getTranslatorFactory().getJoinAppender(context);
+ EJBQLJoinAppender joinAppender = context.getTranslator().getJoinAppender(context);
String newPath = idPath + '.' + lastPathComponent;
String oldPath = joinAppender.registerReusableJoin(idPath, lastPathComponent, newPath);
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectColumnsTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectColumnsTranslator.java
index 0e356d91d..49612a6d7 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectColumnsTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectColumnsTranslator.java
@@ -27,7 +27,6 @@ import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
import java.util.Collection;
@@ -59,7 +58,7 @@ public class EJBQLSelectColumnsTranslator extends EJBQLBaseVisitor {
@Override
public boolean visitAggregate(EJBQLExpression expression) {
- expression.visit(context.getTranslatorFactory().getAggregateColumnTranslator(context));
+ expression.visit(context.getTranslator().getAggregateColumnTranslator(context));
return false;
}
@@ -205,7 +204,7 @@ public class EJBQLSelectColumnsTranslator extends EJBQLBaseVisitor {
@Override
public boolean visitIdentifier(EJBQLExpression expression) {
- expression.visit(context.getTranslatorFactory().getIdentifierColumnsTranslator(context));
+ expression.visit(context.getTranslator().getIdentifierColumnsTranslator(context));
return false;
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectTranslator.java
index 1f45b8e39..d267569d8 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLSelectTranslator.java
@@ -48,7 +48,7 @@ public class EJBQLSelectTranslator extends EJBQLBaseVisitor {
public boolean visitFrom(EJBQLExpression expression, int finishedChildIndex) {
context.append(" FROM");
context.setAppendingResultColumns(false);
- expression.visit(context.getTranslatorFactory().getFromTranslator(context));
+ expression.visit(context.getTranslator().getFromTranslator(context));
context.markCurrentPosition(context.makeWhereMarker());
context.markCurrentPosition(context.makeEntityQualifierMarker());
return false;
@@ -57,21 +57,21 @@ public class EJBQLSelectTranslator extends EJBQLBaseVisitor {
@Override
public boolean visitGroupBy(EJBQLExpression expression) {
context.append(" GROUP BY");
- expression.visit(context.getTranslatorFactory().getGroupByTranslator(context));
+ expression.visit(context.getTranslator().getGroupByTranslator(context));
return false;
}
@Override
public boolean visitHaving(EJBQLExpression expression) {
context.append(" HAVING");
- expression.visit(context.getTranslatorFactory().getConditionTranslator(context));
+ expression.visit(context.getTranslator().getConditionTranslator(context));
return false;
}
@Override
public boolean visitOrderBy(EJBQLExpression expression) {
context.append(" ORDER BY");
- expression.visit(context.getTranslatorFactory().getOrderByTranslator(context));
+ expression.visit(context.getTranslator().getOrderByTranslator(context));
return false;
}
@@ -92,7 +92,7 @@ public class EJBQLSelectTranslator extends EJBQLBaseVisitor {
@Override
public boolean visitSelectExpressions(EJBQLExpression expression) {
- expression.visit(context.getTranslatorFactory().getSelectColumnsTranslator(
+ expression.visit(context.getTranslator().getSelectColumnsTranslator(
context));
return false;
}
@@ -109,7 +109,7 @@ public class EJBQLSelectTranslator extends EJBQLBaseVisitor {
context.append(" AND");
}
- expression.visit(context.getTranslatorFactory().getConditionTranslator(context));
+ expression.visit(context.getTranslator().getConditionTranslator(context));
return false;
}
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 22295d2d3..cb1452fe4 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
@@ -42,7 +42,7 @@ import java.util.Map;
/**
* A context used for translating of EJBQL to SQL.
- *
+ *
* @since 3.0
*/
public class EJBQLTranslationContext {
@@ -50,7 +50,7 @@ public class EJBQLTranslationContext {
private EJBQLCompiledExpression compiledExpression;
protected Map<String, Object> namedParameters;
protected Map<Integer, Object> positionalParameters;
- private EJBQLTranslator translatorFactory;
+ private EJBQLTranslator translator;
private DbAdapter adapter;
private QuotingStrategy quotingStrategy;
private EntityResolver entityResolver;
@@ -73,9 +73,13 @@ public class EJBQLTranslationContext {
// not.
private boolean appendingResultColumns;
- public EJBQLTranslationContext(EntityResolver entityResolver, EJBQLQuery query,
+ public EJBQLTranslationContext(
+ EntityResolver entityResolver,
+ EJBQLQuery query,
EJBQLCompiledExpression compiledExpression,
- EJBQLTranslator translatorFactory, DbAdapter adapter, QuotingStrategy quotingStrategy) {
+ EJBQLTranslator translator,
+ DbAdapter adapter,
+ QuotingStrategy quotingStrategy) {
this.entityResolver = entityResolver;
this.compiledExpression = compiledExpression;
@@ -83,7 +87,7 @@ public class EJBQLTranslationContext {
this.namedParameters = query.getNamedParameters();
this.positionalParameters = query.getPositionalParameters();
- this.translatorFactory = translatorFactory;
+ this.translator = translator;
this.adapter = adapter;
this.usingAliases = true;
this.caseInsensitive = false;
@@ -118,8 +122,8 @@ public class EJBQLTranslationContext {
query.setParams(boundParameters);
return query;
}
-
- public QueryMetadata getMetadata(){
+
+ public QueryMetadata getMetadata() {
return queryMetadata;
}
@@ -136,8 +140,8 @@ public class EJBQLTranslationContext {
return id;
}
- EJBQLTranslator getTranslatorFactory() {
- return translatorFactory;
+ EJBQLTranslator getTranslator() {
+ return translator;
}
/**
@@ -174,8 +178,7 @@ public class EJBQLTranslationContext {
.getEntityDescriptor(id.getEntityId())
.getEntity()
.getDbEntity();
- }
- else {
+ } else {
DbRelationship last = incoming.get(incoming.size() - 1);
entity = last.getTargetEntity();
}
@@ -354,16 +357,17 @@ public class EJBQLTranslationContext {
* <p>This method takes a value object which may be a collection or a non-collection. If it
* is a collection then it will bind all of the values in the collection. If it is a non-
* collection then it will bind that single object.</p>
+ *
* @param value
* @return
*/
List<String> bindParameters(Object value) {
- if(Collection.class.isAssignableFrom(value.getClass())) {
+ if (Collection.class.isAssignableFrom(value.getClass())) {
Iterator<?> parameterValueIterator = ((Collection<?>) value).iterator();
List<String> result = new ArrayList<>();
- while(parameterValueIterator.hasNext()) {
+ while (parameterValueIterator.hasNext()) {
result.add(bindParameter(parameterValueIterator.next()));
}
@@ -421,8 +425,7 @@ public class EJBQLTranslationContext {
if (dot > 0) {
keyBuffer.append(idPath.substring(0, dot).toLowerCase()).append(
idPath.substring(dot));
- }
- else {
+ } else {
keyBuffer.append(idPath.toLowerCase());
}
@@ -432,8 +435,7 @@ public class EJBQLTranslationContext {
if (tableAliases != null) {
alias = tableAliases.get(key);
- }
- else {
+ } else {
tableAliases = new HashMap<>();
alias = null;
}
@@ -488,11 +490,11 @@ public class EJBQLTranslationContext {
public void setUsingAliases(boolean useAliases) {
this.usingAliases = useAliases;
}
-
+
public boolean isCaseInsensitive() {
return caseInsensitive;
}
-
+
public void setCaseInsensitive(boolean caseInsensitive) {
this.caseInsensitive = caseInsensitive;
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLUpdateTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLUpdateTranslator.java
index e3deb6f8d..65ce8a66b 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLUpdateTranslator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLUpdateTranslator.java
@@ -48,13 +48,13 @@ class EJBQLUpdateTranslator extends EJBQLBaseVisitor {
@Override
public boolean visitWhere(EJBQLExpression expression) {
context.append(" WHERE");
- expression.visit(context.getTranslatorFactory().getConditionTranslator(context));
+ expression.visit(context.getTranslator().getConditionTranslator(context));
return false;
}
@Override
public boolean visitFrom(EJBQLExpression expression, int finishedChildIndex) {
- expression.visit(context.getTranslatorFactory().getFromTranslator(context));
+ expression.visit(context.getTranslator().getFromTranslator(context));
return false;
}
@@ -68,7 +68,7 @@ class EJBQLUpdateTranslator extends EJBQLBaseVisitor {
context.append(" SET");
}
- expression.visit(context.getTranslatorFactory().getUpdateItemTranslator(context));
+ expression.visit(context.getTranslator().getUpdateItemTranslator(context));
return false;
}
}
(cayenne) 01/03: Translators as stateless services producing immutable TranslatedXyz records
Posted by aa...@apache.org.
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());
(cayenne) 02/03: CAT-2957 Get rid of adaper for legacy HSQLDB <= 1.8
Posted by aa...@apache.org.
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 482119c6ac67cbd89f5d5199b140128a8f4d6c3d
Author: Andrus Adamchik <an...@objectstyle.com>
AuthorDate: Sun May 31 15:19:54 2026 -0400
CAT-2957 Get rid of adaper for legacy HSQLDB <= 1.8
---
RELEASE-NOTES.txt | 1 +
UPGRADE.md | 4 +
.../merge/factory/MergerTokenFactoryProvider.java | 4 +-
.../cayenne/mcp/tools/dbimport/DbImportRunIT.java | 4 +-
.../mcp/tools/dbimport/DbImportRunMcpIT.java | 4 +-
.../tools/dbimport/DbImportRunValidationTest.java | 4 +-
.../cayenne/dba/hsqldb/HSQLDBNoSchemaAdapter.java | 97 ----------------------
.../apache/cayenne/dba/hsqldb/HSQLDBSniffer.java | 8 +-
8 files changed, 14 insertions(+), 112 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 7e76d73cf..42834e397 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -14,6 +14,7 @@ Date:
Changes/New Features:
CAY-2956 Get rid of a dedicated adapter for Oracle 8
+CAY-2957 Get rid of adaper for legacy HSQLDB <= 1.8
Bug Fixes:
diff --git a/UPGRADE.md b/UPGRADE.md
index 1882e9baf..f1391977d 100644
--- a/UPGRADE.md
+++ b/UPGRADE.md
@@ -61,6 +61,10 @@ Expression caseWhenExp = caseWhen(
If you referenced `Oracle8Adapter` explicitly (e.g. in a DataNode adapter configuration or custom DI
bindings), switch to `org.apache.cayenne.dba.oracle.OracleAdapter`.
+* Per [CAY-2957](https://issues.apache.org/jira/browse/CAY-2957) the legacy HSQLDB adapter (HSQL <= 1.8) has been removed.
+ `org.apache.cayenne.dba.hsqldb.HSQLDBNoSchemaAdapter` no longer exists, and the `HSQLDBSniffer` now maps all. If you
+ happen to be on those older HSQL versions, update to the latest one.
+
## Upgrading to 5.0.M2
* Per [CAY-2947](https://issues.apache.org/jira/browse/CAY-2947) the `cayenne-commitlog` artifact has been removed. Commit log support is now part of the
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactoryProvider.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactoryProvider.java
index 00005fdad..082ad6282 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactoryProvider.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactoryProvider.java
@@ -43,8 +43,8 @@ public class MergerTokenFactoryProvider {
}
public MergerTokenFactory get(DbAdapter adapter) throws DIRuntimeException {
- // walk up the class hierarchy so subclasses (e.g. HSQLDBNoSchemaAdapter)
- // resolve to the factory mapped against their parent (HSQLDBAdapter)
+ // walk up the class hierarchy so adapter subclasses resolve to the
+ // factory mapped against their parent (e.g. a custom HSQLDBAdapter subclass)
for (Class<?> c = adapter.unwrap().getClass(); DbAdapter.class.isAssignableFrom(c); c = c.getSuperclass()) {
MergerTokenFactory factory = perAdapterValues.get(c.getName());
if (factory != null) {
diff --git a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunIT.java b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunIT.java
index 85c79c6ef..26e14dec6 100644
--- a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunIT.java
+++ b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunIT.java
@@ -18,7 +18,7 @@
****************************************************************/
package org.apache.cayenne.mcp.tools.dbimport;
-import org.apache.cayenne.dba.hsqldb.HSQLDBNoSchemaAdapter;
+import org.apache.cayenne.dba.hsqldb.HSQLDBAdapter;
import org.apache.cayenne.mcp.tools.dbimport.protocol.DbImportRunResult;
import org.apache.cayenne.modeler.pref.PreferenceNodeIds;
import org.apache.cayenne.modeler.pref.PrefsLocator;
@@ -42,7 +42,7 @@ import static org.junit.jupiter.api.Assertions.*;
public class DbImportRunIT {
- private static final String HSQL_ADAPTER = HSQLDBNoSchemaAdapter.class.getName();
+ private static final String HSQL_ADAPTER = HSQLDBAdapter.class.getName();
private static final String HSQL_DRIVER = "org.hsqldb.jdbc.JDBCDriver";
@TempDir
diff --git a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunMcpIT.java b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunMcpIT.java
index 8b99a856d..14048bbab 100644
--- a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunMcpIT.java
+++ b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunMcpIT.java
@@ -18,7 +18,7 @@
****************************************************************/
package org.apache.cayenne.mcp.tools.dbimport;
-import org.apache.cayenne.dba.hsqldb.HSQLDBNoSchemaAdapter;
+import org.apache.cayenne.dba.hsqldb.HSQLDBAdapter;
import org.apache.cayenne.mcp.TestMcpClient;
import org.apache.cayenne.modeler.pref.PreferenceNodeIds;
import org.apache.cayenne.modeler.pref.PrefsLocator;
@@ -47,7 +47,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
*/
public class DbImportRunMcpIT {
- private static final String HSQL_ADAPTER = HSQLDBNoSchemaAdapter.class.getName();
+ private static final String HSQL_ADAPTER = HSQLDBAdapter.class.getName();
private static final String HSQL_DRIVER = "org.hsqldb.jdbc.JDBCDriver";
@RegisterExtension
diff --git a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunValidationTest.java b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunValidationTest.java
index d7b4a4dda..3671173d9 100644
--- a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunValidationTest.java
+++ b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunValidationTest.java
@@ -163,7 +163,7 @@ public class DbImportRunValidationTest {
connector.setUserName("SA");
connector.setPassword("");
connector.setJdbcDriver("com.nonexistent.Driver");
- connector.setDbAdapter("org.apache.cayenne.dba.hsqldb.HSQLDBNoSchemaAdapter");
+ connector.setDbAdapter("org.apache.cayenne.dba.hsqldb.HSQLDBAdapter");
new DataMapPrefs(locator.dataMapNode(
PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath())))
.setConnector(connector);
@@ -196,7 +196,7 @@ public class DbImportRunValidationTest {
connector.setUserName("SA");
connector.setPassword("");
connector.setJdbcDriver("org.hsqldb.jdbc.JDBCDriver");
- connector.setDbAdapter("org.apache.cayenne.dba.hsqldb.HSQLDBNoSchemaAdapter");
+ connector.setDbAdapter("org.apache.cayenne.dba.hsqldb.HSQLDBAdapter");
new DataMapPrefs(locator.dataMapNode(
PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath())))
.setConnector(connector);
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBNoSchemaAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBNoSchemaAdapter.java
deleted file mode 100644
index f24540feb..000000000
--- a/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBNoSchemaAdapter.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.dba.hsqldb;
-
-import org.apache.cayenne.access.types.ExtendedType;
-import org.apache.cayenne.access.types.ExtendedTypeFactory;
-import org.apache.cayenne.access.types.ValueObjectTypeRegistry;
-import org.apache.cayenne.configuration.Constants;
-import org.apache.cayenne.configuration.RuntimeProperties;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.resource.ResourceLocator;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * A flavor of HSQLDBAdapter that implements workarounds for some old driver limitations.
- *
- * @since 1.2
- */
-public class HSQLDBNoSchemaAdapter extends HSQLDBAdapter {
-
- public HSQLDBNoSchemaAdapter(@Inject RuntimeProperties runtimeProperties,
- @Inject(Constants.DEFAULT_TYPES_LIST) List<ExtendedType> defaultExtendedTypes,
- @Inject(Constants.USER_TYPES_LIST) List<ExtendedType> userExtendedTypes,
- @Inject(Constants.TYPE_FACTORIES_LIST) List<ExtendedTypeFactory> extendedTypeFactories,
- @Inject(Constants.RESOURCE_LOCATOR) ResourceLocator resourceLocator,
- @Inject ValueObjectTypeRegistry valueObjectTypeRegistry) {
- super(runtimeProperties, defaultExtendedTypes, userExtendedTypes, extendedTypeFactories, resourceLocator, valueObjectTypeRegistry);
- }
-
- /**
- * Generate unqualified name without schema.
- *
- * @since 1.2
- */
- @Override
- protected String getTableName(DbEntity entity) {
- return quotingStrategy.quotedIdentifier(entity, entity.getName());
- }
-
- /**
- * Returns NULL.
- *
- * @since 1.2
- */
- @Override
- protected String getSchemaName(DbEntity entity) {
- return null;
- }
-
- @Override
- public Collection<String> dropTableStatements(DbEntity table) {
- // hsqldb doesn't support schema namespaces, so remove if found
- return Collections.singleton("DROP TABLE " + getTableName(table));
- }
-
- /**
- * Uses unqualified entity names.
- *
- * @since 1.2
- */
- @Override
- public String createTable(DbEntity ent) {
- String sql = super.createTable(ent);
-
- // hsqldb doesn't support schema namespaces, so remove if found
- String fqnCreate = "CREATE CACHED TABLE " + super.getTableName(ent) + " (";
- if (sql != null && sql.toUpperCase().startsWith(fqnCreate)) {
- sql = "CREATE CACHED TABLE "
- + getTableName(ent)
- + " ("
- + sql.substring(fqnCreate.length());
- }
-
- return sql;
- }
-}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBSniffer.java b/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBSniffer.java
index e4bfa0a90..dfa48aaf1 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBSniffer.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBSniffer.java
@@ -47,12 +47,6 @@ public class HSQLDBSniffer implements DbAdapterDetector {
return null;
}
- boolean supportsSchema = md.getDriverMajorVersion() < 1
- || md.getDriverMajorVersion() == 1 && md.getDriverMinorVersion() <= 8;
-
- // TODO: is this correct? Looks like newer drivers result in HSQLDBNoSchemaAdapter (which is presumably legacy?)
- return supportsSchema
- ? objectFactory.newInstance(DbAdapter.class, HSQLDBAdapter.class.getName())
- : objectFactory.newInstance(DbAdapter.class, HSQLDBNoSchemaAdapter.class.getName());
+ return objectFactory.newInstance(DbAdapter.class, HSQLDBAdapter.class.getName());
}
}