Repository: cayenne
Updated Branches:
  refs/heads/master c32288d51 -> ac00b99f6


Fix DataMapMerger case sensitivity issues
 - can miss relationship and attribute change if name in mixed upper- and 
lowercase


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

Branch: refs/heads/master
Commit: 65233b24df5bfeb8363edc41182f794c23394c32
Parents: c32288d
Author: Nikita Timofeev <stari...@gmail.com>
Authored: Fri Dec 16 14:30:46 2016 +0300
Committer: Nikita Timofeev <stari...@gmail.com>
Committed: Thu Dec 22 14:21:31 2016 +0300

----------------------------------------------------------------------
 .../cayenne/dbsync/merge/AbstractMerger.java    | 14 +++--
 .../cayenne/dbsync/merge/ChainMerger.java       |  6 +--
 .../cayenne/dbsync/merge/DataMapMerger.java     | 16 +++---
 .../cayenne/dbsync/merge/DbAttributeMerger.java |  6 +--
 .../cayenne/dbsync/merge/DbEntityMerger.java    | 13 +++--
 .../dbsync/merge/DbRelationshipMerger.java      | 19 ++++---
 .../dbsync/merge/MergerDictionaryDiff.java      | 31 +++++------
 .../cayenne/tools/DbImporterMojoTest.java       |  5 ++
 .../dbimport/testDbAttributeChange-pom.xml      | 45 ++++++++++++++++
 .../dbimport/testDbAttributeChange.map.xml      | 52 ++++++++++++++++++
 .../testDbAttributeChange.map.xml-result        | 55 ++++++++++++++++++++
 .../tools/dbimport/testDbAttributeChange.sql    | 42 +++++++++++++++
 12 files changed, 259 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AbstractMerger.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AbstractMerger.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AbstractMerger.java
index 4a6b2b7..dbef541 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AbstractMerger.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AbstractMerger.java
@@ -31,13 +31,10 @@ abstract class AbstractMerger<T, M> implements Merger<T> {
 
     private MergerDictionaryDiff<M> diff;
     private MergerTokenFactory tokenFactory;
-    DataMap originalDataMap;
-    DataMap importedDataMap;
+    private DbEntityDictionary originalDictionary;
 
-    AbstractMerger(MergerTokenFactory tokenFactory, DataMap original, DataMap 
imported) {
+    AbstractMerger(MergerTokenFactory tokenFactory) {
         this.tokenFactory = tokenFactory;
-        this.originalDataMap = original;
-        this.importedDataMap = imported;
     }
 
     @Override
@@ -89,4 +86,11 @@ abstract class AbstractMerger<T, M> implements Merger<T> {
 
     abstract Collection<MergerToken> createTokensForSame(MergerDiffPair<M> 
same);
 
+    public void setOriginalDictionary(DbEntityDictionary originalDictionary) {
+        this.originalDictionary = originalDictionary;
+    }
+
+    public DbEntityDictionary getOriginalDictionary() {
+        return originalDictionary;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ChainMerger.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ChainMerger.java 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ChainMerger.java
index e70c295..f732441 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ChainMerger.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ChainMerger.java
@@ -32,9 +32,8 @@ class ChainMerger<T, M> extends AbstractMerger<T, M> {
 
     private final AbstractMerger<?, T> parentMerger;
 
-    ChainMerger(MergerTokenFactory tokenFactory, DataMap original, DataMap 
imported,
-                AbstractMerger<T, M> merger, AbstractMerger<?, T> 
parentMerger) {
-        super(tokenFactory, original, imported);
+    ChainMerger(MergerTokenFactory tokenFactory, AbstractMerger<T, M> merger, 
AbstractMerger<?, T> parentMerger) {
+        super(tokenFactory);
         this.merger = merger;
         this.parentMerger = parentMerger;
     }
@@ -48,6 +47,7 @@ class ChainMerger<T, M> extends AbstractMerger<T, M> {
     MergerDictionaryDiff<M> createDiff(T unused1, T unused2) {
         MergerDictionaryDiff<M> diff = new MergerDictionaryDiff<>();
         MergerDictionaryDiff<T> parentDiff = parentMerger.getDiff();
+        merger.setOriginalDictionary(parentMerger.getOriginalDictionary());
         for(MergerDiffPair<T> pair : parentDiff.getSame()) {
             diff.addAll(merger.createDiff(pair.getOriginal(), 
pair.getImported()));
         }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DataMapMerger.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DataMapMerger.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DataMapMerger.java
index 7b78321..80c9134 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DataMapMerger.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DataMapMerger.java
@@ -60,8 +60,8 @@ public class DataMapMerger implements Merger<DataMap> {
         prepare(original, importedFromDb);
 
         createDbEntityMerger(original, importedFromDb);
-        createRelationshipMerger(original, importedFromDb);
-        createAttributeMerger(original, importedFromDb);
+        createRelationshipMerger();
+        createAttributeMerger();
 
         return createTokens();
     }
@@ -84,19 +84,19 @@ public class DataMapMerger implements Merger<DataMap> {
         mergerList.add(dbEntityMerger);
     }
 
-    private void createAttributeMerger(DataMap original, DataMap imported) {
+    private void createAttributeMerger() {
         ChainMerger<DbEntity, DbAttribute> dbAttributeMerger = new 
ChainMerger<>(
-                tokenFactory, original, imported,
-                new DbAttributeMerger(tokenFactory, original, imported, 
valueForNull),
+                tokenFactory,
+                new DbAttributeMerger(tokenFactory, valueForNull),
                 dbEntityMerger
         );
         mergerList.add(dbAttributeMerger);
     }
 
-    private void createRelationshipMerger(DataMap original, DataMap imported) {
+    private void createRelationshipMerger() {
         ChainMerger<DbEntity, DbRelationship> dbRelationshipMerger = new 
ChainMerger<>(
-                tokenFactory, original, imported,
-                new DbRelationshipMerger(tokenFactory, original, imported, 
skipRelationshipsTokens),
+                tokenFactory,
+                new DbRelationshipMerger(tokenFactory, 
skipRelationshipsTokens),
                 dbEntityMerger
         );
         mergerList.add(dbRelationshipMerger);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
index 0ee74b3..8cdbd16 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
@@ -36,8 +36,8 @@ class DbAttributeMerger extends AbstractMerger<DbEntity, 
DbAttribute> {
 
     private final ValueForNullProvider valueForNull;
 
-    DbAttributeMerger(MergerTokenFactory tokenFactory, DataMap original, 
DataMap imported, ValueForNullProvider valueForNull) {
-        super(tokenFactory, original, imported);
+    DbAttributeMerger(MergerTokenFactory tokenFactory, ValueForNullProvider 
valueForNull) {
+        super(tokenFactory);
         this.valueForNull = valueForNull;
     }
 
@@ -76,7 +76,7 @@ class DbAttributeMerger extends AbstractMerger<DbEntity, 
DbAttribute> {
      */
     @Override
     Collection<MergerToken> createTokensForMissingOriginal(DbAttribute 
imported) {
-        DbEntity originalDbEntity = 
originalDataMap.getDbEntity(imported.getEntity().getName());
+        DbEntity originalDbEntity = 
getOriginalDictionary().getByName(imported.getEntity().getName().toUpperCase());
         return 
Collections.singleton(getTokenFactory().createDropColumnToDb(originalDbEntity, 
imported));
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbEntityMerger.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbEntityMerger.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbEntityMerger.java
index 9f7a7c6..84d7b75 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbEntityMerger.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbEntityMerger.java
@@ -40,12 +40,16 @@ class DbEntityMerger extends AbstractMerger<DataMap, 
DbEntity> {
 
     private final FiltersConfig filtersConfig;
     private final boolean skipPKTokens;
+    private DataMap originalDataMap;
+    private DataMap importedDataMap;
 
     DbEntityMerger(MergerTokenFactory tokenFactory, DataMap original, DataMap 
imported,
                    FiltersConfig filtersConfig, boolean skipPKTokens) {
-        super(tokenFactory, original, imported);
+        super(tokenFactory);
         this.filtersConfig = filtersConfig;
         this.skipPKTokens = skipPKTokens;
+        originalDataMap = original;
+        importedDataMap = imported;
     }
 
     @Override
@@ -55,10 +59,13 @@ class DbEntityMerger extends AbstractMerger<DataMap, 
DbEntity> {
 
     @Override
     MergerDictionaryDiff<DbEntity> createDiff(DataMap original, DataMap 
imported) {
-        return new MergerDictionaryDiff.Builder<DbEntity>()
-                .originalDictionary(new DbEntityDictionary(original, 
filtersConfig))
+        DbEntityDictionary dictionary = new DbEntityDictionary(original, 
filtersConfig);
+        MergerDictionaryDiff<DbEntity> diff = new 
MergerDictionaryDiff.Builder<DbEntity>()
+                .originalDictionary(dictionary)
                 .importedDictionary(new DbEntityDictionary(imported, null))
                 .build();
+        setOriginalDictionary(dictionary);
+        return diff;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbRelationshipMerger.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbRelationshipMerger.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbRelationshipMerger.java
index 9bac4bb..46b90a5 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbRelationshipMerger.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbRelationshipMerger.java
@@ -39,9 +39,8 @@ public class DbRelationshipMerger extends 
AbstractMerger<DbEntity, DbRelationshi
 
     private final boolean skipRelationshipsTokens;
 
-    DbRelationshipMerger(MergerTokenFactory tokenFactory,
-                         DataMap original, DataMap imported, boolean 
skipRelationshipsTokens) {
-        super(tokenFactory, original, imported);
+    DbRelationshipMerger(MergerTokenFactory tokenFactory, boolean 
skipRelationshipsTokens) {
+        super(tokenFactory);
         this.skipRelationshipsTokens = skipRelationshipsTokens;
     }
 
@@ -53,8 +52,12 @@ public class DbRelationshipMerger extends 
AbstractMerger<DbEntity, DbRelationshi
                 .build();
     }
 
-    private DbEntity getOriginalDbEntity(DbRelationship relationship) {
-        return 
originalDataMap.getDbEntity(relationship.getSourceEntity().getName());
+    private DbEntity getOriginalSourceDbEntity(DbRelationship relationship) {
+        return 
getOriginalDictionary().getByName(relationship.getSourceEntity().getName().toUpperCase());
+    }
+
+    private DbEntity getOriginalTargetDbEntity(DbRelationship relationship) {
+        return 
getOriginalDictionary().getByName(relationship.getTargetEntityName().toUpperCase());
     }
 
     /**
@@ -63,8 +66,8 @@ public class DbRelationshipMerger extends 
AbstractMerger<DbEntity, DbRelationshi
      */
     @Override
     Collection<MergerToken> createTokensForMissingOriginal(DbRelationship 
imported) {
-        DbEntity originalDbEntity = getOriginalDbEntity(imported);
-        DbEntity targetEntity = 
originalDataMap.getDbEntity(imported.getTargetEntityName());
+        DbEntity originalDbEntity = getOriginalSourceDbEntity(imported);
+        DbEntity targetEntity = getOriginalTargetDbEntity(imported);
 
         if (targetEntity == null) {
             return null;
@@ -98,7 +101,7 @@ public class DbRelationshipMerger extends 
AbstractMerger<DbEntity, DbRelationshi
         if(skipRelationshipsTokens) {
             return null;
         }
-        DbEntity originalDbEntity = getOriginalDbEntity(original);
+        DbEntity originalDbEntity = getOriginalSourceDbEntity(original);
         MergerToken token = 
getTokenFactory().createAddRelationshipToDb(originalDbEntity, original);
         return Collections.singleton(token);
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerDictionaryDiff.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerDictionaryDiff.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerDictionaryDiff.java
index 29991cb..180b0a7 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerDictionaryDiff.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerDictionaryDiff.java
@@ -19,9 +19,11 @@
 
 package org.apache.cayenne.dbsync.merge;
 
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 class MergerDictionaryDiff<T> {
 
@@ -48,6 +50,7 @@ class MergerDictionaryDiff<T> {
         private MergerDictionaryDiff<T> diff;
         private MergerDictionary<T> originalDictionary;
         private MergerDictionary<T> importedDictionary;
+        private Set<String> sameNames = new HashSet<>();
 
         Builder() {
             diff = new MergerDictionaryDiff<>();
@@ -79,7 +82,6 @@ class MergerDictionaryDiff<T> {
 
         private List<MergerDiffPair<T>> buildSame() {
             List<MergerDiffPair<T>> sameEntities = new LinkedList<>();
-            List<String> sameNames = new LinkedList<>();
             for(Map.Entry<String, T> entry : 
originalDictionary.getDictionary().entrySet()) {
                 String name = entry.getKey();
                 T original = entry.getValue();
@@ -91,27 +93,26 @@ class MergerDictionaryDiff<T> {
                 }
             }
 
-            // clean up found names
-            for(String name : sameNames) {
-                originalDictionary.remove(name);
-                importedDictionary.remove(name);
-            }
-
             return sameEntities;
         }
 
         private List<MergerDiffPair<T>> buildMissing() {
             List<MergerDiffPair<T>> missingEntities = new LinkedList<>();
-            for(T original : originalDictionary.getDictionary().values()) {
-                MergerDiffPair<T> pair = new MergerDiffPair<>(original, null);
-                missingEntities.add(pair);
-            }
-            for(T imported : importedDictionary.getDictionary().values()) {
-                MergerDiffPair<T> pair = new MergerDiffPair<>(null, imported);
+            addMissingFromDictionary(missingEntities, originalDictionary, 
true);
+            addMissingFromDictionary(missingEntities, importedDictionary, 
false);
+            return missingEntities;
+        }
+
+        private void addMissingFromDictionary(List<MergerDiffPair<T>> 
missingEntities, MergerDictionary<T> dictionary, boolean isOriginal) {
+            for(Map.Entry<String, T> entry : 
dictionary.getDictionary().entrySet()) {
+                if(sameNames.contains(entry.getKey())) {
+                    continue;
+                }
+                MergerDiffPair<T> pair = new MergerDiffPair<>(
+                        isOriginal ? entry.getValue() : null,
+                        isOriginal ? null : entry.getValue());
                 missingEntities.add(pair);
             }
-            return missingEntities;
         }
     }
-
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
----------------------------------------------------------------------
diff --git 
a/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
 
b/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
index b9dbcb2..f8ca8f3 100644
--- 
a/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
+++ 
b/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
@@ -202,6 +202,11 @@ public class DbImporterMojoTest extends 
AbstractMojoTestCase {
         test("testCustomObjectLayerSettings");
     }
 
+    @Test
+    public void testDbAttributeChange() throws Exception {
+        test("testDbAttributeChange");
+    }
+
        @Test
        public void testForceDataMapSchema() throws Exception {
                test("testForceDataMapSchema");

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange-pom.xml
----------------------------------------------------------------------
diff --git 
a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange-pom.xml
 
b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange-pom.xml
new file mode 100644
index 0000000..0ae2de3
--- /dev/null
+++ 
b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange-pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~   Licensed to the Apache Software Foundation (ASF) under one
+  ~  or more contributor license agreements.  See the NOTICE file
+  ~  distributed with this work for additional information
+  ~  regarding copyright ownership.  The ASF licenses this file
+  ~  to you under the Apache License, Version 2.0 (the
+  ~  "License"); you may not use this file except in compliance
+  ~  with the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~  Unless required by applicable law or agreed to in writing,
+  ~  software distributed under the License is distributed on an
+  ~  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~  KIND, either express or implied.  See the License for the
+  ~  specific language governing permissions and limitations
+  ~  under the License.
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+       http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
+    <name>DbImporterMojo Test1</name>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-cayenne-plugin</artifactId>
+                <configuration>
+                    
<map>target/test-classes/org/apache/cayenne/tools/dbimport/testDbAttributeChange.map.xml</map>
+                    <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+                    <url>jdbc:derby:memory:DbImporterMojoTest;create=true</url>
+
+                    <reverseEngineering>
+                        <schema>
+                            <name>SCHEMA_01</name>
+                        </schema>
+                    </reverseEngineering>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.map.xml
----------------------------------------------------------------------
diff --git 
a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.map.xml
 
b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.map.xml
new file mode 100644
index 0000000..dc09869
--- /dev/null
+++ 
b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.map.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~   Licensed to the Apache Software Foundation (ASF) under one
+  ~  or more contributor license agreements.  See the NOTICE file
+  ~  distributed with this work for additional information
+  ~  regarding copyright ownership.  The ASF licenses this file
+  ~  to you under the Apache License, Version 2.0 (the
+  ~  "License"); you may not use this file except in compliance
+  ~  with the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~  Unless required by applicable law or agreed to in writing,
+  ~  software distributed under the License is distributed on an
+  ~  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~  KIND, either express or implied.  See the License for the
+  ~  specific language governing permissions and limitations
+  ~  under the License.
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<data-map xmlns="http://cayenne.apache.org/schema/9/modelMap";
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+          xsi:schemaLocation="http://cayenne.apache.org/schema/9/modelMap 
http://cayenne.apache.org/schema/9/modelMap.xsd";
+          project-version="9">
+
+    <db-entity name="parent" schema="SCHEMA_01">
+        <db-attribute name="COL2" type="CHAR" length="25"/>
+        <db-attribute name="COL3" type="DECIMAL" length="10" scale="2"/>
+        <db-attribute name="COL4" type="VARCHAR" length="25"/>
+        <db-attribute name="COL5" type="DATE" length="10"/>
+        <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true" length="10"/>
+    </db-entity>
+    <db-entity name="CHILD" schema="SCHEMA_01">
+        <db-attribute name="col1" type="INTEGER"/>
+        <db-attribute name="col2" type="DECIMAL" length="10" scale="2"/>
+        <db-attribute name="COL4" type="VARCHAR" length="25"/>
+        <db-attribute name="COL5" type="DATE" length="10"/>
+        <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true" length="10"/>
+        <db-attribute name="PARENT_ID" type="CHAR" length="25"/>
+    </db-entity>
+    <obj-entity name="Child" className="Child" dbEntityName="CHILD">
+        <obj-attribute name="col3" type="java.math.BigDecimal" 
db-attribute-path="COL3"/>
+        <obj-attribute name="col4" type="java.lang.String" 
db-attribute-path="COL4"/>
+        <obj-attribute name="col5" type="java.util.Date" 
db-attribute-path="COL5"/>
+        <obj-attribute name="parentId" type="java.lang.String" 
db-attribute-path="PARENT_ID"/>
+    </obj-entity>
+    <obj-entity name="Parent" className="Parent" dbEntityName="parent">
+        <obj-attribute name="col2" type="java.lang.String" 
db-attribute-path="COL2"/>
+        <obj-attribute name="col3" type="java.math.BigDecimal" 
db-attribute-path="COL3"/>
+        <obj-attribute name="col4" type="java.lang.String" 
db-attribute-path="COL4"/>
+        <obj-attribute name="col5" type="java.util.Date" 
db-attribute-path="COL5"/>
+    </obj-entity>
+</data-map>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.map.xml-result
----------------------------------------------------------------------
diff --git 
a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.map.xml-result
 
b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.map.xml-result
new file mode 100644
index 0000000..441b533
--- /dev/null
+++ 
b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.map.xml-result
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~   Licensed to the Apache Software Foundation (ASF) under one
+  ~  or more contributor license agreements.  See the NOTICE file
+  ~  distributed with this work for additional information
+  ~  regarding copyright ownership.  The ASF licenses this file
+  ~  to you under the Apache License, Version 2.0 (the
+  ~  "License"); you may not use this file except in compliance
+  ~  with the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~  Unless required by applicable law or agreed to in writing,
+  ~  software distributed under the License is distributed on an
+  ~  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~  KIND, either express or implied.  See the License for the
+  ~  specific language governing permissions and limitations
+  ~  under the License.
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<data-map xmlns="http://cayenne.apache.org/schema/9/modelMap";
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+          xsi:schemaLocation="http://cayenne.apache.org/schema/9/modelMap 
http://cayenne.apache.org/schema/9/modelMap.xsd";
+          project-version="9">
+
+    <db-entity name="CHILD" schema="SCHEMA_01">
+        <db-attribute name="COL3" type="DECIMAL" length="5" scale="1"/>
+        <db-attribute name="COL4" type="VARCHAR" length="25"/>
+        <db-attribute name="COL5" type="DATE" length="10"/>
+        <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true" length="10"/>
+        <db-attribute name="PARENT_ID" type="CHAR" length="25"/>
+        <db-attribute name="col1" type="DOUBLE" length="52"/>
+        <db-attribute name="col2" type="CHAR" length="25"/>
+    </db-entity>
+    <db-entity name="parent" schema="SCHEMA_01">
+        <db-attribute name="COL2" type="CHAR" length="20"/>
+        <db-attribute name="COL3" type="DECIMAL" length="10" scale="2"/>
+        <db-attribute name="COL4" type="VARCHAR" length="50"/>
+        <db-attribute name="COL5" type="TIME" length="8"/>
+        <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true" length="10"/>
+    </db-entity>
+    <obj-entity name="Child" className="Child" dbEntityName="CHILD">
+        <obj-attribute name="col3" type="java.math.BigDecimal" 
db-attribute-path="COL3"/>
+        <obj-attribute name="col4" type="java.lang.String" 
db-attribute-path="COL4"/>
+        <obj-attribute name="col5" type="java.util.Date" 
db-attribute-path="COL5"/>
+        <obj-attribute name="parentId" type="java.lang.String" 
db-attribute-path="PARENT_ID"/>
+    </obj-entity>
+    <obj-entity name="Parent" className="Parent" dbEntityName="parent">
+        <obj-attribute name="col2" type="java.lang.String" 
db-attribute-path="COL2"/>
+        <obj-attribute name="col3" type="java.math.BigDecimal" 
db-attribute-path="COL3"/>
+        <obj-attribute name="col4" type="java.lang.String" 
db-attribute-path="COL4"/>
+        <obj-attribute name="col5" type="java.util.Date" 
db-attribute-path="COL5"/>
+    </obj-entity>
+
+</data-map>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65233b24/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.sql
----------------------------------------------------------------------
diff --git 
a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.sql
 
b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.sql
new file mode 100644
index 0000000..6a2800e
--- /dev/null
+++ 
b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDbAttributeChange.sql
@@ -0,0 +1,42 @@
+--  Licensed to the Apache Software Foundation (ASF) under one
+--  or more contributor license agreements.  See the NOTICE file
+--  distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+--  to you under the Apache License, Version 2.0 (the
+--  "License"); you may not use this file except in compliance
+--  with the License.  You may obtain a copy of the License at
+--
+--    http://www.apache.org/licenses/LICENSE-2.0
+--
+--  Unless required by applicable law or agreed to in writing,
+--  software distributed under the License is distributed on an
+--  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+--  KIND, either express or implied.  See the License for the
+--  specific language governing permissions and limitations
+--  under the License.
+
+CREATE SCHEMA schema_01;
+SET SCHEMA schema_01;
+
+CREATE TABLE schema_01.parent (
+  id INTEGER NOT NULL,
+  COL2 CHAR(20),
+  COL3 DECIMAL(10,2),
+  COL4 VARCHAR(50),
+  COL5 TIME,
+
+  PRIMARY KEY (id),
+  UNIQUE (COL3)
+);
+
+CREATE TABLE schema_01.child (
+  id INTEGER NOT NULL,
+  Parent_id CHAR(25),
+  COL1 FLOAT,
+  COL2 CHAR(25),
+  COL3 DECIMAL(5,1),
+  COL4 VARCHAR(25),
+  COL5 DATE,
+
+  PRIMARY KEY (id)
+);
\ No newline at end of file

Reply via email to