You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by st...@apache.org on 2015/05/05 12:48:04 UTC
svn commit: r1677780 - in /openjpa/trunk:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/
openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/
Author: struberg
Date: Tue May 5 10:48:04 2015
New Revision: 1677780
URL: http://svn.apache.org/r1677780
Log:
OPENJPA-2581 add MappingTool option to create DROP scripts for all tables in a DB.
Thanks sreiterer for the patch!
Stefan will provide further integration tests tomorrow.
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
openjpa/trunk/openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/OpenJpaSchemaMojo.java
openjpa/trunk/openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/OpenJpaSqlMojo.java
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java?rev=1677780&r1=1677779&r2=1677780&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java Tue May 5 10:48:04 2015
@@ -86,6 +86,7 @@ public class MappingTool
public static final String ACTION_REFRESH = "refresh";
public static final String ACTION_BUILD_SCHEMA = "buildSchema";
public static final String ACTION_DROP = "drop";
+ public static final String ACTION_DROP_SCHEMA = "dropSchema";
public static final String ACTION_VALIDATE = "validate";
public static final String ACTION_EXPORT = "export";
public static final String ACTION_IMPORT = "import";
@@ -95,6 +96,7 @@ public class MappingTool
ACTION_REFRESH,
ACTION_BUILD_SCHEMA,
ACTION_DROP,
+ ACTION_DROP_SCHEMA,
ACTION_VALIDATE,
ACTION_EXPORT,
ACTION_IMPORT,
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java?rev=1677780&r1=1677779&r2=1677780&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java Tue May 5 10:48:04 2015
@@ -64,6 +64,7 @@ public class SchemaTool {
public static final String ACTION_ADD = "add";
public static final String ACTION_DROP = "drop";
+ public static final String ACTION_DROP_SCHEMA = "dropSchema";
public static final String ACTION_RETAIN = "retain";
public static final String ACTION_REFRESH = "refresh";
public static final String ACTION_BUILD = "build";
@@ -77,6 +78,7 @@ public class SchemaTool {
public static final String[] ACTIONS = new String[]{
ACTION_ADD,
ACTION_DROP,
+ ACTION_DROP_SCHEMA,
ACTION_RETAIN,
ACTION_REFRESH,
ACTION_BUILD,
@@ -341,6 +343,8 @@ public class SchemaTool {
add();
else if (ACTION_DROP.equals(_action))
drop();
+ else if (ACTION_DROP_SCHEMA.equals(_action))
+ dropSchema();
else if (ACTION_RETAIN.equals(_action))
retain();
else if (ACTION_REFRESH.equals(_action))
@@ -374,6 +378,14 @@ public class SchemaTool {
}
/**
+ * Drops all schema components in the schema repository.
+ */
+ protected void dropSchema()
+ throws SQLException {
+ drop(getDBSchemaGroup(false), assertSchemaGroup(), false);
+ }
+
+ /**
* Drops database components that are not mentioned in the schema
* repository.
*/
@@ -414,7 +426,7 @@ public class SchemaTool {
throws SQLException {
SchemaGroup group = new SchemaGroup();
group.addSchema();
- add(group, assertSchemaGroup());
+ buildSchema(group, assertSchemaGroup(), false);
}
/**
@@ -465,6 +477,11 @@ public class SchemaTool {
*/
protected void add(SchemaGroup db, SchemaGroup repos)
throws SQLException {
+
+ buildSchema(db, repos, true);
+ }
+
+ protected void buildSchema(SchemaGroup db, SchemaGroup repos, boolean considerDatabaseState) throws SQLException {
// add sequences
Schema[] schemas = repos.getSchemas();
Schema schema;
@@ -473,7 +490,7 @@ public class SchemaTool {
for (int i = 0; i < schemas.length; i++) {
seqs = schemas[i].getSequences();
for (int j = 0; j < seqs.length; j++) {
- if (db.findSequence(schemas[i], seqs[j].getQualifiedPath()) !=
+ if (considerDatabaseState && db.findSequence(schemas[i], seqs[j].getQualifiedPath()) !=
null)
continue;
@@ -490,7 +507,7 @@ public class SchemaTool {
// order is important in this method; start with columns
Table[] tabs;
- Table dbTable;
+ Table dbTable = null;
Column[] cols;
Column col;
DBIdentifier defaultSchemaName = DBIdentifier.newSchema(_dict.getDefaultSchemaName());
@@ -498,7 +515,9 @@ public class SchemaTool {
tabs = schemas[i].getTables();
for (int j = 0; j < tabs.length; j++) {
cols = tabs[j].getColumns();
- dbTable = db.findTable(schemas[i], tabs[j].getQualifiedPath(), defaultSchemaName);
+ if (considerDatabaseState) {
+ dbTable = db.findTable(schemas[i], tabs[j].getQualifiedPath(), defaultSchemaName);
+ }
for (int k = 0; k < cols.length; k++) {
if (dbTable != null) {
DBIdentifier colName = cols[k].getIdentifier();
@@ -508,11 +527,11 @@ public class SchemaTool {
dbTable.importColumn(cols[k]);
else
_log.warn(_loc.get("add-col", cols[k],
- tabs[j]));
+ tabs[j]));
} else if (!cols[k].equalsColumn(col)) {
_log.warn(_loc.get("bad-col", new Object[]{
- col, dbTable, col.getDescription(),
- cols[k].getDescription() }));
+ col, dbTable, col.getDescription(),
+ cols[k].getDescription() }));
}
}
}
@@ -526,16 +545,18 @@ public class SchemaTool {
tabs = schemas[i].getTables();
for (int j = 0; j < tabs.length; j++) {
pk = tabs[j].getPrimaryKey();
- dbTable = db.findTable(schemas[i], tabs[j].getQualifiedPath());
+ if (considerDatabaseState) {
+ dbTable = db.findTable(schemas[i], tabs[j].getQualifiedPath());
+ }
if (pk != null && !pk.isLogical() && dbTable != null) {
if (dbTable.getPrimaryKey() == null
- && addPrimaryKey(pk))
+ && addPrimaryKey(pk))
dbTable.importPrimaryKey(pk);
else if (dbTable.getPrimaryKey() == null)
_log.warn(_loc.get("add-pk", pk, tabs[j]));
else if (!pk.equalsPrimaryKey(dbTable.getPrimaryKey()))
_log.warn(_loc.get("bad-pk",
- dbTable.getPrimaryKey(), dbTable));
+ dbTable.getPrimaryKey(), dbTable));
}
}
}
@@ -546,7 +567,7 @@ public class SchemaTool {
for (int i = 0; i < schemas.length; i++) {
tabs = schemas[i].getTables();
for (int j = 0; j < tabs.length; j++) {
- if (db.findTable(schemas[i], tabs[j].getQualifiedPath()) != null)
+ if (considerDatabaseState && db.findTable(schemas[i], tabs[j].getQualifiedPath()) != null)
continue;
if (createTable(tabs[j])) {
@@ -572,7 +593,9 @@ public class SchemaTool {
continue;
idxs = tabs[j].getIndexes();
- dbTable = db.findTable(schemas[i], tabs[j].getQualifiedPath());
+ if (considerDatabaseState) {
+ dbTable = db.findTable(schemas[i], tabs[j].getQualifiedPath());
+ }
for (int k = 0; k < idxs.length; k++) {
if (dbTable != null) {
idx = findIndex(dbTable, idxs[k]);
@@ -581,7 +604,7 @@ public class SchemaTool {
dbTable.importIndex(idxs[k]);
else
_log.warn(_loc.get("add-index", idxs[k],
- tabs[j]));
+ tabs[j]));
} else if (!idxs[k].equalsIndex(idx))
_log.warn(_loc.get("bad-index", idx, dbTable));
}
@@ -594,14 +617,16 @@ public class SchemaTool {
for (int i = 0; i < schemas.length; i++) {
tabs = schemas[i].getTables();
for (int j = 0; j < tabs.length; j++) {
- // create unique constraints only on new tables
+ // create unique constraints only on new tables
if (!newTables.contains(tabs[j]))
continue;
uniques = tabs[j].getUniques();
if (uniques == null || uniques.length == 0)
continue;
- dbTable = db.findTable(tabs[j]);
+ if (considerDatabaseState) {
+ dbTable = db.findTable(tabs[j]);
+ }
if (dbTable == null)
continue;
for (int k = 0; k < uniques.length; k++) {
@@ -609,7 +634,7 @@ public class SchemaTool {
}
}
}
-
+
// foreign keys
ForeignKey[] fks;
ForeignKey fk;
@@ -622,7 +647,9 @@ public class SchemaTool {
continue;
fks = tabs[j].getForeignKeys();
- dbTable = db.findTable(schemas[i],tabs[j].getQualifiedPath());
+ if (considerDatabaseState) {
+ dbTable = db.findTable(schemas[i], tabs[j].getQualifiedPath());
+ }
for (int k = 0; k < fks.length; k++) {
if (!fks[k].isLogical() && dbTable != null) {
fk = findForeignKey(dbTable, fks[k]);
@@ -631,7 +658,7 @@ public class SchemaTool {
dbTable.importForeignKey(fks[k]);
else
_log.warn(_loc.get("add-fk",
- fks[k], tabs[j]));
+ fks[k], tabs[j]));
} else if (!fks[k].equalsForeignKey(fk))
_log.warn(_loc.get("bad-fk", fk, dbTable));
}
@@ -767,10 +794,16 @@ public class SchemaTool {
dropTables(drops, db);
}
+ protected void drop(SchemaGroup db, SchemaGroup repos)
+ throws SQLException {
+
+ drop(db, repos, true);
+ }
+
/**
* Drops all database components in the given repository schema.
*/
- protected void drop(SchemaGroup db, SchemaGroup repos)
+ private void drop(SchemaGroup db, SchemaGroup repos, boolean considerDatabaseState)
throws SQLException {
// drop sequences
Schema[] schemas = repos.getSchemas();
@@ -806,6 +839,12 @@ public class SchemaTool {
for (int j = 0; j < tabs.length; j++) {
if (!isDroppable(tabs[j]))
continue;
+
+ if (!considerDatabaseState) {
+ drops.add(tabs[j]);
+ continue;
+ }
+
dbTable = db.findTable(tabs[j]);
if (dbTable == null)
continue;
@@ -872,28 +911,30 @@ public class SchemaTool {
// drop the tables we calculated above
dropTables(drops, db);
- // columns
- Column[] cols;
- Column col;
- for (int i = 0; i < schemas.length; i++) {
- tabs = schemas[i].getTables();
- for (int j = 0; j < tabs.length; j++) {
- if (!isDroppable(tabs[j]))
- continue;
- cols = tabs[j].getColumns();
- dbTable = db.findTable(tabs[j]);
- for (int k = 0; k < cols.length; k++) {
- col = null;
- if (dbTable != null)
- col = dbTable.getColumn(cols[k].getIdentifier());
- if (dbTable == null || col == null)
+ if (considerDatabaseState) {
+ // columns
+ Column[] cols;
+ Column col;
+ for (int i = 0; i < schemas.length; i++) {
+ tabs = schemas[i].getTables();
+ for (int j = 0; j < tabs.length; j++) {
+ if (!isDroppable(tabs[j]))
continue;
-
- if (dropColumn(cols[k])) {
+ cols = tabs[j].getColumns();
+ dbTable = db.findTable(tabs[j]);
+ for (int k = 0; k < cols.length; k++) {
+ col = null;
if (dbTable != null)
- dbTable.removeColumn(col);
- else
- _log.warn(_loc.get("drop-col", cols[k], tabs[j]));
+ col = dbTable.getColumn(cols[k].getIdentifier());
+ if (dbTable == null || col == null)
+ continue;
+
+ if (dropColumn(cols[k])) {
+ if (dbTable != null)
+ dbTable.removeColumn(col);
+ else
+ _log.warn(_loc.get("drop-col", cols[k], tabs[j]));
+ }
}
}
}
Modified: openjpa/trunk/openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/OpenJpaSchemaMojo.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/OpenJpaSchemaMojo.java?rev=1677780&r1=1677779&r2=1677780&view=diff
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/OpenJpaSchemaMojo.java (original)
+++ openjpa/trunk/openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/OpenJpaSchemaMojo.java Tue May 5 10:48:04 2015
@@ -43,6 +43,7 @@ public class OpenJpaSchemaMojo extends A
* <li>add (see MappingTool#ACTION_ADD)</li>
* <li>refresh (see MappingTool#ACTION_REFRESH)</li>
* <li>drop (see MappingTool#ACTION_DROP)</li>
+ * <li>dropSchema (see MappingTool#ACTION_DROP_SCHEMA)</li>
* <li>buildSchema (see MappingTool#ACTION_BUILD_SCHEMA)</li>
* <li>import (see MappingTool#ACTION_IMPORT)</li>
* <li>export (see MappingTool#ACTION_EXPORT)</li>
Modified: openjpa/trunk/openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/OpenJpaSqlMojo.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/OpenJpaSqlMojo.java?rev=1677780&r1=1677779&r2=1677780&view=diff
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/OpenJpaSqlMojo.java (original)
+++ openjpa/trunk/openjpa-tools/openjpa-maven-plugin/src/main/java/org/apache/openjpa/tools/maven/OpenJpaSqlMojo.java Tue May 5 10:48:04 2015
@@ -42,6 +42,7 @@ public class OpenJpaSqlMojo extends Abst
* <li>add (see MappingTool#ACTION_ADD)</li>
* <li>refresh (see MappingTool#ACTION_REFRESH)</li>
* <li>drop (see MappingTool#ACTION_DROP)</li>
+ * <li>dropSchema (see MappingTool#ACTION_DROP_SCHEMA)</li>
* <li>buildSchema (see MappingTool#ACTION_BUILD_SCHEMA)</li>
* <li>import (see MappingTool#ACTION_IMPORT)</li>
* <li>export (see MappingTool#ACTION_EXPORT)</li>