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

(-)a/misc/load_yaml.pl (-1 / +88 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
#
3
#  Copyright 2020 Koha Development Team
4
#
5
#  This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it
8
# under the terms of the GNU General Public License as published by
9
# the Free Software Foundation; either version 3 of the License, or
10
# (at your option) any later version.
11
#
12
# Koha is distributed in the hope that it will be useful, but
13
# WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
# GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
19
20
use Modern::Perl;
21
22
use YAML::Syck qw( LoadFile );
23
use C4::Context;
24
use Getopt::Long qw(:config no_ignore_case);
25
use Data::Printer;
26
27
sub print_usage {
28
     ( my $basename = $0 ) =~ s|.*/||;
29
     print <<USAGE;
30
31
$basename
32
 Load file in YAML format into database
33
34
Usage:
35
$0 [--file=FILE]
36
$0 -h
37
38
 -f, --file=FILE         File to load.
39
 -h, --help              Show this help
40
41
USAGE
42
}
43
44
# Getting parameters
45
my $file;
46
my $help;
47
48
GetOptions(
49
 'file|f=s'     => \$file,
50
 'help|h'       => \$help
51
) or print_usage, exit 1;
52
53
if ($help or not $file) {
54
 print_usage;
55
 exit;
56
}
57
58
my $dbh  = C4::Context->dbh;
59
my $yaml;
60
eval {
61
    $yaml = LoadFile( $file );                                    # Load YAML
62
};
63
if ($@){
64
    die "Something went wrong loading file $file ($@)";
65
}
66
67
for my $table ( @{ $yaml->{'tables'} } ) {
68
    my $table_name   = ( keys %$table )[0];                          # table name
69
    my @rows         = @{ $table->{$table_name}->{rows} };           #
70
    my @columns      = ( sort keys %{$rows[0]} );                    # column names
71
    my $fields       = join ",", map{sprintf("`%s`", $_)} @columns;  # idem, joined
72
    my $placeholders = join ",", map { "?" } @columns;               # '?,..,?' string
73
    my $query        = "INSERT INTO $table_name ( $fields ) VALUES ( $placeholders )";
74
    my $sth          = $dbh->prepare($query);
75
    my @multiline    = @{ $table->{$table_name}->{'multiline'} };    # to check multiline values;
76
    foreach my $row ( @rows ) {
77
        my @values = map {
78
                        my $col = $_;
79
                        ( @multiline and grep { $_ eq $col } @multiline )
80
                        ? join "\r\n", @{$row->{$col}}                # join multiline values
81
                        : $row->{$col};
82
                     } @columns;
83
        $sth->execute( @values );
84
    }
85
}
86
for my $statement ( @{ $yaml->{'sql_statements'} } ) {               # extra SQL statements
87
    $dbh->do($statement);
88
}

Return to bug 24883