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 <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
Martin Renvoize 2025-05-08 17:26:55 +01:00 committed by Lucas Gass
parent 354dbc9649
commit 393c9fc2c8
No known key found for this signature in database
GPG Key ID: 60B447398B0D36CA
1 changed files with 11 additions and 11 deletions

View File

@ -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 '%<datafield tag="942">%';
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 '%<datafield tag="942">%';
}
);
@ -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 '%<datafield tag="942">%';