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);

Reply via email to