This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new cd0ee4e67 CAY-2966 "comment" field is lost when upgrading from v10 to
v12
cd0ee4e67 is described below
commit cd0ee4e674bba693399c39e5f427dd16ff347c90
Author: Andrus Adamchik <[email protected]>
AuthorDate: Thu Jun 25 19:20:17 2026 -0400
CAY-2966 "comment" field is lost when upgrading from v10 to v12
---
RELEASE-NOTES.txt | 1 +
.../project/upgrade/handlers/UpgradeHandler.java | 58 +++++++++++++++++-----
.../upgrade/handlers/UpgradeHandler_V11.java | 20 +-------
.../upgrade/handlers/UpgradeHandler_V12.java | 1 +
.../upgrade/handlers/UpgradeHandler_V12Test.java | 12 +++++
.../cayenne/project/upgrade/v12/map1.map.xml | 1 +
6 files changed, 61 insertions(+), 32 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index c04c01616..bc11eb7cb 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -27,6 +27,7 @@ CAY-2960 Undoing renamed relationship change throws
CAY-2961 PostgreSQL "text" column is reverse-engineered as CLOB
CAY-2964 ClassCastException for non-generated meaningful PKs
CAY-2965 MCP Cgen should not fail on an absent "<cgen>" tag
+CAY-2966 "comment" field is lost when upgrading from v10 to v12
----------------------------------
Release: 5.0-M2
diff --git
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler.java
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler.java
index 76dd5ff7a..680a6a4de 100644
---
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler.java
+++
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler.java
@@ -39,24 +39,28 @@ public interface UpgradeHandler {
/**
* root tag for the cgen extension
+ *
* @since 5.0-M1
*/
String CGEN = "cgen";
/**
* root tag for the dbImport extension
+ *
* @since 5.0-M1
*/
String DB_IMPORT = "dbImport";
/**
* root tag for the graph extension
+ *
* @since 5.0-M1
*/
String GRAPH = "graph";
/**
* root tag for the validation extension
+ *
* @since 5.0-M2
*/
String VALIDATION = "validation";
@@ -86,71 +90,99 @@ public interface UpgradeHandler {
/**
* Upgrade Domain schema and version info
+ *
* @param upgradeUnit for the datamap
*/
default void updateDomainSchemaAndVersion(UpgradeUnit upgradeUnit) {
Element domain = upgradeUnit.getDocument().getDocumentElement();
// update schema
-
domain.setAttribute("xmlns","http://cayenne.apache.org/schema/"+getVersion()+"/domain");
-
domain.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");
- domain.setAttribute("xsi:schemaLocation",
"http://cayenne.apache.org/schema/"+getVersion()+"/domain " +
-
"https://cayenne.apache.org/schema/"+getVersion()+"/domain.xsd");
+ domain.setAttribute("xmlns", "http://cayenne.apache.org/schema/" +
getVersion() + "/domain");
+ domain.setAttribute("xmlns:xsi",
"http://www.w3.org/2001/XMLSchema-instance");
+ domain.setAttribute("xsi:schemaLocation",
"http://cayenne.apache.org/schema/" + getVersion() + "/domain " +
+ "https://cayenne.apache.org/schema/" + getVersion() +
"/domain.xsd");
// update version
domain.setAttribute("project-version", getVersion());
}
/**
* Upgrade DataMap schema and version info
+ *
* @param upgradeUnit for the datamap
*/
default void updateDataMapSchemaAndVersion(UpgradeUnit upgradeUnit) {
Element dataMap = upgradeUnit.getDocument().getDocumentElement();
// update schema
-
dataMap.setAttribute("xmlns","http://cayenne.apache.org/schema/"+getVersion()+"/modelMap");
- dataMap.setAttribute("xsi:schemaLocation",
"http://cayenne.apache.org/schema/"+getVersion()+"/modelMap " +
-
"https://cayenne.apache.org/schema/"+getVersion()+"/modelMap.xsd");
+ dataMap.setAttribute("xmlns", "http://cayenne.apache.org/schema/" +
getVersion() + "/modelMap");
+ dataMap.setAttribute("xsi:schemaLocation",
"http://cayenne.apache.org/schema/" + getVersion() + "/modelMap " +
+ "https://cayenne.apache.org/schema/" + getVersion() +
"/modelMap.xsd");
// update version
dataMap.setAttribute("project-version", getVersion());
}
/**
* Update schema for the given extension in a datamap file (root element:
data-map)
+ *
* @param upgradeUnit a unit to work with
- * @param extension name of the extension (cgen, dbImport, etc.)
+ * @param extension name of the extension (cgen, dbImport, etc.)
*/
default void updateExtensionSchema(UpgradeUnit upgradeUnit, String
extension) {
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodes;
try {
- nodes = (NodeList)
xpath.evaluate("/data-map/*[local-name()='"+extension+"']",
+ nodes = (NodeList) xpath.evaluate("/data-map/*[local-name()='" +
extension + "']",
upgradeUnit.getDocument(), XPathConstants.NODESET);
} catch (XPathExpressionException e) {
return;
}
for (int j = 0; j < nodes.getLength(); j++) {
Element element = (Element) nodes.item(j);
- element.setAttribute("xmlns",
"http://cayenne.apache.org/schema/"+getVersion()+"/"+extension.toLowerCase());
+ element.setAttribute("xmlns", "http://cayenne.apache.org/schema/"
+ getVersion() + "/" + extension.toLowerCase());
}
}
/**
* Update schema for the given extension in a project file (root element:
domain)
+ *
* @param upgradeUnit a unit to work with
- * @param extension name of the extension (e.g. validation)
+ * @param extension name of the extension (e.g. validation)
* @since 5.0-M2
*/
default void updateDomainExtensionSchema(UpgradeUnit upgradeUnit, String
extension) {
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodes;
try {
- nodes = (NodeList)
xpath.evaluate("/domain/*[local-name()='"+extension+"']",
+ nodes = (NodeList) xpath.evaluate("/domain/*[local-name()='" +
extension + "']",
upgradeUnit.getDocument(), XPathConstants.NODESET);
} catch (XPathExpressionException e) {
return;
}
for (int j = 0; j < nodes.getLength(); j++) {
Element element = (Element) nodes.item(j);
- element.setAttribute("xmlns",
"http://cayenne.apache.org/schema/"+getVersion()+"/"+extension.toLowerCase());
+ element.setAttribute("xmlns", "http://cayenne.apache.org/schema/"
+ getVersion() + "/" + extension.toLowerCase());
+ }
+ }
+
+ /**
+ * Update the version-stamped namespace on {@code info:property} elements
+ * (entity/attribute comments) in a datamap file.
+ *
+ * @param upgradeUnit a unit to work with
+ * @since 5.0
+ */
+ default void updateInfoSchema(UpgradeUnit upgradeUnit) {
+ XPath xpath = XPathFactory.newInstance().newXPath();
+ NodeList nodes;
+ try {
+ nodes = (NodeList) xpath.evaluate("//*[local-name()='property']",
+ upgradeUnit.getDocument(), XPathConstants.NODESET);
+ } catch (XPathExpressionException e) {
+ return;
+ }
+ for (int j = 0; j < nodes.getLength(); j++) {
+ Element element = (Element) nodes.item(j);
+ if (element.hasAttribute("xmlns:info")) {
+ element.setAttribute("xmlns:info",
"http://cayenne.apache.org/schema/" + getVersion() + "/info");
+ }
}
}
}
diff --git
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11.java
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11.java
index bea1ec08f..752fe2f63 100644
---
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11.java
+++
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11.java
@@ -79,7 +79,7 @@ public class UpgradeHandler_V11 implements UpgradeHandler {
updateExtensionSchema(upgradeUnit, CGEN);
updateExtensionSchema(upgradeUnit, DB_IMPORT);
updateExtensionSchema(upgradeUnit, GRAPH);
- upgradeComments(upgradeUnit);
+ updateInfoSchema(upgradeUnit);
dropROPProperties(upgradeUnit);
dropObjEntityClientInfo(upgradeUnit);
@@ -88,24 +88,6 @@ public class UpgradeHandler_V11 implements UpgradeHandler {
updateDbImportConfig(upgradeUnit);
}
- private void upgradeComments(UpgradeUnit upgradeUnit) {
- XPath xpath = XPathFactory.newInstance().newXPath();
- NodeList infoNodes;
- try {
- infoNodes = (NodeList)
xpath.evaluate("//*[local-name()='property']",
- upgradeUnit.getDocument(), XPathConstants.NODESET);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
- for (int j = 0; j < infoNodes.getLength(); j++) {
- Element infoElement = (Element) infoNodes.item(j);
- if (infoElement.hasAttribute("xmlns:info")) {
- infoElement.setAttribute("xmlns:info",
"http://cayenne.apache.org/schema/11/info");
- }
- }
- }
-
private void dropROPProperties(UpgradeUnit upgradeUnit) {
Element dataMap = upgradeUnit.getDocument().getDocumentElement();
NodeList propertyNodes;
diff --git
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V12.java
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V12.java
index 1eccb0a10..d5c56f183 100644
---
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V12.java
+++
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V12.java
@@ -62,6 +62,7 @@ public class UpgradeHandler_V12 implements UpgradeHandler {
updateDataMapSchemaAndVersion(upgradeUnit);
updateExtensionSchema(upgradeUnit, CGEN);
updateExtensionSchema(upgradeUnit, DB_IMPORT);
+ updateInfoSchema(upgradeUnit);
}
private void removeGraphIncludes(UpgradeUnit upgradeUnit) {
diff --git
a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V12Test.java
b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V12Test.java
index c755f706c..a2394069e 100644
---
a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V12Test.java
+++
b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V12Test.java
@@ -113,6 +113,18 @@ public class UpgradeHandler_V12Test extends
BaseUpgradeHandlerTest {
assertEquals(1, dbImport.getLength());
assertEquals("http://cayenne.apache.org/schema/12/dbimport",
((Element) dbImport.item(0)).getAttribute("xmlns"));
+
+ NodeList properties = (NodeList)
xpath.evaluate("//*[local-name()='property']",
+ document, XPathConstants.NODESET);
+ int infoComments = 0;
+ for (int i = 0; i < properties.getLength(); i++) {
+ Element property = (Element) properties.item(i);
+ if (property.hasAttribute("xmlns:info")) {
+ infoComments++;
+ assertEquals("http://cayenne.apache.org/schema/12/info",
property.getAttribute("xmlns:info"));
+ }
+ }
+ assertEquals(1, infoComments, "info:property comment must be preserved
and namespace-bumped");
}
@Test
diff --git
a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v12/map1.map.xml
b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v12/map1.map.xml
index c34c87c39..368754da1 100644
---
a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v12/map1.map.xml
+++
b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v12/map1.map.xml
@@ -6,6 +6,7 @@
<property name="defaultPackage" value="org.apache.cayenne.x"/>
<db-entity name="db_entity">
<db-attribute name="untitledAttr" type="INTEGER"
isPrimaryKey="true" isMandatory="true"/>
+ <info:property
xmlns:info="http://cayenne.apache.org/schema/11/info" name="comment"
value="mixed case column names"/>
</db-entity>
<db-entity name="db_entity1">
<db-attribute name="untitledAttr" type="INTEGER"
isPrimaryKey="true" isMandatory="true"/>