| ... | ... |
@@ -513,8 +513,8 @@ sub update {
|
| 513 | 513 |
sub update_all {
|
| 514 | 514 |
my ($self, $table, $update_params, $args) = @_; |
| 515 | 515 |
|
| 516 |
+ # Allow all update |
|
| 516 | 517 |
$args ||= {};
|
| 517 |
- |
|
| 518 | 518 |
$args->{allow_update_all} = 1;
|
| 519 | 519 |
|
| 520 | 520 |
# Update all rows |
| ... | ... |
@@ -582,8 +582,8 @@ sub delete {
|
| 582 | 582 |
sub delete_all {
|
| 583 | 583 |
my ($self, $table, $args) = @_; |
| 584 | 584 |
|
| 585 |
+ # Allow all delete |
|
| 585 | 586 |
$args ||= {};
|
| 586 |
- |
|
| 587 | 587 |
$args->{allow_delete_all} = 1;
|
| 588 | 588 |
|
| 589 | 589 |
# Delete all rows |
| ... | ... |
@@ -591,34 +591,40 @@ sub delete_all {
|
| 591 | 591 |
} |
| 592 | 592 |
|
| 593 | 593 |
sub _select_usage { return << 'EOS' }
|
| 594 |
-Your select arguments is wrong. |
|
| 595 |
-select usage: |
|
| 594 |
+Select usage: |
|
| 596 | 595 |
$dbi->select( |
| 597 |
- $table, # String or array ref |
|
| 598 |
- [@$columns], # Array reference. this can be ommited |
|
| 599 |
- {%$where_params}, # Hash reference. this can be ommited
|
|
| 600 |
- $append_statement, # String. this can be ommited |
|
| 601 |
- $query_edit_callback # Sub reference. this can be ommited |
|
| 596 |
+ $table, # String or array ref |
|
| 597 |
+ {
|
|
| 598 |
+ columns => $columns # Array reference |
|
| 599 |
+ where => $params # Hash reference. |
|
| 600 |
+ append => $statement # String. |
|
| 601 |
+ query_edit_cb => $cb # Sub reference |
|
| 602 |
+ } |
|
| 602 | 603 |
); |
| 603 | 604 |
EOS |
| 604 | 605 |
|
| 606 |
+our %VALID_SELECT_ARGS |
|
| 607 |
+ = map { $_ => 1 } qw/columns where append query_edit_cb/;
|
|
| 608 |
+ |
|
| 609 |
+ |
|
| 605 | 610 |
sub select {
|
| 606 |
- my $self = shift; |
|
| 607 |
- |
|
| 608 |
- # Check argument |
|
| 609 |
- croak($self->_select_usage) unless @_; |
|
| 611 |
+ my ($self, $tables, $args) = @_; |
|
| 610 | 612 |
|
| 611 |
- # Arguments |
|
| 612 |
- my $tables = shift || ''; |
|
| 613 |
- $tables = [$tables] unless ref $tables; |
|
| 613 |
+ # Table |
|
| 614 |
+ $tables ||= ''; |
|
| 615 |
+ $tables = [$tables] unless ref $tables; |
|
| 614 | 616 |
|
| 615 |
- my $columns = ref $_[0] eq 'ARRAY' ? shift : []; |
|
| 616 |
- my $where_params = ref $_[0] eq 'HASH' ? shift : {};
|
|
| 617 |
- my $append_statement = $_[0] && !ref $_[0] ? shift : ''; |
|
| 618 |
- my $query_edit_cb = shift if ref $_[0] eq 'CODE'; |
|
| 617 |
+ # Check arguments |
|
| 618 |
+ foreach my $name (keys %$args) {
|
|
| 619 |
+ croak "\"$name\" is invalid name" |
|
| 620 |
+ unless $VALID_SELECT_ARGS{$name};
|
|
| 621 |
+ } |
|
| 619 | 622 |
|
| 620 |
- # Check rest argument |
|
| 621 |
- croak($self->_select_usage) if @_; |
|
| 623 |
+ # Arguments |
|
| 624 |
+ my $columns = $args->{columns} || [];
|
|
| 625 |
+ my $where_params = $args->{where} || {};
|
|
| 626 |
+ my $append_statement = $args->{append} || '';
|
|
| 627 |
+ my $query_edit_cb = $args->{query_edit_cb};
|
|
| 622 | 628 |
|
| 623 | 629 |
# SQL template for select statement |
| 624 | 630 |
my $template = 'select '; |
| ... | ... |
@@ -624,19 +624,19 @@ $rows = $dbi->select('table1')->fetch_hash_all;
|
| 624 | 624 |
is_deeply($rows, [{key1 => 1, key2 => 2},
|
| 625 | 625 |
{key1 => 3, key2 => 4}], "$test : table");
|
| 626 | 626 |
|
| 627 |
-$rows = $dbi->select('table1', ['key1'])->fetch_hash_all;
|
|
| 627 |
+$rows = $dbi->select('table1', {columns => ['key1']})->fetch_hash_all;
|
|
| 628 | 628 |
is_deeply($rows, [{key1 => 1}, {key1 => 3}], "$test : table and columns and where key");
|
| 629 | 629 |
|
| 630 |
-$rows = $dbi->select('table1', {key1 => 1})->fetch_hash_all;
|
|
| 630 |
+$rows = $dbi->select('table1', {where => {key1 => 1}})->fetch_hash_all;
|
|
| 631 | 631 |
is_deeply($rows, [{key1 => 1, key2 => 2}], "$test : table and columns and where key");
|
| 632 | 632 |
|
| 633 |
-$rows = $dbi->select('table1', ['key1'], {key1 => 3})->fetch_hash_all;
|
|
| 633 |
+$rows = $dbi->select('table1', {columns => ['key1'], where => {key1 => 3}})->fetch_hash_all;
|
|
| 634 | 634 |
is_deeply($rows, [{key1 => 3}], "$test : table and columns and where key");
|
| 635 | 635 |
|
| 636 |
-$rows = $dbi->select('table1', "order by key1 desc limit 1")->fetch_hash_all;
|
|
| 636 |
+$rows = $dbi->select('table1', {append => "order by key1 desc limit 1"})->fetch_hash_all;
|
|
| 637 | 637 |
is_deeply($rows, [{key1 => 3, key2 => 4}], "$test : append statement");
|
| 638 | 638 |
|
| 639 |
-$rows = $dbi->select('table1', {key1 => 2}, sub {
|
|
| 639 |
+$rows = $dbi->select('table1', {where => {key1 => 2}, query_edit_cb =>sub {
|
|
| 640 | 640 |
my $query = shift; |
| 641 | 641 |
$query->bind_filter(sub {
|
| 642 | 642 |
my ($value, $table, $column, $dbi) = @_; |
| ... | ... |
@@ -645,15 +645,18 @@ $rows = $dbi->select('table1', {key1 => 2}, sub {
|
| 645 | 645 |
} |
| 646 | 646 |
return $value; |
| 647 | 647 |
}); |
| 648 |
-})->fetch_hash_all; |
|
| 648 |
+}})->fetch_hash_all; |
|
| 649 | 649 |
is_deeply($rows, [{key1 => 1, key2 => 2}], "$test : query edit call back");
|
| 650 | 650 |
|
| 651 | 651 |
$dbi->do($CREATE_TABLE->{2});
|
| 652 | 652 |
$dbi->insert('table2', {key1 => 1, key3 => 5});
|
| 653 | 653 |
$rows = $dbi->select([qw/table1 table2/], |
| 654 |
- ['table1.key1 as table1_key1', 'table2.key1 as table2_key1', 'key2', 'key3'], |
|
| 655 |
- {'table1.key2' => 2},
|
|
| 656 |
- "where table1.key1 = table2.key1")->fetch_hash_all; |
|
| 654 |
+ {
|
|
| 655 |
+ columns => ['table1.key1 as table1_key1', 'table2.key1 as table2_key1', 'key2', 'key3'], |
|
| 656 |
+ where => {'table1.key2' => 2},
|
|
| 657 |
+ append => "where table1.key1 = table2.key1" |
|
| 658 |
+ } |
|
| 659 |
+ )->fetch_hash_all; |
|
| 657 | 660 |
is_deeply($rows, [{table1_key1 => 1, table2_key1 => 1, key2 => 2, key3 => 5}], "$test : join");
|
| 658 | 661 |
|
| 659 | 662 |
test 'Cache'; |
| ... | ... |
@@ -40,7 +40,7 @@ $dbi->connect_memory; |
| 40 | 40 |
$ret_val = $dbi->do($CREATE_TABLE->{0});
|
| 41 | 41 |
ok(defined $ret_val, $test); |
| 42 | 42 |
$dbi->insert('table1', {key1 => 'a', key2 => 2});
|
| 43 |
-$rows = $dbi->select('table1', {key1 => 'a'})->fetch_hash_all;
|
|
| 43 |
+$rows = $dbi->select('table1', {where => {key1 => 'a'}})->fetch_hash_all;
|
|
| 44 | 44 |
is_deeply($rows, [{key1 => 'a', key2 => 2}], "$test : select rows");
|
| 45 | 45 |
|
| 46 | 46 |
test 'connect_memory error'; |