Changeset 210

Show
Ignore:
Timestamp:
05/23/06 18:58:57 (4 years ago)
Author:
btrott
Message:

The very beginning of portable error codes across databases.

Added Data::ObjectDriver::Errors class, which currently only defines one
error. Along with some tests, etc.

Location:
trunk
Files:
4 added
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/lib/Data/ObjectDriver/Driver/DBD.pm

    r169 r210  
    2121sub fetch_id { } 
    2222sub offset_implemented { 1 } 
     23sub map_error_code { } 
    2324 
    24251; 
  • trunk/lib/Data/ObjectDriver/Driver/DBD/SQLite.pm

    r169 r210  
    44use strict; 
    55use warnings; 
     6use base qw( Data::ObjectDriver::Driver::DBD ); 
    67 
    7 use base qw( Data::ObjectDriver::Driver::DBD ); 
     8use Data::ObjectDriver::Errors; 
    89 
    910sub fetch_id { $_[2]->func('last_insert_rowid') } 
     
    1920    } 
    2021    return; 
     22} 
     23 
     24sub map_error_code { 
     25    my $dbd = shift; 
     26    my($code, $msg) = @_; 
     27    if ($msg && $msg =~ /not unique/) { 
     28        return Data::ObjectDriver::Errors->UNIQUE_CONSTRAINT; 
     29    } else { 
     30        return undef; 
     31    } 
    2132} 
    2233 
  • trunk/lib/Data/ObjectDriver/Driver/DBD/mysql.pm

    r169 r210  
    44use strict; 
    55use warnings; 
    6  
    76use base qw( Data::ObjectDriver::Driver::DBD ); 
    87 
    98use Carp qw( croak ); 
     9use Data::ObjectDriver::Errors; 
     10 
     11use constant ERROR_MAP => { 
     12    1062 => Data::ObjectDriver::Errors->UNIQUE_CONSTRAINT, 
     13}; 
    1014 
    1115sub fetch_id { $_[3]->{mysql_insertid} || $_[3]->{insertid} } 
    1216 
     17sub map_error_code { 
     18    my $dbd = shift; 
     19    my($code, $msg) = @_; 
     20    return ERROR_MAP->{$code}; 
     21} 
     22 
    13231; 
  • trunk/lib/Data/ObjectDriver/Driver/DBI.pm

    r209 r210  
    99use DBI; 
    1010use Carp (); 
     11use Data::ObjectDriver::Errors; 
    1112use Data::ObjectDriver::SQL; 
    1213use Data::ObjectDriver::Driver::DBD; 
     
    518519} 
    519520 
     521sub last_error { 
     522    my $driver = shift; 
     523    return $driver->dbd->map_error_code($DBI::err, $DBI::errstr); 
     524} 
     525 
    5205261;