| ... | ... | @@ -521,20 +521,33 @@ sub update_all { | 
| 521 | 521 | return $self->update($table, $update_params, $args); | 
| 522 | 522 | } | 
| 523 | 523 |  | 
| 524 | +our %VALID_DELETE_ARGS | |
| 525 | +  = map { $_ => 1 } qw/where append query_edit_cb allow_delete_all/; | |
| 526 | + | |
| 524 | 527 |  sub delete { | 
| 525 | - my $self = shift; | |
| 526 | - my $table = shift || ''; | |
| 527 | -    my $where_params     = shift || {}; | |
| 528 | - my $append_statement = shift unless ref $_[0]; | |
| 529 | - my $query_edit_cb = shift; | |
| 530 | - my $options = shift; | |
| 528 | + my ($self, $table, $args) = @_; | |
| 529 | + | |
| 530 | + # Table | |
| 531 | + $table ||= ''; | |
| 532 | + | |
| 533 | + # Check arguments | |
| 534 | +    foreach my $name (keys %$args) { | |
| 535 | + croak "\"$name\" is invalid name" | |
| 536 | +          unless $VALID_DELETE_ARGS{$name}; | |
| 537 | + } | |
| 538 | + | |
| 539 | + # Arguments | |
| 540 | +    my $where_params     = $args->{where} || {}; | |
| 541 | +    my $append_statement = $args->{append}; | |
| 542 | +    my $query_edit_cb    = $args->{query_edit_cb}; | |
| 543 | +    my $allow_delete_all = $args->{allow_delete_all}; | |
| 531 | 544 |  | 
| 532 | 545 | # Where keys | 
| 533 | 546 | my @where_keys = keys %$where_params; | 
| 534 | 547 |  | 
| 535 | 548 | # Not exists where keys | 
| 536 | 549 |      croak("Key-value pairs for where clause must be specified to 'delete' second argument") | 
| 537 | -      if !@where_keys && !$options->{allow_delete_all}; | |
| 550 | + if !@where_keys && !$allow_delete_all; | |
| 538 | 551 |  | 
| 539 | 552 | # Where clause | 
| 540 | 553 | my $where_clause = ''; | 
| ... | ... | @@ -567,15 +580,14 @@ sub delete { | 
| 567 | 580 | } | 
| 568 | 581 |  | 
| 569 | 582 |  sub delete_all { | 
| 570 | - my $self = shift; | |
| 571 | - my $table = shift || ''; | |
| 572 | - my $append_statement = shift unless ref $_[0]; | |
| 573 | - my $query_edit_cb = shift; | |
| 574 | -    my $options          = {allow_delete_all => 1}; | |
| 583 | + my ($self, $table, $args) = @_; | |
| 584 | + | |
| 585 | +    $args ||= {}; | |
| 586 | + | |
| 587 | +    $args->{allow_delete_all} = 1; | |
| 575 | 588 |  | 
| 576 | 589 | # Delete all rows | 
| 577 | -    return $self->delete($table, {}, $append_statement, $query_edit_cb, | |
| 578 | - $options); | |
| 590 | + return $self->delete($table, $args); | |
| 579 | 591 | } | 
| 580 | 592 |  | 
| 581 | 593 |  sub _select_usage { return << 'EOS' } | 
| ... | ... | @@ -558,7 +558,7 @@ $dbi = DBIx::Custom->new($NEW_ARGS->{0}); | 
| 558 | 558 |  $dbi->do($CREATE_TABLE->{0});
 | 
| 559 | 559 |  $dbi->insert('table1', {key1 => 1, key2 => 2});
 | 
| 560 | 560 |  $dbi->insert('table1', {key1 => 3, key2 => 4});
 | 
| 561 | -$dbi->delete('table1', {key1 => 1});
 | |
| 561 | +$dbi->delete('table1', {where => {key1 => 1}});
 | |
| 562 | 562 |  $result = $dbi->query($SELECT_TMPLS->{0});
 | 
| 563 | 563 | $rows = $result->fetch_hash_all; | 
| 564 | 564 |  is_deeply($rows, [{key1 => 3, key2 => 4}], "$test : basic");
 | 
| ... | ... | @@ -566,28 +566,28 @@ is_deeply($rows, [{key1 => 3, key2 => 4}], "$test : basic"); | 
| 566 | 566 |  $dbi->do("delete from table1;");
 | 
| 567 | 567 |  $dbi->insert('table1', {key1 => 1, key2 => 2});
 | 
| 568 | 568 |  $dbi->insert('table1', {key1 => 3, key2 => 4});
 | 
| 569 | -$dbi->delete('table1', {key2 => 1}, sub {
 | |
| 569 | +$dbi->delete('table1', {where => {key2 => 1}, query_edit_cb => sub {
 | |
| 570 | 570 | my $query = shift; | 
| 571 | 571 |      $query->bind_filter(sub {
 | 
| 572 | 572 | my ($value, $table, $column, $dbi) = @_; | 
| 573 | 573 | return $value * 2; | 
| 574 | 574 | }); | 
| 575 | -}); | |
| 575 | +}}); | |
| 576 | 576 |  $result = $dbi->query($SELECT_TMPLS->{0});
 | 
| 577 | 577 | $rows = $result->fetch_hash_all; | 
| 578 | 578 |  is_deeply($rows, [{key1 => 3, key2 => 4}], "$test : query edit callback");
 | 
| 579 | 579 |  | 
| 580 | -$dbi->delete('table1', {key1 => 1}, '   ', sub {
 | |
| 580 | +$dbi->delete('table1', {where => {key1 => 1}, append => '   ', query_edit_cb => sub {
 | |
| 581 | 581 | my $query = shift; | 
| 582 | 582 | is($query->sql, 'delete from table1 where table1.key1 = ? ;', | 
| 583 | 583 | "$test: append statement"); | 
| 584 | -}); | |
| 584 | +}}); | |
| 585 | 585 |  | 
| 586 | 586 |  | 
| 587 | 587 |  $dbi->delete_all('table1');
 | 
| 588 | 588 |  $dbi->insert('table1', {key1 => 1, key2 => 2});
 | 
| 589 | 589 |  $dbi->insert('table1', {key1 => 3, key2 => 4});
 | 
| 590 | -$dbi->delete('table1', {key1 => 1, key2 => 2});
 | |
| 590 | +$dbi->delete('table1', {where => {key1 => 1, key2 => 2}});
 | |
| 591 | 591 |  $rows = $dbi->select('table1')->fetch_hash_all;
 | 
| 592 | 592 |  is_deeply($rows, [{key1 => 3, key2 => 4}], "$test : delete multi key");
 | 
| 593 | 593 |  | 
| ... | ... | @@ -599,7 +599,7 @@ eval{$dbi->delete('table1')}; | 
| 599 | 599 | like($@, qr/Key-value pairs for where clause must be specified to 'delete' second argument/, | 
| 600 | 600 | "$test : where key-value pairs not specified"); | 
| 601 | 601 |  | 
| 602 | -eval{$dbi->delete('table1', {key1 => 1}, '', 'aaa')};
 | |
| 602 | +eval{$dbi->delete('table1', {where => {key1 => 1}, append => '', query_edit_cb => 'aaa'})};
 | |
| 603 | 603 | like($@, qr/Query edit callback must be code reference/, | 
| 604 | 604 | "$test : query edit callback not code ref"); | 
| 605 | 605 |  |