HEX
Server: Apache
System: Linux info 3.0 #1337 SMP Tue Jan 01 00:00:00 CEST 2000 all GNU/Linux
User: u103727277 (3416564)
PHP: 8.0.30
Disabled: NONE
Upload Files
File: //lib/susshi/exec/Susshi/DB.pm
package Susshi::DB;

use warnings;
use strict;

use DBI;

sub new {
    my $class = shift;
    my %args = @_;

    my $self = {};

    foreach my $key ( qw (username userpassword databasehost databasename) ) {
        $self->{$key} = delete $args{$key} or die "Missing mandatory option $key";
    }
    $self->{databasesocket} = delete $args{databasesocket};
    $self->{tablefilter}    = delete $args{tablefilter} // '';

    return bless $self, $class;
}

sub _get_dsn {
    my $self = shift;

    if (! $self->{_dsn}) {
        $self->{_dsn} = sprintf 'dbi:mysql:database=%s;hostname=%s',
            $self->{databasename}, $self->{databasehost};
        $self->{_dsn} .= ';mysql_socket=' . $self->{databasesocket} if $self->{databasesocket};
    }
    return $self->{_dsn};
}

sub _get_dbh {
    my $self = shift;

    if (! $self->{_dbh}) {
        $self->{_dbh} = DBI->connect (
            $self->_get_dsn,
            $self->{username},
            $self->{userpassword},
            { RaiseError => 0, PrintError => 0, }
        ) or die $DBI::errstr . "\n";
    }
    return $self->{_dbh};
}

sub drop_tables {
    my $self   = shift;
    my ($tbls)  = @_;

    die unless ref $tbls eq 'ARRAY';
    
    my $dbh    = $self->_get_dbh;
    foreach my $tbl (@$tbls) {
        $dbh->do('DROP TABLE ' . $dbh->quote_identifier($tbl));
    }
}

sub get_mysql_args {
    my $self = shift;

    my @mysql_args=(
        '--host=' . $self->{databasehost},
        '--user=' . $self->{username},
        '--password=' . $self->{userpassword},
        $self->{databasename},
    );
    push @mysql_args, '--socket=' . $self->{databasesocket} if $self->{databasesocket};

    return @mysql_args;
}

sub get_tables {
    my $self   = shift;

    my $size   = 0;
    my @tables = ();
    my $prefix = $self->{tablefilter};

    my $dbh    = $self->_get_dbh;
    my $query  = 'SHOW TABLE STATUS';
    if ($prefix) {
        $query .= ' LIKE ' . $dbh->quote($prefix . '%');
    }
    my $sth = $dbh->prepare($query);
    $sth->execute;
    while (my $t = $sth->fetchrow_hashref()) {
        $size += $t->{Index_length} + $t->{Data_length};
        push @tables, $t->{Name};
    }

    return $size, \@tables;
}

1;