Gtk2-Ex-DbLinker-DbTools
view release on metacpan or search on metacpan
lib/Gtk2/Ex/DbLinker/RdbDataManager.pm view on Meta::CPAN
my ( $self, $id, $value ) = @_;
my $pos = $self->{row}->{pos};
my $row;
if ( $self->{isalias}->{$id} ) {
$id = $self->{isalias}->{$id};
}
my $rel = $self->{fieldsRel}->{$id};
$rel = ( $rel ? $rel : "" );
my $key = $rel . $id;
#if ($key ~~ @{$self->{rocols}}){
if ( grep( /^$key$/, @{ $self->{rocols} } ) ) {
$self->{log}->debug( "set_field: "
. $id
. " key: "
. $key
. " pos: "
. $pos
. " skipped since this is a readonly field." );
}
elsif ( grep( /^$key$/, @{ $self->{ai_primary_keys} } ) ) {
$self->{log}->debug( "set_field: "
. $id
. " key: "
. $key
. " pos: "
. $pos
. " skipped since this is an ai primary key." );
}
else {
$self->{log}->debug( "set_field: "
. $id
. " key: "
. $key
. " pos: "
. $pos
. " value : "
. ( $value ? $value : "" ) );
if ( $pos >= $self->row_count ) {
$row = $self->{new_row};
}
else {
$row = $self->{data}[$pos];
}
my $rel = $self->{fieldsRel}->{$key};
my $m = $self->{fieldSetter}->{$key};
if ($rel) {
$row->{$rel}->$m($value);
}
else {
$row->$m($value);
}
}
}
sub get_field {
my ( $self, $id ) = @_;
my $pos = $self->{row}->{pos};
return
unless defined $pos
; #prevents cascade of errors when get_field is called on inexisting row
my $last = $self->row_count;
#$self->{log}->debug( "get_field: pos ", $pos, " last : ", $last );
my $row;
if ( $pos < $last ) {
$row = $self->{data}[$pos];
}
elsif ( $pos == $last ) {
$row = $self->{new_row};
}
else {
$self->{log}->debug("current pos outside row limits");
}
if ( $self->{isalias}->{$id} ) {
$id = $self->{isalias}->{$id};
}
my $rel = $self->{fieldsRel}->{$id};
$rel = ( $rel ? $rel : "" );
my $key = $rel . $id;
my $m = $self->{fieldGetter}->{$key};
my $v;
if ( defined $m ) {
if ( length($rel) ) {
$v = $row->{$rel}->$m();
}
else {
$v = $row->$m();
}
}
else {
$self->{log}->debug( "field ", $id, " undefined" );
}
return $v;
}
sub save {
my $self = shift;
my $row;
if ( $self->{new_row} ) {
$self->{log}->debug( __PACKAGE__, " save new row " );
$row = $self->{new_row};
push @{ $self->{data} }, $row;
my $last = $self->row_count - 1;
$self->{row} = { pos => $last, last_row => $last };
}
else {
$self->{log}->debug( __PACKAGE__, " save at " . $self->{row}->{pos} );
my $pos = $self->{row}->{pos};
$row = $self->{data}[$pos];
}
$self->{log}->debug("saving and unsetting new row");
=for comment
my $m = $row->meta();
my @col = $m->columns;
$self->{log}->debug("acc ", join ( " " , $m->column_accessor_method_names));
for my $c (@col){
$self->{log}->debug("name: ", $c->name, " type ", $c->type);
( run in 1.033 second using v1.01-cache-2.11-cpan-ceb78f64989 )