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

(-)a/C4/Installer.pm (-1 / +8 lines)
Lines 30-36 use vars qw(@ISA @EXPORT); Link Here
30
BEGIN {
30
BEGIN {
31
    require Exporter;
31
    require Exporter;
32
    @ISA = qw( Exporter );
32
    @ISA = qw( Exporter );
33
    push @EXPORT, qw( primary_key_exists foreign_key_exists index_exists column_exists TableExists marc_framework_sql_list);
33
    push @EXPORT, qw( primary_key_exists unique_key_exists foreign_key_exists index_exists column_exists TableExists marc_framework_sql_list);
34
};
34
};
35
35
36
=head1 NAME
36
=head1 NAME
Lines 646-651 sub foreign_key_exists { Link Here
646
    return $infos =~ m|CONSTRAINT `$constraint_name` FOREIGN KEY|;
646
    return $infos =~ m|CONSTRAINT `$constraint_name` FOREIGN KEY|;
647
}
647
}
648
648
649
sub unique_key_exists {
650
    my ( $table_name, $constraint_name ) = @_;
651
    my $dbh = C4::Context->dbh;
652
    my (undef, $infos) = $dbh->selectrow_array(qq|SHOW CREATE TABLE $table_name|);
653
    return $infos =~ m|UNIQUE KEY `$constraint_name`|;
654
}
655
649
sub index_exists {
656
sub index_exists {
650
    my ( $table_name, $key_name ) = @_;
657
    my ( $table_name, $key_name ) = @_;
651
    my $dbh = C4::Context->dbh;
658
    my $dbh = C4::Context->dbh;
(-)a/installer/data/mysql/atomicupdate/bug_15067-add_additional_languages.perl (+81 lines)
Line 0 Link Here
1
$DBversion = 'XXX';
2
if( CheckVersion( $DBversion ) ) {
3
    if( !unique_key_exists( 'language_subtag_registry', 'uniq_lang' ) ) {
4
        my $dupe_languages = $dbh->selectall_arrayref(q|
5
            SELECT subtag, type FROM language_subtag_registry GROUP BY subtag, type HAVING COUNT(*) > 1
6
        |, { Slice => {} });
7
        if ( @$dupe_languages ) {
8
            warn "You have duplicated languages in the language_subtag_registry table in your database, unique constraint cannot be added";
9
        } else {
10
            $dbh->do(q{
11
                ALTER TABLE language_subtag_registry
12
                ADD UNIQUE KEY uniq_lang (subtag, type)
13
            });
14
        }
15
    };
16
17
    if( !unique_key_exists( 'language_descriptions', 'uniq_desc' ) ) {
18
        my $dupe_language_descriptions = $dbh->selectall_arrayref(q|
19
            SELECT subtag, lang, type FROM language_descriptions GROUP BY subtag, lang, type HAVING COUNT(*) > 1
20
        |, { Slice => {} });
21
        if ( @$dupe_language_descriptions ) {
22
            warn "You have duplicated language descriptionss in the language_descriptions table in your database, unique constraint cannot be added";
23
        } else {
24
            $dbh->do(q{
25
                ALTER TABLE language_descriptions
26
                ADD UNIQUE KEY uniq_desc (subtag, type, lang)
27
            });
28
        }
29
    };
30
31
    if( !unique_key_exists( 'language_rfc4646_to_iso639', 'uniq_code' ) ) {
32
        my $dupe_language_rfc = $dbh->selectall_arrayref(q|
33
            SELECT rfc4646_subtag, iso639_2_code FROM language_rfc4646_to_iso639 GROUP BY rfc4646_subtag, iso639_2_code HAVING COUNT(*) > 1
34
        |, { Slice => {} });
35
        if ( @$dupe_language_rfc ) {
36
            warn "You have duplicated languages in the language_rfc4646_to_iso639 in your database, unique constraint cannot be added";
37
        } else {
38
            $dbh->do(q{
39
                ALTER TABLE language_rfc4646_to_iso639
40
                ADD UNIQUE KEY uniq_code (rfc4646_subtag, iso639_2_code)
41
            });
42
        }
43
    };
44
45
    $dbh->do(q{
46
        INSERT IGNORE INTO language_subtag_registry (subtag, type, description, added)
47
        VALUES
48
        ('et', 'language', 'Estonian', now()),
49
        ('lv', 'language', 'Latvian', now()),
50
        ('lt', 'language', 'Lithuanian', now()),
51
        ('iu', 'language', 'Inuktitut', now()),
52
        ('ik', 'language', 'Inupiaq', now())
53
    });
54
55
    $dbh->do(q{
56
        INSERT IGNORE INTO language_descriptions (subtag, type, lang, description)
57
        VALUES
58
        ('et', 'language', 'en', 'Estonian'),
59
        ('et', 'language', 'et', 'Eesti'),
60
        ('lv', 'language', 'en', 'Latvian'),
61
        ('lv', 'language', 'lv', 'Latvija'),
62
        ('lt', 'language', 'en', 'Lithuanian'),
63
        ('lt', 'language', 'lt', 'Lietuvių'),
64
        ('iu', 'language', 'en', 'Inuktitut'),
65
        ('iu', 'language', 'iu', 'ᐃᓄᒃᑎᑐᑦ'),
66
        ('ik', 'language', 'en', 'Inupiaq'),
67
        ('ik', 'language', 'ik', 'Iñupiaq')
68
    });
69
70
    $dbh->do(q{
71
        INSERT IGNORE INTO language_rfc4646_to_iso639 (rfc4646_subtag, iso639_2_code)
72
        VALUES
73
        ('et', 'est'),
74
        ('lv', 'lav'),
75
        ('lt', 'lit'),
76
        ('iu', 'iku'),
77
        ('ik', 'ipk')
78
    });
79
80
    NewVersion( $DBversion, 15067, "Add missing languages");
81
}
(-)a/installer/data/mysql/atomicupdate/bug_15067-add_newlanguages.sql (-34 lines)
Lines 1-34 Link Here
1
-- Estonian
2
3
INSERT INTO language_subtag_registry (subtag, type, description, added) VALUES ('et', 'language', 'Estonian', now());
4
INSERT INTO language_descriptions (subtag, type, lang, description) VALUES ('et', 'language', 'en', 'Estonian');
5
INSERT INTO language_descriptions (subtag, type, lang, description) VALUES ('et', 'language', 'et', 'Eesti');
6
INSERT INTO language_rfc4646_to_iso639 (rfc4646_subtag, iso639_2_code) VALUES ('et', 'est');
7
8
-- Latvian
9
10
INSERT INTO language_subtag_registry (subtag, type, description, added) VALUES ('lv', 'language', 'Latvian', now());
11
INSERT INTO language_descriptions (subtag, type, lang, description) VALUES ('lv', 'language', 'en', 'Latvian');
12
INSERT INTO language_descriptions (subtag, type, lang, description) VALUES ('lv', 'language', 'lv', 'Latvija');
13
INSERT INTO language_rfc4646_to_iso639 (rfc4646_subtag, iso639_2_code) VALUES ('lv', 'lav');
14
15
-- Lithuanian
16
17
INSERT INTO language_subtag_registry (subtag, type, description, added) VALUES ('lt', 'language', 'Lithuanian', now());
18
INSERT INTO language_descriptions (subtag, type, lang, description) VALUES ('lt', 'language', 'en', 'Lithuanian');
19
INSERT INTO language_descriptions (subtag, type, lang, description) VALUES ('lt', 'language', 'lt', 'Lietuvių');
20
INSERT INTO language_rfc4646_to_iso639 (rfc4646_subtag, iso639_2_code) VALUES ('lt', 'lit');
21
22
-- Inuktitut
23
24
INSERT INTO language_subtag_registry (subtag, type, description, added) VALUES ('iu', 'language', 'Inuktitut', now());
25
INSERT INTO language_descriptions (subtag, type, lang, description) VALUES ('iu', 'language', 'en', 'Inuktitut');
26
INSERT INTO language_descriptions (subtag, type, lang, description) VALUES ('iu', 'language', 'iu', 'ᐃᓄᒃᑎᑐᑦ');
27
INSERT INTO language_rfc4646_to_iso639 (rfc4646_subtag, iso639_2_code) VALUES ('iu', 'iku');
28
29
-- Inupiaq
30
31
INSERT INTO language_subtag_registry (subtag, type, description, added) VALUES ('ik', 'language', 'Inupiaq', now());
32
INSERT INTO language_descriptions (subtag, type, lang, description) VALUES ('ik', 'language', 'en', 'Inupiaq');
33
INSERT INTO language_descriptions (subtag, type, lang, description) VALUES ('ik', 'language', 'ik', 'Iñupiaq');
34
INSERT INTO language_rfc4646_to_iso639 (rfc4646_subtag, iso639_2_code) VALUES ('ik', 'ipk');
(-)a/installer/data/mysql/mandatory/subtag_registry.sql (-1 / +1 lines)
Lines 1861-1867 VALUES ('iu', 'language', 'Inuktitut', now()); Link Here
1861
INSERT INTO language_rfc4646_to_iso639 (rfc4646_subtag, iso639_2_code)
1861
INSERT INTO language_rfc4646_to_iso639 (rfc4646_subtag, iso639_2_code)
1862
VALUES ('iu', 'iku');
1862
VALUES ('iu', 'iku');
1863
1863
1864
--Inupiaq
1864
-- Inupiaq
1865
1865
1866
INSERT INTO language_descriptions (subtag, type, lang, description)
1866
INSERT INTO language_descriptions (subtag, type, lang, description)
1867
VALUES ('ik', 'language', 'en', 'Inupiaq');
1867
VALUES ('ik', 'language', 'en', 'Inupiaq');
(-)a/t/db_dependent/Installer.t (-3 / +5 lines)
Lines 22-35 Link Here
22
# Add more tests here!!!
22
# Add more tests here!!!
23
23
24
use Modern::Perl;
24
use Modern::Perl;
25
use Test::More tests => 19;
25
use Test::More tests => 21;
26
use File::Temp qw(tempfile);
26
use File::Temp qw(tempfile);
27
use utf8;
27
use utf8;
28
28
29
use Koha::Database;
29
use Koha::Database;
30
30
31
BEGIN {
31
BEGIN {
32
    use_ok('C4::Installer', qw( column_exists index_exists foreign_key_exists primary_key_exists marc_framework_sql_list ));
32
    use_ok('C4::Installer', qw( column_exists index_exists unique_key_exists foreign_key_exists primary_key_exists marc_framework_sql_list ));
33
}
33
}
34
34
35
ok( my $installer = C4::Installer->new(), 'Testing NewInstaller' );
35
ok( my $installer = C4::Installer->new(), 'Testing NewInstaller' );
Lines 70-75 ok( ! index_exists( 'borrowers', 'xxx'), 'Constraint xxx does not exist' ); Link Here
70
ok( foreign_key_exists( 'borrowers', 'borrowers_ibfk_1' ), 'FK borrowers_ibfk_1 exists' );
70
ok( foreign_key_exists( 'borrowers', 'borrowers_ibfk_1' ), 'FK borrowers_ibfk_1 exists' );
71
ok( ! foreign_key_exists( 'borrowers', 'xxx' ), 'FK xxxx does not exist' );
71
ok( ! foreign_key_exists( 'borrowers', 'xxx' ), 'FK xxxx does not exist' );
72
72
73
ok( unique_key_exists( 'items', 'itembarcodeidx' ), 'UNIQUE KEY itembarcodeidx exists' );
74
ok( ! unique_key_exists( 'borrowers', 'xxx' ), 'UNIQUE KEY xxxx does not exist' );
75
73
76
74
ok( primary_key_exists( 'borrowers', 'borrowernumber'), 'Borrowers has primary key on borrowernumber');
77
ok( primary_key_exists( 'borrowers', 'borrowernumber'), 'Borrowers has primary key on borrowernumber');
75
ok( ! primary_key_exists( 'borrowers', 'email'), 'Borrowers does not have a primary key on email');
78
ok( ! primary_key_exists( 'borrowers', 'email'), 'Borrowers does not have a primary key on email');
76
- 

Return to bug 15067