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 <alex.kolonit...@gmail.com> Authored: Fri Dec 12 21:36:59 2014 +0300 Committer: alexkolonitsky <alex.kolonit...@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