From 5d04cc7728fa1f19c9ae619ddbd1297038bf6202 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Thu, 4 Apr 2024 04:50:37 +0200 Subject: [PATCH] IDEMPIERE-6064 Error when creating a table with a long name through CreateTable process (#2290) * IDEMPIERE-6064: Error when creating a table with a long time through CreateTable process * IDEMPIERE-6064: Error when creating a table with a long name through CreateTable process * - set the length of tablename to 60 char, and other database object names to 63 * - minor javadoc clarification * - Increase size of other columns and process parameters * - fix wrong value for Old MAX_OBJECT_NAME_LENGTH --------- Co-authored-by: Nicolas Micoud <58596990+nmicoud@users.noreply.github.com> --- .../oracle/202404031226_IDEMPIERE-6064.sql | 272 ++++++++++++++++++ .../202404031226_IDEMPIERE-6064.sql | 239 +++++++++++++++ .../org/idempiere/process/CreateTable.java | 23 +- .../org/compiere/db/AdempiereDatabase.java | 5 +- .../src/org/compiere/model/MColumn.java | 23 +- .../src/org/compiere/model/MTable.java | 18 +- .../src/org/compiere/model/PO.java | 17 +- .../src/org/idempiere/test/base/DBTest.java | 17 ++ 8 files changed, 590 insertions(+), 24 deletions(-) create mode 100644 migration/iD11/oracle/202404031226_IDEMPIERE-6064.sql create mode 100644 migration/iD11/postgresql/202404031226_IDEMPIERE-6064.sql diff --git a/migration/iD11/oracle/202404031226_IDEMPIERE-6064.sql b/migration/iD11/oracle/202404031226_IDEMPIERE-6064.sql new file mode 100644 index 0000000000..85bfdb6455 --- /dev/null +++ b/migration/iD11/oracle/202404031226_IDEMPIERE-6064.sql @@ -0,0 +1,272 @@ +-- IDEMPIERE-6064 Error when creating a table with a long name through CreateTable process +SELECT register_migration_script('202404031226_IDEMPIERE-6064.sql') FROM dual; + +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- Apr 3, 2024, 12:26:12 PM CEST +UPDATE AD_Column SET FieldLength=60, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 12:26:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=107 +; + +DROP INDEX AD_TABLE_NAME +; + +-- Apr 3, 2024, 12:26:13 PM CEST +ALTER TABLE AD_Table MODIFY TableName VARCHAR2(60 CHAR) +; + +CREATE UNIQUE INDEX AD_TABLE_NAME ON AD_TABLE (UPPER(TABLENAME)) +; + +-- Apr 3, 2024, 12:26:43 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 12:26:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=116 +; + +-- Apr 3, 2024, 12:27:50 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=20,Updated=TO_TIMESTAMP('2024-04-03 12:27:50','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=210871 +; + +DROP INDEX AD_COLUMN_FKCONSTRAINTNAME +; + +-- Apr 3, 2024, 12:27:55 PM CEST +ALTER TABLE AD_Column MODIFY FKConstraintName VARCHAR2(63 CHAR) DEFAULT NULL +; + +CREATE UNIQUE INDEX AD_COLUMN_FKCONSTRAINTNAME ON AD_COLUMN (UPPER(FKCONSTRAINTNAME)) +; + +DROP INDEX AD_COLUMN_NAME +; + +-- Apr 3, 2024, 12:28:10 PM CEST +ALTER TABLE AD_Column MODIFY ColumnName VARCHAR2(63 CHAR) +; + +CREATE UNIQUE INDEX AD_COLUMN_NAME ON AD_COLUMN (AD_TABLE_ID, UPPER(COLUMNNAME)) +; + +-- Apr 3, 2024, 12:28:52 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 12:28:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2602 +; + +DROP INDEX AD_ELEMENT_UPPERCOLUMNNAME +; + +-- Apr 3, 2024, 12:29:03 PM CEST +ALTER TABLE AD_Element MODIFY ColumnName VARCHAR2(63 CHAR) +; + +CREATE UNIQUE INDEX AD_ELEMENT_UPPERCOLUMNNAME ON AD_ELEMENT (UPPER(COLUMNNAME)) +; + +-- Apr 3, 2024, 12:30:26 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 12:30:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=210585 +; + +-- Apr 3, 2024, 12:30:27 PM CEST +ALTER TABLE AD_ViewColumn MODIFY ColumnName VARCHAR2(63 CHAR) +; + +-- Apr 3, 2024, 12:30:46 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 12:30:46','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=202042 +; + +-- Apr 3, 2024, 12:30:47 PM CEST +ALTER TABLE WS_WebServiceFieldInput MODIFY ColumnName VARCHAR2(63 CHAR) DEFAULT NULL +; + +-- Apr 3, 2024, 12:30:57 PM CEST +UPDATE AD_Column SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 12:30:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=208350 +; + +-- Apr 3, 2024, 12:30:58 PM CEST +ALTER TABLE AD_InfoColumn MODIFY ColumnName VARCHAR2(63 CHAR) +; + +-- Apr 3, 2024, 12:31:30 PM CEST +UPDATE AD_Column SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 12:31:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=4017 +; + +-- Apr 3, 2024, 12:31:31 PM CEST +ALTER TABLE AD_Process_Para MODIFY ColumnName VARCHAR2(63 CHAR) +; + +-- Apr 3, 2024, 12:32:06 PM CEST +UPDATE AD_Column SET FieldLength=60,Updated=TO_TIMESTAMP('2024-04-03 12:32:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=213696 +; + +-- Apr 3, 2024, 12:32:08 PM CEST +ALTER TABLE AD_HouseKeeping MODIFY TableName VARCHAR2(60 CHAR) DEFAULT NULL +; + +-- Apr 3, 2024, 12:33:04 PM CEST +UPDATE AD_Column SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 12:33:04','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=216297 +; + +-- Apr 3, 2024, 12:33:12 PM CEST +ALTER TABLE AD_TablePartition MODIFY Name VARCHAR2(63 CHAR) +; + +-- Apr 3, 2024, 12:33:30 PM CEST +UPDATE AD_Column SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 12:33:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=210522 +; + +DROP INDEX AD_TABLEINDEX_NAME +; + +-- Apr 3, 2024, 12:33:31 PM CEST +ALTER TABLE AD_TableIndex MODIFY Name VARCHAR2(63 CHAR) +; + +CREATE UNIQUE INDEX AD_TABLEINDEX_NAME ON AD_TABLEINDEX (UPPER(NAME)) +; + +-- Apr 3, 2024, 3:46:48 PM CEST +UPDATE AD_Process_Para SET FieldLength=60,Updated=TO_TIMESTAMP('2024-04-03 15:46:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=53495 +; + +-- Apr 3, 2024, 3:46:58 PM CEST +UPDATE AD_Process_Para SET FieldLength=60,Updated=TO_TIMESTAMP('2024-04-03 15:46:58','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200354 +; + +-- Apr 3, 2024, 3:48:19 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 15:48:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=11819 +; + +-- Apr 3, 2024, 3:48:27 PM CEST +ALTER TABLE A_RegistrationAttribute MODIFY ColumnName VARCHAR2(63 CHAR) DEFAULT NULL +; + +-- Apr 3, 2024, 3:50:29 PM CEST +UPDATE AD_Process_Para SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 15:50:29','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200303 +; + +-- Apr 3, 2024, 3:51:50 PM CEST +UPDATE AD_Process_Para SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 15:51:50','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200306 +; + +-- Apr 3, 2024, 3:53:27 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:53:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5941 +; + +-- Apr 3, 2024, 3:53:36 PM CEST +ALTER TABLE PA_MeasureCalc MODIFY BPartnerColumn VARCHAR2(124 CHAR) DEFAULT 'x.C_BPartner_ID' +; + +-- Apr 3, 2024, 3:54:01 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:54:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200528 +; + +-- Apr 3, 2024, 3:54:04 PM CEST +ALTER TABLE GL_JournalGeneratorLine MODIFY BPColumn VARCHAR2(124 CHAR) DEFAULT NULL +; + +-- Apr 3, 2024, 3:54:20 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:54:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=59701 +; + +-- Apr 3, 2024, 3:54:23 PM CEST +ALTER TABLE AD_ChartDatasource MODIFY CategoryColumn VARCHAR2(124 CHAR) DEFAULT NULL +; + +-- Apr 3, 2024, 3:55:11 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:55:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=54272 +; + +-- Apr 3, 2024, 3:55:14 PM CEST +ALTER TABLE AD_Sequence MODIFY DateColumn VARCHAR2(124 CHAR) DEFAULT NULL +; + +-- Apr 3, 2024, 3:55:24 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:55:24','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5939 +; + +-- Apr 3, 2024, 3:55:26 PM CEST +ALTER TABLE PA_MeasureCalc MODIFY DateColumn VARCHAR2(124 CHAR) DEFAULT 'x.Date' +; + +-- Apr 3, 2024, 3:55:26 PM CEST +UPDATE PA_MeasureCalc SET DateColumn='x.Date' WHERE DateColumn IS NULL +; + +-- Apr 3, 2024, 3:55:42 PM CEST +UPDATE AD_Column SET FieldLength=124, IsToolbarButton='N',Updated=TO_TIMESTAMP('2024-04-03 15:55:42','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=59673 +; + +-- Apr 3, 2024, 3:55:44 PM CEST +ALTER TABLE AD_ChartDatasource MODIFY DateColumn VARCHAR2(124 CHAR) DEFAULT NULL +; + +-- Apr 3, 2024, 3:56:13 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:56:13','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5662 +; + +-- Apr 3, 2024, 3:56:14 PM CEST +ALTER TABLE AD_ReportView_Col MODIFY FunctionColumn VARCHAR2(124 CHAR) +; + +-- Apr 3, 2024, 3:56:37 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:56:37','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=14780 +; + +-- Apr 3, 2024, 3:56:39 PM CEST +ALTER TABLE PA_MeasureCalc MODIFY KeyColumn VARCHAR2(124 CHAR) +; + +-- Apr 3, 2024, 3:56:52 PM CEST +UPDATE AD_Column SET FieldLength=124, IsToolbarButton='N',Updated=TO_TIMESTAMP('2024-04-03 15:56:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=59677 +; + +-- Apr 3, 2024, 3:56:54 PM CEST +ALTER TABLE AD_ChartDatasource MODIFY KeyColumn VARCHAR2(124 CHAR) DEFAULT NULL +; + +-- Apr 3, 2024, 3:57:25 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:57:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200214 +; + +-- Apr 3, 2024, 3:57:26 PM CEST +ALTER TABLE AD_Sequence MODIFY OrgColumn VARCHAR2(124 CHAR) DEFAULT NULL +; + +-- Apr 3, 2024, 3:57:35 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:57:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5940 +; + +-- Apr 3, 2024, 3:57:36 PM CEST +ALTER TABLE PA_MeasureCalc MODIFY OrgColumn VARCHAR2(124 CHAR) DEFAULT 'x.AD_Org_ID' +; + +-- Apr 3, 2024, 3:57:36 PM CEST +UPDATE PA_MeasureCalc SET OrgColumn='x.AD_Org_ID' WHERE OrgColumn IS NULL +; + +-- Apr 3, 2024, 3:57:36 PM CEST +ALTER TABLE PA_MeasureCalc MODIFY OrgColumn NOT NULL +; + +-- Apr 3, 2024, 3:57:49 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:57:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5942 +; + +-- Apr 3, 2024, 3:57:51 PM CEST +ALTER TABLE PA_MeasureCalc MODIFY ProductColumn VARCHAR2(124 CHAR) DEFAULT 'x.M_Product_ID' +; + +-- Apr 3, 2024, 3:58:03 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:58:03','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=210647 +; + +-- Apr 3, 2024, 3:58:04 PM CEST +ALTER TABLE AD_ChartDatasource MODIFY SeriesColumn VARCHAR2(124 CHAR) DEFAULT NULL +; + +-- Apr 3, 2024, 3:58:25 PM CEST +UPDATE AD_Column SET FieldLength=124, IsToolbarButton='N',Updated=TO_TIMESTAMP('2024-04-03 15:58:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=59700 +; + +-- Apr 3, 2024, 3:58:27 PM CEST +ALTER TABLE AD_ChartDatasource MODIFY ValueColumn VARCHAR2(124 CHAR) +; + diff --git a/migration/iD11/postgresql/202404031226_IDEMPIERE-6064.sql b/migration/iD11/postgresql/202404031226_IDEMPIERE-6064.sql new file mode 100644 index 0000000000..a0471ad849 --- /dev/null +++ b/migration/iD11/postgresql/202404031226_IDEMPIERE-6064.sql @@ -0,0 +1,239 @@ +-- IDEMPIERE-6064 Error when creating a table with a long name through CreateTable process +SELECT register_migration_script('202404031226_IDEMPIERE-6064.sql') FROM dual; + +-- Apr 3, 2024, 12:26:12 PM CEST +UPDATE AD_Column SET FieldLength=60, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 12:26:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=107 +; + +-- Apr 3, 2024, 12:26:13 PM CEST +INSERT INTO t_alter_column values('ad_table','TableName','VARCHAR(60)',null,null) +; + +-- Apr 3, 2024, 12:26:43 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 12:26:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=116 +; + +-- Apr 3, 2024, 12:27:50 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=20,Updated=TO_TIMESTAMP('2024-04-03 12:27:50','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=210871 +; + +-- Apr 3, 2024, 12:27:55 PM CEST +INSERT INTO t_alter_column values('ad_column','FKConstraintName','VARCHAR(63)',null,'NULL') +; + +-- Apr 3, 2024, 12:28:10 PM CEST +INSERT INTO t_alter_column values('ad_column','ColumnName','VARCHAR(63)',null,null) +; + +-- Apr 3, 2024, 12:28:52 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 12:28:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2602 +; + +-- Apr 3, 2024, 12:29:03 PM CEST +INSERT INTO t_alter_column values('ad_element','ColumnName','VARCHAR(63)',null,null) +; + +-- Apr 3, 2024, 12:30:26 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 12:30:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=210585 +; + +-- Apr 3, 2024, 12:30:27 PM CEST +INSERT INTO t_alter_column values('ad_viewcolumn','ColumnName','VARCHAR(63)',null,null) +; + +-- Apr 3, 2024, 12:30:46 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 12:30:46','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=202042 +; + +-- Apr 3, 2024, 12:30:47 PM CEST +INSERT INTO t_alter_column values('ws_webservicefieldinput','ColumnName','VARCHAR(63)',null,'NULL') +; + +-- Apr 3, 2024, 12:30:57 PM CEST +UPDATE AD_Column SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 12:30:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=208350 +; + +-- Apr 3, 2024, 12:30:58 PM CEST +INSERT INTO t_alter_column values('ad_infocolumn','ColumnName','VARCHAR(63)',null,null) +; + +-- Apr 3, 2024, 12:31:30 PM CEST +UPDATE AD_Column SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 12:31:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=4017 +; + +-- Apr 3, 2024, 12:31:31 PM CEST +INSERT INTO t_alter_column values('ad_process_para','ColumnName','VARCHAR(63)',null,null) +; + +-- Apr 3, 2024, 12:32:06 PM CEST +UPDATE AD_Column SET FieldLength=60,Updated=TO_TIMESTAMP('2024-04-03 12:32:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=213696 +; + +-- Apr 3, 2024, 12:32:08 PM CEST +INSERT INTO t_alter_column values('ad_housekeeping','TableName','VARCHAR(60)',null,'NULL') +; + +-- Apr 3, 2024, 12:33:04 PM CEST +UPDATE AD_Column SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 12:33:04','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=216297 +; + +-- Apr 3, 2024, 12:33:12 PM CEST +INSERT INTO t_alter_column values('ad_tablepartition','Name','VARCHAR(63)',null,null) +; + +-- Apr 3, 2024, 12:33:30 PM CEST +UPDATE AD_Column SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 12:33:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=210522 +; + +-- Apr 3, 2024, 12:33:31 PM CEST +INSERT INTO t_alter_column values('ad_tableindex','Name','VARCHAR(63)',null,null) +; + +-- Apr 3, 2024, 3:46:48 PM CEST +UPDATE AD_Process_Para SET FieldLength=60,Updated=TO_TIMESTAMP('2024-04-03 15:46:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=53495 +; + +-- Apr 3, 2024, 3:46:58 PM CEST +UPDATE AD_Process_Para SET FieldLength=60,Updated=TO_TIMESTAMP('2024-04-03 15:46:58','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200354 +; + +-- Apr 3, 2024, 3:48:19 PM CEST +UPDATE AD_Column SET FieldLength=63, SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-04-03 15:48:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=11819 +; + +-- Apr 3, 2024, 3:48:27 PM CEST +INSERT INTO t_alter_column values('a_registrationattribute','ColumnName','VARCHAR(63)',null,'NULL') +; + +-- Apr 3, 2024, 3:50:29 PM CEST +UPDATE AD_Process_Para SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 15:50:29','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200303 +; + +-- Apr 3, 2024, 3:51:50 PM CEST +UPDATE AD_Process_Para SET FieldLength=63,Updated=TO_TIMESTAMP('2024-04-03 15:51:50','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200306 +; + +-- Apr 3, 2024, 3:53:27 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:53:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5941 +; + +-- Apr 3, 2024, 3:53:36 PM CEST +INSERT INTO t_alter_column values('pa_measurecalc','BPartnerColumn','VARCHAR(124)',null,'x.C_BPartner_ID') +; + +-- Apr 3, 2024, 3:54:01 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:54:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200528 +; + +-- Apr 3, 2024, 3:54:04 PM CEST +INSERT INTO t_alter_column values('gl_journalgeneratorline','BPColumn','VARCHAR(124)',null,'NULL') +; + +-- Apr 3, 2024, 3:54:20 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:54:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=59701 +; + +-- Apr 3, 2024, 3:54:23 PM CEST +INSERT INTO t_alter_column values('ad_chartdatasource','CategoryColumn','VARCHAR(124)',null,'NULL') +; + +-- Apr 3, 2024, 3:55:11 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:55:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=54272 +; + +-- Apr 3, 2024, 3:55:14 PM CEST +INSERT INTO t_alter_column values('ad_sequence','DateColumn','VARCHAR(124)',null,'NULL') +; + +-- Apr 3, 2024, 3:55:24 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:55:24','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5939 +; + +-- Apr 3, 2024, 3:55:26 PM CEST +INSERT INTO t_alter_column values('pa_measurecalc','DateColumn','VARCHAR(124)',null,'x.Date') +; + +-- Apr 3, 2024, 3:55:26 PM CEST +UPDATE PA_MeasureCalc SET DateColumn='x.Date' WHERE DateColumn IS NULL +; + +-- Apr 3, 2024, 3:55:42 PM CEST +UPDATE AD_Column SET FieldLength=124, IsToolbarButton='N',Updated=TO_TIMESTAMP('2024-04-03 15:55:42','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=59673 +; + +-- Apr 3, 2024, 3:55:44 PM CEST +INSERT INTO t_alter_column values('ad_chartdatasource','DateColumn','VARCHAR(124)',null,'NULL') +; + +-- Apr 3, 2024, 3:56:13 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:56:13','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5662 +; + +-- Apr 3, 2024, 3:56:14 PM CEST +INSERT INTO t_alter_column values('ad_reportview_col','FunctionColumn','VARCHAR(124)',null,null) +; + +-- Apr 3, 2024, 3:56:37 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:56:37','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=14780 +; + +-- Apr 3, 2024, 3:56:39 PM CEST +INSERT INTO t_alter_column values('pa_measurecalc','KeyColumn','VARCHAR(124)',null,null) +; + +-- Apr 3, 2024, 3:56:52 PM CEST +UPDATE AD_Column SET FieldLength=124, IsToolbarButton='N',Updated=TO_TIMESTAMP('2024-04-03 15:56:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=59677 +; + +-- Apr 3, 2024, 3:56:54 PM CEST +INSERT INTO t_alter_column values('ad_chartdatasource','KeyColumn','VARCHAR(124)',null,'NULL') +; + +-- Apr 3, 2024, 3:57:25 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:57:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200214 +; + +-- Apr 3, 2024, 3:57:26 PM CEST +INSERT INTO t_alter_column values('ad_sequence','OrgColumn','VARCHAR(124)',null,'NULL') +; + +-- Apr 3, 2024, 3:57:35 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:57:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5940 +; + +-- Apr 3, 2024, 3:57:36 PM CEST +INSERT INTO t_alter_column values('pa_measurecalc','OrgColumn','VARCHAR(124)',null,'x.AD_Org_ID') +; + +-- Apr 3, 2024, 3:57:36 PM CEST +UPDATE PA_MeasureCalc SET OrgColumn='x.AD_Org_ID' WHERE OrgColumn IS NULL +; + +-- Apr 3, 2024, 3:57:36 PM CEST +INSERT INTO t_alter_column values('pa_measurecalc','OrgColumn',null,'NOT NULL',null) +; + +-- Apr 3, 2024, 3:57:49 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:57:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5942 +; + +-- Apr 3, 2024, 3:57:51 PM CEST +INSERT INTO t_alter_column values('pa_measurecalc','ProductColumn','VARCHAR(124)',null,'x.M_Product_ID') +; + +-- Apr 3, 2024, 3:58:03 PM CEST +UPDATE AD_Column SET FieldLength=124,Updated=TO_TIMESTAMP('2024-04-03 15:58:03','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=210647 +; + +-- Apr 3, 2024, 3:58:04 PM CEST +INSERT INTO t_alter_column values('ad_chartdatasource','SeriesColumn','VARCHAR(124)',null,'NULL') +; + +-- Apr 3, 2024, 3:58:25 PM CEST +UPDATE AD_Column SET FieldLength=124, IsToolbarButton='N',Updated=TO_TIMESTAMP('2024-04-03 15:58:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=59700 +; + +-- Apr 3, 2024, 3:58:27 PM CEST +INSERT INTO t_alter_column values('ad_chartdatasource','ValueColumn','VARCHAR(124)',null,null) +; + diff --git a/org.adempiere.base.process/src/org/idempiere/process/CreateTable.java b/org.adempiere.base.process/src/org/idempiere/process/CreateTable.java index 12b6ccec65..07b95f0360 100644 --- a/org.adempiere.base.process/src/org/idempiere/process/CreateTable.java +++ b/org.adempiere.base.process/src/org/idempiere/process/CreateTable.java @@ -233,14 +233,14 @@ public class CreateTable extends SvrProcess { } String uucolName = PO.getUUIDColumnName(p_tableName); - M_Element elementUU = M_Element.get(getCtx(), p_tableName + "_UU"); + M_Element elementUU = M_Element.get(getCtx(), uucolName); if (elementUU == null) { // Create Element + _UU elementUU = new M_Element(getCtx(), uucolName, p_entityType, get_TrxName()); elementUU.saveEx(); } if (createColumn(table, elementUU.getColumnName()) > 0) { // UUID Index and Constraint - MTableIndex tiuu = new MTableIndex(table, table.getTableName() + "_uu_idx"); + MTableIndex tiuu = new MTableIndex(table, MTable.getUUIDIndexName(table.getTableName())); tiuu.setIsCreateConstraint(true); tiuu.setIsUnique(true); tiuu.setIsKey(table.isUUIDKeyTable()); @@ -323,12 +323,24 @@ public class CreateTable extends SvrProcess { else colElementID = createColumn(tableTrl, elementUU.getColumnName()); // _UU (UUID of parent table) - M_Element elementTrlUU = M_Element.get(getCtx(), tableTrl.getTableName() + "_UU"); + String uuTrlcolName = PO.getUUIDColumnName(tableTrl.getTableName()); + M_Element elementTrlUU = M_Element.get(getCtx(), uuTrlcolName); if (elementTrlUU == null) { - elementTrlUU = new M_Element(getCtx(), tableTrl.getTableName() + "_UU", p_entityType, get_TrxName()); + elementTrlUU = new M_Element(getCtx(), uuTrlcolName, p_entityType, get_TrxName()); elementTrlUU.saveEx(); } - createColumn(tableTrl, elementTrlUU.getColumnName()); // _Trl_UU + if (createColumn(tableTrl, elementTrlUU.getColumnName()) > 0) { + // UUID Index and Constraint + MTableIndex tiuutrl = new MTableIndex(tableTrl, MTable.getUUIDIndexName(tableTrl.getTableName())); + tiuutrl.setIsCreateConstraint(true); + tiuutrl.setIsUnique(true); + tiuutrl.setIsKey(tableTrl.isUUIDKeyTable()); + tiuutrl.saveEx(); + + MColumn uuTrlColumn = getColumn(tableTrl, uuTrlcolName); + MIndexColumn icuuTrl = new MIndexColumn(tiuutrl, uuTrlColumn, 10); + icuuTrl.saveEx(); + } int colLanguageID = createColumn(tableTrl, "AD_Language"); createColumn(tableTrl, "IsTranslated"); @@ -430,6 +442,7 @@ public class CreateTable extends SvrProcess { * Create a column if it doesn't exist * @param table * @param columnName + * @return AD_Column_ID just column is created, if the column already exists return -1 */ private int createColumn(MTable table, String columnName) { MColumn columnThatExists = getColumn(table, columnName); diff --git a/org.adempiere.base/src/org/compiere/db/AdempiereDatabase.java b/org.adempiere.base/src/org/compiere/db/AdempiereDatabase.java index f98c581843..9b4e0afc18 100644 --- a/org.adempiere.base/src/org/compiere/db/AdempiereDatabase.java +++ b/org.adempiere.base/src/org/compiere/db/AdempiereDatabase.java @@ -42,7 +42,10 @@ public interface AdempiereDatabase /** default lock timeout, 60 seconds **/ static final int LOCK_TIME_OUT = 60; - + + /* PostgreSQL restricts object names to 63 characters */ + public final static int MAX_OBJECT_NAME_LENGTH = 63; + /** * Get Database Name * @return database short name diff --git a/org.adempiere.base/src/org/compiere/model/MColumn.java b/org.adempiere.base/src/org/compiere/model/MColumn.java index 30b422bbdc..0c3234581c 100644 --- a/org.adempiere.base/src/org/compiere/model/MColumn.java +++ b/org.adempiere.base/src/org/compiere/model/MColumn.java @@ -58,7 +58,7 @@ public class MColumn extends X_AD_Column implements ImmutablePOSupport /** * generated serial id */ - private static final long serialVersionUID = -971225879649586290L; + private static final long serialVersionUID = -528009647661217241L; /** * Get MColumn from Cache (immutable) @@ -717,9 +717,8 @@ public class MColumn extends X_AD_Column implements ImmutablePOSupport { if (isKey()) { StringBuilder constraintName; - if (tableName.length() > 26) - // Oracle restricts object names to 30 characters - constraintName = new StringBuilder(tableName.substring(0, 26)).append("_Key"); + if (tableName.length() > AdempiereDatabase.MAX_OBJECT_NAME_LENGTH - 4) + constraintName = new StringBuilder(tableName.substring(0, AdempiereDatabase.MAX_OBJECT_NAME_LENGTH - 4)).append("_Key"); else constraintName = new StringBuilder(tableName).append("_Key"); StringBuilder msgreturn = new StringBuilder("CONSTRAINT ").append(constraintName).append(" PRIMARY KEY (").append(getColumnName()).append(")"); @@ -735,11 +734,7 @@ public class MColumn extends X_AD_Column implements ImmutablePOSupport MTable table = MTable.get(getAD_Table_ID()); // IDEMPIERE-965 if (getColumnName().equals(PO.getUUIDColumnName(tableName))) { - StringBuilder indexName = new StringBuilder().append(getColumnName()).append("_idx"); - if (indexName.length() > 30) { - indexName = new StringBuilder().append(getColumnName().substring(0, 25)); - indexName.append("uuidx"); - } + String indexName = MTable.getUUIDIndexName(tableName); String constraintType; if (table.isUUIDKeyTable()) constraintType = "PRIMARY KEY"; @@ -750,7 +745,7 @@ public class MColumn extends X_AD_Column implements ImmutablePOSupport } return ""; } // getConstraint - + /** * String Representation * @return info @@ -1293,8 +1288,8 @@ public class MColumn extends X_AD_Column implements ImmutablePOSupport constraintName.append(columnName.replace("_", "")); constraintName.append("_"); constraintName.append(table.getTableName().replace("_", "")); - if (constraintName.length() > 30) - constraintName = new StringBuilder(constraintName.substring(0, 30)); + if (constraintName.length() > AdempiereDatabase.MAX_OBJECT_NAME_LENGTH) + constraintName = new StringBuilder(constraintName.substring(0, AdempiereDatabase.MAX_OBJECT_NAME_LENGTH)); fkConstraintName = constraintName.toString(); int duplicateId = DB.getSQLValueEx(column.get_TrxName(), "SELECT AD_Column_ID FROM AD_Column WHERE Upper(FkConstraintName)=?", fkConstraintName.toUpperCase()); @@ -1303,8 +1298,8 @@ public class MColumn extends X_AD_Column implements ImmutablePOSupport { loop++; String suffix = "" + loop; - if (fkConstraintName.length() + suffix.length() > 30) - fkConstraintName = fkConstraintName.substring(0, fkConstraintName.length() - (fkConstraintName.length() + suffix.length() - 30)); + if (fkConstraintName.length() + suffix.length() > AdempiereDatabase.MAX_OBJECT_NAME_LENGTH) + fkConstraintName = fkConstraintName.substring(0, fkConstraintName.length() - (fkConstraintName.length() + suffix.length() - AdempiereDatabase.MAX_OBJECT_NAME_LENGTH)); fkConstraintName = fkConstraintName + loop; duplicateId = DB.getSQLValueEx(column.get_TrxName(), "SELECT AD_Column_ID FROM AD_Column WHERE Upper(FkConstraintName)=?", fkConstraintName.toUpperCase()); } diff --git a/org.adempiere.base/src/org/compiere/model/MTable.java b/org.adempiere.base/src/org/compiere/model/MTable.java index 0f3c958229..d924232831 100644 --- a/org.adempiere.base/src/org/compiere/model/MTable.java +++ b/org.adempiere.base/src/org/compiere/model/MTable.java @@ -65,9 +65,9 @@ import org.idempiere.cache.ImmutablePOSupport; public class MTable extends X_AD_Table implements ImmutablePOSupport { /** - * generated serial id + * */ - private static final long serialVersionUID = 4325276636597337437L; + private static final long serialVersionUID = -167824144142429242L; public final static int MAX_OFFICIAL_ID = 999999; @@ -1084,4 +1084,18 @@ public class MTable extends X_AD_Table implements ImmutablePOSupport tablePartitionNames.add(partition.getName()); return tablePartitionNames; } + + /** + * Get the Unique UU Index name + * @return indexName + */ + public static String getUUIDIndexName(String tableName) { + + StringBuilder indexName = new StringBuilder().append(PO.getUUIDColumnName(tableName)).append("_idx"); + if (indexName.length() > AdempiereDatabase.MAX_OBJECT_NAME_LENGTH) + indexName = new StringBuilder().append(PO.getUUIDColumnName(tableName).substring(0, AdempiereDatabase.MAX_OBJECT_NAME_LENGTH - 5)).append("uuidx"); + + return indexName.toString(); + } + } // MTable diff --git a/org.adempiere.base/src/org/compiere/model/PO.java b/org.adempiere.base/src/org/compiere/model/PO.java index 8286146da5..b674852e8a 100644 --- a/org.adempiere.base/src/org/compiere/model/PO.java +++ b/org.adempiere.base/src/org/compiere/model/PO.java @@ -57,6 +57,7 @@ import org.adempiere.exceptions.DBException; import org.adempiere.process.UUIDGenerator; import org.compiere.Adempiere; import org.compiere.acct.Doc; +import org.compiere.db.AdempiereDatabase; import org.compiere.util.AdempiereUserError; import org.compiere.util.CCache; import org.compiere.util.CLogMgt; @@ -5567,9 +5568,21 @@ public abstract class PO * @return uuid column name */ public static String getUUIDColumnName(String tableName) { + + // easy case, just add suffix when the table name is shorter or equal than 27 chars String columnName = tableName + "_UU"; - if (columnName.length() > 30) { - int i = columnName.length() - 30; + if (columnName.length() <= 30) /* Old MAX_OBJECT_NAME_LENGTH */ + return columnName; + + // verify if oldColumnName exists + int i = columnName.length() - 30; + String oldColumnName = tableName.substring(0, tableName.length() - i) + "_UU"; + MTable table = MTable.get(null, tableName); + if (table != null && table.columnExists(oldColumnName)) + return oldColumnName; + + if (columnName.length() > AdempiereDatabase.MAX_OBJECT_NAME_LENGTH) { + i = columnName.length() - AdempiereDatabase.MAX_OBJECT_NAME_LENGTH; columnName = tableName.substring(0, tableName.length() - i) + "_UU"; } return columnName; diff --git a/org.idempiere.test/src/org/idempiere/test/base/DBTest.java b/org.idempiere.test/src/org/idempiere/test/base/DBTest.java index a1ce55c407..a2f7154482 100644 --- a/org.idempiere.test/src/org/idempiere/test/base/DBTest.java +++ b/org.idempiere.test/src/org/idempiere/test/base/DBTest.java @@ -37,6 +37,7 @@ import org.compiere.model.MBPartner; import org.compiere.model.MColumn; import org.compiere.model.MOrder; import org.compiere.model.MTable; +import org.compiere.model.PO; import org.compiere.model.X_Test; import org.compiere.util.DB; import org.compiere.util.Env; @@ -464,5 +465,21 @@ public class DBTest extends AbstractTestCase future.cancel(true); } } + + /** + * Test max length of UUID column name and its index + */ + @Test + public void testUUIDColumnName() { + assertEquals(PO.getUUIDColumnName ("MyTable" ), "MyTable_UU" ); + assertEquals(PO.getUUIDColumnName ("XCUSTOM_ThisIsAVeryLongTableNameWithSixtyCharactersOnTheName" ), "XCUSTOM_ThisIsAVeryLongTableNameWithSixtyCharactersOnTheName_UU"); + assertEquals(PO.getUUIDColumnName ("CUSTOM_AVeryLongTableNameWithMoreThanSixtyCharactersOnTheName"), "CUSTOM_AVeryLongTableNameWithMoreThanSixtyCharactersOnTheNam_UU"); + assertEquals(MTable.getUUIDIndexName("MyTable" ), "MyTable_UU_idx" ); + assertEquals(MTable.getUUIDIndexName("XCUSTOM_ThisIsAVeryLongTableNameWithSixtyCharactersOnTheName" ), "XCUSTOM_ThisIsAVeryLongTableNameWithSixtyCharactersOnTheNauuidx"); + assertEquals(MTable.getUUIDIndexName("CUSTOM_AVeryLongTableNameWithMoreThanSixtyCharactersOnTheName"), "CUSTOM_AVeryLongTableNameWithMoreThanSixtyCharactersOnTheNuuidx"); + assertEquals(MTable.getUUIDIndexName("XYCUSTOM_ThisIsAVeryLongTableNameWith55CharactersOnName" ), "XYCUSTOM_ThisIsAVeryLongTableNameWith55CharactersOnName_UU_idx" ); + assertEquals(MTable.getUUIDIndexName("XYZCUSTOM_ThisIsAVeryLongTableNameWith56CharactersOnName" ), "XYZCUSTOM_ThisIsAVeryLongTableNameWith56CharactersOnName_UU_idx"); + assertEquals(MTable.getUUIDIndexName("XYZACUSTOM_ThisIsAVeryLongTableNameWith57CharactersOnName" ), "XYZACUSTOM_ThisIsAVeryLongTableNameWith57CharactersOnName_uuidx"); + } }