From e954df2abe9b2549ec912f38b0e195bec1bab743 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Thu, 9 Jul 2020 19:50:29 +0200 Subject: [PATCH] IDEMPIERE-4358 Processes to drop some objects from database (#161) --- .../oracle/202007041557_IDEMPIERE-4358.sql | 131 ++++++++++++++++++ .../202007041557_IDEMPIERE-4358.sql | 128 +++++++++++++++++ .../src/org/compiere/model/MColumn.java | 16 ++- .../src/org/compiere/model/M_Element.java | 22 ++- .../compiere/process/DatabaseColumnDrop.java | 83 +++++++++++ .../process/DatabaseColumnRename.java | 84 +++++++++++ .../process/DatabaseConstraintDrop.java | 59 ++++++++ .../compiere/process/DatabaseTableDrop.java | 79 +++++++++++ .../compiere/process/DatabaseTableRename.java | 99 +++++++++++++ 9 files changed, 699 insertions(+), 2 deletions(-) create mode 100644 migration/i7.1z/oracle/202007041557_IDEMPIERE-4358.sql create mode 100644 migration/i7.1z/postgresql/202007041557_IDEMPIERE-4358.sql create mode 100644 org.adempiere.base/src/org/compiere/process/DatabaseColumnDrop.java create mode 100644 org.adempiere.base/src/org/compiere/process/DatabaseColumnRename.java create mode 100644 org.adempiere.base/src/org/compiere/process/DatabaseConstraintDrop.java create mode 100644 org.adempiere.base/src/org/compiere/process/DatabaseTableDrop.java create mode 100644 org.adempiere.base/src/org/compiere/process/DatabaseTableRename.java diff --git a/migration/i7.1z/oracle/202007041557_IDEMPIERE-4358.sql b/migration/i7.1z/oracle/202007041557_IDEMPIERE-4358.sql new file mode 100644 index 0000000000..9fe40f6b32 --- /dev/null +++ b/migration/i7.1z/oracle/202007041557_IDEMPIERE-4358.sql @@ -0,0 +1,131 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-4358 Processes to drop some objects from database +-- Jul 4, 2020, 3:35:36 PM CEST +INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU) VALUES (200120,0,0,'Y',TO_DATE('2020-07-04 15:35:35','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:35:35','YYYY-MM-DD HH24:MI:SS'),100,'Drop Database Table','Drop the table in the database','WARNING!!! This is a destructive action, please make a backup before proceeding.','N','DatabaseTableDrop','N','org.compiere.process.DatabaseTableDrop','4','D',0,0,'N','N','Y','N','1fc89f20-060a-424b-8634-2bccbdb6de12') +; + +-- Jul 4, 2020, 3:37:03 PM CEST +INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,Help,PrintName,EntityType,AD_Element_UU) VALUES (203424,0,0,'Y',TO_DATE('2020-07-04 15:36:16','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:36:16','YYYY-MM-DD HH24:MI:SS'),100,'AreYouSure','Are you sure?','Confirmation request when doing dangerous actions.','Please confirm you understand the risk of the action you are taking.','Are you sure?','D','88849a2f-3a27-438d-86c9-ce72b3ea141d') +; + +-- Jul 4, 2020, 3:37:22 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200301,0,0,'Y',TO_DATE('2020-07-04 15:37:21','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:37:21','YYYY-MM-DD HH24:MI:SS'),100,'Are you sure?','Confirmation request when doing dangerous actions.','Please confirm you understand the risk of the action you are taking.',200120,10,20,'N',1,'Y','N','AreYouSure','Y','D',203424,'55023129-ce02-4ce1-939a-43832c003629','N','N') +; + +-- Jul 4, 2020, 3:38:19 PM CEST +INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,Help,PrintName,EntityType,AD_Element_UU) VALUES (203425,0,0,'Y',TO_DATE('2020-07-04 15:38:01','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:38:01','YYYY-MM-DD HH24:MI:SS'),100,'IsEvenWithData','Even with data?',NULL,NULL,'Even with data?','D','6c63e33e-2313-483d-abd2-f92e7b8c08fe') +; + +-- Jul 4, 2020, 3:38:30 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200302,0,0,'Y',TO_DATE('2020-07-04 15:38:30','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:38:30','YYYY-MM-DD HH24:MI:SS'),100,'Even with data?',200120,20,20,'N',1,'Y','N','IsEvenWithData','Y','D',203425,'9825273a-d91d-46b5-99b3-95050e17ec62','N','N') +; + +-- Jul 4, 2020, 3:46:59 PM CEST +INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU,AllowMultipleExecution) VALUES (200121,0,0,'Y',TO_DATE('2020-07-04 15:46:59','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:46:59','YYYY-MM-DD HH24:MI:SS'),100,'Rename Database Table','Rename the table in the database and dictionary','This process renames the table in database, the dictionary and also the associated columns _ID and _UU','N','DatabaseTableRename','N','org.compiere.process.DatabaseTableRename','4','D',0,0,'N','N','Y','N','e012d5a2-f228-4864-8232-7bb4434456d1','P') +; + +-- Jul 4, 2020, 3:47:39 PM CEST +INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,Help,PrintName,EntityType,AD_Element_UU) VALUES (203426,0,0,'Y',TO_DATE('2020-07-04 15:47:26','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:47:26','YYYY-MM-DD HH24:MI:SS'),100,'NewName','New Name',NULL,NULL,'New Name','D','8741354b-d4cf-4853-8ce3-11fc1159f721') +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_Element SET ColumnName='NewTableName', Name='New Table Name', PrintName='New Table Name',Updated=TO_DATE('2020-07-04 15:48:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Element_ID=203426 +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_Column SET ColumnName='NewTableName', Name='New Table Name', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=203426 +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_Process_Para SET ColumnName='NewTableName', Name='New Table Name', Description=NULL, Help=NULL, AD_Element_ID=203426 WHERE UPPER(ColumnName)='NEWTABLENAME' AND IsCentrallyMaintained='Y' AND AD_Element_ID IS NULL +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_Process_Para SET ColumnName='NewTableName', Name='New Table Name', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=203426 AND IsCentrallyMaintained='Y' +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_InfoColumn SET ColumnName='NewTableName', Name='New Table Name', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=203426 AND IsCentrallyMaintained='Y' +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_Field SET Name='New Table Name', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Column_ID IN (SELECT AD_Column_ID FROM AD_Column WHERE AD_Element_ID=203426) AND IsCentrallyMaintained='Y' +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_PrintFormatItem SET PrintName='New Table Name', Name='New Table Name' WHERE IsCentrallyMaintained='Y' AND EXISTS (SELECT * FROM AD_Column c WHERE c.AD_Column_ID=AD_PrintFormatItem.AD_Column_ID AND c.AD_Element_ID=203426) +; + +-- Jul 4, 2020, 3:49:06 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200303,0,0,'Y',TO_DATE('2020-07-04 15:49:06','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:49:06','YYYY-MM-DD HH24:MI:SS'),100,'New Table Name',200121,10,10,'N',40,'Y','NewTableName','Y','D',203426,'1a83701b-42ee-4505-a864-3a7322c2d77f','N','N') +; + +-- Jul 4, 2020, 3:50:04 PM CEST +INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU,AllowMultipleExecution) VALUES (200122,0,0,'Y',TO_DATE('2020-07-04 15:50:04','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:50:04','YYYY-MM-DD HH24:MI:SS'),100,'Drop Database Column','Drop the column in the database','WARNING!!! This is a destructive action, please make a backup before proceeding.','N','DatabaseColumneDrop','N','org.compiere.process.DatabaseColumnDrop','4','D',0,0,'N','N','Y','N','6e752ca3-f909-43f6-b8ae-d45c68a5d0c2','P') +; + +-- Jul 4, 2020, 3:50:21 PM CEST +UPDATE AD_Process SET Description='Drop the table in the database', Help='WARNING!!! This is a destructive action, please make a backup before proceeding.', ProcedureName=NULL, IsReport='N', IsDirectPrint='N', AD_ReportView_ID=NULL, Classname='org.compiere.process.DatabaseTableDrop', AccessLevel='4', AD_PrintFormat_ID=NULL, AD_Workflow_ID=NULL, IsBetaFunctionality='N', IsServerProcess='N', ShowHelp='Y', JasperReport=NULL, AD_Form_ID=NULL,Updated=TO_DATE('2020-07-04 15:50:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=200122 +; + +-- Jul 4, 2020, 3:50:22 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU) VALUES (200304,0,0,'Y',TO_DATE('2020-07-04 15:50:21','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:50:21','YYYY-MM-DD HH24:MI:SS'),100,'Are you sure?','Confirmation request when doing dangerous actions.','Please confirm you understand the risk of the action you are taking.',200122,10,20,'N',1,'Y','N','AreYouSure','Y','D',203424,'bad8ba70-5d16-4440-a14b-5437fddc371a') +; + +-- Jul 4, 2020, 3:50:22 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU) VALUES (200305,0,0,'Y',TO_DATE('2020-07-04 15:50:22','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:50:22','YYYY-MM-DD HH24:MI:SS'),100,'Even with data?',200122,20,20,'N',1,'Y','N','IsEvenWithData','Y','D',203425,'dc0f76f7-2a5d-49ad-9f01-6ab1e7cafbe2') +; + +-- Jul 4, 2020, 3:50:48 PM CEST +UPDATE AD_Process SET Description='Drop the column in the database', Value='DatabaseColumnDrop', Classname='org.compiere.process.DatabaseColumnDrop',Updated=TO_DATE('2020-07-04 15:50:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=200122 +; + +-- Jul 4, 2020, 3:51:23 PM CEST +INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU,AllowMultipleExecution) VALUES (200123,0,0,'Y',TO_DATE('2020-07-04 15:51:22','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:51:22','YYYY-MM-DD HH24:MI:SS'),100,'Drop Database Constraint','Drop the constraint in the database','WARNING!!! This is a destructive action, please make a backup before proceeding.','N','DatabaseConstraintDrop','N','org.compiere.process.DatabaseConstraintDrop','4','D',0,0,'N','N','Y','N','6a3ee613-efb9-456b-b713-c95e3f99ffe6','P') +; + +-- Jul 4, 2020, 3:51:31 PM CEST +UPDATE AD_Process SET Help=NULL,Updated=TO_DATE('2020-07-04 15:51:31','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=200123 +; + +-- Jul 4, 2020, 3:52:38 PM CEST +INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU,AllowMultipleExecution) VALUES (200124,0,0,'Y',TO_DATE('2020-07-04 15:52:38','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:52:38','YYYY-MM-DD HH24:MI:SS'),100,'Rename Column(s) in Database','Rename Column(s) in Database','This process rename all the columns associated with the element','N','DatabaseColumnRename','N','org.compiere.process.DatabaseColumnRename','4','D',0,0,'N','N','Y','N','f56e0b37-4f5a-4d23-ae3b-6f9219e2a1a3','P') +; + +-- Jul 4, 2020, 3:53:39 PM CEST +INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,Action,AD_Tab_ID,AD_Process_ID,SeqNo,EntityType) VALUES (0,0,TO_DATE('2020-07-04 15:53:39','YYYY-MM-DD HH24:MI:SS'),100,'DatabaseColumnRename','Y',200102,'DatabaseColumnRename',TO_DATE('2020-07-04 15:53:39','YYYY-MM-DD HH24:MI:SS'),100,'N','7091148c-f9a2-44d0-8e1f-7425c117e275','W',203,200124,10,'D') +; + +-- Jul 4, 2020, 3:54:39 PM CEST +INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,Help,PrintName,EntityType,AD_Element_UU) VALUES (203427,0,0,'Y',TO_DATE('2020-07-04 15:53:53','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:53:53','YYYY-MM-DD HH24:MI:SS'),100,'NewColumnName','New Column Name',NULL,NULL,'New Column Name','D','94dc7592-831a-4a04-b21a-9dc33f2f8c97') +; + +-- Jul 4, 2020, 3:54:51 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200306,0,0,'Y',TO_DATE('2020-07-04 15:54:50','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-07-04 15:54:50','YYYY-MM-DD HH24:MI:SS'),100,'New Column Name',200124,10,10,'N',30,'Y','NewColumnName','Y','D',203427,'0b888e85-be69-4818-a657-d1c436ee3cc2','N','N') +; + +-- Jul 4, 2020, 3:55:38 PM CEST +INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,Action,AD_Tab_ID,AD_Process_ID,SeqNo,EntityType) VALUES (0,0,TO_DATE('2020-07-04 15:55:38','YYYY-MM-DD HH24:MI:SS'),100,'DatabaseTableRename','Y',200103,'DatabaseTableRename',TO_DATE('2020-07-04 15:55:38','YYYY-MM-DD HH24:MI:SS'),100,'N','c4c20409-42a7-4dcc-9b22-c2c9b288eda9','W',100,200121,10,'D') +; + +-- Jul 4, 2020, 3:55:55 PM CEST +INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,Action,AD_Tab_ID,AD_Process_ID,SeqNo,EntityType) VALUES (0,0,TO_DATE('2020-07-04 15:55:55','YYYY-MM-DD HH24:MI:SS'),100,'DatabaseTableDrop','Y',200104,'DatabaseTableDrop',TO_DATE('2020-07-04 15:55:55','YYYY-MM-DD HH24:MI:SS'),100,'N','8760c7f5-8978-41e5-bb04-65fc5398ad4a','W',100,200120,20,'D') +; + +-- Jul 4, 2020, 3:56:18 PM CEST +INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,Action,AD_Tab_ID,AD_Process_ID,SeqNo,EntityType) VALUES (0,0,TO_DATE('2020-07-04 15:56:17','YYYY-MM-DD HH24:MI:SS'),100,'DatabaseColumnDrop','Y',200105,'DatabaseColumnDrop',TO_DATE('2020-07-04 15:56:17','YYYY-MM-DD HH24:MI:SS'),100,'N','ae7e64e8-1fd8-40d6-855b-71f4f7a2f449','W',101,200122,10,'D') +; + +-- Jul 4, 2020, 3:57:08 PM CEST +INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,Action,AD_Tab_ID,AD_Process_ID,DisplayLogic,SeqNo,EntityType) VALUES (0,0,TO_DATE('2020-07-04 15:57:07','YYYY-MM-DD HH24:MI:SS'),100,'DatabaseConstraintDrop','Y',200106,'DatabaseConstraintDrop',TO_DATE('2020-07-04 15:57:07','YYYY-MM-DD HH24:MI:SS'),100,'N','b6285a11-29d9-4ff8-bbc9-436a3202cffd','W',101,200123,'@FKConstraintName@!''''',20,'D') +; + +-- Jul 5, 2020, 2:16:24 PM CEST +UPDATE AD_Column SET IsToolbarButton='B',Updated=TO_DATE('2020-07-05 14:16:24','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6483 +; + +SELECT register_migration_script('202007041557_IDEMPIERE-4358.sql') FROM dual +; + diff --git a/migration/i7.1z/postgresql/202007041557_IDEMPIERE-4358.sql b/migration/i7.1z/postgresql/202007041557_IDEMPIERE-4358.sql new file mode 100644 index 0000000000..a3162cda69 --- /dev/null +++ b/migration/i7.1z/postgresql/202007041557_IDEMPIERE-4358.sql @@ -0,0 +1,128 @@ +-- IDEMPIERE-4358 Processes to drop some objects from database +-- Jul 4, 2020, 3:35:36 PM CEST +INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU) VALUES (200120,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:35:35','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:35:35','YYYY-MM-DD HH24:MI:SS'),100,'Drop Database Table','Drop the table in the database','WARNING!!! This is a destructive action, please make a backup before proceeding.','N','DatabaseTableDrop','N','org.compiere.process.DatabaseTableDrop','4','D',0,0,'N','N','Y','N','1fc89f20-060a-424b-8634-2bccbdb6de12') +; + +-- Jul 4, 2020, 3:37:03 PM CEST +INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,Help,PrintName,EntityType,AD_Element_UU) VALUES (203424,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:36:16','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:36:16','YYYY-MM-DD HH24:MI:SS'),100,'AreYouSure','Are you sure?','Confirmation request when doing dangerous actions.','Please confirm you understand the risk of the action you are taking.','Are you sure?','D','88849a2f-3a27-438d-86c9-ce72b3ea141d') +; + +-- Jul 4, 2020, 3:37:22 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200301,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:37:21','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:37:21','YYYY-MM-DD HH24:MI:SS'),100,'Are you sure?','Confirmation request when doing dangerous actions.','Please confirm you understand the risk of the action you are taking.',200120,10,20,'N',1,'Y','N','AreYouSure','Y','D',203424,'55023129-ce02-4ce1-939a-43832c003629','N','N') +; + +-- Jul 4, 2020, 3:38:19 PM CEST +INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,Help,PrintName,EntityType,AD_Element_UU) VALUES (203425,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:38:01','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:38:01','YYYY-MM-DD HH24:MI:SS'),100,'IsEvenWithData','Even with data?',NULL,NULL,'Even with data?','D','6c63e33e-2313-483d-abd2-f92e7b8c08fe') +; + +-- Jul 4, 2020, 3:38:30 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200302,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:38:30','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:38:30','YYYY-MM-DD HH24:MI:SS'),100,'Even with data?',200120,20,20,'N',1,'Y','N','IsEvenWithData','Y','D',203425,'9825273a-d91d-46b5-99b3-95050e17ec62','N','N') +; + +-- Jul 4, 2020, 3:46:59 PM CEST +INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU,AllowMultipleExecution) VALUES (200121,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:46:59','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:46:59','YYYY-MM-DD HH24:MI:SS'),100,'Rename Database Table','Rename the table in the database and dictionary','This process renames the table in database, the dictionary and also the associated columns _ID and _UU','N','DatabaseTableRename','N','org.compiere.process.DatabaseTableRename','4','D',0,0,'N','N','Y','N','e012d5a2-f228-4864-8232-7bb4434456d1','P') +; + +-- Jul 4, 2020, 3:47:39 PM CEST +INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,Help,PrintName,EntityType,AD_Element_UU) VALUES (203426,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:47:26','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:47:26','YYYY-MM-DD HH24:MI:SS'),100,'NewName','New Name',NULL,NULL,'New Name','D','8741354b-d4cf-4853-8ce3-11fc1159f721') +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_Element SET ColumnName='NewTableName', Name='New Table Name', PrintName='New Table Name',Updated=TO_TIMESTAMP('2020-07-04 15:48:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Element_ID=203426 +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_Column SET ColumnName='NewTableName', Name='New Table Name', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=203426 +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_Process_Para SET ColumnName='NewTableName', Name='New Table Name', Description=NULL, Help=NULL, AD_Element_ID=203426 WHERE UPPER(ColumnName)='NEWTABLENAME' AND IsCentrallyMaintained='Y' AND AD_Element_ID IS NULL +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_Process_Para SET ColumnName='NewTableName', Name='New Table Name', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=203426 AND IsCentrallyMaintained='Y' +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_InfoColumn SET ColumnName='NewTableName', Name='New Table Name', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=203426 AND IsCentrallyMaintained='Y' +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_Field SET Name='New Table Name', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Column_ID IN (SELECT AD_Column_ID FROM AD_Column WHERE AD_Element_ID=203426) AND IsCentrallyMaintained='Y' +; + +-- Jul 4, 2020, 3:48:59 PM CEST +UPDATE AD_PrintFormatItem SET PrintName='New Table Name', Name='New Table Name' WHERE IsCentrallyMaintained='Y' AND EXISTS (SELECT * FROM AD_Column c WHERE c.AD_Column_ID=AD_PrintFormatItem.AD_Column_ID AND c.AD_Element_ID=203426) +; + +-- Jul 4, 2020, 3:49:06 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200303,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:49:06','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:49:06','YYYY-MM-DD HH24:MI:SS'),100,'New Table Name',200121,10,10,'N',40,'Y','NewTableName','Y','D',203426,'1a83701b-42ee-4505-a864-3a7322c2d77f','N','N') +; + +-- Jul 4, 2020, 3:50:04 PM CEST +INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU,AllowMultipleExecution) VALUES (200122,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:50:04','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:50:04','YYYY-MM-DD HH24:MI:SS'),100,'Drop Database Column','Drop the column in the database','WARNING!!! This is a destructive action, please make a backup before proceeding.','N','DatabaseColumneDrop','N','org.compiere.process.DatabaseColumnDrop','4','D',0,0,'N','N','Y','N','6e752ca3-f909-43f6-b8ae-d45c68a5d0c2','P') +; + +-- Jul 4, 2020, 3:50:21 PM CEST +UPDATE AD_Process SET Description='Drop the table in the database', Help='WARNING!!! This is a destructive action, please make a backup before proceeding.', ProcedureName=NULL, IsReport='N', IsDirectPrint='N', AD_ReportView_ID=NULL, Classname='org.compiere.process.DatabaseTableDrop', AccessLevel='4', AD_PrintFormat_ID=NULL, AD_Workflow_ID=NULL, IsBetaFunctionality='N', IsServerProcess='N', ShowHelp='Y', JasperReport=NULL, AD_Form_ID=NULL,Updated=TO_TIMESTAMP('2020-07-04 15:50:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=200122 +; + +-- Jul 4, 2020, 3:50:22 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU) VALUES (200304,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:50:21','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:50:21','YYYY-MM-DD HH24:MI:SS'),100,'Are you sure?','Confirmation request when doing dangerous actions.','Please confirm you understand the risk of the action you are taking.',200122,10,20,'N',1,'Y','N','AreYouSure','Y','D',203424,'bad8ba70-5d16-4440-a14b-5437fddc371a') +; + +-- Jul 4, 2020, 3:50:22 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU) VALUES (200305,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:50:22','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:50:22','YYYY-MM-DD HH24:MI:SS'),100,'Even with data?',200122,20,20,'N',1,'Y','N','IsEvenWithData','Y','D',203425,'dc0f76f7-2a5d-49ad-9f01-6ab1e7cafbe2') +; + +-- Jul 4, 2020, 3:50:48 PM CEST +UPDATE AD_Process SET Description='Drop the column in the database', Value='DatabaseColumnDrop', Classname='org.compiere.process.DatabaseColumnDrop',Updated=TO_TIMESTAMP('2020-07-04 15:50:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=200122 +; + +-- Jul 4, 2020, 3:51:23 PM CEST +INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU,AllowMultipleExecution) VALUES (200123,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:51:22','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:51:22','YYYY-MM-DD HH24:MI:SS'),100,'Drop Database Constraint','Drop the constraint in the database','WARNING!!! This is a destructive action, please make a backup before proceeding.','N','DatabaseConstraintDrop','N','org.compiere.process.DatabaseConstraintDrop','4','D',0,0,'N','N','Y','N','6a3ee613-efb9-456b-b713-c95e3f99ffe6','P') +; + +-- Jul 4, 2020, 3:51:31 PM CEST +UPDATE AD_Process SET Help=NULL,Updated=TO_TIMESTAMP('2020-07-04 15:51:31','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=200123 +; + +-- Jul 4, 2020, 3:52:38 PM CEST +INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU,AllowMultipleExecution) VALUES (200124,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:52:38','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:52:38','YYYY-MM-DD HH24:MI:SS'),100,'Rename Column(s) in Database','Rename Column(s) in Database','This process rename all the columns associated with the element','N','DatabaseColumnRename','N','org.compiere.process.DatabaseColumnRename','4','D',0,0,'N','N','Y','N','f56e0b37-4f5a-4d23-ae3b-6f9219e2a1a3','P') +; + +-- Jul 4, 2020, 3:53:39 PM CEST +INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,"action",AD_Tab_ID,AD_Process_ID,SeqNo,EntityType) VALUES (0,0,TO_TIMESTAMP('2020-07-04 15:53:39','YYYY-MM-DD HH24:MI:SS'),100,'DatabaseColumnRename','Y',200102,'DatabaseColumnRename',TO_TIMESTAMP('2020-07-04 15:53:39','YYYY-MM-DD HH24:MI:SS'),100,'N','7091148c-f9a2-44d0-8e1f-7425c117e275','W',203,200124,10,'D') +; + +-- Jul 4, 2020, 3:54:39 PM CEST +INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,Help,PrintName,EntityType,AD_Element_UU) VALUES (203427,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:53:53','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:53:53','YYYY-MM-DD HH24:MI:SS'),100,'NewColumnName','New Column Name',NULL,NULL,'New Column Name','D','94dc7592-831a-4a04-b21a-9dc33f2f8c97') +; + +-- Jul 4, 2020, 3:54:51 PM CEST +INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200306,0,0,'Y',TO_TIMESTAMP('2020-07-04 15:54:50','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-07-04 15:54:50','YYYY-MM-DD HH24:MI:SS'),100,'New Column Name',200124,10,10,'N',30,'Y','NewColumnName','Y','D',203427,'0b888e85-be69-4818-a657-d1c436ee3cc2','N','N') +; + +-- Jul 4, 2020, 3:55:38 PM CEST +INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,"action",AD_Tab_ID,AD_Process_ID,SeqNo,EntityType) VALUES (0,0,TO_TIMESTAMP('2020-07-04 15:55:38','YYYY-MM-DD HH24:MI:SS'),100,'DatabaseTableRename','Y',200103,'DatabaseTableRename',TO_TIMESTAMP('2020-07-04 15:55:38','YYYY-MM-DD HH24:MI:SS'),100,'N','c4c20409-42a7-4dcc-9b22-c2c9b288eda9','W',100,200121,10,'D') +; + +-- Jul 4, 2020, 3:55:55 PM CEST +INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,"action",AD_Tab_ID,AD_Process_ID,SeqNo,EntityType) VALUES (0,0,TO_TIMESTAMP('2020-07-04 15:55:55','YYYY-MM-DD HH24:MI:SS'),100,'DatabaseTableDrop','Y',200104,'DatabaseTableDrop',TO_TIMESTAMP('2020-07-04 15:55:55','YYYY-MM-DD HH24:MI:SS'),100,'N','8760c7f5-8978-41e5-bb04-65fc5398ad4a','W',100,200120,20,'D') +; + +-- Jul 4, 2020, 3:56:18 PM CEST +INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,"action",AD_Tab_ID,AD_Process_ID,SeqNo,EntityType) VALUES (0,0,TO_TIMESTAMP('2020-07-04 15:56:17','YYYY-MM-DD HH24:MI:SS'),100,'DatabaseColumnDrop','Y',200105,'DatabaseColumnDrop',TO_TIMESTAMP('2020-07-04 15:56:17','YYYY-MM-DD HH24:MI:SS'),100,'N','ae7e64e8-1fd8-40d6-855b-71f4f7a2f449','W',101,200122,10,'D') +; + +-- Jul 4, 2020, 3:57:08 PM CEST +INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,"action",AD_Tab_ID,AD_Process_ID,DisplayLogic,SeqNo,EntityType) VALUES (0,0,TO_TIMESTAMP('2020-07-04 15:57:07','YYYY-MM-DD HH24:MI:SS'),100,'DatabaseConstraintDrop','Y',200106,'DatabaseConstraintDrop',TO_TIMESTAMP('2020-07-04 15:57:07','YYYY-MM-DD HH24:MI:SS'),100,'N','b6285a11-29d9-4ff8-bbc9-436a3202cffd','W',101,200123,'@FKConstraintName@!''''',20,'D') +; + +-- Jul 5, 2020, 2:16:24 PM CEST +UPDATE AD_Column SET IsToolbarButton='B',Updated=TO_TIMESTAMP('2020-07-05 14:16:24','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6483 +; + +SELECT register_migration_script('202007041557_IDEMPIERE-4358.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 9a34f6e04a..052bcc8199 100644 --- a/org.adempiere.base/src/org/compiere/model/MColumn.java +++ b/org.adempiere.base/src/org/compiere/model/MColumn.java @@ -53,7 +53,7 @@ public class MColumn extends X_AD_Column /** * */ - private static final long serialVersionUID = -6905852892037761285L; + private static final long serialVersionUID = 5934334786732835926L; public static MColumn get (Properties ctx, int AD_Column_ID) { @@ -1181,4 +1181,18 @@ public class MColumn extends X_AD_Column return query; } + public String renameDBColumn(String newColumnName) { + int rvalue = -1; + String sql; + if (! newColumnName.toLowerCase().equals(getColumnName().toLowerCase())) { + MTable table = new MTable(getCtx(), getAD_Table_ID(), get_TrxName()); + sql = "ALTER TABLE " + table.getTableName() + " RENAME COLUMN " + getColumnName() + " TO " + newColumnName; + rvalue = DB.executeUpdateEx(sql, get_TrxName()); + } else { + sql = getColumnName() + " - rename not required"; + } + setColumnName(newColumnName); + return rvalue + " - " + sql; + } + } // MColumn diff --git a/org.adempiere.base/src/org/compiere/model/M_Element.java b/org.adempiere.base/src/org/compiere/model/M_Element.java index 607a72a60f..afb2e7acb6 100644 --- a/org.adempiere.base/src/org/compiere/model/M_Element.java +++ b/org.adempiere.base/src/org/compiere/model/M_Element.java @@ -17,11 +17,13 @@ package org.compiere.model; import java.sql.ResultSet; +import java.util.List; import java.util.Properties; import java.util.logging.Level; import org.adempiere.exceptions.DBException; import org.compiere.db.Database; +import org.compiere.process.ProcessInfo; import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.Msg; @@ -328,5 +330,23 @@ public class M_Element extends X_AD_Element sb.append (get_ID()).append ("-").append (getColumnName()).append ("]"); return sb.toString (); } // toString - + + public void renameDBColumn(String newColumnName, ProcessInfo pi) { + List columns = new Query(getCtx(), MColumn.Table_Name, "AD_Element_ID=?", get_TrxName()) + .setParameters(getAD_Element_ID()) + .setOrderBy("AD_Column_ID") + .list(); + + for (MColumn column : columns) { + String msg = column.renameDBColumn(newColumnName); + column.saveEx(); + if (pi != null) { + pi.addLog(0, null, null, msg, MColumn.Table_ID, column.getAD_Column_ID()); + } + } + + setColumnName(newColumnName); + return; + } + } // M_Element diff --git a/org.adempiere.base/src/org/compiere/process/DatabaseColumnDrop.java b/org.adempiere.base/src/org/compiere/process/DatabaseColumnDrop.java new file mode 100644 index 0000000000..7a1d585daa --- /dev/null +++ b/org.adempiere.base/src/org/compiere/process/DatabaseColumnDrop.java @@ -0,0 +1,83 @@ +/*********************************************************************** + * This file is part of iDempiere ERP Open Source * + * http://www.idempiere.org * + * * + * Copyright (C) Contributors * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * + * MA 02110-1301, USA. * + * * + * Contributors: * + * - Carlos Ruiz - globalqss * + **********************************************************************/ + +package org.compiere.process; + +import java.util.logging.Level; + +import org.adempiere.exceptions.AdempiereException; +import org.compiere.model.MColumn; +import org.compiere.model.MTable; +import org.compiere.util.DB; +import org.compiere.util.Msg; +import org.compiere.util.Util; + +public class DatabaseColumnDrop extends SvrProcess { + + private int p_AD_Column_ID = 0; + // User Confirmation + private boolean p_AreYouSure; + // Drop the table even if it has data + private boolean p_IsEvenWithData; + + @Override + protected void prepare() { + for (ProcessInfoParameter para : getParameter()) { + String name = para.getParameterName(); + if ("AreYouSure".equals(name)) { + p_AreYouSure = para.getParameterAsBoolean(); + } else if ("IsEvenWithData".equals(name)) { + p_IsEvenWithData = para.getParameterAsBoolean(); + } else { + if (log.isLoggable(Level.INFO)) + log.log(Level.INFO, "Custom Parameter: " + name + "=" + para.getInfo()); + } + } + p_AD_Column_ID = getRecord_ID(); + } + + @Override + protected String doIt() throws Exception { + MColumn column = new MColumn(getCtx(), p_AD_Column_ID, get_TrxName()); + log.info(column.toString()); + MTable table = new MTable(getCtx(), column.getAD_Table_ID(), get_TrxName()); + if (!p_AreYouSure) { + throw new AdempiereException(Util.cleanAmp(Msg.getMsg(getCtx(), "Cancel"))); + } + if (!p_IsEvenWithData) { + int cnt = DB.getSQLValueEx(get_TrxName(), "SELECT COUNT(*) FROM " + table.getTableName() + " WHERE " + + column.getColumnName() + " IS NOT NULL"); + if (cnt > 0) { + throw new AdempiereException( + Util.cleanAmp(Msg.parseTranslation(getCtx(), "@Cancel@. @Records@ = " + cnt))); + } + } + + String sql = "ALTER TABLE " + table.getTableName() + " DROP COLUMN " + column.getColumnName(); + int rvalue = DB.executeUpdateEx(sql, get_TrxName()); + + return rvalue + " - " + sql; + } +} // DatabaseColumnDrop diff --git a/org.adempiere.base/src/org/compiere/process/DatabaseColumnRename.java b/org.adempiere.base/src/org/compiere/process/DatabaseColumnRename.java new file mode 100644 index 0000000000..77c7cfbe51 --- /dev/null +++ b/org.adempiere.base/src/org/compiere/process/DatabaseColumnRename.java @@ -0,0 +1,84 @@ +/*********************************************************************** + * This file is part of iDempiere ERP Open Source * + * http://www.idempiere.org * + * * + * Copyright (C) Contributors * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * + * MA 02110-1301, USA. * + * * + * Contributors: * + * - Carlos Ruiz - globalqss * + **********************************************************************/ + +package org.compiere.process; + +import java.util.logging.Level; + +import org.adempiere.exceptions.AdempiereException; +import org.compiere.model.M_Element; +import org.compiere.util.DB; +import org.compiere.util.Msg; +import org.compiere.util.Util; + +public class DatabaseColumnRename extends SvrProcess { + + private int p_AD_Element_ID = 0; + // New Column Name + private String p_NewColumnName; + + @Override + protected void prepare() { + for (ProcessInfoParameter para : getParameter()) { + String name = para.getParameterName(); + if ("NewColumnName".equals(name)) { + p_NewColumnName = para.getParameterAsString(); + } else { + if (log.isLoggable(Level.INFO)) + log.log(Level.INFO, "Custom Parameter: " + name + "=" + para.getInfo()); + } + } + p_AD_Element_ID = getRecord_ID(); + } + + @Override + protected String doIt() throws Exception { + M_Element element = new M_Element(getCtx(), p_AD_Element_ID, get_TrxName()); + log.info(element.toString()); + if ( Util.isEmpty(p_NewColumnName, true) + || p_NewColumnName.toLowerCase().equals(element.getColumnName().toLowerCase())) { + throw new AdempiereException(Util.cleanAmp(Msg.parseTranslation(getCtx(), "@NotValid@: @NewColumnName@"))); + } + // Validate there is not another element with new column name + int cnt = DB.getSQLValueEx(get_TrxName(), + "SELECT COUNT(*) FROM AD_Element WHERE LOWER(ColumnName)=LOWER(?)", + p_NewColumnName); + if (cnt > 0) { + throw new AdempiereException(Util.cleanAmp(Msg.parseTranslation(getCtx(), "@AlreadyExists@: @ColumnName@ = " + p_NewColumnName))); + } + // Validate there are not columns with this element in views + cnt = DB.getSQLValueEx(get_TrxName(), + "SELECT COUNT(*) FROM AD_Column c JOIN AD_Table t ON (t.AD_Table_ID=c.AD_Table_ID) WHERE c.AD_Element_ID=? AND t.IsView='Y'", + p_AD_Element_ID); + if (cnt > 0) { + throw new AdempiereException(Util.cleanAmp(Msg.parseTranslation(getCtx(), "Not implemented yet - cannot change column in view"))); + } + + element.renameDBColumn(p_NewColumnName, getProcessInfo()); + element.saveEx(); + + return "@OK@"; + } +} // DatabaseColumnRename diff --git a/org.adempiere.base/src/org/compiere/process/DatabaseConstraintDrop.java b/org.adempiere.base/src/org/compiere/process/DatabaseConstraintDrop.java new file mode 100644 index 0000000000..8a1d3caf1d --- /dev/null +++ b/org.adempiere.base/src/org/compiere/process/DatabaseConstraintDrop.java @@ -0,0 +1,59 @@ +/*********************************************************************** + * This file is part of iDempiere ERP Open Source * + * http://www.idempiere.org * + * * + * Copyright (C) Contributors * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * + * MA 02110-1301, USA. * + * * + * Contributors: * + * - Carlos Ruiz - globalqss * + **********************************************************************/ + +package org.compiere.process; + +import org.adempiere.exceptions.AdempiereException; +import org.compiere.model.MColumn; +import org.compiere.model.MTable; +import org.compiere.util.DB; +import org.compiere.util.Msg; +import org.compiere.util.Util; + +public class DatabaseConstraintDrop extends SvrProcess { + + private int p_AD_Column_ID = 0; + + @Override + protected void prepare() { + p_AD_Column_ID = getRecord_ID(); + } + + @Override + protected String doIt() throws Exception { + MColumn column = new MColumn(getCtx(), p_AD_Column_ID, get_TrxName()); + log.info(column.toString()); + if (Util.isEmpty(column.getFKConstraintName(), true)) { + throw new AdempiereException(Msg.parseTranslation(getCtx(), "@NotValid@: @FKConstraintName@")); + } + + MTable table = new MTable(getCtx(), column.getAD_Table_ID(), get_TrxName()); + + String sql = "ALTER TABLE " + table.getTableName() + " DROP CONSTRAINT " + column.getFKConstraintName(); + int rvalue = DB.executeUpdateEx(sql, get_TrxName()); + + return rvalue + " - " + sql; + } +} // DatabaseConstraintDrop diff --git a/org.adempiere.base/src/org/compiere/process/DatabaseTableDrop.java b/org.adempiere.base/src/org/compiere/process/DatabaseTableDrop.java new file mode 100644 index 0000000000..79c6e4716a --- /dev/null +++ b/org.adempiere.base/src/org/compiere/process/DatabaseTableDrop.java @@ -0,0 +1,79 @@ +/*********************************************************************** + * This file is part of iDempiere ERP Open Source * + * http://www.idempiere.org * + * * + * Copyright (C) Contributors * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * + * MA 02110-1301, USA. * + * * + * Contributors: * + * - Carlos Ruiz - globalqss * + **********************************************************************/ + +package org.compiere.process; + +import java.util.logging.Level; + +import org.adempiere.exceptions.AdempiereException; +import org.compiere.model.MTable; +import org.compiere.util.DB; +import org.compiere.util.Msg; +import org.compiere.util.Util; + +public class DatabaseTableDrop extends SvrProcess { + + private int p_AD_Table_ID = 0; + // User Confirmation + private boolean p_AreYouSure; + // Drop the table even if it has data + private boolean p_IsEvenWithData; + + @Override + protected void prepare() { + for (ProcessInfoParameter para : getParameter()) { + String name = para.getParameterName(); + if ("AreYouSure".equals(name)) { + p_AreYouSure = para.getParameterAsBoolean(); + } else if ("IsEvenWithData".equals(name)) { + p_IsEvenWithData = para.getParameterAsBoolean(); + } else { + if (log.isLoggable(Level.INFO)) + log.log(Level.INFO, "Custom Parameter: " + name + "=" + para.getInfo()); + } + } + p_AD_Table_ID = getRecord_ID(); + } + + @Override + protected String doIt() throws Exception { + MTable table = new MTable(getCtx(), p_AD_Table_ID, get_TrxName()); + log.info(table.toString()); + if (!p_AreYouSure) { + throw new AdempiereException(Util.cleanAmp(Msg.getMsg(getCtx(), "Cancel"))); + } + if (!p_IsEvenWithData) { + int cnt = DB.getSQLValueEx(get_TrxName(), "SELECT COUNT(*) FROM " + table.getTableName()); + if (cnt > 0) { + throw new AdempiereException(Util.cleanAmp(Msg.parseTranslation(getCtx(), "@Cancel@. @Records@ = " + cnt))); + } + } + + String sql = "DROP TABLE " + table.getTableName(); + int rvalue = DB.executeUpdateEx(sql, get_TrxName()); + + return rvalue + " - " + sql; + } +} // DatabaseTableDrop diff --git a/org.adempiere.base/src/org/compiere/process/DatabaseTableRename.java b/org.adempiere.base/src/org/compiere/process/DatabaseTableRename.java new file mode 100644 index 0000000000..f709ce9d3e --- /dev/null +++ b/org.adempiere.base/src/org/compiere/process/DatabaseTableRename.java @@ -0,0 +1,99 @@ +/*********************************************************************** + * This file is part of iDempiere ERP Open Source * + * http://www.idempiere.org * + * * + * Copyright (C) Contributors * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * + * MA 02110-1301, USA. * + * * + * Contributors: * + * - Carlos Ruiz - globalqss * + **********************************************************************/ + +package org.compiere.process; + +import java.util.List; +import java.util.logging.Level; + +import org.adempiere.exceptions.AdempiereException; +import org.compiere.model.MTable; +import org.compiere.model.M_Element; +import org.compiere.model.Query; +import org.compiere.util.DB; +import org.compiere.util.Msg; +import org.compiere.util.Util; + +public class DatabaseTableRename extends SvrProcess { + + private int p_AD_Table_ID = 0; + // New Column Name + private String p_NewTableName; + + @Override + protected void prepare() { + for (ProcessInfoParameter para : getParameter()) { + String name = para.getParameterName(); + if ("NewTableName".equals(name)) { + p_NewTableName = para.getParameterAsString(); + } else { + if (log.isLoggable(Level.INFO)) + log.log(Level.INFO, "Custom Parameter: " + name + "=" + para.getInfo()); + } + } + p_AD_Table_ID = getRecord_ID(); + } + + @Override + protected String doIt() throws Exception { + MTable table = new MTable(getCtx(), p_AD_Table_ID, get_TrxName()); + log.info(table.toString()); + if ( Util.isEmpty(p_NewTableName, true) + || p_NewTableName.toLowerCase().equals(table.getTableName().toLowerCase())) { + throw new AdempiereException(Util.cleanAmp(Msg.parseTranslation(getCtx(), "@NotValid@: @NewTableName@"))); + } + int cnt = DB.getSQLValueEx(get_TrxName(), + "SELECT COUNT(*) FROM AD_Table WHERE LOWER(TableName)=?", + p_NewTableName.toLowerCase()); + if (cnt > 0) { + throw new AdempiereException(Util.cleanAmp(Msg.parseTranslation(getCtx(), "@AlreadyExists@: @TableName@ = " + p_NewTableName))); + } + + String colPrefix = table.getTableName().toLowerCase(); + List elements = new Query(getCtx(), M_Element.Table_Name, "LOWER(ColumnName) IN (?, ?)", get_TrxName()) + .setParameters(colPrefix+"_id", colPrefix+"_uu") + .setOrderBy("AD_Element_ID") + .list(); + for (M_Element element : elements) { + String newColumnName; + if (element.getColumnName().toLowerCase().endsWith("_id")) { + newColumnName = p_NewTableName + "_ID"; + } else { + newColumnName = p_NewTableName + "_UU"; + } + element.renameDBColumn(newColumnName, getProcessInfo()); + element.saveEx(); + } + + String sql = "ALTER TABLE " + table.getTableName() + " RENAME TO " + p_NewTableName; + int rvalue = DB.executeUpdateEx(sql, get_TrxName()); + addLog(rvalue + " - " + sql); + + table.setTableName(p_NewTableName); + table.saveEx(); + + return "@OK@"; + } +} // DatabaseTableRename