From f7385b0de23dbdf32a66e603bf1ee0de252139b1 Mon Sep 17 00:00:00 2001 From: Elaine Tan Date: Fri, 30 Aug 2013 13:26:20 +0800 Subject: [PATCH] IDEMPIERE-1132 Improve AD_Index; AD_View; foreign keys management - Use drop constraint and add constraint when there is a change on foreign key constraint - Fix constraint SQL statement when there is a change on foreign key constraint --- .../src/org/compiere/process/ColumnSync.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/org.adempiere.base.process/src/org/compiere/process/ColumnSync.java b/org.adempiere.base.process/src/org/compiere/process/ColumnSync.java index ad44c111c4..149dd3c21c 100644 --- a/org.adempiere.base.process/src/org/compiere/process/ColumnSync.java +++ b/org.adempiere.base.process/src/org/compiere/process/ColumnSync.java @@ -242,9 +242,13 @@ public class ColumnSync extends SvrProcess DatabaseKey dbForeignKey = htForeignKeys.get(key); if (dbForeignKey.getKeyColumns()[0].equalsIgnoreCase(column.getColumnName())) { - DatabaseKey primaryKey = CreateForeignKey.getPrimaryKey(md, dbForeignKey.getKeyTable()); + DatabaseKey primaryKey = CreateForeignKey.getPrimaryKey(md, referenceTableName); if (primaryKey != null) { + fkConstraintSql.append(DB.SQLSTATEMENT_SEPARATOR); + fkConstraintSql.append("ALTER TABLE ").append(table.getTableName()); + fkConstraintSql.append(" DROP CONSTRAINT ").append(dbForeignKey.getKeyName()); + StringBuilder fkConstraint = new StringBuilder(); fkConstraint.append("CONSTRAINT ").append(dbForeignKey.getKeyName()); fkConstraint.append(" FOREIGN KEY (").append(column.getColumnName()).append(") REFERENCES "); @@ -256,10 +260,10 @@ public class ColumnSync extends SvrProcess fkConstraint.append(", ").append(primaryKey.getKeyColumns()[i]); } fkConstraint.append(")"); - + fkConstraintSql.append(DB.SQLSTATEMENT_SEPARATOR); fkConstraintSql.append("ALTER TABLE ").append(table.getTableName()); - fkConstraintSql.append(" MODIFY "); + fkConstraintSql.append(" ADD "); fkConstraintSql.append(fkConstraint); } modified = true;