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/06/07 15:21:02 UTC
(cayenne) 06/23: Straighten SQL translator flow...
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 <an...@objectstyle.com>
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);