This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch STABLE-4.2
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/STABLE-4.2 by this push:
     new 5c4344214 CAY-2805 Stop calling exp parser internally
5c4344214 is described below

commit 5c43442140ffbe2d6d2c7dad54f52a868609968e
Author: Nikita Timofeev <stari...@gmail.com>
AuthorDate: Tue Apr 11 16:22:42 2023 +0300

    CAY-2805 Stop calling exp parser internally
---
 RELEASE-NOTES.txt                                          |  1 +
 .../apache/cayenne/access/PrefetchProcessorJointNode.java  |  2 +-
 .../access/translator/select/PrefetchNodeStage.java        | 14 ++++++++++----
 3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 7a8f439be..a23c21036 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -14,6 +14,7 @@ Date:
 Changes/New Features:
 
 CAY-2802 Upgrade Gradle to 7.6.1
+CAY-2805 Stop calling exp parser internally
 
 Bug Fixes:
 
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
index 9d72ddcf3..7c1296346 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
@@ -161,7 +161,7 @@ class PrefetchProcessorJointNode extends 
PrefetchProcessorNode {
 
         final String prefix;
         if (jointRoot != this) {
-            Expression objectPath = ExpressionFactory.exp(getPath(jointRoot));
+            Expression objectPath = 
ExpressionFactory.pathExp(getPath(jointRoot));
             ASTPath translated = (ASTPath) ((PrefetchProcessorNode) jointRoot)
                     .getResolver()
                     .getEntity()
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/PrefetchNodeStage.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/PrefetchNodeStage.java
index 3aa795df1..924a6e916 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/PrefetchNodeStage.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/PrefetchNodeStage.java
@@ -77,7 +77,7 @@ class PrefetchNodeStage implements TranslationStage {
         boolean warnPrefetchWithLimit = false;
 
         for(PrefetchTreeNode node : prefetch.adjacentJointNodes()) {
-            Expression prefetchExp = ExpressionFactory.exp(node.getPath());
+            Expression prefetchExp = ExpressionFactory.pathExp(node.getPath());
             ASTDbPath dbPrefetch = (ASTDbPath) 
objEntity.translateToDbPath(prefetchExp);
             final String dbPath = dbPrefetch.getPath();
             DbEntity dbEntity = objEntity.getDbEntity();
@@ -124,10 +124,16 @@ class PrefetchNodeStage implements TranslationStage {
         PathTranslator pathTranslator = context.getPathTranslator();
         PrefetchSelectQuery<?> prefetchSelectQuery = (PrefetchSelectQuery<?>) 
select;
         for(String prefetchPath: prefetchSelectQuery.getResultPaths()) {
-            ASTDbPath pathExp = (ASTDbPath) 
context.getMetadata().getClassDescriptor().getEntity()
-                    .translateToDbPath(ExpressionFactory.exp(prefetchPath));
+            String path;
+            if(prefetchPath.startsWith(ASTDbPath.DB_PREFIX)) {
+                path = prefetchPath.substring(ASTDbPath.DB_PREFIX.length());
+            } else {
+                Expression exp = ExpressionFactory.pathExp(prefetchPath);
+                ASTDbPath pathExp = (ASTDbPath) 
context.getMetadata().getClassDescriptor().getEntity()
+                        .translateToDbPath(exp);
+                path = pathExp.getPath();
+            }
 
-            String path = pathExp.getPath();
             PathTranslationResult result = pathTranslator
                     .translatePath(context.getMetadata().getDbEntity(), path);
             result.getDbRelationship().ifPresent(r -> {

Reply via email to