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 )