Dancer2-Plugin-Pg
view release on metacpan or search on metacpan
lib/Dancer2/Plugin/Pg/Core.pm view on Meta::CPAN
sub selectOne {
my $self = shift;
my $result = $self->dbh->selectrow_arrayref(shift, undef, @_);
die $self->dbh->errstr if $self->dbh->err;
return $result->[0];
}
sub selectRow {
my $self = shift;
my $result = $self->dbh->selectrow_hashref(shift, undef, @_);
die $self->dbh->errstr if $self->dbh->err;
return $result;
}
sub selectAll {
my $self = shift;
my $result = $self->dbh->selectall_arrayref(shift, {Slice=>{}}, @_);
die $self->dbh->errstr if $self->dbh->err;
return [] unless $result;
return [$result] unless ref($result) eq 'ARRAY';
return $result;
}
sub column {
my ($self, $key, $value) = @_;
push(@{$self->keys}, $key);
if (ref($value) eq 'HASH') {
push(@{$self->type}, keys %{$value});
push(@{$self->values}, values %{$value});
}else{
push(@{$self->type}, undef);
push(@{$self->values}, $value);
}
push(@{$self->reference}, '?');
}
sub insert {
my $self = shift;
my $sql = 'INSERT INTO ' . $self->table . ' (';
$sql .= join(',',@{$self->keys});
$sql .= ') VALUES (';
$sql .= join(',', @{$self->reference});
$sql .= ')';
$sql .= ' RETURNING ' . $self->returning if $self->returning;
my $sth = $self->query($sql, @{$self->values});
$self->_clean unless $self->returning;
return 0 unless $sth;
if ($self->returning && $sth->rows > 0) {
return $self->_getReturning($sth, $self->returning);
}else{
$self->_clean;
}
return $sth || 1;
}
sub update {
my ($self, %wheres) = @_;
my $sql = undef;
for(my $i=0; $i<scalar(@{$self->keys}); $i++){
unless($sql){
$sql = 'UPDATE ' . $self->table . ' SET ';
if (${$self->type}[$i]) {
$sql .= ${$self->keys}[$i] . ' ' . ${$self->type}[$i] . ' ?';
}else{
$sql .= ${$self->keys}[$i] . ' = ?';
}
}else{
if (${$self->type}[$i]) {
$sql .= ', ' . ${$self->keys}[$i] . ' ' . ${$self->type}[$i] . ' ?';
}else{
$sql .= ', ' . ${$self->keys}[$i] . ' = ?';
}
}
}
my $where = '';
foreach(keys %wheres){
if ($_ =~ /and|or/i) {
foreach my $key (keys %{$wheres{$_}}){
$where .= ' ' . uc($_) if $where;
if (ref($wheres{$_}{$key}) eq 'HASH') {
$where .= ' ' . $key;
$where .= ' ' . $_ . ' ?' for(keys %{$wheres{$_}{$key}});
push(@{$self->values}, values %{$wheres{$_}{$key}});
}else{
$where .= ' ' . $key . ' = ?';
push(@{$self->values}, $wheres{$_}{$key});
}
}
}else{
$where .= ' AND' if $where;
if (ref($wheres{$_}) eq 'HASH') {
$where .= ' ' . $_;
$where .= ' ' . $_ . ' ?' for(keys %{$wheres{$_}});
push(@{$self->values}, values %{$wheres{$_}});
}else{
$where .= ' ' . $_ . ' = ?';
push(@{$self->values}, $wheres{$_});
}
}
}
$sql .= ' WHERE' . $where;
$sql .= ' RETURNING ' . $self->returning if $self->returning;
my $sth = $self->query($sql, @{$self->values});
$self->_clean unless $self->returning;
return 0 unless $sth;
if ($self->returning && $sth->rows > 0) {
return $self->_getReturning($sth, $self->returning);
}else{
$self->_clean;
}
return $sth || 1;
}
sub delete {
my ($self, %wheres) = @_;
( run in 2.096 seconds using v1.01-cache-2.11-cpan-cdf2f3d4e48 )