From 7c6e7b83d5daf6384a85dc56d7ad37702224000b Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Wed, 22 Sep 2021 14:42:28 -0300 Subject: [PATCH] Bug 27944: (QA follow-up) Make atomic update idempotent This patch checks the DB structure to see if the status column definition contains 'REQUESTED' as a valid ENUM value. The script is also moved into the new style. Signed-off-by: Tomas Cohen Arazi --- .../data/mysql/atomicupdate/1_bug_27944.pl | 40 +++++++++++++++++++ .../data/mysql/atomicupdate/bug_27944.perl | 31 -------------- 2 files changed, 40 insertions(+), 31 deletions(-) create mode 100755 installer/data/mysql/atomicupdate/1_bug_27944.pl delete mode 100644 installer/data/mysql/atomicupdate/bug_27944.perl diff --git a/installer/data/mysql/atomicupdate/1_bug_27944.pl b/installer/data/mysql/atomicupdate/1_bug_27944.pl new file mode 100755 index 0000000000..49507c0e9d --- /dev/null +++ b/installer/data/mysql/atomicupdate/1_bug_27944.pl @@ -0,0 +1,40 @@ +use Modern::Perl; + +return { + bug_number => "27944", + description => "Add REQUESTED as enum element for status column, move AR_PENDING letter to AR_REQUESTED, and add new AR_PENDING letter", + up => sub { + my ($args) = @_; + my ($dbh) = @$args{qw(dbh)}; + + # check if we already added the REQUESTED type in ENUM + my @row = $dbh->selectrow_array(q{ + SHOW COLUMNS FROM article_requests WHERE Field='status' AND Type LIKE "%'REQUESTED'%"; + }); + + unless (@row) { + $dbh->do(q{ + ALTER TABLE `article_requests` + MODIFY `status` enum('REQUESTED', 'PENDING','PROCESSING','COMPLETED','CANCELED') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'REQUESTED' + }); + $dbh->do(q{ + UPDATE article_requests + SET status='REQUESTED' WHERE status='PENDING' + }); + + $dbh->do(q{ + UPDATE `letter` + SET `code` = 'AR_REQUESTED', + `name` = REPLACE(name, '- open', '- new') + WHERE `module` = 'circulation' + AND `code` = 'AR_PENDING' + }) + if ( $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE code=?', undef, 'AR_REQUESTED') )[0] == 0; # Check to make idempotent + + $dbh->do(q{ + INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`) VALUES + ('circulation', 'AR_PENDING', '', 'Article request - pending', 0, 'Pending article request', 'Dear <> <> (<>)\r\n\r\nYour request for an article from <> (<>) is now in pending state.\r\n\r\nArticle requested:\r\nTitle: <>\r\nAuthor: <>\r\nVolume: <>\r\nIssue: <>\r\nDate: <>\r\nPages: <>\r\nChapters: <>\r\nNotes: <>\r\n\r\n\r\nThank you!', 'email') + }); + } + }, +} diff --git a/installer/data/mysql/atomicupdate/bug_27944.perl b/installer/data/mysql/atomicupdate/bug_27944.perl deleted file mode 100644 index 1d0f2f2b0a..0000000000 --- a/installer/data/mysql/atomicupdate/bug_27944.perl +++ /dev/null @@ -1,31 +0,0 @@ -$DBversion = 'XXX'; # will be replaced by the RM -if ( CheckVersion($DBversion) ) { - - # you can use $dbh here like: - $dbh->do( -"ALTER TABLE `article_requests` MODIFY `status` enum('REQUESTED', 'PENDING','PROCESSING','COMPLETED','CANCELED') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'REQUESTED'" - ); - $dbh->do(q|UPDATE article_requests SET status='REQUESTED' WHERE status='PENDING'|); - - $dbh->do( - q{ - UPDATE `letter` - SET `code` = 'AR_REQUESTED', - `name` = REPLACE(name, '- open', '- new') - WHERE `module` = 'circulation' - AND `code` = 'AR_PENDING' - } - ) if ( $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE code=?', undef, 'AR_REQUESTED') )[0] == 0; # Check to make idempotent - - $dbh->do( - q{ - INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`) VALUES - ('circulation', 'AR_PENDING', '', 'Article request - pending', 0, 'Pending article request', 'Dear <> <> (<>)\r\n\r\nYour request for an article from <> (<>) is now in pending state.\r\n\r\nArticle requested:\r\nTitle: <>\r\nAuthor: <>\r\nVolume: <>\r\nIssue: <>\r\nDate: <>\r\nPages: <>\r\nChapters: <>\r\nNotes: <>\r\n\r\n\r\nThank you!', 'email') - } - ); - - # Always end with this (adjust the bug info) - NewVersion( $DBversion, 27944, -"Add REQUESTED as enum element for status column, move AR_PENDING letter to AR_REQUESTED, and add new AR_PENDING letter" - ); -} -- 2.30.2