From d97ebb9a33e930651bc0dd3fbaef35eb8a445dea Mon Sep 17 00:00:00 2001 From: ldestailleur Date: Sat, 5 Apr 2025 13:37:21 +0200 Subject: [PATCH] Fix trouble in migrationon. Fix pb with large database --- htdocs/install/mysql/migration/21.0.0-22.0.0.sql | 4 ++++ .../tables/llx_accounting_bookkeeping.key.sql | 3 ++- .../llx_accounting_bookkeeping_tmp.key.sql | 1 + htdocs/install/upgrade2.php | 16 ++++++++-------- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/htdocs/install/mysql/migration/21.0.0-22.0.0.sql b/htdocs/install/mysql/migration/21.0.0-22.0.0.sql index 1fcacde5270..fc25a1a0526 100644 --- a/htdocs/install/mysql/migration/21.0.0-22.0.0.sql +++ b/htdocs/install/mysql/migration/21.0.0-22.0.0.sql @@ -196,9 +196,13 @@ ALTER TABLE llx_product_customer_price ADD CONSTRAINT fk_product_customer_price_ ALTER TABLE llx_product_customer_price ADD CONSTRAINT fk_product_customer_price_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe(rowid); UPDATE llx_product_customer_price SET date_begin = datec WHERE date_begin IS NULL; UPDATE llx_product_customer_price_log SET date_begin = datec WHERE date_begin IS NULL; + ALTER TABLE llx_accounting_bookkeeping ADD COLUMN ref VARCHAR(30) AFTER rowid; ALTER TABLE llx_accounting_bookkeeping_tmp ADD COLUMN ref VARCHAR(30) AFTER rowid; +ALTER TABLE llx_accounting_bookkeeping ADD INDEX idx_accounting_bookkeeping_ref (ref); +ALTER TABLE llx_accounting_bookkeeping_tmp ADD INDEX idx_accounting_bookkeeping_tmp_ref (ref); + ALTER TABLE llx_session ADD COLUMN date_creation datetime AFTER session_variable; UPDATE llx_session SET date_creation = NOW() WHERE date_creation IS NULL; -- VMYSQL4.3 ALTER TABLE llx_session MODIFY COLUMN date_creation datetime NOT NULL; diff --git a/htdocs/install/mysql/tables/llx_accounting_bookkeeping.key.sql b/htdocs/install/mysql/tables/llx_accounting_bookkeeping.key.sql index 766de8d6230..83a03efeb3d 100644 --- a/htdocs/install/mysql/tables/llx_accounting_bookkeeping.key.sql +++ b/htdocs/install/mysql/tables/llx_accounting_bookkeeping.key.sql @@ -16,6 +16,7 @@ -- -- ============================================================================ +ALTER TABLE llx_accounting_bookkeeping ADD INDEX idx_accounting_bookkeeping_ref (ref); ALTER TABLE llx_accounting_bookkeeping ADD INDEX idx_accounting_bookkeeping_fk_doc (fk_doc); ALTER TABLE llx_accounting_bookkeeping ADD INDEX idx_accounting_bookkeeping_fk_docdet (fk_docdet); ALTER TABLE llx_accounting_bookkeeping ADD INDEX idx_accounting_bookkeeping_doc_date (doc_date); @@ -23,5 +24,5 @@ ALTER TABLE llx_accounting_bookkeeping ADD INDEX idx_accounting_bookkeeping_nume ALTER TABLE llx_accounting_bookkeeping ADD INDEX idx_accounting_bookkeeping_code_journal (code_journal, entity); ALTER TABLE llx_accounting_bookkeeping ADD INDEX idx_accounting_bookkeeping_piece_num (piece_num, entity); --- Current unicity is tested by the journalize page on couple (fk_doc, doc_type) +-- Current unicity is tested by the journalize page on couple (fk_doc, doc_type) -- TODO Add a key for unicity (not so easy as fk_doc, doc_type may have several lines for one piece) diff --git a/htdocs/install/mysql/tables/llx_accounting_bookkeeping_tmp.key.sql b/htdocs/install/mysql/tables/llx_accounting_bookkeeping_tmp.key.sql index bb6b8795848..539fcfcd64c 100644 --- a/htdocs/install/mysql/tables/llx_accounting_bookkeeping_tmp.key.sql +++ b/htdocs/install/mysql/tables/llx_accounting_bookkeeping_tmp.key.sql @@ -16,6 +16,7 @@ -- -- ============================================================================ +ALTER TABLE llx_accounting_bookkeeping_tmp ADD INDEX idx_accounting_bookkeeping_tmp_ref (ref); ALTER TABLE llx_accounting_bookkeeping_tmp ADD INDEX idx_accounting_bookkeeping_tmp_doc_date (doc_date); ALTER TABLE llx_accounting_bookkeeping_tmp ADD INDEX idx_accounting_bookkeeping_tmp_fk_docdet (fk_docdet); ALTER TABLE llx_accounting_bookkeeping_tmp ADD INDEX idx_accounting_bookkeeping_tmp_numero_compte (numero_compte); diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 80d2b27fd47..740cefd152f 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -5239,8 +5239,9 @@ function migrate_accountingbookkeeping(int $entity) if ($bookKeepingAddon === 'mod_bookkeeping_argon') { $db->begin(); + $sql = "SELECT DISTINCT YEAR(doc_date) as doc_year, MONTH(doc_date) as doc_month, code_journal, piece_num FROM {$db->prefix()}accounting_bookkeeping"; - $sql .= " WHERE ref IS NULL AND entity = {$entity}"; + $sql .= " WHERE ref IS NULL AND entity = ".((int) $entity); $sql .= " ORDER BY doc_year, doc_month, code_journal, piece_num"; $resql = $db->query($sql); @@ -5253,7 +5254,7 @@ function migrate_accountingbookkeeping(int $entity) $bookkeeping->code_journal = $obj->code_journal; $ref = $bookkeeping->getNextNumRef(); - $sqlUpd = "UPDATE {$db->prefix()}accounting_bookkeeping SET ref='{$ref}' WHERE piece_num = '{$obj->piece_num}' AND entity = {$entity}"; + $sqlUpd = "UPDATE ".$db->prefix()."accounting_bookkeeping SET ref = '".$db->escape($ref)."' WHERE piece_num = '".$db->escape($obj->piece_num)."' AND entity = ".((int) $entity); $resultstring = '.'; print $resultstring; $resqlUpd = $db->query($sqlUpd); @@ -5265,13 +5266,12 @@ function migrate_accountingbookkeeping(int $entity) } else { $error++; } - } - - if (!$error) { - $db->commit(); - } else { - $db->rollback(); + if (!$error) { + $db->commit(); + } else { + $db->rollback(); + } } print '';