Repository: cayenne
Updated Branches:
  refs/heads/master ac1c8c5d7 -> 00b8d3204


CAY-2148
Failure upgrading from 3.1 to M4
Fix notes: this is a hot-fix for exact problem converting queries from v6 
directly to v9 format.
Actually whole upgrade system should be redesigned, see some thoughts at 
https://issues.apache.org/jira/browse/CAY-2152


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

Branch: refs/heads/master
Commit: 7cfd28624c19a76907cdc9e73a509b0929ba12d8
Parents: f527275
Author: Nikita Timofeev <stari...@gmail.com>
Authored: Wed Nov 23 14:45:38 2016 +0300
Committer: Nikita Timofeev <stari...@gmail.com>
Committed: Wed Nov 23 14:45:38 2016 +0300

----------------------------------------------------------------------
 .../project/upgrade/v8/UpgradeHandler_V8.java   |  3 +++
 .../java/org/apache/cayenne/map/MapLoader.java  |  8 ++++--
 .../cayenne/map/QueryDescriptorLoader.java      | 26 ++++++++++++++++++++
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  1 +
 4 files changed, 36 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/7cfd2862/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v8/UpgradeHandler_V8.java
----------------------------------------------------------------------
diff --git 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v8/UpgradeHandler_V8.java
 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v8/UpgradeHandler_V8.java
index 2782bf5..2e39599 100644
--- 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v8/UpgradeHandler_V8.java
+++ 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v8/UpgradeHandler_V8.java
@@ -113,6 +113,9 @@ public class UpgradeHandler_V8 extends BaseUpgradeHandler {
                 for (int j = 0; j < queryNodes.getLength(); j++) {
                     Element queryElement = (Element) queryNodes.item(j);
                     String factory = queryElement.getAttribute("factory");
+                    if(factory == null || factory.isEmpty()) {
+                        continue;
+                    }
 
                     String queryType;
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7cfd2862/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java 
b/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
index f3164ab..64376f4 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
@@ -1029,8 +1029,12 @@ public class MapLoader extends DefaultHandler {
                this.queryBuilder = new QueryDescriptorLoader();
 
                String type = attributes.getValue("", "type");
-
-               queryBuilder.setQueryType(type);
+               // Legacy format support (v7 and older)
+               if(type == null) {
+                       queryBuilder.setLegacyFactory(attributes.getValue("", 
"factory"));
+               } else {
+                       queryBuilder.setQueryType(type);
+               }
 
                String rootType = attributes.getValue("", "root");
                String rootName = attributes.getValue("", "root-name");

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7cfd2862/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptorLoader.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptorLoader.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptorLoader.java
index 83c7fdb..90bcfc7 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptorLoader.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptorLoader.java
@@ -19,6 +19,7 @@
 package org.apache.cayenne.map;
 
 import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.ConfigurationException;
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.query.*;
 
@@ -89,6 +90,31 @@ public class QueryDescriptorLoader {
         this.name = name;
     }
 
+    /**
+     * It's better be handled by project upgrade handler and actually it is.
+     * But upgrade logic is faulty when project is several versions away
+     * and can't be changed without complete upgrade system rewrite
+     * @param factory old style query factory class
+     */
+    void setLegacyFactory(String factory) {
+        switch (factory) {
+            case "org.apache.cayenne.map.SelectQueryBuilder":
+                queryType = QueryDescriptor.SELECT_QUERY;
+                break;
+            case "org.apache.cayenne.map.SQLTemplateBuilder":
+                queryType = QueryDescriptor.SQL_TEMPLATE;
+                break;
+            case "org.apache.cayenne.map.EjbqlBuilder":
+                queryType = QueryDescriptor.EJBQL_QUERY;
+                break;
+            case "org.apache.cayenne.map.ProcedureQueryBuilder":
+                queryType = QueryDescriptor.PROCEDURE_QUERY;
+                break;
+            default:
+                throw new ConfigurationException("Unknown query factory: " + 
factory);
+        }
+    }
+
     void setQueryType(String queryType) {
         this.queryType = queryType;
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7cfd2862/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 b6e2f8b..de69496 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -69,6 +69,7 @@ CAY-2131 Modeler NullPointerException in reverse engineering 
when importing diff
 CAY-2138 NVARCHAR, LONGNVARCHAR and NCLOB types are missing from Firebird 
types.xml
 CAY-2143 NPE in BaseSchemaUpdateStrategy
 CAY-2144 cdbimport always fails for databases which don't support catalogs
+CAY-2148 Failure upgrading from 3.1 to M4
 
 ----------------------------------
 Release: 4.0.M3

Reply via email to