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 )