From 80099e78c1927001e706a915a0067f75cc9a8858 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. Signed-off-by: David Cook --- .../data/mysql/atomicupdate/bug_38330.pl | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/installer/data/mysql/atomicupdate/bug_38330.pl b/installer/data/mysql/atomicupdate/bug_38330.pl index aa5f8a90f9..62d0a9ad5f 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 '%%'; } ); @@ -47,8 +47,8 @@ return { JOIN deletedbiblio_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"]') + 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.39.5