From 20ef4554e0a0a61a115527d9242534c107c55d50 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Mar 2014 23:43:58 +0100 Subject: [PATCH] Fix: missing unique key on barcode field to avoid database corruption --- htdocs/install/mysql/migration/3.5.0-3.6.0.sql | 11 +++++++++++ htdocs/install/mysql/migration/repair.sql | 3 +++ 2 files changed, 14 insertions(+) diff --git a/htdocs/install/mysql/migration/3.5.0-3.6.0.sql b/htdocs/install/mysql/migration/3.5.0-3.6.0.sql index e8c9d18f3ba..f9e0264b906 100644 --- a/htdocs/install/mysql/migration/3.5.0-3.6.0.sql +++ b/htdocs/install/mysql/migration/3.5.0-3.6.0.sql @@ -1080,3 +1080,14 @@ create table llx_categories_extrafields ) ENGINE=innodb; ALTER TABLE llx_categories_extrafields ADD INDEX idx_categories_extrafields (fk_object); + +update llx_product set barcode = null where barcode in ('', '-1', '0'); +update llx_societe set barcode = null where barcode in ('', '-1', '0'); + +-- Add missing unique keys +ALTER TABLE llx_product ADD INDEX idx_product_barcode (barcode); +ALTER TABLE llx_product ADD UNIQUE INDEX uk_product_barcode (barcode, fk_barcode_type, entity); +ALTER TABLE llx_societe ADD INDEX idx_societe_barcode (barcode); +ALTER TABLE llx_societe ADD UNIQUE INDEX uk_societe_barcode (barcode, fk_barcode_type, entity); + + diff --git a/htdocs/install/mysql/migration/repair.sql b/htdocs/install/mysql/migration/repair.sql index 1436b125029..dec091e6e66 100644 --- a/htdocs/install/mysql/migration/repair.sql +++ b/htdocs/install/mysql/migration/repair.sql @@ -103,6 +103,9 @@ update llx_opensurvey_sondage set format = 'A' where format = 'A+'; -- ALTER TABLE llx_facture_fourn ALTER COLUMN fk_cond_reglement DROP NOT NULL; +update llx_product set barcode = null where barcode in ('', '-1', '0'); +update llx_societe set barcode = null where barcode in ('', '-1', '0'); + -- Sequence to removed duplicated values of barcode in llx_product. Use serveral times if you still have duplicate. --select barcode, max(rowid) as max_rowid, count(rowid) as count_rowid from llx_product where barcode is not null group by barcode having count(rowid) >= 2; create table tmp_product_double as (select barcode, max(rowid) as max_rowid, count(rowid) as count_rowid from llx_product where barcode is not null group by barcode having count(rowid) >= 2);