You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/12/19 14:51:38 UTC

[1/2] cayenne git commit: CAY-2175 AliasName used in EJBQLQuery is not working if it contains mixed case Fix and tests

Repository: cayenne
Updated Branches:
  refs/heads/master 1fd28cb46 -> 3ad0f4a22


CAY-2175 AliasName used in EJBQLQuery is not working if it contains mixed case
Fix and tests


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/8ea40b0e
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/8ea40b0e
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/8ea40b0e

Branch: refs/heads/master
Commit: 8ea40b0ede74db9bf58ff97da51317f0dcd1d20f
Parents: 1fd28cb
Author: Nikita Timofeev <st...@gmail.com>
Authored: Mon Dec 19 17:05:56 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Mon Dec 19 17:05:56 2016 +0300

----------------------------------------------------------------------
 .../apache/cayenne/ejbql/parser/Compiler.java   | 71 ++++++++++----------
 .../cayenne/ejbql/EJBQLParser_CompileIT.java    | 29 ++++++++
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  6 +-
 3 files changed, 68 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/8ea40b0e/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java b/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
index 95a728b..3908ff3 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
@@ -88,49 +88,48 @@ class Compiler {
 
         Map<EJBQLPath, Integer> pathsInSelect = new HashMap<>();
 
-        if (parsed != null) {
-            for (int i = 0; i < parsed.getChildrenCount(); i++) {
-                if (parsed.getChild(i) instanceof EJBQLSelectClause) {
-
-                    EJBQLExpression parsedTemp = parsed.getChild(i);
-                    boolean stop = false;
-
-                    while (parsedTemp.getChildrenCount() > 0 && !stop) {
-                        EJBQLExpression newParsedTemp = null;
-                        for (int j = 0; j < parsedTemp.getChildrenCount(); j++) {
-                            if (parsedTemp.getChild(j) instanceof EJBQLSelectExpression) {
-                                for (int k = 0; k < parsedTemp
-                                        .getChild(j)
-                                        .getChildrenCount(); k++) {
-
-                                    if (parsedTemp.getChild(j).getChild(k) instanceof EJBQLPath) {
-                                        pathsInSelect.put((EJBQLPath) parsedTemp
-                                                .getChild(j)
-                                                .getChild(k), j);
-
-                                    }
+        for (int i = 0; i < parsed.getChildrenCount(); i++) {
+            if (parsed.getChild(i) instanceof EJBQLSelectClause) {
+
+                EJBQLExpression parsedTemp = parsed.getChild(i);
+                boolean stop = false;
+
+                while (parsedTemp.getChildrenCount() > 0 && !stop) {
+                    EJBQLExpression newParsedTemp = null;
+                    for (int j = 0; j < parsedTemp.getChildrenCount(); j++) {
+                        if (parsedTemp.getChild(j) instanceof EJBQLSelectExpression) {
+                            for (int k = 0; k < parsedTemp
+                                    .getChild(j)
+                                    .getChildrenCount(); k++) {
+
+                                if (parsedTemp.getChild(j).getChild(k) instanceof EJBQLPath) {
+                                    pathsInSelect.put((EJBQLPath) parsedTemp
+                                            .getChild(j)
+                                            .getChild(k), j);
+
                                 }
                             }
+                        }
+                        else {
+                            if (parsedTemp.getChild(j).getChildrenCount() == 0) {
+                                stop = true;
+                            }
                             else {
-                                if (parsedTemp.getChild(j).getChildrenCount() == 0) {
-                                    stop = true;
-                                }
-                                else {
-                                    newParsedTemp = parsedTemp.getChild(j);
-                                }
+                                newParsedTemp = parsedTemp.getChild(j);
                             }
                         }
+                    }
 
-                        if (!stop && newParsedTemp != null) {
-                            parsedTemp = newParsedTemp;
-                        }
-                        else {
-                            stop = true;
-                        }
+                    if (!stop && newParsedTemp != null) {
+                        parsedTemp = newParsedTemp;
+                    }
+                    else {
+                        stop = true;
                     }
                 }
             }
         }
+
         // postprocess paths, now that all id vars are resolved
         if (paths != null) {
             for (EJBQLPath path : paths) {
@@ -178,7 +177,7 @@ class Compiler {
                     Integer integer = pathsInSelect.get(path);
                     if (integer != null) {
                         resultComponents.remove(integer.intValue());
-                        resultComponents.add(pathsInSelect.get(path).intValue(), ident);
+                        resultComponents.add(integer, ident);
                         rootId = pathRelationshipString;
                     }
                 }
@@ -538,7 +537,7 @@ class Compiler {
         @Override
         public boolean visitPath(EJBQLExpression expression, int finishedChildIndex) {
             if (finishedChildIndex + 1 < expression.getChildrenCount()) {
-                this.id = ((EJBQLPath) expression).getId();
+                this.id = normalizeIdPath(((EJBQLPath) expression).getId());
                 this.descriptor = descriptorsById.get(id);
 
                 if (descriptor == null) {
@@ -568,7 +567,7 @@ class Compiler {
         public boolean visitIdentifier(EJBQLExpression expression) {
             if (incoming != null) {
 
-                String aliasId = expression.getText();
+                String aliasId = expression.getText().toLowerCase();
 
                 // map id variable to class descriptor
                 ClassDescriptor old = descriptorsById.put(aliasId, descriptor);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8ea40b0e/cayenne-server/src/test/java/org/apache/cayenne/ejbql/EJBQLParser_CompileIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/ejbql/EJBQLParser_CompileIT.java b/cayenne-server/src/test/java/org/apache/cayenne/ejbql/EJBQLParser_CompileIT.java
index 33c3cf0..f9e05f9 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/ejbql/EJBQLParser_CompileIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/ejbql/EJBQLParser_CompileIT.java
@@ -105,4 +105,33 @@ public class EJBQLParser_CompileIT extends ServerCase {
 		assertNotNull(select3.getEntityDescriptor("a"));
 		assertNotNull(select3.getEntityDescriptor("A"));
 	}
+
+	/**
+	 * CAY-2175
+	 */
+	@Test
+	public void testGetEntityDescriptorCaseSensitivityInJoin() {
+		EJBQLCompiledExpression select1 = parser.compile(
+				"SELECT artistAlias FROM Artist artistAlias " +
+						"WHERE artistAlias.artistName = 'Abcd'",
+				resolver
+		);
+		assertNotNull(select1.getEntityDescriptor("artistalias"));
+		assertNotNull(select1.getEntityDescriptor("artistAlias"));
+		assertNotNull(select1.getEntityDescriptor("ArTiStAlIaS"));
+
+		EJBQLCompiledExpression select2 = parser.compile(
+				"SELECT artistalias from Artist AS ArtistAlias JOIN artistalias.paintingArray as PaintingAlias " +
+						"where aRtistALiaS.artistName = 'Abcd'",
+				resolver
+		);
+		assertNotNull(select2.getEntityDescriptor("artistalias"));
+		assertNotNull(select2.getEntityDescriptor("artistAlias"));
+		assertNotNull(select2.getEntityDescriptor("ArTiStAlIaS"));
+
+		assertNotNull(select2.getEntityDescriptor("PaintingAlias"));
+		assertNotNull(select2.getEntityDescriptor("paintingalias"));
+		assertNotNull(select2.getEntityDescriptor("PaInTinGAlIaS"));
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8ea40b0e/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index eb13a0e..c67b2b9 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -24,11 +24,13 @@ CAY-2172 Cleanup Modeler import and migrate db actions
 CAY-2176 Java 7 diamond class generation templates
 
 Bug Fixes:
+
 CAY-2174 Change FK attribute name cause ObjAttribute appear after Reverse Engineering
+CAY-2175 AliasName used in EJBQLQuery is not working if it contains mixed case
 
 ----------------------------------
 Release: 4.0.M4
-Date:
+Date: December 13, 2016
 ----------------------------------
 Changes/New Features:
 
@@ -100,7 +102,7 @@ CAY-2154 Migrate db: queries order
 
 ----------------------------------
 Release: 4.0.M3
-Date:
+Date: February 12, 2016
 ----------------------------------
 Changes/New Features:
 


[2/2] cayenne git commit: Merge branch '165'

Posted by sk...@apache.org.
Merge branch '165'


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/3ad0f4a2
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/3ad0f4a2
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/3ad0f4a2

Branch: refs/heads/master
Commit: 3ad0f4a2298bc00097cb825359a30a0a2eebbf09
Parents: 1fd28cb 8ea40b0
Author: Savva Kolbachev <s....@gmail.com>
Authored: Mon Dec 19 17:51:27 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Mon Dec 19 17:51:27 2016 +0300

----------------------------------------------------------------------
 .../apache/cayenne/ejbql/parser/Compiler.java   | 71 ++++++++++----------
 .../cayenne/ejbql/EJBQLParser_CompileIT.java    | 29 ++++++++
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  6 +-
 3 files changed, 68 insertions(+), 38 deletions(-)
----------------------------------------------------------------------