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