DBIx-YAWM
view release on metacpan or search on metacpan
}
#fetch the records
if ($self->{'Debug'} > 1){ print "[Query]: fetching records ...\n"; }
while (@data = $sth->fetchrow_array()){
$rec_count ++;
my $count = -1;
my %hash = ();
foreach (@data){
$count ++;
$hash{$params{'Select'}->[$count]} = $_;
}
push (@OUT,\%hash);
}
$sth->finish();
#make sure we got something
if (! $rec_count){
if ($self->{'Debug'}){ print "[Query]: no records returned\n"; }
$self->{errstr} = "no records returned";
return (undef);
}else{
if ($self->{'Debug'}){ print "[Query]: recieved $rec_count records\n"; }
return (\@OUT);
}
}
## Insert #########################################
##insert a record into the given table of the
##database.
sub Insert {
#local vars
my ($self, %p) = @_;
my (@vals,$sth) = ();
#requried options
unless (
(exists($p{Insert})) &&
(exists($p{Into}))
){
$self->{errstr} = "Insert and Into are required options to Insert";
return(undef);
}
#proctecting against disaster
unless ($self->{CanInsert}){
$self->{errstr} = "The CanInsert option was not set in this object at creation ";
$self->{errstr}.= "you may not use the Insert method on this object.";
return (undef);
}
#filters
foreach (keys %{$p{Insert}}){
#don't insert null values
unless (length($p{Insert}->{$_}) > 0){
delete($p{Insert}->{$_});
next;
}
}
#Ints has been replaced by 'NoQuote', but we maintain
#backward compatibility
foreach (keys %{$p{'Ints'}}){ $p{'NoQuote'}->{$_} = 1; }
#formulate the sql
my $field_names = join (', ', sort (keys %{$p{Insert}}));
foreach (sort (keys %{$p{Insert}})){
if (exists($p{'NoQuote'}->{$_})){
push (@vals, $p{Insert}->{$_});
}else{
push (@vals, $self->{dbh}->quote($p{Insert}->{$_}));
}
}
my $field_values = join (', ',@vals);
my $sql = "INSERT " . $p{'Options'} . " INTO $p{Into} ($field_names) VALUES ($field_values)";
#prepare the statement
if ($self->{'Debug'} > 1){ print "[Insert]: preparing query ...\n"; }
if ($self->{'Debug'} > 1){ print "[Insert]:\t $sql"; }
unless ($sth = $self->{dbh}->prepare($sql)){
$self->{errstr} = "Insert: failed prepare: $sql / $DBI::errstr";
return (undef);
}
#execute insert
if ($self->{'Debug'} > 1){ print "[Insert]: executing insert ...\n"; }
unless ($sth->execute()){
$self->{errstr} = "[Insert]: FATAL ERROR / can't execute insert $sql / $DBI::errstr";
return (undef);
}
$sth->finish();
#well it must be all-good
return (1);
}
## Do #############################################
## prepare and execute an SQL statement of no
## particular type. If errors are encountered undef is
## returned and errors go on $obj->{errstr} as usual
## if successfull, whatever is returned from dbi->execute
## is returned here
sub Do {
#local vars
my ($self, %p) = @_;
#required options
unless (exists($p{SQL})){
$self->{'errstr'} = "[Do]: SQL is a required option to Do";
return (undef);
}
#prepare statement
warn ("[Do]: (prepare): $p{SQL}") if $self->{'Debug'};
my $sth = $self->{dbh}->prepare($p{SQL}) || do {
$self->{'errstr'} = "[Do]: failed to prepare SQL ($p{SQL}): $DBI::errstr";
warn ($self->{'errstr'}) if $self->{'Debug'};
return (undef);
};
warn ("[Do]: (executing)") if $self->{'Debug'};
my $res = $sth->execute() || do {
$self->{'errstr'} = "[Do]: failed to execute SQL ($p{SQL}): $DBI::errstr";
warn ($self->{'errstr'}) if $self->{'Debug'};
return (undef);
};
$sth->finish();
return ($res);
}
( run in 0.481 second using v1.01-cache-2.11-cpan-870870ed90f )