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