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

(-)a/C4/Installer.pm (-39 / +17 lines)
Lines 17-26 package C4::Installer; Link Here
17
# You should have received a copy of the GNU General Public License
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>.
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
19
19
20
use strict;
20
use Modern::Perl;
21
#use warnings; FIXME - Bug 2505
22
21
23
use Encode qw( encode is_utf8 );
22
use Encode qw( encode is_utf8 );
23
use File::Slurp;
24
use SQL::SplitStatement;
24
use C4::Context;
25
use C4::Context;
25
use C4::Installer::PerlModules;
26
use C4::Installer::PerlModules;
26
use DBI;
27
use DBI;
Lines 428-473 with missing files, e.g. Link Here
428
=cut
429
=cut
429
430
430
sub load_sql {
431
sub load_sql {
432
431
    my $self = shift;
433
    my $self = shift;
432
    my $filename = shift;
434
    my $filename = shift;
433
435
434
    my $datadir = C4::Context->config('intranetdir') . "/installer/data/$self->{dbms}";
436
    my $dbh = $self->{ dbh };
435
    my $error;
437
436
    my $strcmd;
438
    my $sql = read_file( $filename, binmode => ':utf8');
437
    my $cmd;
439
    my $sql_splitter = SQL::SplitStatement->new;
438
    if ( $self->{dbms} eq 'mysql' ) {
440
    my @statements = $sql_splitter->split($sql);
439
        $cmd = qx(which mysql 2>/dev/null || whereis mysql 2>/dev/null);
441
    my $error = "";
440
        chomp $cmd;
442
441
        $cmd = $1 if ($cmd && $cmd =~ /^(.+?)[\r\n]+$/);
443
    foreach my $statement ( @statements ) {
442
        $cmd = 'mysql' if (!$cmd || !-x $cmd);
444
        $dbh->do($statement);
443
        $strcmd = "$cmd "
445
        if( $dbh->err) {
444
            . ( $self->{hostname} ? " -h $self->{hostname} " : "" )
446
            $error .= "$filename (" . $dbh->errstr . "): $statement\n";
445
            . ( $self->{port}     ? " -P $self->{port} "     : "" )
447
        }
446
            . ( $self->{user}     ? " -u $self->{user} "     : "" )
447
            . ( $self->{password} ? " -p'$self->{password}'"   : "" )
448
            . " $self->{dbname} ";
449
        $error = qx($strcmd --default-character-set=utf8 <$filename 2>&1 1>/dev/null);
450
    } elsif ( $self->{dbms} eq 'Pg' ) {
451
        $cmd = qx(which psql 2>/dev/null || whereis psql 2>/dev/null);
452
        chomp $cmd;
453
        $cmd = $1 if ($cmd && $cmd =~ /^(.+?)[\r\n]+$/);
454
        $cmd = 'psql' if (!$cmd || !-x $cmd);
455
        $strcmd = "$cmd "
456
            . ( $self->{hostname} ? " -h $self->{hostname} " : "" )
457
            . ( $self->{port}     ? " -p $self->{port} "     : "" )
458
            . ( $self->{user}     ? " -U $self->{user} "     : "" )
459
#            . ( $self->{password} ? " -W $self->{password}"   : "" )       # psql will NOT accept a password, but prompts...
460
            . " $self->{dbname} ";                        # Therefore, be sure to run 'trust' on localhost in pg_hba.conf -fbcit
461
        $error = qx($strcmd -f $filename 2>&1 1>/dev/null);
462
        # Be sure to set 'client_min_messages = error' in postgresql.conf
463
        # so that only true errors are returned to stderr or else the installer will
464
        # report the import as a failure although it really succeeded -fbcit
465
    }
466
#   errors thrown while loading installer data should be logged
467
    if($error) {
468
      warn "C4::Installer::load_sql returned the following errors while attempting to load $filename:\n";
469
      warn "$error";
470
    }
448
    }
449
471
    return $error;
450
    return $error;
472
}
451
}
473
452
474
- 

Return to bug 13669