From 93f802f7fee4efd6ce4300bf59e6609a00712b97 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Thu, 6 Aug 2015 13:37:51 +1200 Subject: [PATCH] #374 - Drop foreign keys before indexes --- .../avaje/ebean/dbmigration/DdlGenerator.java | 2 +- .../ddlgeneration/platform/BaseTableDdl.java | 11 +++++------ .../ddlgeneration/platform/MySqlDdl.java | 16 +++++++++++++--- .../ddlgeneration/platform/PlatformDdl.java | 13 +++++++++++-- .../createTable-rollbackFirst.txt | 2 +- 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java b/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java index b49991227..637059d27 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java +++ b/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java @@ -254,7 +254,7 @@ public class DdlGenerator implements SpiEbeanPlugin { stmt = stmt.substring(0, stmt.length() - 1); } - logger.trace("executing " + oneOf + " " + getSummary(stmt)); + logger.info("executing " + oneOf + " " + getSummary(stmt)); pstmt = c.prepareStatement(stmt); pstmt.execute(); diff --git a/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdl.java b/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdl.java index a38faa0ca..67d5fed15 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdl.java +++ b/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdl.java @@ -215,17 +215,16 @@ public class BaseTableDdl implements TableDdl { fkeyBuffer.end(); + write.rollbackForeignKeys() + .append(platformDdl.alterTableDropForeignKey(tableName, fkName)) + .endOfStatement(); + if (addIndex) { write.rollbackForeignKeys() - .append("drop index ").append(indexName) + .append(platformDdl.dropIndex(indexName, tableName)) .endOfStatement(); } - write.rollbackForeignKeys() - .append("alter table ").append(tableName).append(" ") - .append(platformDdl.dropForeignKeyConstraint(fkName)) - .endOfStatement(); - write.rollbackForeignKeys().end(); } diff --git a/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/MySqlDdl.java b/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/MySqlDdl.java index 9a1f48517..d6ac50120 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/MySqlDdl.java +++ b/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/MySqlDdl.java @@ -13,9 +13,19 @@ public class MySqlDdl extends PlatformDdl { this.namingConvention.maxConstraintNameLength = 64; } - + /** + * Return the drop index statement. + */ @Override - public String dropForeignKeyConstraint(String fkName) { - return "drop foreign key " + fkName; + public String dropIndex(String indexName, String tableName) { + return "drop index " + indexName + " on " + tableName; } + + /** + * Return the drop foreign key clause. + */ + public String alterTableDropForeignKey(String tableName, String fkName) { + return "alter table " + tableName + " drop foreign key " + fkName; + } + } diff --git a/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/PlatformDdl.java b/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/PlatformDdl.java index 0c2973aa3..69c756249 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/PlatformDdl.java +++ b/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/PlatformDdl.java @@ -79,8 +79,8 @@ public class PlatformDdl { /** * Return the drop foreign key clause. */ - public String dropForeignKeyConstraint(String fkName) { - return "drop constraint "+fkName; + public String alterTableDropForeignKey(String tableName, String fkName) { + return "alter table " + tableName + " drop constraint " + fkName; } /** @@ -131,6 +131,13 @@ public class PlatformDdl { return dropTableIfExists + tableName + dropTableCascade; } + /** + * Return the drop index statement. + */ + public String dropIndex(String indexName, String tableName) { + return "drop index "+indexName; + } + /** * Support lower naming tables and columns in DDL generation. * Tables/Columns with quoted identifiers are exempt. @@ -148,4 +155,6 @@ public class PlatformDdl { public int getMaxTableNameLength() { return namingConvention.getMaxTableNameLength(); } + + } diff --git a/src/test/resources/assert/BaseTableDdlTest/createTable-rollbackFirst.txt b/src/test/resources/assert/BaseTableDdlTest/createTable-rollbackFirst.txt index a6c9768a1..3534ef19b 100644 --- a/src/test/resources/assert/BaseTableDdlTest/createTable-rollbackFirst.txt +++ b/src/test/resources/assert/BaseTableDdlTest/createTable-rollbackFirst.txt @@ -1,3 +1,3 @@ -drop index ix_mytable_order_id; alter table mytable drop constraint fk_mytable_order_id; +drop index ix_mytable_order_id;