From 17222d5fcd5eb29ec1bf326d1fd8f321e137a1a7 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 8 May 2025 17:26:55 +0100 Subject: [PATCH] Bug 38330: (QA follow-up) Improve resilience of DB update David considered using boolean, but this would catch 'no' and 0 as truthy. I instead look for common values here more explicitly. --- .../data/mysql/atomicupdate/bug_38330.pl | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/installer/data/mysql/atomicupdate/bug_38330.pl b/installer/data/mysql/atomicupdate/bug_38330.pl index 73eaba9d516..62d0a9ad5f0 100755 --- a/installer/data/mysql/atomicupdate/bug_38330.pl +++ b/installer/data/mysql/atomicupdate/bug_38330.pl @@ -18,15 +18,15 @@ return { $dbh->do( q{ - UPDATE biblio b - JOIN biblio_metadata m ON b.biblionumber = m.biblionumber - SET b.opac_suppressed = - CASE - WHEN ExtractValue(m.metadata, '//datafield[@tag="942"]/subfield[@code="n"]') REGEXP '^[01]$' THEN - ExtractValue(m.metadata, '//datafield[@tag="942"]/subfield[@code="n"]') - ELSE 0 - END - WHERE m.metadata LIKE '%%'; + UPDATE biblio b + JOIN biblio_metadata m ON b.biblionumber = m.biblionumber + SET b.opac_suppressed = + CASE + WHEN LOWER(TRIM(ExtractValue(m.metadata, '//datafield[@tag="942"]/subfield[@code="n"]'))) IN ('1', 'yes', 'true') THEN 1 + WHEN LOWER(TRIM(ExtractValue(m.metadata, '//datafield[@tag="942"]/subfield[@code="n"]'))) IN ('0', 'no', 'false', '') THEN 0 + ELSE 0 + END + WHERE m.metadata LIKE '%%'; } ); @@ -45,10 +45,10 @@ return { q{ UPDATE deletedbiblio b JOIN deletedbiblio_metadata m ON b.biblionumber = m.biblionumber - SET b.opac_suppressed = + SET b.opac_suppressed = CASE - WHEN ExtractValue(m.metadata, '//datafield[@tag="942"]/subfield[@code="n"]') REGEXP '^[01]$' THEN - ExtractValue(m.metadata, '//datafield[@tag="942"]/subfield[@code="n"]') + WHEN LOWER(TRIM(ExtractValue(m.metadata, '//datafield[@tag="942"]/subfield[@code="n"]'))) IN ('1', 'yes', 'true') THEN 1 + WHEN LOWER(TRIM(ExtractValue(m.metadata, '//datafield[@tag="942"]/subfield[@code="n"]'))) IN ('0', 'no', 'false', '') THEN 0 ELSE 0 END WHERE m.metadata LIKE '%%'; -- 2.49.0