... | ... |
@@ -1,3 +1,22 @@ |
1 |
+0.1502 |
|
2 |
+ update document |
|
3 |
+ moved host attribute to DBIx::Custom::MySQL |
|
4 |
+ moved port attribute to DBIx::Custom::MySQL |
|
5 |
+ moved database attribute to DBIx::Custom::MySQL and DBIx::Custom::SQLite |
|
6 |
+ |
|
7 |
+0.1501 |
|
8 |
+ removed register_format() |
|
9 |
+ removed formats() |
|
10 |
+ removed run_transaction() |
|
11 |
+ removed create_table() |
|
12 |
+ removed drop_table() |
|
13 |
+ changed select() arguments |
|
14 |
+ changed insert() arguments |
|
15 |
+ changed update() arguments |
|
16 |
+ changed update_all() arguments |
|
17 |
+ changed delete() arguments |
|
18 |
+ changed delete_all() arguments |
|
19 |
+ changed execute() arguments |
|
1 | 20 |
0.1402 |
2 | 21 |
remove finish(), error() |
3 | 22 |
can receive code ref to filter() |
... | ... |
@@ -10,31 +10,23 @@ use DBI; |
10 | 10 |
use DBIx::Custom::Result; |
11 | 11 |
use DBIx::Custom::SQLTemplate; |
12 | 12 |
use DBIx::Custom::Query; |
13 |
+use Encode qw/encode_utf8 decode_utf8/; |
|
13 | 14 |
|
14 | 15 |
__PACKAGE__->attr('dbh'); |
15 | 16 |
|
16 |
-__PACKAGE__->class_attr(_query_caches => sub { {} }); |
|
17 |
-__PACKAGE__->class_attr(_query_cache_keys => sub { [] }); |
|
18 |
- |
|
19 |
-__PACKAGE__->class_attr('query_cache_max', default => 50, |
|
20 |
- inherit => 'scalar_copy'); |
|
21 |
- |
|
22 | 17 |
__PACKAGE__->attr([qw/user password data_source/]); |
23 |
-__PACKAGE__->attr([qw/database host port/]); |
|
24 |
-__PACKAGE__->attr([qw/default_query_filter default_fetch_filter options/]); |
|
18 |
+__PACKAGE__->attr([qw/default_query_filter default_fetch_filter/]); |
|
25 | 19 |
|
26 | 20 |
__PACKAGE__->dual_attr('filters', default => sub { {} }, |
27 | 21 |
inherit => 'hash_copy'); |
28 | 22 |
__PACKAGE__->register_filter( |
29 |
- encode_utf8 => sub { encode('UTF-8', $_[0]) }, |
|
30 |
- decode_utf8 => sub { decode('UTF-8', $_[0]) } |
|
23 |
+ encode_utf8 => sub { encode_utf8($_[0]) }, |
|
24 |
+ decode_utf8 => sub { decode_utf8($_[0]) } |
|
31 | 25 |
); |
32 | 26 |
|
33 | 27 |
__PACKAGE__->attr(result_class => 'DBIx::Custom::Result'); |
34 | 28 |
__PACKAGE__->attr(sql_template => sub { DBIx::Custom::SQLTemplate->new }); |
35 | 29 |
|
36 |
- |
|
37 |
- |
|
38 | 30 |
sub register_filter { |
39 | 31 |
my $invocant = shift; |
40 | 32 |
|
... | ... |
@@ -71,7 +63,6 @@ sub connect { |
71 | 63 |
my $data_source = $self->data_source; |
72 | 64 |
my $user = $self->user; |
73 | 65 |
my $password = $self->password; |
74 |
- my $options = $self->options; |
|
75 | 66 |
|
76 | 67 |
# Connect |
77 | 68 |
my $dbh = eval{DBI->connect( |
... | ... |
@@ -82,7 +73,6 @@ sub connect { |
82 | 73 |
RaiseError => 1, |
83 | 74 |
PrintError => 0, |
84 | 75 |
AutoCommit => 1, |
85 |
- %{$options || {} } |
|
86 | 76 |
} |
87 | 77 |
)}; |
88 | 78 |
|
... | ... |
@@ -130,36 +120,28 @@ sub reconnect { |
130 | 120 |
sub create_query { |
131 | 121 |
my ($self, $template) = @_; |
132 | 122 |
|
133 |
- my $class = ref $self; |
|
134 |
- |
|
135 |
- if (ref $template eq 'ARRAY') { |
|
136 |
- $template = $template->[1]; |
|
137 |
- } |
|
138 |
- |
|
139 | 123 |
# Create query from SQL template |
140 | 124 |
my $sql_template = $self->sql_template; |
141 | 125 |
|
142 |
- # Try to get cached query |
|
143 |
- my $cached_query = $class->_query_caches->{"$template"}; |
|
126 |
+ # Get cached query |
|
127 |
+ my $cache = $self->{_cache}->{"$template"}; |
|
144 | 128 |
|
145 | 129 |
# Create query |
146 | 130 |
my $query; |
147 |
- if ($cached_query) { |
|
131 |
+ if ($cache) { |
|
148 | 132 |
$query = DBIx::Custom::Query->new( |
149 |
- sql => $cached_query->sql, |
|
150 |
- columns => $cached_query->columns |
|
133 |
+ sql => $cache->sql, |
|
134 |
+ columns => $cache->columns |
|
151 | 135 |
); |
152 | 136 |
} |
153 | 137 |
else { |
154 | 138 |
$query = eval{$sql_template->create_query($template)}; |
155 | 139 |
croak($@) if $@; |
156 | 140 |
|
157 |
- $class->_add_query_cache("$template", $query); |
|
141 |
+ $self->{_cache}->{$template} = $query |
|
142 |
+ unless $self->{_cache}; |
|
158 | 143 |
} |
159 | 144 |
|
160 |
- # Connect if not |
|
161 |
- $self->connect unless $self->connected; |
|
162 |
- |
|
163 | 145 |
# Prepare statement handle |
164 | 146 |
my $sth = $self->dbh->prepare($query->{sql}); |
165 | 147 |
|
... | ... |
@@ -549,41 +531,17 @@ sub select { |
549 | 531 |
return $result; |
550 | 532 |
} |
551 | 533 |
|
552 |
-sub _add_query_cache { |
|
553 |
- my ($class, $template, $query) = @_; |
|
554 |
- |
|
555 |
- # Query information |
|
556 |
- my $query_cache_keys = $class->_query_cache_keys; |
|
557 |
- my $query_caches = $class->_query_caches; |
|
558 |
- |
|
559 |
- # Already cached |
|
560 |
- return $class if $query_caches->{$template}; |
|
561 |
- |
|
562 |
- # Cache |
|
563 |
- $query_caches->{$template} = $query; |
|
564 |
- push @$query_cache_keys, $template; |
|
565 |
- |
|
566 |
- # Check cache overflow |
|
567 |
- my $overflow = @$query_cache_keys - $class->query_cache_max; |
|
568 |
- for (my $i = 0; $i < $overflow; $i++) { |
|
569 |
- my $template = shift @$query_cache_keys; |
|
570 |
- delete $query_caches->{$template}; |
|
571 |
- } |
|
572 |
- |
|
573 |
- return $class; |
|
574 |
-} |
|
575 |
- |
|
576 | 534 |
=head1 NAME |
577 | 535 |
|
578 |
-DBIx::Custom - DBI with hash bind and filtering system |
|
536 |
+DBIx::Custom - DBI with hash parameter binding and filtering system |
|
579 | 537 |
|
580 | 538 |
=head1 VERSION |
581 | 539 |
|
582 |
-Version 0.1501 |
|
540 |
+Version 0.1502 |
|
583 | 541 |
|
584 | 542 |
=cut |
585 | 543 |
|
586 |
-our $VERSION = '0.1501'; |
|
544 |
+our $VERSION = '0.1502'; |
|
587 | 545 |
$VERSION = eval $VERSION; |
588 | 546 |
|
589 | 547 |
=head1 STATE |
... | ... |
@@ -598,23 +556,23 @@ This module is not stable. Method name and functionality will be change. |
598 | 556 |
|
599 | 557 |
# Insert |
600 | 558 |
$dbi->insert(table => 'books', |
601 |
- param => {title => 'perl', author => 'Ken'} |
|
559 |
+ param => {title => 'perl', author => 'Ken'}, |
|
602 | 560 |
filter => {title => 'encode_utf8'}); |
603 | 561 |
|
604 | 562 |
# Update |
605 | 563 |
$dbi->update(table => 'books', |
606 | 564 |
param => {title => 'aaa', author => 'Ken'}, |
607 |
- where => {id => 5} |
|
608 |
- filter => {title => 'encode_utf8'); |
|
565 |
+ where => {id => 5}, |
|
566 |
+ filter => {title => 'encode_utf8'}); |
|
609 | 567 |
|
610 | 568 |
# Update all |
611 | 569 |
$dbi->update_all(table => 'books', |
612 |
- param => {title => 'aaa'} |
|
570 |
+ param => {title => 'aaa'}, |
|
613 | 571 |
filter => {title => 'encode_utf8'}); |
614 | 572 |
|
615 | 573 |
# Delete |
616 | 574 |
$dbi->delete(table => 'books', |
617 |
- where => {author => 'Ken'} |
|
575 |
+ where => {author => 'Ken'}, |
|
618 | 576 |
filter => {title => 'encode_utf8'}); |
619 | 577 |
|
620 | 578 |
# Delete all |
... | ... |
@@ -625,13 +583,11 @@ This module is not stable. Method name and functionality will be change. |
625 | 583 |
|
626 | 584 |
# Select(more complex) |
627 | 585 |
my $result = $dbi->select( |
628 |
- 'books', |
|
629 |
- { |
|
630 |
- columns => [qw/author title/], |
|
631 |
- where => {author => 'Ken'}, |
|
632 |
- append => 'order by id limit 1', |
|
633 |
- filter => {tilte => 'encode_utf8'} |
|
634 |
- } |
|
586 |
+ table => 'books', |
|
587 |
+ column => [qw/author title/], |
|
588 |
+ where => {author => 'Ken'}, |
|
589 |
+ append => 'order by id limit 1', |
|
590 |
+ filter => {tilte => 'encode_utf8'} |
|
635 | 591 |
); |
636 | 592 |
|
637 | 593 |
# Execute SQL |
... | ... |
@@ -656,157 +612,87 @@ This module is not stable. Method name and functionality will be change. |
656 | 612 |
|
657 | 613 |
} |
658 | 614 |
|
615 |
+ # DBI instance |
|
616 |
+ my $dbh = $dbi->dbh; |
|
659 | 617 |
|
660 | 618 |
=head1 ATTRIBUTES |
661 | 619 |
|
662 | 620 |
=head2 user |
663 | 621 |
|
664 |
-Database user name |
|
622 |
+Database user name. |
|
665 | 623 |
|
666 | 624 |
$dbi = $dbi->user('Ken'); |
667 | 625 |
$user = $dbi->user; |
668 | 626 |
|
669 | 627 |
=head2 password |
670 | 628 |
|
671 |
-Database password |
|
629 |
+Database password. |
|
672 | 630 |
|
673 | 631 |
$dbi = $dbi->password('lkj&le`@s'); |
674 | 632 |
$password = $dbi->password; |
675 | 633 |
|
676 | 634 |
=head2 data_source |
677 | 635 |
|
678 |
-Database data source |
|
636 |
+Database data source. |
|
679 | 637 |
|
680 | 638 |
$dbi = $dbi->data_source("dbi:mysql:dbname=$database"); |
681 | 639 |
$data_source = $dbi->data_source; |
682 | 640 |
|
683 | 641 |
If you know data source more, See also L<DBI>. |
684 | 642 |
|
685 |
-=head2 database |
|
686 |
- |
|
687 |
-Database name |
|
688 |
- |
|
689 |
- $dbi = $dbi->database('books'); |
|
690 |
- $database = $dbi->database; |
|
691 |
- |
|
692 |
-=head2 host |
|
693 |
- |
|
694 |
-Host name |
|
695 |
- |
|
696 |
- $dbi = $dbi->host('somehost.com'); |
|
697 |
- $host = $dbi->host; |
|
698 |
- |
|
699 |
-You can also set IP address like '127.03.45.12'. |
|
700 |
- |
|
701 |
-=head2 port |
|
702 |
- |
|
703 |
-Port number |
|
704 |
- |
|
705 |
- $dbi = $dbi->port(1198); |
|
706 |
- $port = $dbi->port; |
|
707 |
- |
|
708 |
-=head2 options |
|
709 |
- |
|
710 |
-DBI options |
|
711 |
- |
|
712 |
- $dbi = $dbi->options({PrintError => 0, RaiseError => 1}); |
|
713 |
- $options = $dbi->options; |
|
714 |
- |
|
715 | 643 |
=head2 sql_template |
716 | 644 |
|
717 |
-SQLTemplate object |
|
645 |
+SQLTemplate instance. sql_template attribute must be |
|
646 |
+the instance of L<DBIx::Cutom::SQLTemplate> subclass. |
|
718 | 647 |
|
719 | 648 |
$dbi = $dbi->sql_template(DBIx::Cutom::SQLTemplate->new); |
720 | 649 |
$sql_template = $dbi->sql_template; |
721 | 650 |
|
722 |
-See also L<DBIx::Custom::SQLTemplate>. |
|
651 |
+the instance of DBIx::Cutom::SQLTemplate is set to |
|
652 |
+this attribute by default. |
|
723 | 653 |
|
724 | 654 |
=head2 filters |
725 | 655 |
|
726 | 656 |
Filters |
727 | 657 |
|
728 |
- $dbi = $dbi->filters({filter1 => sub { }, filter2 => sub {}}); |
|
658 |
+ $dbi = $dbi->filters({%filters}); |
|
729 | 659 |
$filters = $dbi->filters; |
730 |
- |
|
731 |
-This method is generally used to get a filter. |
|
732 | 660 |
|
733 |
- $filter = $dbi->filters->{encode_utf8}; |
|
661 |
+encode_utf8 and decode_utf8 is set to this attribute by default. |
|
734 | 662 |
|
735 |
-If you add filter, use register_filter method. |
|
663 |
+ $encode_utf8 = $dbi->filters->{encode_utf8}; |
|
664 |
+ $decode_utf8 = $dbi->filters->{decode_utf8}; |
|
736 | 665 |
|
737 | 666 |
=head2 default_query_filter |
738 | 667 |
|
739 |
-Default query filter |
|
668 |
+Default query filter. |
|
740 | 669 |
|
741 |
- $dbi = $dbi->default_query_filter($default_query_filter); |
|
670 |
+ $dbi = $dbi->default_query_filter('encode_utf8'); |
|
742 | 671 |
$default_query_filter = $dbi->default_query_filter |
743 | 672 |
|
744 |
-Query filter example |
|
745 |
- |
|
746 |
- $dbi->register_filter(encode_utf8 => sub { |
|
747 |
- my $value = shift; |
|
748 |
- |
|
749 |
- require Encode 'encode_utf8'; |
|
750 |
- |
|
751 |
- return encode_utf8($value); |
|
752 |
- }); |
|
753 |
- |
|
754 |
- $dbi->default_query_filter('encode_utf8') |
|
755 |
- |
|
756 |
-Bind filter arguemts is |
|
757 |
- |
|
758 |
- 1. $value : Value |
|
759 |
- 3. $dbi : DBIx::Custom instance |
|
760 |
- |
|
761 | 673 |
=head2 default_fetch_filter |
762 | 674 |
|
763 |
-Fetching filter |
|
675 |
+Fetching filter. |
|
764 | 676 |
|
765 |
- $dbi = $dbi->default_fetch_filter($default_fetch_filter); |
|
677 |
+ $dbi = $dbi->default_fetch_filter('decode_utf8'); |
|
766 | 678 |
$default_fetch_filter = $dbi->default_fetch_filter; |
767 | 679 |
|
768 |
-Fetch filter example |
|
769 |
- |
|
770 |
- $dbi->register_filter(decode_utf8 => sub { |
|
771 |
- my $value = shift; |
|
772 |
- |
|
773 |
- require Encode 'decode_utf8'; |
|
774 |
- |
|
775 |
- return decode_utf8($value); |
|
776 |
- }); |
|
777 |
- |
|
778 |
- $dbi->default_fetch_filter('decode_utf8'); |
|
779 |
- |
|
780 |
-Fetching filter arguemts is |
|
781 |
- |
|
782 |
- 1. Value |
|
783 |
- 2. DBIx::Custom instance |
|
784 |
- |
|
785 | 680 |
=head2 result_class |
786 | 681 |
|
787 |
-Resultset class |
|
682 |
+Result class. |
|
788 | 683 |
|
789 | 684 |
$dbi = $dbi->result_class('DBIx::Custom::Result'); |
790 | 685 |
$result_class = $dbi->result_class; |
791 | 686 |
|
792 |
-Default is L<DBIx::Custom::Result> |
|
687 |
+L<DBIx::Custom::Result> is set to this attribute by default. |
|
793 | 688 |
|
794 | 689 |
=head2 dbh |
795 | 690 |
|
796 |
-Database handle |
|
691 |
+Database handle. |
|
797 | 692 |
|
798 | 693 |
$dbi = $dbi->dbh($dbh); |
799 | 694 |
$dbh = $dbi->dbh; |
800 | 695 |
|
801 |
-=head2 query_cache_max |
|
802 |
- |
|
803 |
-Query cache max |
|
804 |
- |
|
805 |
- $class = DBIx::Custom->query_cache_max(50); |
|
806 |
- $query_cache_max = DBIx::Custom->query_cache_max; |
|
807 |
- |
|
808 |
-Default value is 50 |
|
809 |
- |
|
810 | 696 |
=head1 METHODS |
811 | 697 |
|
812 | 698 |
This class is L<Object::Simple> subclass. |
... | ... |
@@ -814,20 +700,29 @@ You can use all methods of L<Object::Simple> |
814 | 700 |
|
815 | 701 |
=head2 auto_commit |
816 | 702 |
|
817 |
-Set and Get auto commit |
|
703 |
+Auto commit. |
|
818 | 704 |
|
819 |
- $self = $dbi->auto_commit($auto_commit); |
|
705 |
+ $self = $dbi->auto_commit(1); |
|
820 | 706 |
$auto_commit = $dbi->auto_commit; |
821 |
- |
|
707 |
+ |
|
708 |
+This is equal to |
|
709 |
+ |
|
710 |
+ $dbi->dbh->{AutoCommit} = 1; |
|
711 |
+ $auto_commit = $dbi->dbh->{AutoCommit}; |
|
712 |
+ |
|
822 | 713 |
=head2 connect |
823 | 714 |
|
824 |
-Connect to database |
|
715 |
+Connect to database. |
|
716 |
+ |
|
717 |
+ my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=books", |
|
718 |
+ user => 'ken', password => '!LFKD%$&'); |
|
825 | 719 |
|
826 |
- $dbi->connect; |
|
720 |
+"AutoCommit" and "RaiseError" option is true, |
|
721 |
+and "PrintError" option is false by dfault. |
|
827 | 722 |
|
828 | 723 |
=head2 disconnect |
829 | 724 |
|
830 |
-Disconnect database |
|
725 |
+Disconnect database. |
|
831 | 726 |
|
832 | 727 |
$dbi->disconnect; |
833 | 728 |
|
... | ... |
@@ -835,7 +730,7 @@ If database is already disconnected, this method do nothing. |
835 | 730 |
|
836 | 731 |
=head2 reconnect |
837 | 732 |
|
838 |
-Reconnect to database |
|
733 |
+Reconnect to database. |
|
839 | 734 |
|
840 | 735 |
$dbi->reconnect; |
841 | 736 |
|
... | ... |
@@ -847,11 +742,11 @@ Check if database is connected. |
847 | 742 |
|
848 | 743 |
=head2 register_filter |
849 | 744 |
|
850 |
-Resister filter |
|
745 |
+Resister filter. |
|
851 | 746 |
|
852 |
- $dbi->register_filter($fname1 => $filter1, $fname => $filter2); |
|
747 |
+ $dbi->register_filter(%filters); |
|
853 | 748 |
|
854 |
-register_filter example |
|
749 |
+Example. |
|
855 | 750 |
|
856 | 751 |
$dbi->register_filter( |
857 | 752 |
encode_utf8 => sub { |
... | ... |
@@ -872,7 +767,7 @@ register_filter example |
872 | 767 |
|
873 | 768 |
=head2 create_query |
874 | 769 |
|
875 |
-Create Query object parsing SQL template |
|
770 |
+Create Query instance parsing SQL template |
|
876 | 771 |
|
877 | 772 |
my $query = $dbi->create_query("select * from authors where {= name} and {= age}"); |
878 | 773 |
|
... | ... |
@@ -1029,10 +924,6 @@ You can join multi tables |
1029 | 924 |
"where table1.id = table2.id", # join clause (must start 'where') |
1030 | 925 |
); |
1031 | 926 |
|
1032 |
-=head1 DBIx::Custom default configuration |
|
1033 |
- |
|
1034 |
-By default, "AutoCommit" and "RaiseError" is true. |
|
1035 |
- |
|
1036 | 927 |
=head1 AUTHOR |
1037 | 928 |
|
1038 | 929 |
Yuki Kimoto, C<< <kimoto.yuki at gmail.com> >> |
... | ... |
@@ -3,11 +3,17 @@ package DBIx::Custom::MySQL; |
3 | 3 |
use warnings; |
4 | 4 |
use strict; |
5 | 5 |
|
6 |
-use base 'DBIx::Custom::Basic'; |
|
6 |
+use base 'DBIx::Custom'; |
|
7 |
+ |
|
7 | 8 |
use Carp 'croak'; |
8 | 9 |
|
10 |
+__PACKAGE__->attr([qw/database host port/]); |
|
11 |
+ |
|
9 | 12 |
sub connect { |
10 |
- my $self = shift; |
|
13 |
+ my $proto = shift; |
|
14 |
+ |
|
15 |
+ # Create |
|
16 |
+ my $self = ref $proto ? $proto : $proto->new(@_); |
|
11 | 17 |
|
12 | 18 |
# Create data source |
13 | 19 |
if (!$self->data_source) { |
... | ... |
@@ -15,11 +21,9 @@ sub connect { |
15 | 21 |
my $host = $self->host; |
16 | 22 |
my $port = $self->port; |
17 | 23 |
my $data_source = "dbi:mysql:"; |
18 |
- my $data_source_original = $data_source; |
|
19 | 24 |
$data_source .= "database=$database;" if $database; |
20 | 25 |
$data_source .= "host=$host;" if $host; |
21 | 26 |
$data_source .= "port=$port;" if $port; |
22 |
- $data_source =~ s/:$// if $data_source eq $data_source_original; |
|
23 | 27 |
$self->data_source($data_source); |
24 | 28 |
} |
25 | 29 |
|
... | ... |
@@ -42,38 +46,69 @@ sub last_insert_id { |
42 | 46 |
|
43 | 47 |
=head1 NAME |
44 | 48 |
|
45 |
-DBIx::Custom::MySQL - DBIx::Custom MySQL implementation |
|
49 |
+DBIx::Custom::MySQL - a MySQL implementation of DBIx::Custom |
|
46 | 50 |
|
47 | 51 |
=head1 SYNOPSYS |
48 | 52 |
|
49 |
- # New |
|
50 |
- my $dbi = DBIx::Custom::MySQL->new(user => 'taro', $password => 'kliej&@K', |
|
51 |
- database => 'sample_db'); |
|
53 |
+ # Connect |
|
54 |
+ my $dbi = DBIx::Custom::MySQL->connect(user => 'taro', |
|
55 |
+ password => 'kliej&@K', |
|
56 |
+ database => 'your_database'); |
|
57 |
+ |
|
58 |
+ # Last insert id |
|
59 |
+ my $id = $dbi->last_insert_id; |
|
52 | 60 |
|
53 |
-=head1 METHODS |
|
61 |
+=head1 ATTRIBUTES |
|
54 | 62 |
|
55 |
-This class is L<DBIx::Custom::Basic> subclass. |
|
56 |
-You can use all methods of L<DBIx::Custom::Basic> |
|
63 |
+This class is L<DBIx::Custom> subclass. |
|
64 |
+You can use all attributes of L<DBIx::Custom> |
|
57 | 65 |
|
58 |
-=head2 connect |
|
66 |
+=head2 database |
|
59 | 67 |
|
60 |
-Connect to database |
|
68 |
+Database name |
|
61 | 69 |
|
62 |
- $self->connect; |
|
70 |
+ $dbi = $dbi->database('your_database'); |
|
71 |
+ $database = $dbi->database; |
|
63 | 72 |
|
64 |
-If you set database, host, or port, data source is automatically created. |
|
73 |
+=head2 host |
|
65 | 74 |
|
66 |
-=head2 last_insert_id |
|
75 |
+Database host name. |
|
67 | 76 |
|
68 |
- $last_insert_id = $dbi->last_insert_id; |
|
77 |
+ $dbi = $dbi->host('somehost.com'); |
|
78 |
+ $host = $dbi->host; |
|
79 |
+ |
|
80 |
+IP address can be set to host attribute. |
|
81 |
+ |
|
82 |
+ $dbi->host('127.03.45.12'); |
|
83 |
+ |
|
84 |
+=head2 port |
|
85 |
+ |
|
86 |
+Database port. |
|
87 |
+ |
|
88 |
+ $dbi = $dbi->port(1198); |
|
89 |
+ $port = $dbi->port; |
|
90 |
+ |
|
91 |
+=head1 METHODS |
|
92 |
+ |
|
93 |
+This class is L<DBIx::Custom> subclass. |
|
94 |
+You can use all methods of L<DBIx::Custom>. |
|
95 |
+ |
|
96 |
+=head2 connect - overridden |
|
97 |
+ |
|
98 |
+Connect to database. |
|
99 |
+ |
|
100 |
+ # Connect |
|
101 |
+ my $dbi = DBIx::Custom::MySQL->connect(user => 'taro', |
|
102 |
+ password => 'kliej&@K', |
|
103 |
+ database => 'your_database'); |
|
104 |
+ |
|
105 |
+=head2 last_insert_id |
|
69 | 106 |
|
70 |
-The folloing is last_insert_id sample. |
|
107 |
+Last insert ID. |
|
71 | 108 |
|
72 |
- $dbi->insert('books', {title => 'Perl', author => 'taro'}); |
|
73 | 109 |
$last_insert_id = $dbi->last_insert_id; |
74 | 110 |
|
75 |
-This is equal to MySQL function |
|
111 |
+This is equal to MySQL last_insert_id() function. |
|
76 | 112 |
|
77 |
- last_insert_id() |
|
78 | 113 |
|
79 | 114 |
=cut |
... | ... |
@@ -11,60 +11,53 @@ __PACKAGE__->attr([qw/sql columns default_filter filter sth/]); |
11 | 11 |
|
12 | 12 |
=head1 NAME |
13 | 13 |
|
14 |
-DBIx::Custom::Query - DBIx::Custom query |
|
14 |
+DBIx::Custom::Query - query used by DBIx::Custom |
|
15 | 15 |
|
16 | 16 |
=head1 SYNOPSIS |
17 | 17 |
|
18 | 18 |
# New |
19 | 19 |
my $query = DBIx::Custom::Query->new; |
20 | 20 |
|
21 |
- # Create by using create_query |
|
22 |
- my $query = DBIx::Custom->create_query($template); |
|
23 |
- |
|
24 | 21 |
=head1 ATTRIBUTES |
25 | 22 |
|
26 | 23 |
=head2 sth |
27 | 24 |
|
28 |
-Statement handle |
|
25 |
+Statement handle. |
|
29 | 26 |
|
30 | 27 |
$query = $query->sth($sth); |
31 | 28 |
$sth = $query->sth; |
32 | 29 |
|
33 | 30 |
=head2 sql |
34 | 31 |
|
35 |
-SQL |
|
32 |
+SQL statement. |
|
36 | 33 |
|
37 | 34 |
$query = $query->sql($sql); |
38 | 35 |
$sql = $query->sql; |
39 | 36 |
|
40 | 37 |
=head2 default_filter |
41 | 38 |
|
42 |
-Filter excuted when value is bind |
|
39 |
+Default filter. |
|
43 | 40 |
|
44 |
- $query = $query->default_filter($default_filter); |
|
41 |
+ $query = $query->default_filter($filter); |
|
45 | 42 |
$default_filter = $query->default_filter; |
46 | 43 |
|
47 | 44 |
=head2 filter |
48 | 45 |
|
49 |
-Filter excuted when value is bind |
|
46 |
+Filter. |
|
50 | 47 |
|
51 |
- $query = $query->filter($filter); |
|
48 |
+ $query = $query->filter({%filter}); |
|
52 | 49 |
$filter = $query->filter; |
53 | 50 |
|
54 | 51 |
=head2 columns |
55 | 52 |
|
56 |
-Key informations |
|
53 |
+Column names. |
|
57 | 54 |
|
58 |
- $query = $query->columns($columns); |
|
55 |
+ $query = $query->columns([@columns]); |
|
59 | 56 |
$columns = $query->columns; |
60 | 57 |
|
61 | 58 |
=head1 METHODS |
62 | 59 |
|
63 | 60 |
This class is L<Object::Simple> subclass. |
64 |
-You can use all methods of L<Object::Simple> |
|
65 |
- |
|
66 |
-=head2 new |
|
67 |
- |
|
68 |
- my $query = DBIx::Custom::Query->new; |
|
61 |
+You can use all methods of L<Object::Simple>. |
|
69 | 62 |
|
70 | 63 |
=cut |
... | ... |
@@ -10,83 +10,59 @@ use Carp 'croak'; |
10 | 10 |
__PACKAGE__->attr([qw/sth filters default_filter filter/]); |
11 | 11 |
|
12 | 12 |
sub fetch { |
13 |
- my ($self, $type) = @_; |
|
14 |
- |
|
15 |
- my $sth = $self->{sth}; |
|
16 |
- my $filters = $self->{filters} || {}; |
|
17 |
- my $filter = $self->{filter} || {}; |
|
13 |
+ |
|
14 |
+ $_[0]->{filters} ||= {}; |
|
15 |
+ $_[0]->{filter} ||= {}; |
|
18 | 16 |
|
19 | 17 |
# Fetch |
20 |
- my $row = $sth->fetchrow_arrayref; |
|
18 |
+ my @row = $_[0]->{sth}->fetchrow_array; |
|
21 | 19 |
|
22 | 20 |
# Cannot fetch |
23 |
- return unless $row; |
|
21 |
+ return unless @row; |
|
24 | 22 |
|
25 |
- # Key |
|
26 |
- my $columns = $sth->{NAME_lc}; |
|
27 |
- |
|
28 | 23 |
# Filter |
29 |
- for (my $i = 0; $i < @$columns; $i++) { |
|
30 |
- my $fname = $filter->{$columns->[$i]} || $self->{default_filter} || ''; |
|
24 |
+ for (my $i = 0; $i < @{$_[0]->{sth}->{NAME_lc}}; $i++) { |
|
25 |
+ my $fname = $_[0]->{filter}->{$_[0]->{sth}->{NAME_lc}->[$i]} |
|
26 |
+ || $_[0]->{default_filter}; |
|
27 |
+ |
|
28 |
+ croak "Filter \"$fname\" is not registered." |
|
29 |
+ if $fname && ! exists $_[0]->{filters}->{$fname}; |
|
31 | 30 |
|
32 |
- if ($fname) { |
|
33 |
- my $filter; |
|
34 |
- |
|
35 |
- if (ref $fname) { |
|
36 |
- $filter = $fname; |
|
37 |
- } |
|
38 |
- else { |
|
39 |
- croak "Filter \"$fname\" is not registered." |
|
40 |
- unless exists $filters->{$fname}; |
|
41 |
- |
|
42 |
- $filter = $filters->{$fname}; |
|
43 |
- } |
|
44 |
- $row->[$i] = $filter->($row->[$i]); |
|
45 |
- } |
|
31 |
+ next unless $fname; |
|
32 |
+ |
|
33 |
+ $row[$i] = ref $fname |
|
34 |
+ ? $fname->($row[$i]) |
|
35 |
+ : $_[0]->{filters}->{$fname}->($row[$i]); |
|
46 | 36 |
} |
47 | 37 |
|
48 |
- return wantarray ? @$row : $row; |
|
38 |
+ return wantarray ? @row : \@row; |
|
49 | 39 |
} |
50 | 40 |
|
51 | 41 |
sub fetch_hash { |
52 |
- my $self = shift; |
|
53 | 42 |
|
54 |
- my $sth = $self->{sth}; |
|
55 |
- my $filters = $self->{filters} || {}; |
|
56 |
- my $filter = $self->{filter} || {}; |
|
43 |
+ $_[0]->{filters} ||= {}; |
|
44 |
+ $_[0]->{filter} ||= {}; |
|
57 | 45 |
|
58 | 46 |
# Fetch |
59 |
- my $row = $sth->fetchrow_arrayref; |
|
47 |
+ my $row = $_[0]->{sth}->fetchrow_arrayref; |
|
60 | 48 |
|
61 | 49 |
# Cannot fetch |
62 | 50 |
return unless $row; |
63 | 51 |
|
64 |
- # Keys |
|
65 |
- my $columns = $sth->{NAME_lc}; |
|
66 |
- |
|
67 | 52 |
# Filter |
68 | 53 |
my $row_hash = {}; |
69 |
- for (my $i = 0; $i < @$columns; $i++) { |
|
54 |
+ for (my $i = 0; $i < @{$_[0]->{sth}->{NAME_lc}}; $i++) { |
|
55 |
+ |
|
56 |
+ my $fname = $_[0]->{filter}->{$_[0]->{sth}->{NAME_lc}->[$i]} |
|
57 |
+ || $_[0]->{default_filter}; |
|
70 | 58 |
|
71 |
- my $fname = $filter->{$columns->[$i]} || $self->{default_filter} || ''; |
|
59 |
+ croak "Filter \"$fname\" is not registered." |
|
60 |
+ if $fname && ! exists $_[0]->{filters}->{$fname}; |
|
72 | 61 |
|
73 |
- if ($fname) { |
|
74 |
- my $filter; |
|
75 |
- |
|
76 |
- if (ref $fname) { |
|
77 |
- $filter = $fname; |
|
78 |
- } |
|
79 |
- else { |
|
80 |
- croak "Filter \"$fname\" is not registered." |
|
81 |
- unless exists $filters->{$fname}; |
|
82 |
- |
|
83 |
- $filter = $filters->{$fname}; |
|
84 |
- } |
|
85 |
- $row_hash->{$columns->[$i]} = $filter->($row->[$i]); |
|
86 |
- } |
|
87 |
- else { |
|
88 |
- $row_hash->{$columns->[$i]} = $row->[$i]; |
|
89 |
- } |
|
62 |
+ $row_hash->{$_[0]->{sth}->{NAME_lc}->[$i]} |
|
63 |
+ = !$fname ? $row->[$i] : |
|
64 |
+ ref $fname ? $fname->($row->[$i]) : |
|
65 |
+ $_[0]->{filters}->{$fname}->($row->[$i]); |
|
90 | 66 |
} |
91 | 67 |
|
92 | 68 |
return wantarray ? %$row_hash : $row_hash; |
... | ... |
@@ -3,11 +3,17 @@ package DBIx::Custom::SQLite; |
3 | 3 |
use strict; |
4 | 4 |
use warnings; |
5 | 5 |
|
6 |
-use base 'DBIx::Custom::Basic'; |
|
6 |
+use base 'DBIx::Custom'; |
|
7 |
+ |
|
7 | 8 |
use Carp 'croak'; |
8 | 9 |
|
10 |
+__PACKAGE__->attr('database'); |
|
11 |
+ |
|
9 | 12 |
sub connect { |
10 |
- my $self = shift; |
|
13 |
+ my $proto = shift; |
|
14 |
+ |
|
15 |
+ # Create |
|
16 |
+ my $self = ref $proto ? $proto : $proto->new(@_); |
|
11 | 17 |
|
12 | 18 |
# Create data source |
13 | 19 |
if (!$self->data_source && (my $database = $self->database)) { |
... | ... |
@@ -60,28 +66,46 @@ sub last_insert_rowid { |
60 | 66 |
|
61 | 67 |
=head1 NAME |
62 | 68 |
|
63 |
-DBIx::Custom::SQLite - DBIx::Custom SQLite implementation |
|
69 |
+DBIx::Custom::SQLite - a SQLite implementation of DBIx::Custom |
|
64 | 70 |
|
65 | 71 |
=head1 SYNOPSYS |
66 | 72 |
|
67 | 73 |
use DBIx::Custom::SQLite; |
68 | 74 |
|
69 |
- # New |
|
70 |
- my $dbi = DBIx::Custom::SQLite->new(user => 'taro', $password => 'kl&@K', |
|
71 |
- database => 'sample'); |
|
75 |
+ # Connect |
|
76 |
+ my $dbi = DBIx::Custom::SQLite->connect(user => 'taro', |
|
77 |
+ password => 'kl&@K', |
|
78 |
+ database => 'your_database'); |
|
72 | 79 |
|
73 | 80 |
# Connect memory database |
74 |
- my $dbi->connect_memory; |
|
81 |
+ my $dbi = DBIx::Custom::SQLite->connect_memory; |
|
82 |
+ |
|
83 |
+ # Reconnect memory database |
|
84 |
+ $dbi->reconnect_memory; |
|
85 |
+ |
|
86 |
+ # Last insert row ID |
|
87 |
+ my $id = $dbi->last_insert_rowid; |
|
75 | 88 |
|
89 |
+=head1 ATTRIBUTES |
|
90 |
+ |
|
91 |
+This class is L<DBIx::Custom> subclass. |
|
92 |
+You can use all attributes of L<DBIx::Custom>. |
|
93 |
+ |
|
94 |
+=head2 database |
|
95 |
+ |
|
96 |
+Database name |
|
97 |
+ |
|
98 |
+ $dbi = $dbi->database('your_database'); |
|
99 |
+ $database = $dbi->database; |
|
76 | 100 |
|
77 | 101 |
=head1 METHODS |
78 | 102 |
|
79 |
-This class is L<DBIx::Custom::Basic> subclass. |
|
80 |
-You can use all methods of L<DBIx::Custom::Basic> |
|
103 |
+This class is L<DBIx::Custom> subclass. |
|
104 |
+You can use all methods of L<DBIx::Custom>. |
|
81 | 105 |
|
82 |
-=head2 connect |
|
106 |
+=head2 connect - overridden |
|
83 | 107 |
|
84 |
-Connect to database |
|
108 |
+Connect to database. |
|
85 | 109 |
|
86 | 110 |
$dbi->connect; |
87 | 111 |
|
... | ... |
@@ -89,29 +113,22 @@ If you set database, host, or port, data source is automatically created. |
89 | 113 |
|
90 | 114 |
=head2 connect_memory |
91 | 115 |
|
92 |
-Connect memory database |
|
116 |
+Connect memory database. |
|
93 | 117 |
|
94 | 118 |
$dbi->connect_memory; |
95 | 119 |
|
96 | 120 |
=head2 reconnect_memory |
97 | 121 |
|
98 |
-Reconnect to memory databsse |
|
122 |
+Reconnect to memory databsse. |
|
99 | 123 |
|
100 | 124 |
$dbi->reconnect_memory; |
101 | 125 |
|
102 | 126 |
=head2 last_insert_rowid |
103 | 127 |
|
104 |
-Get last insert id |
|
128 |
+Last insert row ID. |
|
105 | 129 |
|
106 | 130 |
$last_insert_rowid = $dbi->last_insert_rowid; |
107 | 131 |
|
108 |
-The folloing is last_insert_rowid sample. |
|
109 |
- |
|
110 |
- $dbi->insert('books', {title => 'Perl', author => 'taro'}); |
|
111 |
- $last_insert_rowid = $dbi->last_insert_rowid; |
|
112 |
- |
|
113 |
-This is equal to SQLite function |
|
114 |
- |
|
115 |
- last_insert_rowid() |
|
132 |
+This is equal to SQLite last_insert_rowid() function. |
|
116 | 133 |
|
117 | 134 |
=cut |
... | ... |
@@ -1,10 +1,9 @@ |
1 | 1 |
#!perl -T |
2 | 2 |
|
3 |
-use Test::More tests => 7; |
|
3 |
+use Test::More tests => 6; |
|
4 | 4 |
|
5 | 5 |
BEGIN { |
6 | 6 |
use_ok( 'DBIx::Custom' ); |
7 |
- use_ok( 'DBIx::Custom::Basic' ); |
|
8 | 7 |
use_ok( 'DBIx::Custom::MySQL' ); |
9 | 8 |
use_ok( 'DBIx::Custom::Query' ); |
10 | 9 |
use_ok( 'DBIx::Custom::Result' ); |
... | ... |
@@ -12,7 +12,7 @@ plan 'no_plan'; |
12 | 12 |
use DBIx::Custom; |
13 | 13 |
use Scalar::Util 'blessed'; |
14 | 14 |
{ |
15 |
- my $dbi = DBIx::Custom->new( |
|
15 |
+ my $dbi = DBIx::Custom->connect( |
|
16 | 16 |
user => $USER, |
17 | 17 |
password => $PASSWORD, |
18 | 18 |
data_source => "dbi:mysql:dbname=$DATABASE" |
... | ... |
@@ -339,8 +339,6 @@ $dbi->delete(table => 'table1', where => {key1 => 1, key2 => 2}); |
339 | 339 |
$rows = $dbi->select(table => 'table1')->fetch_hash_all; |
340 | 340 |
is_deeply($rows, [{key1 => 3, key2 => 4}], "$test : delete multi key"); |
341 | 341 |
|
342 |
-__END__ |
|
343 |
- |
|
344 | 342 |
test 'delete error'; |
345 | 343 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
346 | 344 |
$dbi->execute($CREATE_TABLE->{0}); |
... | ... |
@@ -368,20 +366,20 @@ $rows = $dbi->select(table => 'table1')->fetch_hash_all; |
368 | 366 |
is_deeply($rows, [{key1 => 1, key2 => 2}, |
369 | 367 |
{key1 => 3, key2 => 4}], "$test : table"); |
370 | 368 |
|
371 |
-$rows = $dbi->select(table => 'table1', columns => ['key1'])->fetch_hash_all; |
|
369 |
+$rows = $dbi->select(table => 'table1', column => ['key1'])->fetch_hash_all; |
|
372 | 370 |
is_deeply($rows, [{key1 => 1}, {key1 => 3}], "$test : table and columns and where key"); |
373 | 371 |
|
374 | 372 |
$rows = $dbi->select(table => 'table1', where => {key1 => 1})->fetch_hash_all; |
375 | 373 |
is_deeply($rows, [{key1 => 1, key2 => 2}], "$test : table and columns and where key"); |
376 | 374 |
|
377 |
-$rows = $dbi->select(table => 'table1', columns => ['key1'], where => {key1 => 3})->fetch_hash_all; |
|
375 |
+$rows = $dbi->select(table => 'table1', column => ['key1'], where => {key1 => 3})->fetch_hash_all; |
|
378 | 376 |
is_deeply($rows, [{key1 => 3}], "$test : table and columns and where key"); |
379 | 377 |
|
380 | 378 |
$rows = $dbi->select(table => 'table1', append => "order by key1 desc limit 1")->fetch_hash_all; |
381 | 379 |
is_deeply($rows, [{key1 => 3, key2 => 4}], "$test : append statement"); |
382 | 380 |
|
383 | 381 |
$dbi->register_filter(decrement => sub { $_[0] - 1 }); |
384 |
-$rows = $dbi->select(table => 'table1', {where => {key1 => 2}, filter => {key1 => 'decrement'}) |
|
382 |
+$rows = $dbi->select(table => 'table1', where => {key1 => 2}, filter => {key1 => 'decrement'}) |
|
385 | 383 |
->fetch_hash_all; |
386 | 384 |
is_deeply($rows, [{key1 => 1, key2 => 2}], "$test : filter"); |
387 | 385 |
|
... | ... |
@@ -389,57 +387,12 @@ $dbi->execute($CREATE_TABLE->{2}); |
389 | 387 |
$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 5}); |
390 | 388 |
$rows = $dbi->select( |
391 | 389 |
table => [qw/table1 table2/], |
392 |
- columns => ['table1.key1 as table1_key1', 'table2.key1 as table2_key1', 'key2', 'key3'], |
|
390 |
+ column => ['table1.key1 as table1_key1', 'table2.key1 as table2_key1', 'key2', 'key3'], |
|
393 | 391 |
where => {'table1.key2' => 2}, |
394 | 392 |
append => "where table1.key1 = table2.key1" |
395 | 393 |
)->fetch_hash_all; |
396 | 394 |
is_deeply($rows, [{table1_key1 => 1, table2_key1 => 1, key2 => 2, key3 => 5}], "$test : join"); |
397 | 395 |
|
398 |
-test 'Cache'; |
|
399 |
-$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
|
400 |
-DBIx::Custom->query_cache_max(2); |
|
401 |
-$dbi->execute($CREATE_TABLE->{0}); |
|
402 |
-delete $DBIx::Custom::CLASS_ATTRS->{_query_caches}; |
|
403 |
-delete $DBIx::Custom::CLASS_ATTRS->{_query_cache_keys}; |
|
404 |
-$tmpls[0] = "insert into table1 {insert key1 key2}"; |
|
405 |
-$queries[0] = $dbi->create_query($tmpls[0]); |
|
406 |
-is(DBIx::Custom->_query_caches->{$tmpls[0]}{sql}, $queries[0]->sql, "$test : sql first"); |
|
407 |
-is(DBIx::Custom->_query_caches->{$tmpls[0]}{columns}, $queries[0]->columns, "$test : columns first"); |
|
408 |
-is_deeply(DBIx::Custom->_query_cache_keys, [@tmpls], "$test : cache key first"); |
|
409 |
- |
|
410 |
-$tmpls[1] = "select * from table1"; |
|
411 |
-$queries[1] = $dbi->create_query($tmpls[1]); |
|
412 |
-is(DBIx::Custom->_query_caches->{$tmpls[0]}{sql}, $queries[0]->sql, "$test : sql first"); |
|
413 |
-is(DBIx::Custom->_query_caches->{$tmpls[0]}{columns}, $queries[0]->columns, "$test : columns first"); |
|
414 |
-is(DBIx::Custom->_query_caches->{$tmpls[1]}{sql}, $queries[1]->sql, "$test : sql second"); |
|
415 |
-is(DBIx::Custom->_query_caches->{$tmpls[1]}{columns}, $queries[1]->columns, "$test : columns second"); |
|
416 |
-is_deeply(DBIx::Custom->_query_cache_keys, [@tmpls], "$test : cache key second"); |
|
417 |
- |
|
418 |
-$tmpls[2] = "select key1, key2 from table1"; |
|
419 |
-$queries[2] = $dbi->create_query($tmpls[2]); |
|
420 |
-ok(!exists DBIx::Custom->_query_caches->{$tmpls[0]}, "$test : cache overflow deleted key"); |
|
421 |
-is(DBIx::Custom->_query_caches->{$tmpls[1]}{sql}, $queries[1]->sql, "$test : sql cache overflow deleted key"); |
|
422 |
-is(DBIx::Custom->_query_caches->{$tmpls[1]}{columns}, $queries[1]->columns, "$test : columns cache overflow deleted key"); |
|
423 |
-is(DBIx::Custom->_query_caches->{$tmpls[2]}{sql}, $queries[2]->sql, "$test : sql cache overflow deleted key"); |
|
424 |
-is(DBIx::Custom->_query_caches->{$tmpls[2]}{columns}, $queries[2]->columns, "$test : columns cache overflow deleted key"); |
|
425 |
-is_deeply(DBIx::Custom->_query_cache_keys, [@tmpls[1, 2]], "$test : cache key third"); |
|
426 |
- |
|
427 |
-$queries[1] = $dbi->create_query($tmpls[1]); |
|
428 |
-ok(!exists DBIx::Custom->_query_caches->{$tmpls[0]}, "$test : cache overflow deleted key"); |
|
429 |
-is(DBIx::Custom->_query_caches->{$tmpls[1]}{sql}, $queries[1]->sql, "$test : sql cache overflow deleted key"); |
|
430 |
-is_deeply(DBIx::Custom->_query_caches->{$tmpls[1]}{columns}, $queries[1]->columns, "$test : columns cache overflow deleted key"); |
|
431 |
-is(DBIx::Custom->_query_caches->{$tmpls[2]}{sql}, $queries[2]->sql, "$test : sql cache overflow deleted key"); |
|
432 |
-is_deeply(DBIx::Custom->_query_caches->{$tmpls[2]}{columns}, $queries[2]->columns, "$test : columns cache overflow deleted key"); |
|
433 |
-is_deeply(DBIx::Custom->_query_cache_keys, [@tmpls[1, 2]], "$test : cache key third"); |
|
434 |
- |
|
435 |
-$query = $dbi->create_query($tmpls[0]); |
|
436 |
-$query->filter('aaa'); |
|
437 |
-$query = $dbi->create_query($tmpls[0]); |
|
438 |
-ok(!$query->filter, "$test : only cached sql and columns"); |
|
439 |
-$query->filter('bbb'); |
|
440 |
-$query = $dbi->create_query($tmpls[0]); |
|
441 |
-ok(!$query->filter, "$test : only cached sql and columns"); |
|
442 |
- |
|
443 | 396 |
test 'fetch filter'; |
444 | 397 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
445 | 398 |
$dbi->register_filter( |
... | ... |
@@ -457,8 +410,8 @@ is_deeply($row, {key1 => 3, key2 => 4}, "$test: default_fetch_filter and filter" |
457 | 410 |
test 'filters'; |
458 | 411 |
$dbi = DBIx::Custom->new; |
459 | 412 |
|
460 |
-ok($dbi->filters->{decode_utf8}->(encode_utf8('あ')), |
|
461 |
- 'あ', "$test : decode_utf8;); |
|
413 |
+is($dbi->filters->{decode_utf8}->(encode_utf8('あ')), |
|
414 |
+ 'あ', "$test : decode_utf8"); |
|
462 | 415 |
|
463 | 416 |
is($dbi->filters->{encode_utf8}->('あ'), |
464 | 417 |
encode_utf8('あ'), "$test : encode_utf8"); |
... | ... |
@@ -26,7 +26,6 @@ $dbi = DBIx::Custom->new( |
26 | 26 |
database => 'a', |
27 | 27 |
password => 'b', |
28 | 28 |
data_source => 'c', |
29 |
- options => {d => 1, e => 2}, |
|
30 | 29 |
filters => { |
31 | 30 |
f => 3, |
32 | 31 |
}, |
... | ... |
@@ -36,7 +35,7 @@ $dbi = DBIx::Custom->new( |
36 | 35 |
sql_template => $SQL_TMPL->{0}, |
37 | 36 |
); |
38 | 37 |
is_deeply($dbi,{user => 'a', database => 'a', password => 'b', data_source => 'c', |
39 |
- options => {d => 1, e => 2}, filters => {f => 3}, default_bind_filter => 'f', |
|
38 |
+ filters => {f => 3}, default_bind_filter => 'f', |
|
40 | 39 |
default_fetch_filter => 'g', result_class => 'g', |
41 | 40 |
sql_template => $SQL_TMPL->{0}}, $test); |
42 | 41 |
isa_ok($dbi, 'DBIx::Custom'); |
... | ... |
@@ -102,8 +101,3 @@ test 'register_filters'; |
102 | 101 |
$dbi = DBIx::Custom->new; |
103 | 102 |
$dbi->register_filter(a => sub {1}); |
104 | 103 |
is($dbi->filters->{a}->(), 1, $test); |
105 |
- |
|
106 |
-test 'Accessor'; |
|
107 |
-$dbi = DBIx::Custom->new; |
|
108 |
-$dbi->options({opt1 => 1, opt2 => 2}); |
|
109 |
-is_deeply(scalar $dbi->options, {opt1 => 1, opt2 => 2}, "$test : options"); |
... | ... |
@@ -44,4 +44,9 @@ $dbi = $CLASS->new(user => $USER, password => $PASSWORD, |
44 | 44 |
$dbi->connect; |
45 | 45 |
is(ref $dbi->dbh, 'DBI::db', $test); |
46 | 46 |
|
47 |
- |
|
47 |
+test 'attributes'; |
|
48 |
+$dbi = DBIx::Custom::MySQL->new; |
|
49 |
+$dbi->host('a'); |
|
50 |
+is($dbi->host, 'a', "$test: host"); |
|
51 |
+$dbi->port('b'); |
|
52 |
+is($dbi->port, 'b', "$test: port"); |
... | ... |
@@ -35,8 +35,7 @@ my $db_file; |
35 | 35 |
my $id; |
36 | 36 |
|
37 | 37 |
test 'connect_memory'; |
38 |
-$dbi = DBIx::Custom::SQLite->new; |
|
39 |
-$dbi->connect_memory; |
|
38 |
+$dbi = DBIx::Custom::SQLite->connect(database => ':memory:'); |
|
40 | 39 |
$ret_val = $dbi->execute($CREATE_TABLE->{0}); |
41 | 40 |
ok(defined $ret_val, $test); |
42 | 41 |
$dbi->insert(table => 'table1', param => {key1 => 'a', key2 => 2}); |