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 86a402a60a57a909ba325742f68653a533b33405 Author: Andrus Adamchik <[email protected]> AuthorDate: Sat May 30 21:13:19 2026 -0400 Straighten SQL translator flow... cleanup --- .../translator/select/DefaultSelectTranslator.java | 33 ++-------------------- .../translator/select/QualifierTranslator.java | 2 +- .../translator/select/TranslatorContext.java | 26 ++++++++++++++++- .../DbAdapterDelegatedSelectTranslatorIT.java | 8 +++--- 4 files changed, 32 insertions(+), 37 deletions(-) diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java index dc8b47c3a..5394ab5e6 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java @@ -34,24 +34,6 @@ import org.apache.cayenne.query.Select; */ public class DefaultSelectTranslator implements SelectTranslator { - private static final TranslationStage[] TRANSLATION_STAGES = { - new QualifierTranslationStage(), - new ColumnExtractorStage(), - new PrefetchNodeStage(), - new OrderingStage(), - new HavingTranslationStage(), - new OrderingGroupByStage(), - new GroupByStage(), - new DistinctStage(), - new OrderingDistinctStage(), - new LimitOffsetStage(), - new ColumnDescriptorStage(), - new TableTreeQualifierStage(), - new TableTreeStage(), - new SQLResultStage(), - new SQLGenerationStage() - }; - @Override public TranslatedSelect translate(Select<?> query, DbAdapter adapter, EntityResolver resolver) { if (!(query instanceof FluentSelect)) { @@ -59,18 +41,7 @@ public class DefaultSelectTranslator implements SelectTranslator { } TranslatorContext context = new TranslatorContext( new FluentSelectWrapper((FluentSelect<?, ?>) query), adapter, resolver, null); - translate(context); - return context.toResult(); - } - - /** - * Runs the {@link TranslationStage} pipeline over the given context. Used for the root query (by - * {@link #translate(Select, DbAdapter, EntityResolver)}), and directly by {@link QualifierTranslator} - * for subqueries (which consume the intermediate context rather than the final result). - */ - static void translate(TranslatorContext context) { - for (TranslationStage stage : TRANSLATION_STAGES) { - stage.perform(context); - } + context.translate(); + return context.getTranslation(); } } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/QualifierTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/QualifierTranslator.java index 641a58636..2dcfb1650 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/QualifierTranslator.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/QualifierTranslator.java @@ -266,7 +266,7 @@ class QualifierTranslator implements TraversalHandler { subquery.getQuery(), context.getAdapter(), context.getResolver(), context); // skip SQL translation stage for nested translators, it should be performed by root context only subContext.setSkipSQLGeneration(true); - DefaultSelectTranslator.translate(subContext); + subContext.translate(); return subContext.getSelectBuilder().build(); case ENCLOSING_OBJECT: diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/TranslatorContext.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/TranslatorContext.java index 0405eb55e..acb9a1ab8 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/TranslatorContext.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/TranslatorContext.java @@ -52,6 +52,24 @@ import static org.apache.cayenne.access.sqlbuilder.SQLBuilder.node; */ public class TranslatorContext implements SQLGenerationContext { + private static final TranslationStage[] TRANSLATION_STAGES = { + new QualifierTranslationStage(), + new ColumnExtractorStage(), + new PrefetchNodeStage(), + new OrderingStage(), + new HavingTranslationStage(), + new OrderingGroupByStage(), + new GroupByStage(), + new DistinctStage(), + new OrderingDistinctStage(), + new LimitOffsetStage(), + new ColumnDescriptorStage(), + new TableTreeQualifierStage(), + new TableTreeStage(), + new SQLResultStage(), + new SQLGenerationStage() + }; + private final TableTree tableTree; /** @@ -133,7 +151,13 @@ public class TranslatorContext implements SQLGenerationContext { } } - public TranslatedSelect toResult() { + void translate() { + for (TranslationStage stage : TRANSLATION_STAGES) { + stage.perform(this); + } + } + + public TranslatedSelect getTranslation() { return new TranslatedSelect( getFinalSQL(), getColumnDescriptors().toArray(new ColumnDescriptor[0]), diff --git a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DbAdapterDelegatedSelectTranslatorIT.java b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DbAdapterDelegatedSelectTranslatorIT.java index 0e20d1da7..be5c4e92f 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DbAdapterDelegatedSelectTranslatorIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DbAdapterDelegatedSelectTranslatorIT.java @@ -783,7 +783,7 @@ public class DbAdapterDelegatedSelectTranslatorIT { TranslatorContext context = new TranslatorContext(new FluentSelectWrapper(query), env.dataNode().getAdapter(), env.context().getEntityResolver(), null); - DefaultSelectTranslator.translate(context); + context.translate(); int totalJoins = context.getTableCount() - 1; assertEquals(3, totalJoins); @@ -800,7 +800,7 @@ public class DbAdapterDelegatedSelectTranslatorIT { TranslatorContext context = new TranslatorContext(new FluentSelectWrapper(query), env.dataNode().getAdapter(), env.context().getEntityResolver(), null); - DefaultSelectTranslator.translate(context); + context.translate(); int totalJoins = context.getTableCount() - 1; assertEquals(2, totalJoins); @@ -817,7 +817,7 @@ public class DbAdapterDelegatedSelectTranslatorIT { TranslatorContext context = new TranslatorContext(new FluentSelectWrapper(query), env.dataNode().getAdapter(), env.context().getEntityResolver(), null); - DefaultSelectTranslator.translate(context); + context.translate(); int totalJoins = context.getTableCount() - 1; assertEquals(2, totalJoins); @@ -833,7 +833,7 @@ public class DbAdapterDelegatedSelectTranslatorIT { TranslatorContext context = new TranslatorContext(new FluentSelectWrapper(query), env.dataNode().getAdapter(), env.context().getEntityResolver(), null); - DefaultSelectTranslator.translate(context); + context.translate(); int totalJoins = context.getTableCount() - 1; assertEquals(4, totalJoins);
