From 76edaa9e1d6c74a187b72dd36ab0029eb40b09bd Mon Sep 17 00:00:00 2001 From: hengsin Date: Thu, 11 Apr 2024 01:16:28 +0800 Subject: [PATCH] IDEMPIERE-6100 Table Partitioning Issue with Tables having Index with where condition (#2307) --- .../postgresql/partition/TablePartitionService.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/partition/TablePartitionService.java b/org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/partition/TablePartitionService.java index c43e19aaee..8b7c1799cf 100644 --- a/org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/partition/TablePartitionService.java +++ b/org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/partition/TablePartitionService.java @@ -235,8 +235,17 @@ public class TablePartitionService implements ITablePartitionService { //unique index must include partition key column String indexdef = uniqueMap.get(indexName); for(String partitionKey : partitionKeyColumnNames) { - if (!indexdef.contains(partitionKey.toLowerCase()+",") && !indexdef.contains(partitionKey.toLowerCase()+")")) - indexdef = indexdef.substring(0, indexdef.length()-1)+", "+partitionKey.toLowerCase()+")"; + if (!indexdef.contains(partitionKey.toLowerCase()+",") && !indexdef.contains(partitionKey.toLowerCase()+")")) { + int whereIndex = indexdef.toLowerCase().indexOf(" where "); + if (whereIndex > 0) { + String whereClause = indexdef.substring(whereIndex); + indexdef = indexdef.substring(0, whereIndex); + indexdef = indexdef.substring(0, indexdef.length()-1)+", "+partitionKey.toLowerCase()+")"; + indexdef = indexdef + whereClause; + } else { + indexdef = indexdef.substring(0, indexdef.length()-1)+", "+partitionKey.toLowerCase()+")"; + } + } } StringBuilder alter = new StringBuilder("DROP INDEX ").append(indexName); DB.executeUpdateEx(alter.toString(), trxName);