Bug 30571: (follow-up) Additional check at upgrade
[koha.git] / installer / data / mysql / db_revs / 220600056.pl
1 use Modern::Perl;
2
3 return {
4     bug_number => 30571,
5     description => "Table z3950servers: three cols NOT NULL",
6     up => sub {
7         my ($args) = @_;
8         my ($dbh, $out) = @$args{qw(dbh out)};
9
10         # Preliminary data checks
11         my $sql = "SELECT COUNT(*) FROM z3950servers WHERE host IS NULL";
12         my ($cnt) = $dbh->selectrow_array($sql);
13         if( $cnt ) { # No host is really bad data! Remove it.
14             $dbh->do( "DELETE FROM z3950servers WHERE host IS NULL" );
15             say $out "Found bad data in table z3950servers: removed $cnt records with host undefined";
16         }
17         $sql = "SELECT host FROM z3950servers WHERE syntax IS NULL OR encoding IS NULL";
18         my $hosts = $dbh->selectcol_arrayref($sql);
19         if( @$hosts ) { # This is bad data too. We choose a default here.
20             $dbh->do( q|UPDATE z3950servers SET syntax = COALESCE(syntax, 'USMARC'), encoding = COALESCE(encoding, 'utf8')
21                 WHERE syntax IS NULL OR encoding IS NULL| );
22             say $out "Corrected empty syntax or encoding for the following hosts. Please check after upgrade.";
23             say $out "Updated hosts: ". (join ',', @$hosts);
24         }
25
26         # Actual dbrev
27         $dbh->do(q{
28 alter table z3950servers
29     change column `host` `host` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'target''s host name',
30     change column `syntax` `syntax` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'MARC format provided by this target',
31     change column `encoding` `encoding` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'characters encoding provided by this target';
32         });
33     },
34 };