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