DBQuery

 view release on metacpan or  search on metacpan

lib/DBQuery.pm  view on Meta::CPAN


sub new
{
    my $class = shift;
    my $DB = shift;
    my $self;
    if (defined $DB->{dsn})
    {
        $self = {
            'dsn' => $DB->{dsn},
            'user' => $DB->{db_user},
            'pass' => (defined $DB->{db_pass} ? $DB->{db_pass} : ''),
            'dbh' => undef,
            'sth' => undef,
        };
    }
    else
    {
        $DB->{driver_name} = 'mysql' unless (defined $DB->{driver_name});
        $DB->{driver_name} = ucfirst($DB->{driver_name}) if ($DB->{driver_name} eq "oracle");
        $self = {
            'driver' => $DB->{driver_name},
            'dsn' => $DB->{driver_name} eq 'mysql'
                ? 'dbi:' . $DB->{driver_name} . ':database=' . $DB->{db_name} .
                (defined $DB->{db_host} ? ';host=' . $DB->{db_host} : '') .
                (defined $DB->{db_sock} ? ';mysql_socket=' . $DB->{db_sock} : ';mysql_socket=/var/lib/mysql/mysql.sock') . 
                (defined $DB->{db_port} ? ';port=' . $DB->{db_port} : ';port=3306') 
                : ($DB->{driver_name} eq 'pgsql' 
                        ? 'dbi:' . $DB->{driver_name} . ':dbname=' . $DB->{db_name} . '' . 
                        (defined $DB->{db_host} ? ';host=' . $DB->{db_host} : '') . 
                        (defined $DB->{db_path} ? ';path=' . $DB->{db_path} : '') .
                        (defined $DB->{db_port} ? ';port=' . $DB->{db_port} : ';port=5432')
                        : ($DB->{driver_name} eq 'Oracle'
                            ? 'dbi:' . $DB->{driver_name} . 
                            (defined $DB->{db_host} ? ':host=' . $DB->{db_host} : ':host=localhost') . 
                            (defined $DB->{db_port} ? ';port=' . $DB->{db_port} : '') .
                            (defined $DB->{db_sid} ? ';sid=' . $DB->{db_sid} : '') .
                            (defined $DB->{db_name} && !defined $DB->{db_sid} ? ';sid=' . $DB->{db_name} : '')
                            : 'dbi:' . $DB->{driver_name} . (defined $DB->{db_host} ? ':' . $DB->{db_host} : '')
                          )
                  ),
            'user' => $DB->{db_user},
            'pass' => (defined $DB->{db_pass} ? $DB->{db_pass} : ''),
            'pconnect' => $DB->{db_pconnect},
            'utf8' => $DB->{db_enable_utf8},
            'autocommit' => (defined $DB->{db_autocommit} ? $DB->{db_autocommit} : 1),
            'LongReadLen' => $DB->{db_longreadlen},
            'LongTruncOk' => $DB->{db_longtruncok},
            'dbh' => undef,
            'sth' => undef,
        };
    }
    bless $self, $class;
    return $self;
}

sub connect
{
    my $self = shift;
    if ($_[0] && $self->{driver} eq 'mysql') {
        $self->{dbh} = DBI->connect($self->{dsn}, $self->{user}, $self->{pass}, {'RaiseError' => 1, 'mysql_enable_utf8' => 1});
    } else {
        $self->{dbh} = DBI->connect($self->{dsn}, $self->{user}, $self->{pass}, {'RaiseError' => 1});
    }

    if ($self->{driver} eq 'mysql') {
        $self->{dbh}->{mysql_auto_reconnect} = $self->{pconnect} ? 1 : 0;
        $self->{dbh}->{mysql_enable_utf8} = $self->{utf8} ? 1 : 0;
        $self->{dbh}->{mysql_no_autocommit_cmd} = $self->{autocommit} ? 0 : 1;
    } elsif ($self->{driver} eq 'Oracle') {
        $self->{dbh}->{LongReadLen} = $self->{LongReadLen};
        $self->{dbh}->{LongTruncOk} = $self->{LongTruncOk};
    }
    return;
}

sub query
{
    my $self = shift;
    $self->{sth} = $self->{dbh}->prepare($_[0]);
    $self->{sth}->execute();
    return $self->{sth};
}

sub quote
{
    my $self = shift;
    return $self->{dbh}->quote($_[0]);
}

sub insert_id
{
    my $self = shift;
    return $self->{dbh}->{'mysql_insertid'};
}

sub fetch_array
{
    my $self = shift;
    return ref($_[0]) eq 'DBI::st' ? $_[0]->fetchrow_array() : $self->{sth}->fetchrow_array();
}

sub fetch_arrayref
{
    my $self = shift;
    return ref($_[0]) eq 'DBI::st' ? $_[0]->fetchrow_arrayref() : $self->{sth}->fetchrow_arrayref();
}

sub fetch_hash
{
    my $self = shift;
    return ref($_[0]) eq 'DBI::st' ? $_[0]->fetchrow_hashref() : $self->{sth}->fetchrow_hashref();
}

sub close
{
    my $self = shift;
    $self->{sth}->finish() if (defined $self->{sth});
    $self->{dbh}->disconnect if (defined $self->{dbh});
    return;
}

1;

__END__

=head1 NAME



( run in 0.759 second using v1.01-cache-2.11-cpan-39bf76dae61 )