You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2014/12/15 07:31:23 UTC
cayenne git commit: add skip primary key param
Repository: cayenne
Updated Branches:
refs/heads/master 26e22a3fd -> 78558aaa4
add skip primary key param
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/78558aaa
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/78558aaa
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/78558aaa
Branch: refs/heads/master
Commit: 78558aaa4866006995b6f54c78026849fcace925
Parents: 26e22a3
Author: alexkolonitsky <Al...@gmail.com>
Authored: Fri Dec 12 21:36:59 2014 +0300
Committer: alexkolonitsky <Al...@gmail.com>
Committed: Fri Dec 12 21:36:59 2014 +0300
----------------------------------------------------------------------
.../org/apache/cayenne/access/DbLoader.java | 5 +-
.../access/loader/DbLoaderConfiguration.java | 25 +++-
.../java/org/apache/cayenne/merge/DbMerger.java | 78 ++++-------
.../apache/cayenne/merge/DbMergerConfig.java | 63 +++++++++
.../apache/cayenne/util/EntityMergeSupport.java | 2 +-
.../org/apache/cayenne/merge/DbMergerTest.java | 25 ++--
.../org/apache/cayenne/merge/MergeCase.java | 3 +-
.../apache/cayenne/tools/DbImporterTask.java | 4 +-
.../cayenne/tools/dbimport/DbImportAction.java | 4 +-
.../tools/dbimport/DbImportConfiguration.java | 13 ++
.../config/DefaultReverseEngineeringLoader.java | 1 +
.../dbimport/config/ReverseEngineering.java | 15 +-
.../DefaultReverseEngineeringLoaderTest.java | 12 ++
.../tools/build-skip-primary-key-loading.xml | 37 +++++
...reverseEngineering-skipPrimaryKeyLoading.xml | 23 ++++
.../apache/cayenne/tools/DbImporterMojo.java | 3 +-
.../tools/DbImporterMojoConfigurationTest.java | 5 +
.../cayenne/tools/DbImporterMojoTest.java | 137 +++++++++++--------
.../config/pom-skip-primary-key-loading.xml | 39 ++++++
.../dbimport/testSkipPrimaryKeyLoading-pom.xml | 43 ++++++
.../dbimport/testSkipPrimaryKeyLoading.map.xml | 35 +++++
.../testSkipPrimaryKeyLoading.map.xml-result | 41 ++++++
.../dbimport/testSkipPrimaryKeyLoading.sql | 30 ++++
.../testSkipRelationshipsLoading.map.xml | 55 ++++++++
.../testSkipRelationshipsLoading.map.xml-result | 67 +++++----
.../dbimport/testSkipRelationshipsLoading.sql | 16 ++-
26 files changed, 616 insertions(+), 165 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java b/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java
index 7acda33..8b3029e 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java
@@ -322,8 +322,9 @@ public class DbLoader {
loadDbAttributes(config.getFiltersConfig(), tablesMap.getKey(), tablesMap.getValue());
- // get primary keys for each table and store it in dbEntity
- getPrimaryKeyForTable(tablesMap.getValue());
+ if (!config.isSkipPrimaryKeyLoading()) {
+ getPrimaryKeyForTable(tablesMap.getValue());
+ }
}
return dbEntityList;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-server/src/main/java/org/apache/cayenne/access/loader/DbLoaderConfiguration.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/loader/DbLoaderConfiguration.java b/cayenne-server/src/main/java/org/apache/cayenne/access/loader/DbLoaderConfiguration.java
index 290da78..fb80d2d 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/loader/DbLoaderConfiguration.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/loader/DbLoaderConfiguration.java
@@ -40,8 +40,7 @@ public class DbLoaderConfiguration {
/*
// TODO: Andrus, 10/29/2005 - this type of filtering should be delegated to adapter
- */
-/* TODO by default should skip name.startsWith("BIN$") *//*
+ TODO by default should skip name.startsWith("BIN$")
private NameFilter tableFilter = NamePatternMatcher.build(null, null, "BIN$");
@@ -70,6 +69,8 @@ public class DbLoaderConfiguration {
private Boolean skipRelationshipsLoading;
+ private Boolean skipPrimaryKeyLoading;
+
private String[] tableTypes;
private FiltersConfig filtersConfig;
@@ -110,7 +111,7 @@ public class DbLoaderConfiguration {
this.filtersConfig = filtersConfig;
}
- public Boolean isSkipRelationshipsLoading() {
+ public boolean isSkipRelationshipsLoading() {
return skipRelationshipsLoading != null && skipRelationshipsLoading;
}
@@ -122,13 +123,29 @@ public class DbLoaderConfiguration {
this.skipRelationshipsLoading = skipRelationshipsLoading;
}
+ public void setSkipPrimaryKeyLoading(Boolean skipPrimaryKeyLoading) {
+ this.skipPrimaryKeyLoading = skipPrimaryKeyLoading;
+ }
+
+ public boolean getSkipPrimaryKeyLoading() {
+ return skipPrimaryKeyLoading;
+ }
+
+ public boolean isSkipPrimaryKeyLoading() {
+ return skipPrimaryKeyLoading != null && skipPrimaryKeyLoading;
+ }
+
@Override
public String toString() {
String res = "EntitiesFilters: " + getFiltersConfig();
- if (skipRelationshipsLoading != null && skipRelationshipsLoading) {
+ if (isSkipRelationshipsLoading()) {
res += "\n Skip Loading Relationships! \n";
}
+ if (isSkipPrimaryKeyLoading()) {
+ res += "\n Skip Loading PrimaryKeys! \n";
+ }
+
return res;
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMerger.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMerger.java b/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMerger.java
index 2c17361..e537b8a 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMerger.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMerger.java
@@ -36,7 +36,6 @@ import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.DbLoader;
import org.apache.cayenne.access.loader.DbLoaderConfiguration;
import org.apache.cayenne.access.loader.DefaultDbLoaderDelegate;
-import org.apache.cayenne.access.loader.NameFilter;
import org.apache.cayenne.access.loader.filters.DbPath;
import org.apache.cayenne.access.loader.filters.FiltersConfig;
import org.apache.cayenne.dba.DbAdapter;
@@ -73,36 +72,24 @@ public class DbMerger {
* Create and return a {@link List} of {@link MergerToken}s to alter the given
* {@link DataNode} to match the given {@link DataMap}
*/
- public List<MergerToken> createMergeTokens(DataNode dataNode, DataMap existing, DbLoaderConfiguration config) {
- return createMergeTokens(dataNode.getDataSource(), dataNode.getAdapter(), existing, config);
- }
-
- /**
- * Create and return a {@link List} of {@link MergerToken}s to alter the given
- * {@link DataNode} to match the given {@link DataMap}
- */
- public List<MergerToken> createMergeTokens(DbLoader dbLoader, DataMap existing, DbLoaderConfiguration config) {
- return createMergeTokens(existing, loadDataMapFromDb(dbLoader, config), config.getFiltersConfig());
- }
-
- /**
- * Create and return a {@link List} of {@link MergerToken}s to alter the given
- * {@link DataNode} to match the given {@link DataMap}
- */
public List<MergerToken> createMergeTokens(DataSource dataSource, DbAdapter adapter, DataMap existingDataMap, DbLoaderConfiguration config) {
- return createMergeTokens(existingDataMap, loadDataMapFromDb(dataSource, adapter, config), config.getFiltersConfig());
+ return createMergeTokens(
+ existingDataMap,
+ loadDataMapFromDb(dataSource, adapter, config),
+ config
+ );
}
/**
* Create and return a {@link List} of {@link MergerToken}s to alter the given
* {@link DataNode} to match the given {@link DataMap}
*/
- public List<MergerToken> createMergeTokens(DataMap existing, DataMap loadedFomDb, FiltersConfig filtersConfig) {
+ public List<MergerToken> createMergeTokens(DataMap existing, DataMap loadedFomDb, DbLoaderConfiguration config) {
loadedFomDb.setQuotingSQLIdentifiers(existing.isQuotingSQLIdentifiers());
- List<MergerToken> tokens = createMergeTokens(filter(existing, filtersConfig), loadedFomDb.getDbEntities());
-
+ List<MergerToken> tokens
+ = createMergeTokens(filter(existing, config.getFiltersConfig()), loadedFomDb.getDbEntities(), config);
// sort. use a custom Comparator since only toDb tokens are comparable by now
Collections.sort(tokens, new Comparator<MergerToken>() {
@@ -110,9 +97,8 @@ public class DbMerger {
public int compare(MergerToken o1, MergerToken o2) {
if (o1 instanceof AbstractToDbToken
&& o2 instanceof AbstractToDbToken) {
- AbstractToDbToken d1 = (AbstractToDbToken) o1;
- AbstractToDbToken d2 = (AbstractToDbToken) o2;
- return d1.compareTo(d2);
+
+ return ((AbstractToDbToken) o1).compareTo(o2);
}
return 0;
}
@@ -136,42 +122,22 @@ public class DbMerger {
try {
conn = dataSource.getConnection();
- DbLoader dbLoader = new DbLoader(conn, adapter, new DefaultDbLoaderDelegate());
- return loadDataMapFromDb(dbLoader, config);
- }
- catch (SQLException e) {
+ return new DbLoader(conn, adapter, new DefaultDbLoaderDelegate()).load(config);
+ } catch (SQLException e) {
throw new CayenneRuntimeException("Can't doLoad dataMap from db.", e);
- }
- finally {
+ } finally {
if (conn != null) {
try {
conn.close();
- }
- catch (SQLException e) {
+ } catch (SQLException e) {
// Do nothing.
}
}
}
}
- private DataMap loadDataMapFromDb(DbLoader dbLoader, DbLoaderConfiguration config) {
- try {
- return dbLoader.load(config);
- } catch (SQLException e) {
- // TODO log
- }
-
- return new DataMap();
- }
-
- /**
- *
- *
- * @param existing
- * @param loadedFromDb
- * @return
- */
- public List<MergerToken> createMergeTokens(Collection<DbEntity> existing, Collection<DbEntity> loadedFromDb) {
+ public List<MergerToken> createMergeTokens(Collection<DbEntity> existing, Collection<DbEntity> loadedFromDb,
+ DbLoaderConfiguration config) {
Collection<DbEntity> dbEntitiesToDrop = new LinkedList<DbEntity>(loadedFromDb);
List<MergerToken> tokens = new LinkedList<MergerToken>();
@@ -192,12 +158,16 @@ public class DbMerger {
dbEntitiesToDrop.remove(detectedEntity);
tokens.addAll(checkRelationshipsToDrop(dbEntity, detectedEntity));
- tokens.addAll(checkRelationshipsToAdd(dbEntity, detectedEntity));
+ if (!config.isSkipRelationshipsLoading()) {
+ tokens.addAll(checkRelationshipsToAdd(dbEntity, detectedEntity));
+ }
tokens.addAll(checkRows(dbEntity, detectedEntity));
- MergerToken token = checkPrimaryKeyChange(dbEntity, detectedEntity);
- if (token != null) {
- tokens.add(token);
+ if (!config.isSkipPrimaryKeyLoading()) {
+ MergerToken token = checkPrimaryKeyChange(dbEntity, detectedEntity);
+ if (token != null) {
+ tokens.add(token);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMergerConfig.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMergerConfig.java b/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMergerConfig.java
new file mode 100644
index 0000000..e8df4b8
--- /dev/null
+++ b/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMergerConfig.java
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ */
+package org.apache.cayenne.merge;
+
+import org.apache.cayenne.access.loader.filters.FiltersConfig;
+
+/**
+ * @since 4.0
+ */
+public class DbMergerConfig {
+
+ private FiltersConfig filtersConfig;
+
+ private boolean skipRelationships;
+
+ private boolean skipPrimaryKey;
+
+ public DbMergerConfig(FiltersConfig filtersConfig, boolean skipRelationships, boolean skipPrimaryKey) {
+ this.filtersConfig = filtersConfig;
+ this.skipRelationships = skipRelationships;
+ this.skipPrimaryKey = skipPrimaryKey;
+ }
+
+ public void setSkipRelationships(boolean skipRelationships) {
+ this.skipRelationships = skipRelationships;
+ }
+
+ public boolean isSkipRelationships() {
+ return skipRelationships;
+ }
+
+ public void setSkipPrimaryKey(boolean skipPrimaryKey) {
+ this.skipPrimaryKey = skipPrimaryKey;
+ }
+
+ public boolean isSkipPrimaryKey() {
+ return skipPrimaryKey;
+ }
+
+ public FiltersConfig getFiltersConfig() {
+ return filtersConfig;
+ }
+
+ public void setFiltersConfig(FiltersConfig filtersConfig) {
+ this.filtersConfig = filtersConfig;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-server/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java b/cayenne-server/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
index 2607bcd..9772794 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
@@ -386,7 +386,7 @@ public class EntityMergeSupport {
* Returns registered listeners
*/
public EntityMergeListener[] getEntityMergeListeners() {
- return listeners.toArray(new EntityMergeListener[0]);
+ return listeners.toArray(new EntityMergeListener[listeners.size()]);
}
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-server/src/test/java/org/apache/cayenne/merge/DbMergerTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/DbMergerTest.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/DbMergerTest.java
index 58ed91d..894129d 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/DbMergerTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/merge/DbMergerTest.java
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.merge;
+import org.apache.cayenne.access.loader.DbLoaderConfiguration;
import org.apache.cayenne.dba.hsqldb.HSQLMergerFactory;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
@@ -37,7 +38,7 @@ public class DbMergerTest {
@Test
public void testEmptyDataMap() throws Exception {
assertEquals(0, dbMerger().createMergeTokens(new ArrayList<DbEntity>(0),
- new ArrayList<DbEntity>(0)).size());
+ new ArrayList<DbEntity>(0), new DbLoaderConfiguration()).size());
}
@Test
@@ -49,7 +50,7 @@ public class DbMergerTest {
DataMap existing = dataMap().with(dbEntity).build();
List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(),
- new ArrayList<DbEntity>(0));
+ new ArrayList<DbEntity>(0), new DbLoaderConfiguration());
assertEquals(1, tokens.size());
assertEquals(factory().createCreateTableToDb(dbEntity.build()).getTokenValue(),
@@ -63,7 +64,8 @@ public class DbMergerTest {
dbAttr("attr01").typeInt()
)).build();
- List<MergerToken> tokens = dbMerger().createMergeTokens(new ArrayList<DbEntity>(0), db.getDbEntities());
+ List<MergerToken> tokens = dbMerger().createMergeTokens(new ArrayList<DbEntity>(0),
+ db.getDbEntities(), new DbLoaderConfiguration());
assertEquals(1, tokens.size());
assertEquals(factory().createDropTableToDb(db.getDbEntity("table1")).getTokenValue(),
@@ -83,7 +85,8 @@ public class DbMergerTest {
dbAttr("attr01").typeInt()
)).build();
- List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(), db.getDbEntities());
+ List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(),
+ db.getDbEntities(), new DbLoaderConfiguration());
assertEquals(1, tokens.size());
@@ -117,7 +120,8 @@ public class DbMergerTest {
.build();
- List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(), db.getDbEntities());
+ List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(),
+ db.getDbEntities(), new DbLoaderConfiguration());
assertEquals(1, tokens.size());
@@ -155,7 +159,8 @@ public class DbMergerTest {
.build();
- List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(), db.getDbEntities());
+ List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(),
+ db.getDbEntities(), new DbLoaderConfiguration());
assertEquals(2, tokens.size());
@@ -193,7 +198,7 @@ public class DbMergerTest {
.build();
- List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(), db.getDbEntities());
+ List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(), db.getDbEntities(), new DbLoaderConfiguration());
assertEquals(1, tokens.size());
@@ -215,7 +220,8 @@ public class DbMergerTest {
dbAttr("attr02").typeInt()
)).build();
- List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(), db.getDbEntities());
+ List<MergerToken> tokens = dbMerger().createMergeTokens(existing.getDbEntities(),
+ db.getDbEntities(), new DbLoaderConfiguration());
assertEquals(1, tokens.size());
@@ -241,7 +247,8 @@ public class DbMergerTest {
)).build();
- assertEquals(0, dbMerger().createMergeTokens(dataMap1.getDbEntities(), dataMap2.getDbEntities()).size());
+ assertEquals(0, dbMerger().createMergeTokens(dataMap1.getDbEntities(),
+ dataMap2.getDbEntities(), new DbLoaderConfiguration()).size());
}
private DbMerger dbMerger() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-server/src/test/java/org/apache/cayenne/merge/MergeCase.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/MergeCase.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/MergeCase.java
index 258f8a9..8dd6c18 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/MergeCase.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/merge/MergeCase.java
@@ -109,7 +109,8 @@ public abstract class MergeCase extends ServerCase {
DbLoaderConfiguration loaderConfiguration = new DbLoaderConfiguration();
loaderConfiguration.setFiltersConfig(new FiltersConfig(new EntityFilters(DbPath.EMPTY, include("ARTIST|GALLERY|PAINTING|NEW_TABLE2?"), TRUE, TRUE)));
- return createMerger(node.getAdapter().mergerFactory()).createMergeTokens(node, map, loaderConfiguration);
+ return createMerger(node.getAdapter().mergerFactory())
+ .createMergeTokens(node.getDataSource(), node.getAdapter(), map, loaderConfiguration);
}
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
index 5750531..72e4a24 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
@@ -75,8 +75,10 @@ public class DbImporterTask extends Task {
Log logger = new AntLogger(this);
config.setLogger(logger);
+ config.setSkipRelationshipsLoading(reverseEngineering.getSkipRelationshipsLoading());
+ config.setSkipPrimaryKeyLoading(reverseEngineering.getSkipPrimaryKeyLoading());
config.setTableTypes(reverseEngineering.getTableTypes());
-
+
Injector injector = DIBootstrap.createInjector(new ToolsModule(logger), new DbImportModule());
try {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
index 60194f3..bf981ee 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
@@ -107,8 +107,8 @@ public class DbImportAction {
} else {
MergerFactory mergerFactory = adapter.mergerFactory();
- List<MergerToken> mergeTokens = new DbMerger(mergerFactory).createMergeTokens(existing, loadedFomDb,
- config.getDbLoaderConfig().getFiltersConfig());
+ List<MergerToken> mergeTokens = new DbMerger(mergerFactory)
+ .createMergeTokens(existing, loadedFomDb, config.getDbLoaderConfig());
if (mergeTokens.isEmpty()) {
logger.info("No changes to import.");
return;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
index 51c22bf..7d71aaa 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
@@ -34,6 +34,7 @@ import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.naming.ObjectNameGenerator;
+import org.apache.cayenne.merge.DbMergerConfig;
import org.apache.cayenne.merge.DefaultModelMergeDelegate;
import org.apache.cayenne.merge.ModelMergeDelegate;
import org.apache.cayenne.resource.URLResource;
@@ -326,7 +327,19 @@ public class DbImportConfiguration {
this.dbLoaderConfiguration.setSkipRelationshipsLoading(skipRelationshipsLoading);
}
+ public void setSkipPrimaryKeyLoading(Boolean skipPrimaryKeyLoading) {
+ this.dbLoaderConfiguration.setSkipPrimaryKeyLoading(skipPrimaryKeyLoading);
+ }
+
public void setTableTypes(String[] tableTypes) {
dbLoaderConfiguration.setTableTypes(tableTypes);
}
+
+ public DbMergerConfig getDbMergerConfig() {
+ return new DbMergerConfig(
+ getDbLoaderConfig().getFiltersConfig(),
+ getDbLoaderConfig().getSkipRelationshipsLoading(),
+ getDbLoaderConfig().getSkipPrimaryKeyLoading()
+ );
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoader.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoader.java
index f7c3d97..807b7ff 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoader.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoader.java
@@ -58,6 +58,7 @@ public class DefaultReverseEngineeringLoader implements ReverseEngineeringLoader
Element root = doc.getDocumentElement();
engineering.setSkipRelationshipsLoading(loadBoolean(root, "skipRelationshipsLoading"));
+ engineering.setSkipPrimaryKeyLoading(loadBoolean(root, "skipPrimaryKeyLoading"));
engineering.setTableTypes(loadTableTypes(root));
engineering.setCatalogs(loadCatalogs(root));
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
index b668ff9..ad42297 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
@@ -29,6 +29,8 @@ public class ReverseEngineering extends FilterContainer {
private Boolean skipRelationshipsLoading;
+ private Boolean skipPrimaryKeyLoading;
+
/*
* Typical types are "TABLE",
* "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
@@ -50,6 +52,14 @@ public class ReverseEngineering extends FilterContainer {
this.skipRelationshipsLoading = skipRelationshipsLoading;
}
+ public Boolean getSkipPrimaryKeyLoading() {
+ return skipPrimaryKeyLoading;
+ }
+
+ public void setSkipPrimaryKeyLoading(Boolean skipPrimaryKeyLoading) {
+ this.skipPrimaryKeyLoading = skipPrimaryKeyLoading;
+ }
+
public Collection<Catalog> getCatalogs() {
return catalogs;
}
@@ -109,10 +119,11 @@ public class ReverseEngineering extends FilterContainer {
if (skipRelationshipsLoading != null && skipRelationshipsLoading) {
res.append("\n").append(" Skip Relationships Loading");
}
+ if (skipPrimaryKeyLoading != null && skipPrimaryKeyLoading) {
+ res.append("\n").append(" Skip PrimaryKey Loading");
+ }
res.append(super.toString(" "));
return res.toString();
}
-
-
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoaderTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoaderTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoaderTest.java
index 7b0f21b..83af6df 100644
--- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoaderTest.java
+++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoaderTest.java
@@ -212,6 +212,18 @@ public class DefaultReverseEngineeringLoaderTest {
}
@Test
+ public void testSkipPrimaryKeyLoading() throws Exception {
+ ReverseEngineering engineering = new DefaultReverseEngineeringLoader()
+ .load(getResource("reverseEngineering-skipPrimaryKeyLoading.xml"));
+
+ assertSkipPrimaryKeyLoading(engineering);
+ }
+
+ public static void assertSkipPrimaryKeyLoading(ReverseEngineering engineering) {
+ assertTrue(engineering.getSkipPrimaryKeyLoading());
+ }
+
+ @Test
public void testTableTypes() throws Exception {
ReverseEngineering engineering = new DefaultReverseEngineeringLoader()
.load(getResource("reverseEngineering-tableTypes.xml"));
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-skip-primary-key-loading.xml
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-skip-primary-key-loading.xml b/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-skip-primary-key-loading.xml
new file mode 100644
index 0000000..e438166
--- /dev/null
+++ b/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-skip-primary-key-loading.xml
@@ -0,0 +1,37 @@
+<!--
+ 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 name="MyProject" default="dist" basedir=".">
+
+ <taskdef name="cdbimport" classname="org.apache.cayenne.tools.DbImporterTask" taskname="cdbimport"
+ classpath="${basedir}" />
+
+ <target name="dist">
+ <cdbimport map="${context.dir}/WEB-INF/DefaultMap.map.xml"
+ adapter="org.apache.cayenne.dba.hsqldb.HSQLDBAdapter"
+ driver="org.hsqldb.jdbcDriver"
+ url="jdbc:hsqldb:hsql://localhost/bookmarker"
+ username="sa"
+ skipPrimaryKeyLoading="true">
+
+ </cdbimport>
+ </target>
+
+
+</project>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/cayenne-tools/src/test/resources/org/apache/cayenne/tools/dbimport/config/reverseEngineering-skipPrimaryKeyLoading.xml
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/resources/org/apache/cayenne/tools/dbimport/config/reverseEngineering-skipPrimaryKeyLoading.xml b/cayenne-tools/src/test/resources/org/apache/cayenne/tools/dbimport/config/reverseEngineering-skipPrimaryKeyLoading.xml
new file mode 100644
index 0000000..e0d74bd
--- /dev/null
+++ b/cayenne-tools/src/test/resources/org/apache/cayenne/tools/dbimport/config/reverseEngineering-skipPrimaryKeyLoading.xml
@@ -0,0 +1,23 @@
+<?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.
+ -->
+
+<reverseEngineering>
+ <skipPrimaryKeyLoading>true</skipPrimaryKeyLoading>
+</reverseEngineering>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
index e60794b..c8e0798 100644
--- a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
+++ b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
@@ -226,7 +226,7 @@ public class DbImporterMojo extends AbstractMojo {
*
* Default is <code>false</code>.
*
- * @parameter expression="${cdbimport.meaningfulPk}" default-value="false"
+ * @parameter expression="${cdbimport.meaningfulPk}"
* @deprecated since 4.0 use meaningfulPkTables
*/
private boolean meaningfulPk;
@@ -277,6 +277,7 @@ public class DbImporterMojo extends AbstractMojo {
config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering)
.add(filterBuilder.build()).filtersConfig());
config.setSkipRelationshipsLoading(reverseEngineering.getSkipRelationshipsLoading());
+ config.setSkipPrimaryKeyLoading(reverseEngineering.getSkipPrimaryKeyLoading());
config.setTableTypes(reverseEngineering.getTableTypes());
return config;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java b/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java
index 8606277..8a195a6 100644
--- a/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java
+++ b/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java
@@ -81,6 +81,11 @@ public class DbImporterMojoConfigurationTest extends AbstractMojoTestCase {
}
@Test
+ public void testSkipPrimaryKeyLoading() throws Exception {
+ assertSkipPrimaryKeyLoading(getCdbImport("pom-skip-primary-key-loading.xml").getReverseEngineering());
+ }
+
+ @Test
public void testTableTypes() throws Exception {
assertTableTypes(getCdbImport("pom-table-types.xml").getReverseEngineering());
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/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 98d8f0c..86d4762 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
@@ -42,6 +42,7 @@ import org.codehaus.plexus.util.FileUtils;
import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.XMLUnit;
+import org.junit.Test;
import org.xml.sax.SAXException;
public class DbImporterMojoTest extends AbstractMojoTestCase {
@@ -71,61 +72,77 @@ public class DbImporterMojoTest extends AbstractMojoTestCase {
assertNull(getCdbImport("dbimporter-pom2.xml").toParameters().getDataMapFile());
}
- private DbImporterMojo getCdbImport(String pomFileName) throws Exception {
- return (DbImporterMojo) lookupMojo("cdbimport", getTestFile("src/test/resources/org/apache/cayenne/tools/"
- + pomFileName));
- }
+ private DbImporterMojo getCdbImport(String pomFileName) throws Exception {
+ return (DbImporterMojo) lookupMojo("cdbimport",
+ getTestFile("src/test/resources/org/apache/cayenne/tools/" + pomFileName));
+ }
private void assertPathEquals(String expectedPath, String actualPath) {
assertEquals(new File(expectedPath), new File(actualPath));
}
+ @Test
public void testImportNewDataMap() throws Exception {
test("testImportNewDataMap");
}
+ @Test
public void testImportWithoutChanges() throws Exception {
test("testImportWithoutChanges");
}
+ @Test
public void testImportAddTableAndColumn() throws Exception {
test("testImportAddTableAndColumn");
}
+ @Test
public void testSimpleFiltering() throws Exception {
test("testSimpleFiltering");
}
+ @Test
public void testFilteringWithSchema() throws Exception {
test("testFilteringWithSchema");
}
+ @Test
public void testSchemasAndTableExclude() throws Exception {
test("testSchemasAndTableExclude");
}
+ @Test
public void testViewsExclude() throws Exception {
test("testViewsExclude");
}
-
+
+ @Test
public void testTableTypes() throws Exception {
test("testTableTypes");
}
+ @Test
public void testDefaultPackage() throws Exception {
test("testDefaultPackage");
}
+ @Test
public void testSkipRelationshipsLoading() throws Exception {
test("testSkipRelationshipsLoading");
}
+ @Test
+ public void testSkipPrimaryKeyLoading() throws Exception {
+ test("testSkipPrimaryKeyLoading");
+ }
+
/**
* Q: what happens if a relationship existed over a column that was later deleted? and ‘skipRelLoading’ is true
* A: it should remove relationship and column
*
* @throws Exception
*/
+ @Test
public void testPreserveRelationships() throws Exception {
test("testPreserveRelationships");
}
@@ -136,11 +153,66 @@ public class DbImporterMojoTest extends AbstractMojoTestCase {
*
* @throws Exception
*/
+ @Test
public void testUnFlattensManyToMany() throws Exception {
test("testUnFlattensManyToMany");
}
- private void test(String name) throws Exception {
+ @Test
+ public void testFilteringConfig() throws Exception {
+ DbImporterMojo cdbImport = getCdbImport("config/pom-01.xml");
+
+ assertEquals(2, cdbImport.getReverseEngineering().getCatalogs().size());
+ Iterator<Catalog> iterator = cdbImport.getReverseEngineering().getCatalogs().iterator();
+ assertEquals("catalog-name-01", iterator.next().getName());
+
+ Catalog catalog = iterator.next();
+ assertEquals("catalog-name-02", catalog.getName());
+ Iterator<Schema> schemaIterator = catalog.getSchemas().iterator();
+
+ assertEquals("schema-name-01", schemaIterator.next().getName());
+
+ Schema schema = schemaIterator.next();
+ assertEquals("schema-name-02", schema.getName());
+
+ Iterator<IncludeTable> includeTableIterator = schema.getIncludeTables().iterator();
+ assertEquals("incTable-01", includeTableIterator.next().getPattern());
+
+ IncludeTable includeTable = includeTableIterator.next();
+ assertEquals("incTable-02", includeTable.getPattern());
+ assertEquals("includeColumn-01", includeTable.getIncludeColumns().iterator().next().getPattern());
+ assertEquals("excludeColumn-01", includeTable.getExcludeColumns().iterator().next().getPattern());
+
+ assertEquals("includeColumn-02", schema.getIncludeColumns().iterator().next().getPattern());
+ assertEquals("excludeColumn-02", schema.getExcludeColumns().iterator().next().getPattern());
+
+ assertEquals("includeColumn-03", catalog.getIncludeColumns().iterator().next().getPattern());
+ assertEquals("excludeColumn-03", catalog.getExcludeColumns().iterator().next().getPattern());
+
+ schemaIterator = cdbImport.getReverseEngineering().getSchemas().iterator();
+ schema = schemaIterator.next();
+ assertEquals("schema-name-03", schema.getName());
+
+ schema = schemaIterator.next();
+ assertEquals("schema-name-04", schema.getName());
+
+ includeTableIterator = schema.getIncludeTables().iterator();
+ assertEquals("incTable-04", includeTableIterator.next().getPattern());
+ assertEquals("excTable-04", schema.getExcludeTables().iterator().next().getPattern());
+
+ includeTable = includeTableIterator.next();
+ assertEquals("incTable-05", includeTable.getPattern());
+ assertEquals("includeColumn-04", includeTable.getIncludeColumns().iterator().next().getPattern());
+ assertEquals("excludeColumn-04", includeTable.getExcludeColumns().iterator().next().getPattern());
+
+ assertEquals("includeColumn-04", schema.getIncludeColumns().iterator().next().getPattern());
+ assertEquals("excludeColumn-04", schema.getExcludeColumns().iterator().next().getPattern());
+
+ assertEquals("includeColumn-03", catalog.getIncludeColumns().iterator().next().getPattern());
+ assertEquals("excludeColumn-03", catalog.getExcludeColumns().iterator().next().getPattern());
+ }
+
+ private void test(String name) throws Exception {
DbImporterMojo cdbImport = getCdbImport("dbimport/" + name + "-pom.xml");
File mapFile = cdbImport.getMap();
File mapFileCopy = new File(mapFile.getParentFile(), "copy-" + mapFile.getName());
@@ -224,59 +296,6 @@ public class DbImporterMojoTest extends AbstractMojoTestCase {
}
}
- public void testFilteringConfig() throws Exception {
- DbImporterMojo cdbImport = getCdbImport("config/pom-01.xml");
-
- assertEquals(2, cdbImport.getReverseEngineering().getCatalogs().size());
- Iterator<Catalog> iterator = cdbImport.getReverseEngineering().getCatalogs().iterator();
- assertEquals("catalog-name-01", iterator.next().getName());
-
- Catalog catalog = iterator.next();
- assertEquals("catalog-name-02", catalog.getName());
- Iterator<Schema> schemaIterator = catalog.getSchemas().iterator();
-
- assertEquals("schema-name-01", schemaIterator.next().getName());
-
- Schema schema = schemaIterator.next();
- assertEquals("schema-name-02", schema.getName());
-
- Iterator<IncludeTable> includeTableIterator = schema.getIncludeTables().iterator();
- assertEquals("incTable-01", includeTableIterator.next().getPattern());
-
- IncludeTable includeTable = includeTableIterator.next();
- assertEquals("incTable-02", includeTable.getPattern());
- assertEquals("includeColumn-01", includeTable.getIncludeColumns().iterator().next().getPattern());
- assertEquals("excludeColumn-01", includeTable.getExcludeColumns().iterator().next().getPattern());
-
- assertEquals("includeColumn-02", schema.getIncludeColumns().iterator().next().getPattern());
- assertEquals("excludeColumn-02", schema.getExcludeColumns().iterator().next().getPattern());
-
- assertEquals("includeColumn-03", catalog.getIncludeColumns().iterator().next().getPattern());
- assertEquals("excludeColumn-03", catalog.getExcludeColumns().iterator().next().getPattern());
-
- schemaIterator = cdbImport.getReverseEngineering().getSchemas().iterator();
- schema = schemaIterator.next();
- assertEquals("schema-name-03", schema.getName());
-
- schema = schemaIterator.next();
- assertEquals("schema-name-04", schema.getName());
-
- includeTableIterator = schema.getIncludeTables().iterator();
- assertEquals("incTable-04", includeTableIterator.next().getPattern());
- assertEquals("excTable-04", schema.getExcludeTables().iterator().next().getPattern());
-
- includeTable = includeTableIterator.next();
- assertEquals("incTable-05", includeTable.getPattern());
- assertEquals("includeColumn-04", includeTable.getIncludeColumns().iterator().next().getPattern());
- assertEquals("excludeColumn-04", includeTable.getExcludeColumns().iterator().next().getPattern());
-
- assertEquals("includeColumn-04", schema.getIncludeColumns().iterator().next().getPattern());
- assertEquals("excludeColumn-04", schema.getExcludeColumns().iterator().next().getPattern());
-
- assertEquals("includeColumn-03", catalog.getIncludeColumns().iterator().next().getPattern());
- assertEquals("excludeColumn-03", catalog.getExcludeColumns().iterator().next().getPattern());
- }
-
private void prepareDatabase(String sqlFile, DbImportConfiguration dbImportConfiguration) throws Exception {
URL sqlUrl = ResourceUtil.getResource(getClass(), "dbimport/" + sqlFile + ".sql");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/config/pom-skip-primary-key-loading.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/config/pom-skip-primary-key-loading.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/config/pom-skip-primary-key-loading.xml
new file mode 100644
index 0000000..bd11c5f
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/config/pom-skip-primary-key-loading.xml
@@ -0,0 +1,39 @@
+<?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">
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-cayenne-plugin</artifactId>
+ <configuration>
+ <map>target/test/org/apache/cayenne/tools/dbimporter-map1.map.xml</map>
+
+ <reverseEngineering>
+ <skipPrimaryKeyLoading>true</skipPrimaryKeyLoading>
+ </reverseEngineering>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading-pom.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading-pom.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading-pom.xml
new file mode 100644
index 0000000..5b78108
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading-pom.xml
@@ -0,0 +1,43 @@
+<?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/testSkipPrimaryKeyLoading.map.xml</map>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:memory:DbImporterMojoTest;create=true</url>
+
+ <reverseEngineering>
+ <skipPrimaryKeyLoading>true</skipPrimaryKeyLoading>
+ </reverseEngineering>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.map.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.map.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.map.xml
new file mode 100644
index 0000000..a1e533f
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.map.xml
@@ -0,0 +1,35 @@
+<?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/7/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/7/modelMap http://cayenne.apache.org/schema/7/modelMap.xsd"
+ project-version="7">
+ <property name="defaultPackage" value="com.my.home"/>
+ <db-entity name="A" schema="APP">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
+ <db-entity name="B" schema="APP">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
+ <obj-entity name="A" className="A" dbEntityName="A">
+ </obj-entity>
+ <obj-entity name="B" className="B" dbEntityName="B">
+ </obj-entity>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.map.xml-result
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.map.xml-result b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.map.xml-result
new file mode 100644
index 0000000..deac3cd
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.map.xml-result
@@ -0,0 +1,41 @@
+<?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/7/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/7/modelMap http://cayenne.apache.org/schema/7/modelMap.xsd"
+ project-version="7">
+ <property name="defaultPackage" value="com.my.home"/>
+ <db-entity name="A" schema="APP">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
+ <db-entity name="B" schema="APP">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
+ <db-entity name="C" schema="APP">
+ <db-attribute name="ID" type="INTEGER" isMandatory="true" length="10"/>
+ </db-entity>
+ <obj-entity name="A" className="A" dbEntityName="A">
+ </obj-entity>
+ <obj-entity name="B" className="B" dbEntityName="B">
+ </obj-entity>
+ <obj-entity name="C" className="com.my.home.C" dbEntityName="C">
+ <obj-attribute name="id" type="java.lang.Integer" db-attribute-path="ID"/>
+ </obj-entity>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.sql
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.sql b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.sql
new file mode 100644
index 0000000..4bf663c
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipPrimaryKeyLoading.sql
@@ -0,0 +1,30 @@
+-- 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 TABLE APP.A (
+ id INTEGER NOT NULL,
+
+ PRIMARY KEY (id)
+);
+
+CREATE TABLE APP.B (
+ id INTEGER NOT NULL
+);
+
+CREATE TABLE APP.C (
+ id INTEGER NOT NULL
+);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.map.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.map.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.map.xml
new file mode 100644
index 0000000..a18b3f3
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.map.xml
@@ -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/7/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/7/modelMap http://cayenne.apache.org/schema/7/modelMap.xsd"
+ project-version="7">
+ <property name="defaultPackage" value="com.my.home"/>
+ <db-entity name="A" schema="APP">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
+ <db-entity name="A_B" schema="APP">
+ <db-attribute name="A_ID" type="INTEGER" isMandatory="true" length="10"/>
+ <db-attribute name="B_ID" type="INTEGER" isMandatory="true" length="10"/>
+ </db-entity>
+ <db-entity name="B" schema="APP">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
+ <obj-entity name="A" className="A" dbEntityName="A">
+ </obj-entity>
+ <obj-entity name="AB" className="AB" dbEntityName="A_B">
+ </obj-entity>
+ <obj-entity name="B" className="B" dbEntityName="B">
+ </obj-entity>
+ <db-relationship name="aBArray" source="A" target="A_B" toMany="true">
+ <db-attribute-pair source="ID" target="A_ID"/>
+ </db-relationship>
+ <db-relationship name="toA" source="A_B" target="A" toMany="false">
+ <db-attribute-pair source="A_ID" target="ID"/>
+ </db-relationship>
+ <db-relationship name="toB" source="A_B" target="B" toMany="false">
+ <db-attribute-pair source="B_ID" target="ID"/>
+ </db-relationship>
+ <db-relationship name="aBArray" source="B" target="A_B" toMany="true">
+ <db-attribute-pair source="ID" target="B_ID"/>
+ </db-relationship>
+ <obj-relationship name="toA" source="AB" target="A" deleteRule="Nullify" db-relationship-path="toA"/>
+ <obj-relationship name="aBArray" source="B" target="AB" deleteRule="Deny" db-relationship-path="aBArray"/>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.map.xml-result
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.map.xml-result b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.map.xml-result
index af9ea36..a18b3f3 100644
--- a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.map.xml-result
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.map.xml-result
@@ -1,36 +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
+ 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
+ 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.
--->
+ 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/7/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/7/modelMap http://cayenne.apache.org/schema/7/modelMap.xsd"
- project-version="7">
- <db-entity name="CHILD" schema="APP">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/7/modelMap http://cayenne.apache.org/schema/7/modelMap.xsd"
+ project-version="7">
+ <property name="defaultPackage" value="com.my.home"/>
+ <db-entity name="A" schema="APP">
<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
- <db-attribute name="PARENT_ID" type="INTEGER" length="10"/>
</db-entity>
- <db-entity name="PARENT" schema="APP">
+ <db-entity name="A_B" schema="APP">
+ <db-attribute name="A_ID" type="INTEGER" isMandatory="true" length="10"/>
+ <db-attribute name="B_ID" type="INTEGER" isMandatory="true" length="10"/>
+ </db-entity>
+ <db-entity name="B" schema="APP">
<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="parentId" type="java.lang.Integer" db-attribute-path="PARENT_ID"/>
+ <obj-entity name="A" className="A" dbEntityName="A">
+ </obj-entity>
+ <obj-entity name="AB" className="AB" dbEntityName="A_B">
</obj-entity>
- <obj-entity name="Parent" className="Parent" dbEntityName="PARENT">
+ <obj-entity name="B" className="B" dbEntityName="B">
</obj-entity>
+ <db-relationship name="aBArray" source="A" target="A_B" toMany="true">
+ <db-attribute-pair source="ID" target="A_ID"/>
+ </db-relationship>
+ <db-relationship name="toA" source="A_B" target="A" toMany="false">
+ <db-attribute-pair source="A_ID" target="ID"/>
+ </db-relationship>
+ <db-relationship name="toB" source="A_B" target="B" toMany="false">
+ <db-attribute-pair source="B_ID" target="ID"/>
+ </db-relationship>
+ <db-relationship name="aBArray" source="B" target="A_B" toMany="true">
+ <db-attribute-pair source="ID" target="B_ID"/>
+ </db-relationship>
+ <obj-relationship name="toA" source="AB" target="A" deleteRule="Nullify" db-relationship-path="toA"/>
+ <obj-relationship name="aBArray" source="B" target="AB" deleteRule="Deny" db-relationship-path="aBArray"/>
</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/78558aaa/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.sql
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.sql b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.sql
index 2955a3a..0241d1d 100644
--- a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.sql
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSkipRelationshipsLoading.sql
@@ -15,16 +15,22 @@
-- specific language governing permissions and limitations
-- under the License.
-CREATE TABLE APP.Parent (
+CREATE TABLE APP.A (
id INTEGER NOT NULL,
PRIMARY KEY (id)
);
-CREATE TABLE APP.Child (
+CREATE TABLE APP.B (
id INTEGER NOT NULL,
- Parent_id INTEGER,
- PRIMARY KEY (id),
- CONSTRAINT PARENT_CHILD FOREIGN KEY (Parent_id) REFERENCES APP.Parent (id)
+ PRIMARY KEY (id)
+);
+
+CREATE TABLE APP.A_B (
+ A_ID INTEGER NOT NULL,
+ B_ID INTEGER NOT NULL,
+
+ CONSTRAINT A_B_A FOREIGN KEY (A_ID) REFERENCES APP.A (ID),
+ CONSTRAINT A_B_B FOREIGN KEY (B_ID) REFERENCES APP.B (ID)
);
\ No newline at end of file