| ... | ... | 
                  @@ -8,8 +8,8 @@ use base 'Object::Simple';  | 
              
| 8 | 8 | 
                  use Carp 'croak';  | 
              
| 9 | 9 | 
                  use DBI;  | 
              
| 10 | 10 | 
                  use DBIx::Custom::Result;  | 
              
| 11 | 
                  -use DBIx::Custom::QueryBuilder;  | 
              |
| 12 | 11 | 
                  use DBIx::Custom::Query;  | 
              
| 12 | 
                  +use DBIx::Custom::QueryBuilder;  | 
              |
| 13 | 13 | 
                  use Encode qw/encode_utf8 decode_utf8/;  | 
              
| 14 | 14 | 
                   | 
              
| 15 | 15 | 
                   __PACKAGE__->attr('dbh');
                 | 
              
| ... | ... | 
                  @@ -457,10 +457,15 @@ our $VERSION = '0.1605';  | 
              
| 457 | 457 | 
                  This module is not stable. Method name and implementations will be changed.  | 
              
| 458 | 458 | 
                   | 
              
| 459 | 459 | 
                  =head1 SYNOPSYS  | 
              
| 460 | 
                  -  | 
              |
| 460 | 
                  +  | 
              |
| 461 | 
                  +Connect to database.  | 
              |
| 462 | 
                  +  | 
              |
| 461 | 463 | 
                  # Connect  | 
              
| 462 | 464 | 
                  my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=books",  | 
              
| 463 | 465 | 
                  user => 'ken', password => '!LFKD%$&');  | 
              
| 466 | 
                  +  | 
              |
| 467 | 
                  +Insert, update, delete statement.  | 
              |
| 468 | 
                  +  | 
              |
| 464 | 469 | 
                  # Insert  | 
              
| 465 | 470 | 
                  $dbi->insert(table => 'books',  | 
              
| 466 | 471 | 
                                    param  => {title => 'perl', author => 'Ken'},
                 | 
              
| ... | ... | 
                  @@ -484,7 +489,9 @@ This module is not stable. Method name and implementations will be changed.  | 
              
| 484 | 489 | 
                   | 
              
| 485 | 490 | 
                  # Delete all  | 
              
| 486 | 491 | 
                  $dbi->delete_all(table => 'books');  | 
              
| 487 | 
                  -  | 
              |
| 492 | 
                  +  | 
              |
| 493 | 
                  +Select statement.  | 
              |
| 494 | 
                  +  | 
              |
| 488 | 495 | 
                  # Select  | 
              
| 489 | 496 | 
                  my $result = $dbi->select(table => 'books');  | 
              
| 490 | 497 | 
                   | 
              
| ... | ... | 
                  @@ -503,8 +510,10 @@ This module is not stable. Method name and implementations will be changed.  | 
              
| 503 | 510 | 
                  column => ['books.name as book_name']  | 
              
| 504 | 511 | 
                           relation => {'books.id' => 'rental.book_id'}
                 | 
              
| 505 | 512 | 
                  );  | 
              
| 506 | 
                  -  | 
              |
| 507 | 
                  - # Execute SQL  | 
              |
| 513 | 
                  +  | 
              |
| 514 | 
                  +Execute SQL source.  | 
              |
| 515 | 
                  +  | 
              |
| 516 | 
                  + # Execute from SQL source  | 
              |
| 508 | 517 | 
                       $dbi->execute("select title from books");
                 | 
              
| 509 | 518 | 
                   | 
              
| 510 | 519 | 
                  # Execute SQL with parameters and filter  | 
              
| ... | ... | 
                  @@ -517,11 +526,18 @@ This module is not stable. Method name and implementations will be changed.  | 
              
| 517 | 526 | 
                           "select id from books where {= author} && {like title}"
                 | 
              
| 518 | 527 | 
                  );  | 
              
| 519 | 528 | 
                       $dbi->execute($query, param => {author => 'ken', title => '%Perl%'})
                 | 
              
| 520 | 
                  -  | 
              |
| 529 | 
                  +  | 
              |
| 530 | 
                  +More features.  | 
              |
| 531 | 
                  +  | 
              |
| 521 | 532 | 
                  # Default filter  | 
              
| 522 | 533 | 
                       $dbi->default_bind_filter('encode_utf8');
                 | 
              
| 523 | 534 | 
                       $dbi->default_fetch_filter('decode_utf8');
                 | 
              
| 524 | 
                  -  | 
              |
| 535 | 
                  +  | 
              |
| 536 | 
                  + # Get DBI object  | 
              |
| 537 | 
                  + my $dbh = $dbi->dbh;  | 
              |
| 538 | 
                  +  | 
              |
| 539 | 
                  +Fetch row.  | 
              |
| 540 | 
                  +  | 
              |
| 525 | 541 | 
                  # Fetch  | 
              
| 526 | 542 | 
                       while (my $row = $result->fetch) {
                 | 
              
| 527 | 543 | 
                  # ...  | 
              
| ... | ... | 
                  @@ -532,8 +548,6 @@ This module is not stable. Method name and implementations will be changed.  | 
              
| 532 | 548 | 
                   | 
              
| 533 | 549 | 
                  }  | 
              
| 534 | 550 | 
                   | 
              
| 535 | 
                  - # Get DBI object  | 
              |
| 536 | 
                  - my $dbh = $dbi->dbh;  | 
              |
| 537 | 551 | 
                   | 
              
| 538 | 552 | 
                  =head1 DESCRIPTION  | 
              
| 539 | 553 | 
                   | 
              
| ... | ... | 
                  @@ -574,32 +588,31 @@ Provide suger methods, such as insert(), update(), delete(), and select().  | 
              
| 574 | 588 | 
                  my $user = $dbi->user;  | 
              
| 575 | 589 | 
                       $dbi     = $dbi->user('Ken');
                 | 
              
| 576 | 590 | 
                   | 
              
| 577 | 
                  -Database user name.  | 
              |
| 578 | 
                  -This is used for connect().  | 
              |
| 591 | 
                  +User name.  | 
              |
| 592 | 
                  +C<connect()> method use this value to connect the database.  | 
              |
| 579 | 593 | 
                   | 
              
| 580 | 594 | 
                  =head2 C<password>  | 
              
| 581 | 595 | 
                   | 
              
| 582 | 596 | 
                  my $password = $dbi->password;  | 
              
| 583 | 597 | 
                       $dbi         = $dbi->password('lkj&le`@s');
                 | 
              
| 584 | 598 | 
                   | 
              
| 585 | 
                  -Database password.  | 
              |
| 586 | 
                  -This is used for connect().  | 
              |
| 599 | 
                  +Password.  | 
              |
| 600 | 
                  +C<connect()> method use this value to connect the database.  | 
              |
| 587 | 601 | 
                   | 
              
| 588 | 602 | 
                  =head2 C<data_source>  | 
              
| 589 | 603 | 
                   | 
              
| 590 | 604 | 
                  my $data_source = $dbi->data_source;  | 
              
| 591 | 
                  -    $dbi            = $dbi->data_source("dbi:mysql:dbname=$database");
                 | 
              |
| 605 | 
                  +    $dbi            = $dbi->data_source("DBI:mysql:database=dbname");
                 | 
              |
| 592 | 606 | 
                   | 
              
| 593 | 
                  -Database data source.  | 
              |
| 594 | 
                  -This is used for connect().  | 
              |
| 607 | 
                  +Data source.  | 
              |
| 608 | 
                  +C<connect()> method use this value to connect the database.  | 
              |
| 595 | 609 | 
                   | 
              
| 596 | 610 | 
                  =head2 C<dbh>  | 
              
| 597 | 611 | 
                   | 
              
| 598 | 612 | 
                  my $dbh = $dbi->dbh;  | 
              
| 599 | 613 | 
                  $dbi = $dbi->dbh($dbh);  | 
              
| 600 | 614 | 
                   | 
              
| 601 | 
                  -Database handle. This is a L<DBI> object.  | 
              |
| 602 | 
                  -You can call all methods of L<DBI>  | 
              |
| 615 | 
                  +L<DBI> object. You can call all methods of L<DBI>.  | 
              |
| 603 | 616 | 
                   | 
              
| 604 | 617 | 
                       my $sth    = $dbi->dbh->prepare("...");
                 | 
              
| 605 | 618 | 
                  my $errstr = $dbi->dbh->errstr;  | 
              
| ... | ... | 
                  @@ -615,22 +628,19 @@ You can call all methods of L<DBI>  | 
              
| 615 | 628 | 
                  Filter functions.  | 
              
| 616 | 629 | 
                  By default, "encode_utf8" and "decode_utf8" is registered.  | 
              
| 617 | 630 | 
                   | 
              
| 618 | 
                  -    $encode_utf8 = $dbi->filters->{encode_utf8};
                 | 
              |
| 619 | 
                  -    $decode_utf8 = $dbi->filters->{decode_utf8};
                 | 
              |
| 620 | 
                  -  | 
              |
| 621 | 631 | 
                  =head2 C<default_bind_filter>  | 
              
| 622 | 632 | 
                   | 
              
| 623 | 633 | 
                  my $default_bind_filter = $dbi->default_bind_filter  | 
              
| 624 | 634 | 
                       $dbi                    = $dbi->default_bind_filter('encode_utf8');
                 | 
              
| 625 | 635 | 
                   | 
              
| 626 | 
                  -Default filter for value binding  | 
              |
| 636 | 
                  +Default filter when parameter binding is executed.  | 
              |
| 627 | 637 | 
                   | 
              
| 628 | 638 | 
                  =head2 C<default_fetch_filter>  | 
              
| 629 | 639 | 
                   | 
              
| 630 | 640 | 
                  my $default_fetch_filter = $dbi->default_fetch_filter;  | 
              
| 631 | 641 | 
                       $dbi                     = $dbi->default_fetch_filter('decode_utf8');
                 | 
              
| 632 | 642 | 
                   | 
              
| 633 | 
                  -Default filter for fetching.  | 
              |
| 643 | 
                  +Default filter when row is fetched.  | 
              |
| 634 | 644 | 
                   | 
              
| 635 | 645 | 
                  =head2 C<result_class>  | 
              
| 636 | 646 | 
                   | 
              
| ... | ... | 
                  @@ -647,28 +657,60 @@ Default to L<DBIx::Custom::Result>.  | 
              
| 647 | 657 | 
                   | 
              
| 648 | 658 | 
                  SQL builder. sql_builder must be  | 
              
| 649 | 659 | 
                  the instance of L<DBIx::Custom::QueryBuilder> subclass  | 
              
| 650 | 
                  -Default to DBIx::Custom::QueryBuilder.  | 
              |
| 660 | 
                  +Default to L<DBIx::Custom::QueryBuilder>.  | 
              |
| 661 | 
                  +  | 
              |
| 662 | 
                  +=head2 C<cache>  | 
              |
| 663 | 
                  +  | 
              |
| 664 | 
                  + my $cache = $dbi->cache;  | 
              |
| 665 | 
                  + $dbi = $dbi->cache(1);  | 
              |
| 666 | 
                  +  | 
              |
| 667 | 
                  +Enable cache of the query after parsing SQL source.  | 
              |
| 668 | 
                  +Default to 1.  | 
              |
| 669 | 
                  +  | 
              |
| 670 | 
                  +=head2 C<cache_method>  | 
              |
| 671 | 
                  +  | 
              |
| 672 | 
                  + $dbi = $dbi->cache_method(\&cache_method);  | 
              |
| 673 | 
                  + $cache_method = $dbi->cache_method  | 
              |
| 674 | 
                  +  | 
              |
| 675 | 
                  +Method for cache.  | 
              |
| 676 | 
                  +  | 
              |
| 677 | 
                  +B<Example:>  | 
              |
| 678 | 
                  +  | 
              |
| 679 | 
                  + $dbi->cache_method(  | 
              |
| 680 | 
                  +        sub {
                 | 
              |
| 681 | 
                  + my $self = shift;  | 
              |
| 682 | 
                  +  | 
              |
| 683 | 
                  +            $self->{_cached} ||= {};
                 | 
              |
| 684 | 
                  +  | 
              |
| 685 | 
                  +            if (@_ > 1) {
                 | 
              |
| 686 | 
                  +                $self->{_cached}{$_[0]} = $_[1] 
                 | 
              |
| 687 | 
                  + }  | 
              |
| 688 | 
                  +            else {
                 | 
              |
| 689 | 
                  +                return $self->{_cached}{$_[0]}
                 | 
              |
| 690 | 
                  + }  | 
              |
| 691 | 
                  + }  | 
              |
| 692 | 
                  + );  | 
              |
| 651 | 693 | 
                   | 
              
| 652 | 694 | 
                  =head1 METHODS  | 
              
| 653 | 695 | 
                   | 
              
| 654 | 
                  -This class is L<Object::Simple> subclass.  | 
              |
| 655 | 
                  -You can use all methods of L<Object::Simple>  | 
              |
| 696 | 
                  +L<DBIx::Custom> inherits all methods from L<Object::Simple>  | 
              |
| 697 | 
                  +and implements the following new ones.  | 
              |
| 656 | 698 | 
                   | 
              
| 657 | 699 | 
                  =head2 C<connect>  | 
              
| 658 | 700 | 
                   | 
              
| 659 | 
                  - my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=books",  | 
              |
| 701 | 
                  + my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=dbname",  | 
              |
| 660 | 702 | 
                  user => 'ken', password => '!LFKD%$&');  | 
              
| 661 | 703 | 
                   | 
              
| 662 | 
                  -Connect to database.  | 
              |
| 663 | 
                  -"AutoCommit" and "RaiseError" option is true,  | 
              |
| 664 | 
                  -and "PrintError" option is false by default.  | 
              |
| 704 | 
                  +Create a new L<DBIx::Custom> object and connect to the database.  | 
              |
| 705 | 
                  +By default, "AutoCommit" and "RaiseError" option is true,  | 
              |
| 706 | 
                  +and "PrintError" option is false.  | 
              |
| 665 | 707 | 
                   | 
              
| 666 | 708 | 
                  =head2 C<insert>  | 
              
| 667 | 709 | 
                   | 
              
| 668 | 
                  - $affected = $dbi->insert(table => $table,  | 
              |
| 669 | 
                  - param => \%param,  | 
              |
| 670 | 
                  - append => $append,  | 
              |
| 671 | 
                  - filter => \%filter);  | 
              |
| 710 | 
                  + $dbi->insert(table => $table,  | 
              |
| 711 | 
                  + param => \%param,  | 
              |
| 712 | 
                  + append => $append,  | 
              |
| 713 | 
                  + filter => \%filter);  | 
              |
| 672 | 714 | 
                   | 
              
| 673 | 715 | 
                  Insert row.  | 
              
| 674 | 716 | 
                  Retrun value is the count of affected rows.  | 
              
| ... | ... | 
                  @@ -682,11 +724,11 @@ B<Example:>  | 
              
| 682 | 724 | 
                   | 
              
| 683 | 725 | 
                  =head2 C<update>  | 
              
| 684 | 726 | 
                   | 
              
| 685 | 
                  - $affected = $dbi->update(table => $table,  | 
              |
| 686 | 
                  - param => \%params,  | 
              |
| 687 | 
                  - where => \%where,  | 
              |
| 688 | 
                  - append => $append,  | 
              |
| 689 | 
                  - filter => \%filter)  | 
              |
| 727 | 
                  + $dbi->update(table => $table,  | 
              |
| 728 | 
                  + param => \%params,  | 
              |
| 729 | 
                  + where => \%where,  | 
              |
| 730 | 
                  + append => $append,  | 
              |
| 731 | 
                  + filter => \%filter)  | 
              |
| 690 | 732 | 
                   | 
              
| 691 | 733 | 
                  Update rows.  | 
              
| 692 | 734 | 
                  Retrun value is the count of affected rows.  | 
              
| ... | ... | 
                  @@ -701,10 +743,10 @@ B<Example:>  | 
              
| 701 | 743 | 
                   | 
              
| 702 | 744 | 
                  =head2 C<update_all>  | 
              
| 703 | 745 | 
                   | 
              
| 704 | 
                  - $affected = $dbi->update_all(table => $table,  | 
              |
| 705 | 
                  - param => \%params,  | 
              |
| 706 | 
                  - filter => \%filter,  | 
              |
| 707 | 
                  - append => $append);  | 
              |
| 746 | 
                  + $dbi->update_all(table => $table,  | 
              |
| 747 | 
                  + param => \%params,  | 
              |
| 748 | 
                  + filter => \%filter,  | 
              |
| 749 | 
                  + append => $append);  | 
              |
| 708 | 750 | 
                   | 
              
| 709 | 751 | 
                  Update all rows.  | 
              
| 710 | 752 | 
                  Retrun value is the count of affected rows.  | 
              
| ... | ... | 
                  @@ -717,10 +759,10 @@ B<Example:>  | 
              
| 717 | 759 | 
                   | 
              
| 718 | 760 | 
                  =head2 C<delete>  | 
              
| 719 | 761 | 
                   | 
              
| 720 | 
                  - $affected = $dbi->delete(table => $table,  | 
              |
| 721 | 
                  - where => \%where,  | 
              |
| 722 | 
                  - append => $append,  | 
              |
| 723 | 
                  - filter => \%filter);  | 
              |
| 762 | 
                  + $dbi->delete(table => $table,  | 
              |
| 763 | 
                  + where => \%where,  | 
              |
| 764 | 
                  + append => $append,  | 
              |
| 765 | 
                  + filter => \%filter);  | 
              |
| 724 | 766 | 
                   | 
              
| 725 | 767 | 
                  Delete rows.  | 
              
| 726 | 768 | 
                  Retrun value is the count of affected rows.  | 
              
| ... | ... | 
                  @@ -734,7 +776,7 @@ B<Example:>  | 
              
| 734 | 776 | 
                   | 
              
| 735 | 777 | 
                  =head2 C<delete_all>  | 
              
| 736 | 778 | 
                   | 
              
| 737 | 
                  - $affected = $dbi->delete_all(table => $table);  | 
              |
| 779 | 
                  + $dbi->delete_all(table => $table);  | 
              |
| 738 | 780 | 
                   | 
              
| 739 | 781 | 
                  Delete all rows.  | 
              
| 740 | 782 | 
                  Retrun value is the count of affected rows.  | 
              
| ... | ... | 
                  @@ -745,12 +787,12 @@ B<Example:>  | 
              
| 745 | 787 | 
                   | 
              
| 746 | 788 | 
                  =head2 C<select>  | 
              
| 747 | 789 | 
                   | 
              
| 748 | 
                  - $result = $dbi->select(table => $table,  | 
              |
| 749 | 
                  - column => [@column],  | 
              |
| 750 | 
                  - where => \%where,  | 
              |
| 751 | 
                  - append => $append,  | 
              |
| 752 | 
                  - relation => \%relation,  | 
              |
| 753 | 
                  - filter => \%filter);  | 
              |
| 790 | 
                  + my $result = $dbi->select(table => $table,  | 
              |
| 791 | 
                  + column => [@column],  | 
              |
| 792 | 
                  + where => \%where,  | 
              |
| 793 | 
                  + append => $append,  | 
              |
| 794 | 
                  + relation => \%relation,  | 
              |
| 795 | 
                  + filter => \%filter);  | 
              |
| 754 | 796 | 
                   | 
              
| 755 | 797 | 
                  Select rows.  | 
              
| 756 | 798 | 
                  Return value is the instance of L<DBIx::Custom::Result>.  | 
              
| ... | ... | 
                  @@ -758,13 +800,13 @@ Return value is the instance of L<DBIx::Custom::Result>.  | 
              
| 758 | 800 | 
                  B<Example:>  | 
              
| 759 | 801 | 
                   | 
              
| 760 | 802 | 
                  # select * from books;  | 
              
| 761 | 
                  - $result = $dbi->select(table => 'books');  | 
              |
| 803 | 
                  + my $result = $dbi->select(table => 'books');  | 
              |
| 762 | 804 | 
                   | 
              
| 763 | 805 | 
                  # select * from books where title = 'Perl';  | 
              
| 764 | 
                  -    $result = $dbi->select(table => 'books', where => {title => 1});
                 | 
              |
| 806 | 
                  +    my $result = $dbi->select(table => 'books', where => {title => 1});
                 | 
              |
| 765 | 807 | 
                   | 
              
| 766 | 808 | 
                  # select title, author from books where id = 1 for update;  | 
              
| 767 | 
                  - $result = $dbi->select(  | 
              |
| 809 | 
                  + my $result = $dbi->select(  | 
              |
| 768 | 810 | 
                  table => 'books',  | 
              
| 769 | 811 | 
                  column => ['title', 'author'],  | 
              
| 770 | 812 | 
                           where  => {id => 1},
                 | 
              
| ... | ... | 
                  @@ -790,8 +832,8 @@ using L<DBIx::Custom::QueryBuilder>.  | 
              
| 790 | 832 | 
                   | 
              
| 791 | 833 | 
                  =head2 C<execute>  | 
              
| 792 | 834 | 
                   | 
              
| 793 | 
                  - $result = $dbi->execute($query, param => $params, filter => \%filter);  | 
              |
| 794 | 
                  - $result = $dbi->execute($source, param => $params, filter => \%filter);  | 
              |
| 835 | 
                  + my $result = $dbi->execute($query, param => $params, filter => \%filter);  | 
              |
| 836 | 
                  + my $result = $dbi->execute($source, param => $params, filter => \%filter);  | 
              |
| 795 | 837 | 
                   | 
              
| 796 | 838 | 
                  Execute the instace of L<DBIx::Custom::Query> or  | 
              
| 797 | 839 | 
                  the string written by SQL template.  | 
              
| ... | ... | 
                  @@ -799,7 +841,7 @@ Return value is the instance of L<DBIx::Custom::Result>.  | 
              
| 799 | 841 | 
                   | 
              
| 800 | 842 | 
                  B<Example:>  | 
              
| 801 | 843 | 
                   | 
              
| 802 | 
                  -    $result = $dbi->execute("select * from authors where {= name} and {= age}", 
                 | 
              |
| 844 | 
                  +    my $result = $dbi->execute("select * from authors where {= name} and {= age}", 
                 | 
              |
| 803 | 845 | 
                                               param => {name => 'taro', age => 19});
                 | 
              
| 804 | 846 | 
                   | 
              
| 805 | 847 | 
                       while (my $row = $result->fetch) {
                 | 
              
| ... | ... | 
                  @@ -832,38 +874,6 @@ B<Example:>  | 
              
| 832 | 874 | 
                  }  | 
              
| 833 | 875 | 
                  );  | 
              
| 834 | 876 | 
                   | 
              
| 835 | 
                  -=head2 C<cache>  | 
              |
| 836 | 
                  -  | 
              |
| 837 | 
                  - $dbi = $dbi->cache(1);  | 
              |
| 838 | 
                  - $cache = $dbi->cache;  | 
              |
| 839 | 
                  -  | 
              |
| 840 | 
                  -Cache the result of parsing SQL template.  | 
              |
| 841 | 
                  -Default to 1.  | 
              |
| 842 | 
                  -  | 
              |
| 843 | 
                  -=head2 C<cache_method>  | 
              |
| 844 | 
                  -  | 
              |
| 845 | 
                  - $dbi = $dbi->cache_method(\&cache_method);  | 
              |
| 846 | 
                  - $cache_method = $dbi->cache_method  | 
              |
| 847 | 
                  -  | 
              |
| 848 | 
                  -Method for cache.  | 
              |
| 849 | 
                  -  | 
              |
| 850 | 
                  -B<Example:>  | 
              |
| 851 | 
                  -  | 
              |
| 852 | 
                  - $dbi->cache_method(  | 
              |
| 853 | 
                  -        sub {
                 | 
              |
| 854 | 
                  - my $self = shift;  | 
              |
| 855 | 
                  -  | 
              |
| 856 | 
                  -            $self->{_cached} ||= {};
                 | 
              |
| 857 | 
                  -  | 
              |
| 858 | 
                  -            if (@_ > 1) {
                 | 
              |
| 859 | 
                  -                $self->{_cached}{$_[0]} = $_[1] 
                 | 
              |
| 860 | 
                  - }  | 
              |
| 861 | 
                  -            else {
                 | 
              |
| 862 | 
                  -                return $self->{_cached}{$_[0]}
                 | 
              |
| 863 | 
                  - }  | 
              |
| 864 | 
                  - }  | 
              |
| 865 | 
                  - );  | 
              |
| 866 | 
                  -  | 
              |
| 867 | 877 | 
                  =head1 BUGS  | 
              
| 868 | 878 | 
                   | 
              
| 869 | 879 | 
                  Please tell me bugs.  |