DBIx-Browse
view release on metacpan or search on metacpan
my $nprop = scalar(@{$self->{non_linked}});
unless ( $self->{single} ) {
#for my $test ( keys %{$rec} ) {
# $self->debug("\t".$test.' => '.$rec->{$test})
#}
for(my $f = 0; $f < scalar( @{$self->{linked_fields}} ); $f++) {
my $fname = $self->{aliases}->[$f+$nprop];
my $lnk = grep( /$fname/i, keys %$rec );
next unless $lnk;
my $qfield =
"SELECT ".$self->{linked_refs}->[$f].
" FROM ".$self->{linked_tables}->[$f].
" WHERE ".$self->{linked_values}->[$f].
" = ?";
$self->debug('Demap: '.$qfield);
my $stf = $self->{dbh}->prepare($qfield)
or $self->die();
$stf->execute($rec->{$fname})
or $self->die();
my ($ref_value) = $stf->fetchrow_array;
delete $rec->{$fname};
$rec->{$self->{linked_fields}->[$f]} = $ref_value;
}
}
}
#
# insert: insert a record into the main table.
#
sub insert {
my $self = shift;
my $rec = shift;
my $query = 'INSERT INTO '.$self->{table}.'(';
my $qval = ' VALUES(';
my @fields = $self->fields;
$self->demap($rec);
foreach my $f ( keys %$rec ) {
my $fok = grep (/$f/i, @fields );
$query .= $f.',';
$qval .= $self->{dbh}->quote($rec->{$f}).",";
next if $fok;
$self->debug("Field not found: $f => ".$rec->{$f});
}
chop($query);
chop($qval);
$query .= ') '.$qval.')';
$self->debug("Insert: ".$query);
my $ok = $self->{dbh}->do($query) or $self->die();
$self->{dbh}->commit() or $self->die();
return $ok;
}
#
# update: update a row in the main table.
#
sub update {
my $self = shift;
my $rec = shift;
my $where = shift;
my @fields = $self->fields;
my $query = 'UPDATE '.$self->{table}.' SET ';
$self->demap($rec);
foreach my $f ( keys %$rec ) {
my $fok = grep (/$f/i, @fields );
$query .= $f.' = ';
$query .= $self->{dbh}->quote($rec->{$f}).",";
next if $fok;
croak "Field not found: $f => ".$rec->{$f};
}
chop($query);
$query .= ' WHERE '.$where if ($where);
$self->debug("Update: ".$query);
my $ok = $self->{dbh}->do($query) or $self->die();
$self->{dbh}->commit() or $self->die();
return $ok;
}
#
# delete: delete a record in the main table).
#
sub delete {
my $self = shift;
my $pkey = shift;
my $qdel =
"DELETE FROM ".$self->{table}.
" WHERE ".$self->{primary_key}." = ?";
$self->debug("Delete: ".$qdel. ' [ ? = '.$pkey.']');
my $sdel = $self->{dbh}->prepare($qdel) or $self->die();
my $rdel = $sdel->execute($pkey) or $self->die();
$self->{dbh}->commit() or $self->die();
return $rdel;
}
#
# fields: list of fields (aliases)
#
sub fields {
my $self = shift;
my $single = "SELECT * FROM ".$self->{table}." LIMIT 1";
my $sth = $self->{dbh}->prepare($single) or $self->die();
my $rh = $sth->execute or $self->die();
# my $hrow = $sth->fetchrow_hashref;
my @fields = @{ $sth->{NAME_lc} };
# sort keys %$hrow;
return @fields;
}
#
# field_values: obtain a list of possible field values for a linked field.
( run in 1.740 second using v1.01-cache-2.11-cpan-ff9377addf4 )