package DBI::db; # # Based on DBI::Utils used in The Messaging Engine: # http://www.messagingengine.com/ # # Copyright (c) Jeremy Howard, Rob Mueller, Kirill Miazine # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # use strict; use DBI; sub dquery { my $dbh = shift; my ($query, @params) = @_; return $dbh->do($query, {}, @params); } sub dfind { my $dbh = shift; my ($expr, $table, $what) = @_; my $cond = join ' AND ', map { "$_=?" } keys %{$what}; return $dbh->dlookup($expr, $table, $cond, values %{$what}); } sub dlookup { my $dbh = shift; my ($expr, $table, $cond, @params) = @_; $expr = join ',', @{$expr} if ref $expr eq 'ARRAY'; my $query = "SELECT $expr"; $query .= " FROM $table" if $table; $query .= " WHERE $cond" if $cond; $query .= ' LIMIT 1'; return $dbh->selectrow_array($query, {}, @params); } sub dlookupall { my $dbh = shift; my ($expr, $table, $cond, @params) = @_; $expr = join ',', @{$expr} if ref $expr eq 'ARRAY'; my $query = "SELECT $expr FROM $table"; $query .= " WHERE $cond" if $cond; return $dbh->selectall_arrayref($query, {}, @params); } sub dselect { my $dbh = shift; my ($cols, $table, $cond, @params) = @_; my $query = 'SELECT ' . join(',', @{$cols}) . " FROM $table"; $query .= " WHERE $cond" if $cond; $query .= ' LIMIT 1'; my @res = $dbh->selectrow_array($query, {}, @params) or return; return {map { ($cols->[$_], $res[$_]) } (0 .. $#{$cols})}; } sub dinsert { my $dbh = shift; my ($table, $what) = @_; my $query = "INSERT INTO $table (" . join(',', keys %{$what}) . ') VALUES (' . join(',', map { '?' } keys %{$what}) . ')'; return $dbh->dquery($query, values %{$what}); } sub dupdate { my $dbh = shift; my ($table, $what, $cond, @params) = @_; my $query = "UPDATE $table SET " . join(',', map { "$_=?" } keys %{$what}); $query .= " WHERE $cond" if $cond; return $dbh->dquery($query, values %{$what}, @params); } sub ddelete { my $dbh = shift; my ($table, $cond, @params) = @_; my $query = "DELETE FROM $table"; $query .= " WHERE $cond" if $cond; return $dbh->dquery($query, @params); } 1;