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/11 11:49:51 UTC
[6/9] cayenne git commit: By default many-to-many are flattened during reverse engineering. But if a user un-flattens a given N:M manually, we’d like this choice to be preserved on the next run
By default many-to-many are flattened during reverse engineering.
But if a user un-flattens a given N:M manually, we’d like this choice to be preserved on the next run
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/dd6920c9
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/dd6920c9
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/dd6920c9
Branch: refs/heads/master
Commit: dd6920c9f1e6fbf7d5d65228c413aa051a079795
Parents: 3eaed4a
Author: alexkolonitsky <Al...@gmail.com>
Authored: Wed Dec 10 15:45:09 2014 +0300
Committer: alexkolonitsky <Al...@gmail.com>
Committed: Wed Dec 10 15:45:09 2014 +0300
----------------------------------------------------------------------
.../cayenne/tools/DbImporterMojoTest.java | 38 +++++++++++---
.../dbimport/testUnFlattensManyToMany-pom.xml | 39 ++++++++++++++
.../dbimport/testUnFlattensManyToMany.map.xml | 54 ++++++++++++++++++++
.../testUnFlattensManyToMany.map.xml-result | 54 ++++++++++++++++++++
.../tools/dbimport/testUnFlattensManyToMany.sql | 36 +++++++++++++
5 files changed, 213 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/dd6920c9/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 0f5b6f6..5aa2093 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
@@ -117,7 +117,8 @@ public class DbImporterMojoTest extends AbstractMojoTestCase {
}
/**
- * what happens if a relationship existed over a column that was later deleted? and ‘skipRelLoading’ is true
+ * 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
*/
@@ -125,6 +126,16 @@ public class DbImporterMojoTest extends AbstractMojoTestCase {
test("testPreserveRelationships");
}
+ /**
+ * By default many-to-many are flattened during reverse engineering.
+ * But if a user un-flattens a given N:M manually, we’d like this choice to be preserved on the next run
+ *
+ * @throws Exception
+ */
+ public void testUnFlattensManyToMany() throws Exception {
+ test("testUnFlattensManyToMany");
+ }
+
private void test(String name) throws Exception {
DbImporterMojo cdbImport = getCdbImport("dbimport/" + name + "-pom.xml");
File mapFile = cdbImport.getMap();
@@ -156,28 +167,39 @@ public class DbImporterMojoTest extends AbstractMojoTestCase {
ResultSet views = connection.getMetaData().getTables(null, null, null, new String[] { "VIEW" });
while (views.next()) {
String schema = views.getString("TABLE_SCHEM");
- System.out.println("DROP VIEW " + (isBlank(schema) ? "" : schema + ".") + views.getString("TABLE_NAME"));
- stmt.execute("DROP VIEW " + (isBlank(schema) ? "" : schema + ".") + views.getString("TABLE_NAME"));
+ execute(stmt, "DROP VIEW " + (isBlank(schema) ? "" : schema + ".") + views.getString("TABLE_NAME"));
}
ResultSet tables = connection.getMetaData().getTables(null, null, null, new String[] { "TABLE" });
while (tables.next()) {
String schema = tables.getString("TABLE_SCHEM");
- System.out.println("DROP TABLE " + (isBlank(schema) ? "" : schema + ".") + tables.getString("TABLE_NAME"));
- stmt.execute("DROP TABLE " + (isBlank(schema) ? "" : schema + ".") + tables.getString("TABLE_NAME"));
+ String tableName = tables.getString("TABLE_NAME");
+ String tableNameFull = (isBlank(schema) ? "" : schema + ".") + tableName;
+
+ ResultSet keys = connection.getMetaData().getExportedKeys(null, schema, tableName);
+ while (keys.next()) {
+ execute(stmt, "ALTER TABLE " + keys.getString("FKTABLE_NAME") + " DROP CONSTRAINT " + keys.getString("FK_NAME"));
+ }
+
+ String sql = "DROP TABLE " + tableNameFull;
+ execute(stmt, sql);
}
ResultSet schemas = connection.getMetaData().getSchemas();
while (schemas.next()) {
String schem = schemas.getString("TABLE_SCHEM");
if (schem.startsWith("SCHEMA")) {
- System.out.println("DROP SCHEMA " + schem);
- stmt.execute("DROP SCHEMA " + schem + " RESTRICT");
+ execute(stmt, "DROP SCHEMA " + schem + " RESTRICT");
}
}
}
- private void verifyResult(File map, File mapFileCopy) {
+ private void execute(Statement stmt, String sql) throws SQLException {
+ System.out.println(sql);
+ stmt.execute(sql);
+ }
+
+ private void verifyResult(File map, File mapFileCopy) {
try {
FileReader control = new FileReader(map.getAbsolutePath() + "-result");
FileReader test = new FileReader(mapFileCopy);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/dd6920c9/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany-pom.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany-pom.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany-pom.xml
new file mode 100644
index 0000000..c62b2b3
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany-pom.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">
+
+ <name>DbImporterMojo Test1</name>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-cayenne-plugin</artifactId>
+ <configuration>
+ <map>target/test-classes/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.map.xml</map>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:memory:DbImporterMojoTest;create=true</url>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/dd6920c9/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.map.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.map.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.map.xml
new file mode 100644
index 0000000..3aaa235
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.map.xml
@@ -0,0 +1,54 @@
+<?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">
+ <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/dd6920c9/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.map.xml-result
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.map.xml-result b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.map.xml-result
new file mode 100644
index 0000000..5b85aa0
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.map.xml-result
@@ -0,0 +1,54 @@
+<?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">
+ <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/dd6920c9/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.sql
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.sql b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.sql
new file mode 100644
index 0000000..0241d1d
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testUnFlattensManyToMany.sql
@@ -0,0 +1,36 @@
+-- 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,
+
+ 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