Apache-SdnFw
view release on metacpan or search on metacpan
lib/Apache/SdnFw/lib/DB.pm view on Meta::CPAN
my $dbh = DBI->connect("dbi:mysql:$db_string",$db_user,$db_pass, { RaiseError => 1, Warn => 0 });
$dbh->{RaiseError} = 0;
return $dbh;
}
sub db_connect {
my $db_string = shift;
my $db_user = shift;
my $dbh = DBI->connect("dbi:Pg:$db_string",$db_user,undef, { RaiseError => 1, Warn => 0 });
$dbh->{RaiseError} = 0;
return $dbh;
}
sub debug_start {
my $s = shift;
my $q = shift; #query
return undef unless($s->{dbdbst});
my $t = time-$s->{dbdbst};
my $c = shift; # caller
my $nt = sprintf "%.4f", $t;
my @nc = split ' ', $c;
$s->{dbdbdata} .= "---|$nt|$nc[2]|$nc[0]|";
return time; # time we started query
}
sub debug_end {
my $s = shift;
my $sq = shift; # time query started
return unless($sq);
my $cache_used = (shift) ? '*' : '';
my $t = time-$sq;
my $nt = sprintf "%.4f", $t;
$s->{dbdbdata} .= "$nt|$cache_used\t";
}
=head2 db_insert
$s->db_insert($table,\%data,[$keyfield]);
=cut
sub db_insert {
my $s = shift;
my $dbh = $s->{dbh};
my $table = shift;
my $data = shift;
my $keyfield = shift;
my (@keys,@values,$key,@bind);
foreach $key (keys %$data) {
next if ($data->{$key} eq '');
next if ($data->{$key} eq 'NULL');
push @keys, qq($key);
if ($data->{$key} =~ m/^_raw:(.+)$/) {
push @bind, $1;
next;
}
push @bind, '?';
push @values, $data->{$key};
}
my $columns = join ',', @keys;
my $bind = join ',', @bind;
my $query = qq|INSERT INTO $table ($columns) VALUES ($bind)|;
if ($keyfield) {
$query .= " RETURNING $keyfield";
}
my $st = debug_start($s,$query,(join ' ', caller)); # if (defined($s->{dbdbf}));
my $sth;
croak $dbh->errstr."\n$query\n\n" unless($sth = $dbh->prepare($query));
croak $dbh->errstr."\n$query\n@values\n" unless($sth->execute(@values));
debug_end($s,$st); # if (defined($s->{dbdbf}));
if ($keyfield) {
my $id = ($sth->fetchrow_array)[0];
$sth->finish;
return $id;
} else {
$sth->finish;
return '';
}
}
=head2 db_update_key
$s->db_update_key($table,$keyfield,$keyid,\%data);
=cut
sub db_update_key {
my $s = shift;
my $dbh = $s->{dbh};
my $table = shift;
my $keyfield = shift; # can be item_id or item_id:location_id
my $keyid = shift; # can be 1235 or 1234:7890
my $data = shift;
my (@keys,@values);
my @keyfields;
foreach my $kf (split ':', $keyfield) {
push @keyfields, "$kf=?";
}
foreach my $key (keys %$data) {
if ($data->{$key} eq '' || $data->{$key} eq 'NULL') {
push @keys, qq($key=NULL);
next;
}
if ($data->{$key} =~ /^_raw:(.+)$/) {
push @keys, qq($key=$1);
next;
}
push @keys, qq($key=?);
push @values, $data->{$key};
}
my $columns = join ',', @keys;
push @values, (split ':', $keyid);
my $where = join ' AND ', @keyfields;
( run in 1.812 second using v1.01-cache-2.11-cpan-2398b32b56e )