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:53 UTC
[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
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