| ... | ... | 
                  @@ -59,6 +59,33 @@ __PACKAGE__->register_filter(  | 
              
| 59 | 59 | 
                       decode_utf8 => sub { decode_utf8($_[0]) }
                 | 
              
| 60 | 60 | 
                  );  | 
              
| 61 | 61 | 
                   | 
              
| 62 | 
                  +our $AUTOLOAD;  | 
              |
| 63 | 
                  +  | 
              |
| 64 | 
                  +sub AUTOLOAD {
                 | 
              |
| 65 | 
                  + my $self = shift;  | 
              |
| 66 | 
                  +  | 
              |
| 67 | 
                  + # Method  | 
              |
| 68 | 
                  + my ($package, $method) = $AUTOLOAD =~ /^([\w\:]+)\:\:(\w+)$/;  | 
              |
| 69 | 
                  +  | 
              |
| 70 | 
                  + # Helper  | 
              |
| 71 | 
                  +    $self->{_helpers} ||= {};
                 | 
              |
| 72 | 
                  + croak qq/Can't locate object method "$method" via "$package"/  | 
              |
| 73 | 
                  +      unless my $helper = $self->{_helpers}->{$method};
                 | 
              |
| 74 | 
                  +  | 
              |
| 75 | 
                  + # Run  | 
              |
| 76 | 
                  + return $self->$helper(@_);  | 
              |
| 77 | 
                  +}  | 
              |
| 78 | 
                  +  | 
              |
| 79 | 
                  +sub helper {
                 | 
              |
| 80 | 
                  + my $self = shift;  | 
              |
| 81 | 
                  +  | 
              |
| 82 | 
                  + # Merge  | 
              |
| 83 | 
                  +    my $helpers = ref $_[0] eq 'HASH' ? $_[0] : {@_};
                 | 
              |
| 84 | 
                  +    $self->{_helpers} = {%{$self->{_helpers} || {}}, %$helpers};
                 | 
              |
| 85 | 
                  +  | 
              |
| 86 | 
                  + return $self;  | 
              |
| 87 | 
                  +}  | 
              |
| 88 | 
                  +  | 
              |
| 62 | 89 | 
                   sub connect {
                 | 
              
| 63 | 90 | 
                  my $proto = shift;  | 
              
| 64 | 91 | 
                   | 
              
| ... | ... | 
                  @@ -183,6 +210,8 @@ sub delete {
                 | 
              
| 183 | 210 | 
                   | 
              
| 184 | 211 | 
                   sub delete_all { shift->delete(allow_delete_all => 1, @_) }
                 | 
              
| 185 | 212 | 
                   | 
              
| 213 | 
                  +sub DESTROY { }
                 | 
              |
| 214 | 
                  +  | 
              |
| 186 | 215 | 
                   our %VALID_EXECUTE_ARGS = map { $_ => 1 } qw/param filter/;
                 | 
              
| 187 | 216 | 
                   | 
              
| 188 | 217 | 
                   sub execute{
                 | 
              
| ... | ... | 
                  @@ -1331,6 +1360,24 @@ B<Example:>  | 
              
| 1331 | 1360 | 
                   | 
              
| 1332 | 1361 | 
                  $dbi->delete_all(table => 'books');  | 
              
| 1333 | 1362 | 
                   | 
              
| 1363 | 
                  +=head2 C<(experimental) helper>  | 
              |
| 1364 | 
                  +  | 
              |
| 1365 | 
                  + $dbi->helper(  | 
              |
| 1366 | 
                  +        update_or_insert => sub {
                 | 
              |
| 1367 | 
                  + my $self = shift;  | 
              |
| 1368 | 
                  + # do something  | 
              |
| 1369 | 
                  + },  | 
              |
| 1370 | 
                  +        find_or_create   => sub {
                 | 
              |
| 1371 | 
                  + my $self = shift;  | 
              |
| 1372 | 
                  + # do something  | 
              |
| 1373 | 
                  + }  | 
              |
| 1374 | 
                  + );  | 
              |
| 1375 | 
                  +  | 
              |
| 1376 | 
                  +Register helper methods. These method is called from L<DBIx::Custom> object directory.  | 
              |
| 1377 | 
                  +  | 
              |
| 1378 | 
                  + $dbi->update_or_insert;  | 
              |
| 1379 | 
                  + $dbi->find_or_create;  | 
              |
| 1380 | 
                  +  | 
              |
| 1334 | 1381 | 
                  =head2 C<insert>  | 
              
| 1335 | 1382 | 
                   | 
              
| 1336 | 1383 | 
                  $dbi->insert(table => $table,  | 
              
| ... | ... | 
                  @@ -608,3 +608,26 @@ eval{ $dbi->begin_work };
                 | 
              
| 608 | 608 | 
                  ok($@, "$test : exception");  | 
              
| 609 | 609 | 
                   $dbi->dbh->{AutoCommit} = 1;
                 | 
              
| 610 | 610 | 
                   | 
              
| 611 | 
                  +  | 
              |
| 612 | 
                  +test 'helper';  | 
              |
| 613 | 
                  +$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
                 | 
              |
| 614 | 
                  +$dbi->helper(  | 
              |
| 615 | 
                  +    one => sub { 1 }
                 | 
              |
| 616 | 
                  +);  | 
              |
| 617 | 
                  +$dbi->helper(  | 
              |
| 618 | 
                  +    two => sub { 2 }
                 | 
              |
| 619 | 
                  +);  | 
              |
| 620 | 
                  +$dbi->helper({
                 | 
              |
| 621 | 
                  +    twice => sub {
                 | 
              |
| 622 | 
                  + my $self = shift;  | 
              |
| 623 | 
                  + return $_[0] * 2;  | 
              |
| 624 | 
                  + }  | 
              |
| 625 | 
                  +});  | 
              |
| 626 | 
                  +  | 
              |
| 627 | 
                  +is($dbi->one, 1, "$test : first");  | 
              |
| 628 | 
                  +is($dbi->two, 2, "$test : second");  | 
              |
| 629 | 
                  +is($dbi->twice(5), 10 , "$test : second");  | 
              |
| 630 | 
                  +  | 
              |
| 631 | 
                  +eval {$dbi->XXXXXX};
                 | 
              |
| 632 | 
                  +like($@, qr/\QCan't locate object method "XXXXXX" via "DBIx::Custom"/, "$test : not exists");  | 
              |
| 633 | 
                  +  |