Changeset 23553

Show
Ignore:
Timestamp:
11/13/08 18:19:29 (5 years ago)
Author:
yappo
Message:

add replace

Location:
lang/perl/Data-Model/trunk/lib/Data
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Data-Model/trunk/lib/Data/Model.pm

    r23423 r23553  
    167167 
    168168sub set { 
    169     my $self   = shift; 
    170     my $model  = shift; 
     169    shift->_insert_or_replace(0, @_); 
     170} 
     171 
     172sub replace { 
     173    shift->_insert_or_replace(1, @_); 
     174} 
     175 
     176sub _insert_or_replace { 
     177    my $self       = shift; 
     178    my $is_replace = shift; 
     179    my $model      = shift; 
    171180    return $self->update($model, @_) if ref($model) && $model->isa('Data::Model::Row'); 
    172181    my $schema = $self->get_schema($model); 
     
    205214 
    206215    local $schema->{schema_obj} = $self; 
    207     my $result = $schema->{driver}->set( $schema, $key_array => $columns, @_ ); 
     216    my $method = $is_replace ? 'replace' : 'set'; 
     217    my $result = $schema->{driver}->$method( $schema, $key_array => $columns, @_ ); 
    208218    return unless $result; 
    209219 
     
    218228sub set_multi { 
    219229} 
     230 
    220231 
    221232 
  • lang/perl/Data-Model/trunk/lib/Data/Model/Driver/DBI.pm

    r23428 r23553  
    136136# insert or replace 
    137137sub set { 
    138     my($self, $schema, $key, $columns, %args) = @_; 
     138    my $self = shift; 
     139    $self->_insert_or_replace(0, @_); 
     140} 
     141 
     142sub replace { 
     143    my($self, $schema, $key, $columns, %args) = @_; 
     144    if ($self->dbd->can_replace) { 
     145        return $self->_insert_or_replace(1, $schema, $key, $columns, %args); 
     146    } else { 
     147#        $self->thx(sub { 
     148        $self->delete($schema, $key, +{}, %args); 
     149        return $self->set($schema, $key, $columns, %args); 
     150#        }); 
     151    } 
     152} 
     153 
     154sub _insert_or_replace { 
     155    my($self, $is_replace, $schema, $key, $columns, %args) = @_; 
     156    my $select_or_replace = $is_replace ? 'REPLACE' : 'INSERT'; 
    139157 
    140158    my $table = $schema->{model}; 
    141159    my $cols = [ keys %{ $columns } ]; 
    142     my $sql = "INSERT INTO $table\n"; 
     160    my $sql = "$select_or_replace INTO $table\n"; 
    143161    $sql .= '(' . join(', ', @{ $cols }) . ')' . "\n" . 
    144162            'VALUES (' . join(', ', ('?') x @{ $cols }) . ')' . "\n"; 
  • lang/perl/Data-Model/trunk/lib/Data/Model/Driver/DBI/DBD.pm

    r23428 r23553  
    1313sub fetch_last_id {} 
    1414sub bind_param_attributes {} 
     15sub can_replace { 1 } 
    1516 
    16171; 
  • lang/perl/Data-Model/trunk/lib/Data/Model/Driver/Memory.pm

    r23142 r23553  
    9595    my $data = $self->load_data($schema); 
    9696    $data->{records}->{$record_id} = $columns; 
     97} 
     98 
     99sub replace { 
     100    my($self, $schema, $key, $columns, %args) = @_; 
     101} 
     102 
     103sub update { 
     104    my($self, $schema, $key, $columns, %args) = @_; 
    97105} 
    98106