BenchmarkAnything-Storage-Backend-SQL

 view release on metacpan or  search on metacpan

lib/BenchmarkAnything/Storage/Backend/SQL/Query.pm  view on Meta::CPAN

package BenchmarkAnything::Storage::Backend::SQL::Query;
our $AUTHORITY = 'cpan:TAPPER';
# ABSTRACT: BenchmarkAnything::Storage::Backend::SQL - querying - base class
$BenchmarkAnything::Storage::Backend::SQL::Query::VERSION = '0.029';
use strict;
use warnings;
use Digest::MD5;
#use Try::Tiny;

sub new {

    my ( $s_self, $hr_atts ) = @_;

    my $or_self = bless {}, $s_self;

    for my $s_key (qw/ config dbh /) {
        if (! $hr_atts->{$s_key} ) {
            require Carp;
            Carp::confess("missing parameter '$s_key'");
        }
    }

    $or_self->{dbh}       = $hr_atts->{dbh};
    $or_self->{debug}     = $hr_atts->{debug} || 0;
    $or_self->{config}    = $hr_atts->{config};

    return $or_self;

}

sub execute_query {

    my ( $or_self, $s_statement, @a_vals ) = @_;

    if ( $or_self->{debug} ) {
        warn $s_statement . ' (' . (join ',', @a_vals) . ')';
    }

    local $or_self->{dbh}{RaiseError} = 1;
    local $or_self->{dbh}{PrintError} = 0;

    my $s_key = Digest::MD5::md5($s_statement);
    if ( $or_self->{prepared}{$s_key} ) {
        $or_self->{prepared}{$s_key}->finish();
    }
    $or_self->{prepared}{$s_key} = $or_self->{dbh}->prepare( $s_statement );
    $or_self->{prepared}{$s_key}->execute( @a_vals );

    # try/catch - this should better be handled in upper levels
    # try {
    #     $or_self->{prepared}{$s_key}->execute( @a_vals );
    # }
    # catch {
    #     warn("CATCH");
    #     if (/Deadlock found when trying to get lock/) {
    #         warn("IGNORED DEADLOCK");
    #     } else {
    #         Carp::cluck("INNER UNKNOWN {{{\n$_\n}}}\n");
    #         die $_;
    #     }
    # };

    return $or_self->{prepared}{$s_key};

}

sub last_insert_id {



( run in 1.291 second using v1.01-cache-2.11-cpan-d8267643d1d )