You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/12/22 13:39:52 UTC
[1/4] cayenne git commit: Fix DataMapMerger case sensitivity issues -
can miss relationship and attribute change if name in mixed upper- and
lowercase
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 <st...@gmail.com>
Authored: Fri Dec 16 14:30:46 2016 +0300
Committer: Nikita Timofeev <st...@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
[3/4] cayenne git commit: Merge branch '168'
Posted by sk...@apache.org.
Merge branch '168'
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/b2460d6c
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/b2460d6c
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/b2460d6c
Branch: refs/heads/master
Commit: b2460d6cb6f98fdfe6adf7b8b8fb819595d2a505
Parents: c32288d 4d14b71
Author: Savva Kolbachev <s....@gmail.com>
Authored: Thu Dec 22 16:18:05 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Thu Dec 22 16:18:05 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 | 11 ++-
.../cayenne/dbsync/merge/DbEntityMerger.java | 13 +++-
.../dbsync/merge/DbRelationshipMerger.java | 19 ++---
.../dbsync/merge/MergerDictionaryDiff.java | 31 ++++----
.../merge/token/db/SetColumnTypeToDb.java | 8 +++
.../dbsync/reverse/dbload/DbLoadDataStore.java | 8 +++
.../cayenne/dbsync/merge/DataMapMergerTest.java | 74 ++++++++++++++++++++
.../apache/cayenne/dbsync/merge/MergeCase.java | 43 +++++++++++-
.../merge/builders/DbAttributeBuilder.java | 5 ++
.../dbsync/reverse/dbload/BaseLoaderIT.java | 10 ++-
.../dbsync/reverse/dbload/DbLoaderIT.java | 17 +++--
.../reverse/dbload/ExportedKeyLoaderIT.java | 19 +++--
.../reverse/dbload/PrimaryKeyLoaderIT.java | 8 +--
.../cayenne/unit/OracleUnitDbAdapter.java | 10 +++
.../cayenne/unit/PostgresUnitDbAdapter.java | 4 ++
.../cayenne/unit/SQLServerUnitDbAdapter.java | 5 ++
.../org/apache/cayenne/unit/UnitDbAdapter.java | 12 ++++
.../cayenne/tools/DbImporterMojoTest.java | 5 ++
.../dbimport/testDbAttributeChange-pom.xml | 45 ++++++++++++
.../dbimport/testDbAttributeChange.map.xml | 62 ++++++++++++++++
.../testDbAttributeChange.map.xml-result | 62 ++++++++++++++++
.../tools/dbimport/testDbAttributeChange.sql | 46 ++++++++++++
25 files changed, 488 insertions(+), 65 deletions(-)
----------------------------------------------------------------------
[2/4] cayenne git commit: Fix DataMapMerger case sensitivity issues -
can miss relationship and attribute change if name in mixed upper- and
lowercase - fix test failures caused by lower- and uppercase names -
additional tests - fix test failures for
Posted by sk...@apache.org.
Fix DataMapMerger case sensitivity issues
- can miss relationship and attribute change if name in mixed upper- and lowercase
- fix test failures caused by lower- and uppercase names
- additional tests
- fix test failures for Postgres (and partially for Oracle and SQLServer but tests needed)
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/4d14b718
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/4d14b718
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/4d14b718
Branch: refs/heads/master
Commit: 4d14b7182dad5389c80721c64fefd5895d5290b5
Parents: 65233b2
Author: Nikita Timofeev <st...@gmail.com>
Authored: Thu Dec 22 15:09:35 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Thu Dec 22 15:09:35 2016 +0300
----------------------------------------------------------------------
.../cayenne/dbsync/merge/DbAttributeMerger.java | 5 ++
.../merge/token/db/SetColumnTypeToDb.java | 8 +++
.../dbsync/reverse/dbload/DbLoadDataStore.java | 8 +++
.../cayenne/dbsync/merge/DataMapMergerTest.java | 74 ++++++++++++++++++++
.../apache/cayenne/dbsync/merge/MergeCase.java | 43 +++++++++++-
.../merge/builders/DbAttributeBuilder.java | 5 ++
.../dbsync/reverse/dbload/BaseLoaderIT.java | 10 ++-
.../dbsync/reverse/dbload/DbLoaderIT.java | 17 +++--
.../reverse/dbload/ExportedKeyLoaderIT.java | 19 +++--
.../reverse/dbload/PrimaryKeyLoaderIT.java | 8 +--
.../cayenne/unit/OracleUnitDbAdapter.java | 10 +++
.../cayenne/unit/PostgresUnitDbAdapter.java | 4 ++
.../cayenne/unit/SQLServerUnitDbAdapter.java | 5 ++
.../org/apache/cayenne/unit/UnitDbAdapter.java | 12 ++++
.../dbimport/testDbAttributeChange.map.xml | 12 +++-
.../testDbAttributeChange.map.xml-result | 11 ++-
.../tools/dbimport/testDbAttributeChange.sql | 8 ++-
17 files changed, 234 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/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 8cdbd16..fcf859d 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
@@ -122,6 +122,11 @@ class DbAttributeMerger extends AbstractMerger<DbEntity, DbAttribute> {
*/
private boolean needUpdateType(DbAttribute original, DbAttribute imported) {
if(original.getType() != imported.getType()) {
+ // Decimal and NUMERIC types are effectively equal so skip their interchange
+ if( (original.getType() == Types.DECIMAL || original.getType() == Types.NUMERIC) &&
+ (imported.getType() == Types.DECIMAL || imported.getType() == Types.NUMERIC)) {
+ return false;
+ }
return true;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
index 331d550..f03e929 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
@@ -110,4 +110,12 @@ public class SetColumnTypeToDb extends AbstractToDbToken.Entity {
public MergerToken createReverse(MergerTokenFactory factory) {
return factory.createSetColumnTypeToModel(getEntity(), columnNew, columnOriginal);
}
+
+ public DbAttribute getColumnNew() {
+ return columnNew;
+ }
+
+ public DbAttribute getColumnOriginal() {
+ return columnOriginal;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoadDataStore.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoadDataStore.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoadDataStore.java
index ec06163..c1a6e4c 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoadDataStore.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoadDataStore.java
@@ -43,16 +43,24 @@ public class DbLoadDataStore extends DataMap {
private Map<String, Set<ExportedKey>> exportedKeys = new HashMap<>();
+ private Map<String, DbEntity> upperCaseNames = new HashMap<>();
+
DbLoadDataStore() {
super("__generated_by_dbloader__");
}
@Override
+ public DbEntity getDbEntity(String dbEntityName) {
+ return upperCaseNames.get(dbEntityName.toUpperCase());
+ }
+
+ @Override
public void addDbEntity(DbEntity entity) {
if(!(entity instanceof DetectedDbEntity)) {
throw new IllegalArgumentException("Only DetectedDbEntity can be inserted in this map");
}
super.addDbEntity(entity);
+ upperCaseNames.put(entity.getName().toUpperCase(), entity);
}
DbEntity addDbEntitySafe(DbEntity entity) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
index 5196fa9..aced949 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
@@ -315,6 +315,64 @@ public class DataMapMergerTest {
}
@Test
+ public void testTableNameUppercaseRelationship() throws Exception {
+ DataMap existing = dataMap().with(
+ dbEntity("TABLE1").attributes(
+ dbAttr("attr01").typeInt(),
+ dbAttr("attr02").typeInt()),
+
+ dbEntity("table2").attributes(
+ dbAttr("attr01").typeInt().primaryKey(),
+ dbAttr("attr02").typeInt().primaryKey(),
+ dbAttr("attr03").typeInt().primaryKey())
+ ).join("rel", "TABLE1.attr01", "table2.attr01").build();
+
+ DataMap db = dataMap().with(
+ dbEntity("table1").attributes(
+ dbAttr("attr01").typeInt(),
+ dbAttr("attr02").typeInt()),
+
+ dbEntity("table2").attributes(
+ dbAttr("attr01").typeInt().primaryKey(),
+ dbAttr("attr02").typeInt().primaryKey(),
+ dbAttr("attr03").typeInt().primaryKey())
+ ).join("rel", "table1.attr01", "table2.attr01").build();
+
+
+ List<MergerToken> tokens = dbMerger().createMergeTokens(existing, db);
+ assertEquals(0, tokens.size());
+ }
+
+ @Test
+ public void testAttributeNameUppercaseRelationship() throws Exception {
+ DataMap existing = dataMap().with(
+ dbEntity("table1").attributes(
+ dbAttr("ATTR01").typeInt(),
+ dbAttr("attr02").typeInt()),
+
+ dbEntity("table2").attributes(
+ dbAttr("attr01").typeInt().primaryKey(),
+ dbAttr("attr02").typeInt().primaryKey(),
+ dbAttr("attr03").typeInt().primaryKey())
+ ).join("rel", "table1.ATTR01", "table2.attr01").build();
+
+ DataMap db = dataMap().with(
+ dbEntity("table1").attributes(
+ dbAttr("attr01").typeInt(),
+ dbAttr("attr02").typeInt()),
+
+ dbEntity("table2").attributes(
+ dbAttr("attr01").typeInt().primaryKey(),
+ dbAttr("attr02").typeInt().primaryKey(),
+ dbAttr("attr03").typeInt().primaryKey())
+ ).join("rel", "table1.attr01", "table2.attr01").build();
+
+
+ List<MergerToken> tokens = dbMerger().createMergeTokens(existing, db);
+ assertEquals(0, tokens.size());
+ }
+
+ @Test
public void testRemoveRelationship() throws Exception {
DataMap existing = dataMap().with(
dbEntity("table1").attributes(
@@ -371,6 +429,22 @@ public class DataMapMergerTest {
}
@Test
+ public void testChangeGeneratedStatus() {
+ DataMap existing = dataMap().with(
+ dbEntity("table1").attributes(
+ dbAttr("attr01").typeVarchar(10)
+ )).build();
+
+ DataMap db = dataMap().with(
+ dbEntity("table1").attributes(
+ dbAttr("attr01").typeInt().generated()
+ )).build();
+
+ List<MergerToken> tokens = dbMerger().createMergeTokens(existing, db);
+ assertEquals(2, tokens.size());
+ }
+
+ @Test
public void testNoChanges() throws Exception {
DataMap dataMap1 = dataMap().with(
dbEntity("table1").attributes(
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
index 5c6053e..ef262ee 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
@@ -22,11 +22,13 @@ import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.dbsync.merge.context.MergerContext;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
import org.apache.cayenne.dbsync.merge.token.db.AbstractToDbToken;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
import org.apache.cayenne.dbsync.naming.NoStemStemmer;
import org.apache.cayenne.dbsync.reverse.dbload.DbLoader;
@@ -128,7 +130,46 @@ public abstract class MergeCase extends DbSyncCase {
}
List<MergerToken> tokens = merger().filters(filters).build().createMergeTokens(map, dbImport);
- return filterEmpty(tokens);
+ return filter(tokens);
+ }
+
+ private List<MergerToken> filter(List<MergerToken> tokens) {
+ return filterEmptyTypeChange(filterEmpty(tokens));
+ }
+
+ /**
+ * Filter out tokens for db attribute type change when types is same for specific DB
+ */
+ private List<MergerToken> filterEmptyTypeChange(List<MergerToken> tokens) {
+ List<MergerToken> tokensOut = new ArrayList<>();
+ for(MergerToken token : tokens) {
+ if(!(token instanceof SetColumnTypeToDb)) {
+ tokensOut.add(token);
+ continue;
+ }
+ SetColumnTypeToDb setColumnToDb = (SetColumnTypeToDb)token;
+ int toType = setColumnToDb.getColumnNew().getType();
+ int fromType = setColumnToDb.getColumnOriginal().getType();
+ // filter out conversions between date/time types
+ if(accessStackAdapter.onlyGenericDateType()) {
+ if(isDateTimeType(toType) && isDateTimeType(fromType)){
+ continue;
+ }
+ }
+ // filter out conversions between numeric types
+ if(accessStackAdapter.onlyGenericNumberType()) {
+ if(TypesMapping.isNumeric(toType) && TypesMapping.isNumeric(fromType)) {
+ continue;
+ }
+ }
+ tokensOut.add(token);
+ }
+
+ return tokensOut;
+ }
+
+ private static boolean isDateTimeType(int type) {
+ return type == Types.DATE || type == Types.TIME || type == Types.TIMESTAMP;
}
private List<MergerToken> filterEmpty(List<MergerToken> tokens) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DbAttributeBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DbAttributeBuilder.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DbAttributeBuilder.java
index 2d600f3..99739da 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DbAttributeBuilder.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DbAttributeBuilder.java
@@ -94,6 +94,11 @@ public class DbAttributeBuilder extends DefaultBuilder<DbAttribute> {
return this;
}
+ public DbAttributeBuilder generated() {
+ obj.setGenerated(true);
+ return this;
+ }
+
@Override
public DbAttribute build() {
if (isEmpty(obj.getName())) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/BaseLoaderIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/BaseLoaderIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/BaseLoaderIT.java
index 1edc938..a3cf117 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/BaseLoaderIT.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/BaseLoaderIT.java
@@ -72,7 +72,7 @@ public class BaseLoaderIT extends ServerCase {
void createDbEntities() {
String[] names = {"ARTIST", "BLOB_TEST", "CLOB_TEST", "GENERATED_COLUMN_TEST"};
for(String name : names) {
- createEntity(name);
+ createEntity(nameForDb(name));
}
}
@@ -88,4 +88,12 @@ public class BaseLoaderIT extends ServerCase {
}
return de;
}
+
+ String nameForDb(String name) {
+ if(accessStackAdapter.isLowerCaseNames()) {
+ return name.toLowerCase();
+ } else {
+ return name.toUpperCase();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java
index d2e87a5..bc8365c 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java
@@ -82,16 +82,16 @@ public class DbLoaderIT extends ServerCase {
assertNotNull(artist);
// DbAttribute
- DbAttribute id = artist.getAttribute("ARTIST_ID");
+ DbAttribute id = getDbAttribute(artist, "ARTIST_ID");
assertNotNull(id);
assertTrue(id.isMandatory());
assertTrue(id.isPrimaryKey());
- DbAttribute name = artist.getAttribute("ARTIST_NAME");
+ DbAttribute name = getDbAttribute(artist,"ARTIST_NAME");
assertNotNull(name);
assertTrue(name.isMandatory());
- DbAttribute date = artist.getAttribute("DATE_OF_BIRTH");
+ DbAttribute date = getDbAttribute(artist,"DATE_OF_BIRTH");
assertNotNull(date);
assertFalse(date.isMandatory());
@@ -100,11 +100,20 @@ public class DbLoaderIT extends ServerCase {
DbRelationship exhibits = artist.getRelationship("artistExhibits");
assertNotNull(exhibits);
- assertEquals("ARTIST_EXHIBIT", exhibits.getTargetEntityName());
+ assertEquals("ARTIST_EXHIBIT", exhibits.getTargetEntityName().toUpperCase());
DbEntity target = exhibits.getTargetEntity();
assertNotNull(target);
}
+ private DbAttribute getDbAttribute(DbEntity ent, String name) {
+ DbAttribute da = ent.getAttribute(name);
+ // sometimes table names get converted to lowercase
+ if (da == null) {
+ da = ent.getAttribute(name.toLowerCase());
+ }
+
+ return da;
+ }
@Before
public void before() throws Exception {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoaderIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoaderIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoaderIT.java
index 9e74d8c..73ba353 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoaderIT.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoaderIT.java
@@ -38,9 +38,9 @@ public class ExportedKeyLoaderIT extends BaseLoaderIT {
return;
}
- createEntity("ARTIST");
- createEntity("GALLERY");
- createEntity("PAINTING");
+ createEntity(nameForDb("ARTIST"));
+ createEntity(nameForDb("GALLERY"));
+ createEntity(nameForDb("PAINTING"));
DbEntity artist = getDbEntity("ARTIST");
DbAttribute artistId = new DbAttribute("ARTIST_ID");
artist.addAttribute(artistId);
@@ -65,21 +65,20 @@ public class ExportedKeyLoaderIT extends BaseLoaderIT {
ExportedKey artistIdFk = findArtistExportedKey();
assertNotNull(artistIdFk);
- assertEquals("ARTIST", artistIdFk.getPk().getTable());
- assertEquals("ARTIST_ID", artistIdFk.getPk().getColumn());
+ assertEquals("ARTIST", artistIdFk.getPk().getTable().toUpperCase());
+ assertEquals("ARTIST_ID", artistIdFk.getPk().getColumn().toUpperCase());
- assertEquals("PAINTING", artistIdFk.getFk().getTable());
- assertEquals("ARTIST_ID", artistIdFk.getFk().getColumn());
+ assertEquals("PAINTING", artistIdFk.getFk().getTable().toUpperCase());
+ assertEquals("ARTIST_ID", artistIdFk.getFk().getColumn().toUpperCase());
}
- ExportedKey findArtistExportedKey() {
+ private ExportedKey findArtistExportedKey() {
for(Map.Entry<String, Set<ExportedKey>> entry : store.getExportedKeysEntrySet()) {
- if(entry.getKey().endsWith(".ARTIST_ID")) {
+ if(entry.getKey().toUpperCase().endsWith(".ARTIST_ID")) {
return entry.getValue().iterator().next();
}
}
return null;
}
-
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/PrimaryKeyLoaderIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/PrimaryKeyLoaderIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/PrimaryKeyLoaderIT.java
index 56be301..ae56185 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/PrimaryKeyLoaderIT.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/PrimaryKeyLoaderIT.java
@@ -34,10 +34,10 @@ public class PrimaryKeyLoaderIT extends BaseLoaderIT {
@Test
public void testPrimaryKeyLoad() throws Exception {
createDbEntities();
- DbEntity artist = getDbEntity("ARTIST");
- DbAttribute artistId = new DbAttribute("ARTIST_ID");
- DbAttribute artistName = new DbAttribute("ARTIST_NAME");
- DbAttribute artistId1 = new DbAttribute("ARTIST_ID1");
+ DbEntity artist = getDbEntity(nameForDb("ARTIST"));
+ DbAttribute artistId = new DbAttribute(nameForDb("ARTIST_ID"));
+ DbAttribute artistName = new DbAttribute(nameForDb("ARTIST_NAME"));
+ DbAttribute artistId1 = new DbAttribute(nameForDb("ARTIST_ID1"));
artist.addAttribute(artistId);
artist.addAttribute(artistName);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-server/src/test/java/org/apache/cayenne/unit/OracleUnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/OracleUnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/OracleUnitDbAdapter.java
index f0ebb94..9cb93fb 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/OracleUnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/OracleUnitDbAdapter.java
@@ -120,4 +120,14 @@ public class OracleUnitDbAdapter extends UnitDbAdapter {
proc.setReturningValue(true);
}
}
+
+ @Override
+ public boolean onlyGenericDateType() {
+ return true;
+ }
+
+ @Override
+ public boolean onlyGenericNumberType() {
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-server/src/test/java/org/apache/cayenne/unit/PostgresUnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/PostgresUnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/PostgresUnitDbAdapter.java
index 4182054..1843bc2 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/PostgresUnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/PostgresUnitDbAdapter.java
@@ -62,6 +62,10 @@ public class PostgresUnitDbAdapter extends UnitDbAdapter {
}
}
+ public boolean isLowerCaseNames() {
+ return true;
+ }
+
@Override
public boolean supportsGeneratedKeysDrop() {
return true;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-server/src/test/java/org/apache/cayenne/unit/SQLServerUnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/SQLServerUnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/SQLServerUnitDbAdapter.java
index 5315d12..6c03130 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/SQLServerUnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/SQLServerUnitDbAdapter.java
@@ -63,6 +63,11 @@ public class SQLServerUnitDbAdapter extends SybaseUnitDbAdapter {
return true;
}
+ @Override
+ public boolean onlyGenericDateType() {
+ return true;
+ }
+
// The code below was used with SQLServer <= 2005 to turn of autogenerated
// keys.
// Modern SQLServer driver supports autogen keys just fine.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java
index 2bf63e0..445de16 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java
@@ -347,6 +347,18 @@ public class UnitDbAdapter {
return constraintMap;
}
+ public boolean isLowerCaseNames() {
+ return false;
+ }
+
+ public boolean onlyGenericNumberType() {
+ return false;
+ }
+
+ public boolean onlyGenericDateType() {
+ return false;
+ }
+
public boolean supportsNullBoolean() {
return true;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/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
index dc09869..759090a 100644
--- 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
@@ -35,7 +35,7 @@
<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="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"/>
@@ -49,4 +49,14 @@
<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>
+
+ <db-relationship name="parent" source="CHILD" target="parent" toMany="false">
+ <db-attribute-pair source="parent_id" target="ID"/>
+ </db-relationship>
+ <db-relationship name="children" source="parent" target="CHILD" toMany="true">
+ <db-attribute-pair source="ID" target="parent_id"/>
+ </db-relationship>
+
+ <obj-relationship name="parent" source="Child" target="Parent" deleteRule="Nullify" db-relationship-path="parent"/>
+ <obj-relationship name="children" source="Parent" target="Child" deleteRule="Deny" db-relationship-path="children"/>
</data-map>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/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
index 441b533..c53bde2 100644
--- 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
@@ -28,9 +28,9 @@
<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-attribute name="parent_id" type="INTEGER" length="10"/>
</db-entity>
<db-entity name="parent" schema="SCHEMA_01">
<db-attribute name="COL2" type="CHAR" length="20"/>
@@ -51,5 +51,12 @@
<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>
-
+ <db-relationship name="parent" source="CHILD" target="parent" toMany="false">
+ <db-attribute-pair source="parent_id" target="ID"/>
+ </db-relationship>
+ <db-relationship name="children" source="parent" target="CHILD" toMany="true">
+ <db-attribute-pair source="ID" target="parent_id"/>
+ </db-relationship>
+ <obj-relationship name="parent" source="Child" target="Parent" deleteRule="Nullify" db-relationship-path="parent"/>
+ <obj-relationship name="children" source="Parent" target="Child" deleteRule="Deny" db-relationship-path="children"/>
</data-map>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4d14b718/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
index 6a2800e..c93c802 100644
--- 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
@@ -31,7 +31,7 @@ CREATE TABLE schema_01.parent (
CREATE TABLE schema_01.child (
id INTEGER NOT NULL,
- Parent_id CHAR(25),
+ parent_id INTEGER,
COL1 FLOAT,
COL2 CHAR(25),
COL3 DECIMAL(5,1),
@@ -39,4 +39,8 @@ CREATE TABLE schema_01.child (
COL5 DATE,
PRIMARY KEY (id)
-);
\ No newline at end of file
+);
+
+ALTER TABLE schema_01.child
+ ADD FOREIGN KEY (parent_id)
+ REFERENCES schema_01.parent (id);
\ No newline at end of file
[4/4] cayenne git commit: enabling travis for postgres-docker profile
Posted by sk...@apache.org.
enabling travis for postgres-docker profile
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/ac00b99f
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/ac00b99f
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/ac00b99f
Branch: refs/heads/master
Commit: ac00b99f61af05613168419bb5a6a52a8e32456a
Parents: b2460d6
Author: Savva Kolbachev <s....@gmail.com>
Authored: Thu Dec 22 16:39:23 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Thu Dec 22 16:39:23 2016 +0300
----------------------------------------------------------------------
.travis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac00b99f/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 6a0de0b..8929e43 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -29,7 +29,7 @@ env:
- DB_PROFILE=h2
- DB_PROFILE=derby
- DB_PROFILE=mysql-docker
-# - DB_PROFILE=postgres-docker
+ - DB_PROFILE=postgres-docker
jdk:
- oraclejdk8