From 5f1c8e0860cc7fdc99782ee1323f4ae2d79b5d44 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Thu, 14 Feb 2019 16:56:02 +0100 Subject: [PATCH] IDEMPIERE-1615 Multiple key columns lead to data corruption or data loss --- migration/i6.2/oracle/201902141651_IDEMPIERE-1615.sql | 11 +++++++++++ .../i6.2/postgresql/201902141651_IDEMPIERE-1615.sql | 8 ++++++++ .../src/org/compiere/model/MColumn.java | 11 +++++++++++ 3 files changed, 30 insertions(+) create mode 100644 migration/i6.2/oracle/201902141651_IDEMPIERE-1615.sql create mode 100644 migration/i6.2/postgresql/201902141651_IDEMPIERE-1615.sql diff --git a/migration/i6.2/oracle/201902141651_IDEMPIERE-1615.sql b/migration/i6.2/oracle/201902141651_IDEMPIERE-1615.sql new file mode 100644 index 0000000000..c5cc814729 --- /dev/null +++ b/migration/i6.2/oracle/201902141651_IDEMPIERE-1615.sql @@ -0,0 +1,11 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-1615 Multiple key columns lead to data corruption or data loss +-- Feb 14, 2019, 4:51:33 PM CET +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','The table has already a key column, there can be just one key.',0,0,'Y',TO_DATE('2019-02-14 16:51:32','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-02-14 16:51:32','YYYY-MM-DD HH24:MI:SS'),100,200488,'KeyColumnAlreadyDefined','D','c5011666-1371-4620-a5bc-aa29265f5d90') +; + +SELECT register_migration_script('201902141651_IDEMPIERE-1615.sql') FROM dual +; + diff --git a/migration/i6.2/postgresql/201902141651_IDEMPIERE-1615.sql b/migration/i6.2/postgresql/201902141651_IDEMPIERE-1615.sql new file mode 100644 index 0000000000..ef2a62b7ac --- /dev/null +++ b/migration/i6.2/postgresql/201902141651_IDEMPIERE-1615.sql @@ -0,0 +1,8 @@ +-- IDEMPIERE-1615 Multiple key columns lead to data corruption or data loss +-- Feb 14, 2019, 4:51:33 PM CET +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','The table has already a key column, there can be just one key.',0,0,'Y',TO_TIMESTAMP('2019-02-14 16:51:32','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-02-14 16:51:32','YYYY-MM-DD HH24:MI:SS'),100,200488,'KeyColumnAlreadyDefined','D','c5011666-1371-4620-a5bc-aa29265f5d90') +; + +SELECT register_migration_script('201902141651_IDEMPIERE-1615.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/compiere/model/MColumn.java b/org.adempiere.base/src/org/compiere/model/MColumn.java index 7c12a848ec..b5f6574179 100644 --- a/org.adempiere.base/src/org/compiere/model/MColumn.java +++ b/org.adempiere.base/src/org/compiere/model/MColumn.java @@ -413,6 +413,17 @@ public class MColumn extends X_AD_Column } } + // IDEMPIERE-1615 Multiple key columns lead to data corruption or data loss + if ((is_ValueChanged(COLUMNNAME_IsKey) || is_ValueChanged(COLUMNNAME_IsActive)) && isKey() && isActive()) { + int cnt = DB.getSQLValueEx(get_TrxName(), + "SELECT COUNT(*) FROM AD_Column WHERE AD_Table_ID=? AND IsActive='Y' AND AD_Column_ID!=? AND IsKey='Y'", + getAD_Table_ID(), getAD_Column_ID()); + if (cnt > 0) { + log.saveError("Error", Msg.getMsg(getCtx(), "KeyColumnAlreadyDefined")); + return false; + } + } + return true; } // beforeSave