View | Details | Raw Unified | Return to bug 40528
Collapse All | Expand All

(-)a/installer/data/mysql/atomicupdate/bug_40528-rerun_db_rev_250501001.pl (-1 / +116 lines)
Line 0 Link Here
0
- 
1
use Modern::Perl;
2
use Koha::Installer::Output qw(say_warning say_success say_info);
3
4
return {
5
    bug_number  => "40528",
6
    description => "Define checkprevcheckout as ENUM (idempotent re-run)",
7
    up          => sub {
8
        my ($args) = @_;
9
        my ( $dbh, $out ) = @$args{qw(dbh out)};
10
11
        # Check current column type for borrowers table
12
        my $borrowers_column_info = $dbh->selectrow_hashref(
13
            q{
14
                SHOW COLUMNS FROM borrowers
15
                WHERE Field = 'checkprevcheckout'
16
            }
17
        );
18
19
        if ( $borrowers_column_info && $borrowers_column_info->{Type} !~ /enum\('yes','no','inherit'\)/ ) {
20
21
            # Update invalid values before changing column type
22
            my $updated_borrowers = $dbh->do(
23
                q{
24
                    UPDATE borrowers
25
                    SET checkprevcheckout = 'inherit'
26
                    WHERE checkprevcheckout NOT IN ('yes','no','inherit')
27
                }
28
            );
29
30
            if ($updated_borrowers) {
31
                say_info( $out, "Updated $updated_borrowers invalid checkprevcheckout values in borrowers table" );
32
            }
33
34
            $dbh->do(
35
                q{
36
                    ALTER TABLE borrowers
37
                    MODIFY COLUMN `checkprevcheckout` enum('yes', 'no', 'inherit') NOT NULL DEFAULT 'inherit' COMMENT 'produce a warning for this patron if this item has previously been checked out to this patron if ''yes'', not if ''no'', defer to category setting if ''inherit''.'
38
                }
39
            );
40
            say_success( $out, "Updated borrowers.checkprevcheckout column to ENUM type" );
41
        } else {
42
            say_info( $out, "borrowers.checkprevcheckout column already has correct ENUM type" );
43
        }
44
45
        # Check current column type for categories table
46
        my $categories_column_info = $dbh->selectrow_hashref(
47
            q{
48
                SHOW COLUMNS FROM categories
49
                WHERE Field = 'checkprevcheckout'
50
            }
51
        );
52
53
        if ( $categories_column_info && $categories_column_info->{Type} !~ /enum\('yes','no','inherit'\)/ ) {
54
55
            # Update invalid values before changing column type
56
            my $updated_categories = $dbh->do(
57
                q{
58
                    UPDATE categories
59
                    SET checkprevcheckout = 'inherit'
60
                    WHERE checkprevcheckout NOT IN ('yes','no','inherit')
61
                }
62
            );
63
64
            if ($updated_categories) {
65
                say_info( $out, "Updated $updated_categories invalid checkprevcheckout values in categories table" );
66
            }
67
68
            $dbh->do(
69
                q{
70
                    ALTER TABLE categories
71
                    MODIFY COLUMN `checkprevcheckout` enum('yes', 'no', 'inherit') NOT NULL DEFAULT 'inherit' COMMENT 'produce a warning for this patron category if this item has previously been checked out to this patron if ''yes'', not if ''no'', defer to syspref setting if ''inherit''.'
72
                }
73
            );
74
            say_success( $out, "Updated categories.checkprevcheckout column to ENUM type" );
75
        } else {
76
            say_info( $out, "categories.checkprevcheckout column already has correct ENUM type" );
77
        }
78
79
        # Check current column type for deletedborrowers table
80
        my $deletedborrowers_column_info = $dbh->selectrow_hashref(
81
            q{
82
                SHOW COLUMNS FROM deletedborrowers
83
                WHERE Field = 'checkprevcheckout'
84
            }
85
        );
86
87
        if ( $deletedborrowers_column_info && $deletedborrowers_column_info->{Type} !~ /enum\('yes','no','inherit'\)/ )
88
        {
89
            # Update invalid values before changing column type
90
            my $updated_deletedborrowers = $dbh->do(
91
                q{
92
                    UPDATE deletedborrowers
93
                    SET checkprevcheckout = 'inherit'
94
                    WHERE checkprevcheckout NOT IN ('yes','no','inherit')
95
                }
96
            );
97
98
            if ($updated_deletedborrowers) {
99
                say_info(
100
                    $out,
101
                    "Updated $updated_deletedborrowers invalid checkprevcheckout values in deletedborrowers table"
102
                );
103
            }
104
105
            $dbh->do(
106
                q{
107
                    ALTER TABLE deletedborrowers
108
                    MODIFY COLUMN `checkprevcheckout` enum('yes', 'no', 'inherit') NOT NULL DEFAULT 'inherit' COMMENT 'produce a warning for this patron if this item has previously been checked out to this patron if ''yes'', not if ''no'', defer to category setting if ''inherit''.'
109
                }
110
            );
111
            say_success( $out, "Updated deletedborrowers.checkprevcheckout column to ENUM type" );
112
        } else {
113
            say_info( $out, "deletedborrowers.checkprevcheckout column already has correct ENUM type" );
114
        }
115
    },
116
};

Return to bug 40528