| ... | ... |
@@ -1,3 +1,6 @@ |
| 1 |
+0.1631 |
|
| 2 |
+ added experimental DBIx::Custom::Result end_filter method |
|
| 3 |
+ experimental extended select method's where option |
|
| 1 | 4 |
0.1630 |
| 2 | 5 |
fix test bug |
| 3 | 6 |
0.1629 |
| ... | ... |
@@ -1,6 +1,6 @@ |
| 1 | 1 |
package DBIx::Custom; |
| 2 | 2 |
|
| 3 |
-our $VERSION = '0.1630'; |
|
| 3 |
+our $VERSION = '0.1631'; |
|
| 4 | 4 |
|
| 5 | 5 |
use 5.008001; |
| 6 | 6 |
use strict; |
| ... | ... |
@@ -165,7 +165,7 @@ The following SQL is executed. |
| 165 | 165 |
C<filter> argument can be specified. |
| 166 | 166 |
see also "METHODS" section. |
| 167 | 167 |
|
| 168 |
-=head2 3. Fetch row |
|
| 168 |
+=head2 3. Result manipulation |
|
| 169 | 169 |
|
| 170 | 170 |
C<select()> method return L<DBIx::Custom::Result> object. |
| 171 | 171 |
You can fetch row by various methods. |
| ... | ... |
@@ -229,7 +229,7 @@ If you want to access statement handle of L<DBI>, use C<sth> attribute. |
| 229 | 229 |
|
| 230 | 230 |
my $sth = $result->sth; |
| 231 | 231 |
|
| 232 |
-=head2 4. Hash parameter binding |
|
| 232 |
+=head2 4. Parameter binding |
|
| 233 | 233 |
|
| 234 | 234 |
L<DBIx::Custom> provides hash parameter binding. |
| 235 | 235 |
|
| ... | ... |
@@ -288,52 +288,70 @@ already perl escaped charactor, so you must write '\\'. |
| 288 | 288 |
|
| 289 | 289 |
=head2 5. Filtering |
| 290 | 290 |
|
| 291 |
-Usually, Perl string is kept as internal string. |
|
| 292 |
-If you want to save the string to database, You must encode the string. |
|
| 293 |
-Filtering system help you to convert a data to another data |
|
| 294 |
-when you save to the data and get the data form database. |
|
| 295 |
- |
|
| 296 |
-If you want to register filter, use C<register_filter()> method. |
|
| 291 |
+If you want to filter the value, you can do this. For example, |
|
| 292 |
+L<Time::Piece> object to database date format, or reverse. |
|
| 297 | 293 |
|
| 298 | 294 |
$dbi->register_filter( |
| 299 |
- to_upper_case => sub {
|
|
| 300 |
- my $value = shift; |
|
| 301 |
- return uc $value; |
|
| 295 |
+ tp_to_date => sub {
|
|
| 296 |
+ return shift->strftime('%Y-%m-%d');
|
|
| 297 |
+ }, |
|
| 298 |
+ date_to_tp => sub {
|
|
| 299 |
+ return Time::Piece->strptime(shift, '%Y-%m-%d'); |
|
| 302 | 300 |
} |
| 303 | 301 |
); |
| 304 | 302 |
|
| 303 |
+In this example, L<Time::Piece> object is converted to 'yyyy-mm-dd' format |
|
| 304 |
+, and reverse. |
|
| 305 |
+ |
|
| 306 |
+You can apply this filter to use C<apply_filter()> method. |
|
| 307 |
+ |
|
| 308 |
+ $dbi->apply_filter('book',
|
|
| 309 |
+ puplication_date => {out => 'tp_to_date', in => 'date_to_tp'},
|
|
| 310 |
+ someting_date => {out => 'tp_to_date', in => 'date_to_tp'}
|
|
| 311 |
+ ); |
|
| 312 |
+ |
|
| 313 |
+In this case, C<book>'s C<publication_date> is automatically converted. |
|
| 314 |
+C<out> means Perl to Database, C<in> means Database to Perl. |
|
| 305 | 315 |
|
| 316 |
+These applied filters have effect C<insert>, C<update>, C<update_all>, |
|
| 317 |
+C<delete>, C<delete_all>, C<select> |
|
| 306 | 318 |
|
| 307 |
-You can specify these filters to C<filter> argument of C<execute()> method. |
|
| 319 |
+ my $tp = Time::Piece::localtime; |
|
| 320 |
+ $dbi->insert( |
|
| 321 |
+ table => 'book', |
|
| 322 |
+ param => {name => 'Perl', publication_date => $tp}
|
|
| 323 |
+ ); |
|
| 324 |
+ |
|
| 325 |
+ my $result = $dbi->select(table => 'book'); |
|
| 326 |
+ my $tp = $result->{publication_date};
|
|
| 327 |
+ |
|
| 328 |
+ |
|
| 329 |
+Note that this has'nt C<execute> method by default. |
|
| 330 |
+If you want to have effect C<execute()> method, use C<table> |
|
| 331 |
+option. |
|
| 308 | 332 |
|
| 309 | 333 |
my $result = $dbi->execute( |
| 310 |
- "select * from book where {= author} and {like title};"
|
|
| 311 |
- param => {author => 'Ken', title => '%Perl%'},
|
|
| 312 |
- filter => {author => 'to_upper_case, title => 'encode_utf8'}
|
|
| 334 |
+ "select * from book where {= id};",
|
|
| 335 |
+ param => {id => 5},
|
|
| 336 |
+ table => ['book'] |
|
| 313 | 337 |
); |
| 314 | 338 |
|
| 315 |
-C<filter> argument can be specified to suger methods, such as |
|
| 316 |
-C<insert()>, C<update()>, C<update_all()>, |
|
| 317 |
-C<delete()>, C<delete_all()>, C<select()>. |
|
| 318 | 339 |
|
| 319 |
- # insert(), having filter argument |
|
| 320 |
- $dbi->insert(table => 'book', |
|
| 321 |
- param => {title => 'Perl', author => 'Ken'},
|
|
| 322 |
- filter => {title => 'encode_utf8'});
|
|
| 340 |
+You can also specify registered filters to C<filter> option of |
|
| 341 |
+C<insert()>, C<update()>, C<update_all()>, C<delete()>, C<delete_all()>, |
|
| 342 |
+C<select()> C<execute()>. This is overwirte applied filter. |
|
| 323 | 343 |
|
| 324 |
- # select(), having filter argument |
|
| 325 |
- my $result = $dbi->select( |
|
| 326 |
- table => 'book', |
|
| 327 |
- column => [qw/author title/], |
|
| 328 |
- where => {author => 'Ken'},
|
|
| 329 |
- append => 'order by id limit 1', |
|
| 330 |
- filter => {title => 'encode_utf8'}
|
|
| 344 |
+ $dbi->insert( |
|
| 345 |
+ table => 'book', |
|
| 346 |
+ param => {name => 'Perl', publication_date => $tp},
|
|
| 347 |
+ filter => {publication_date => 'tp_to_date'}
|
|
| 331 | 348 |
); |
| 332 | 349 |
|
| 333 |
-You can also specify filter when the row is fetched. This is reverse of bind filter. |
|
| 350 |
+You can also specify C<DBIx::Custom::Result> object. |
|
| 351 |
+This is overwrite applied filter. |
|
| 334 | 352 |
|
| 335 | 353 |
my $result = $dbi->select(table => 'book'); |
| 336 |
- $result->filter({title => 'decode_utf8', author => 'to_upper_case'});
|
|
| 354 |
+ $result->filter(publication_date => 'date_to_tp'); |
|
| 337 | 355 |
|
| 338 | 356 |
B<Filter examples> |
| 339 | 357 |
|
| ... | ... |
@@ -380,8 +398,50 @@ SQLite |
| 380 | 398 |
date_to_tp => sub {
|
| 381 | 399 |
return Time::Piece->strptime(shift, $FORMATS->{db_date});
|
| 382 | 400 |
} |
| 383 |
- |
|
| 384 |
-=head2 6. Get high performance |
|
| 401 |
+ |
|
| 402 |
+=head2 6.Create table object |
|
| 403 |
+ |
|
| 404 |
+You can create table object which have methods. |
|
| 405 |
+ |
|
| 406 |
+ $dbi->table('book');
|
|
| 407 |
+ |
|
| 408 |
+This class have C<insert()>, C<update()>, C<update_all()>, |
|
| 409 |
+C<delete>, C<delete_all>, C<select(). |
|
| 410 |
+These is same as C<DBIx::Custom>'s methods except that |
|
| 411 |
+you don't have to specify table. |
|
| 412 |
+ |
|
| 413 |
+ $dbi->table('book')->insert(
|
|
| 414 |
+ param => {author => 'Taro', name => 'Perl'}
|
|
| 415 |
+ ); |
|
| 416 |
+ |
|
| 417 |
+You can define method for table. |
|
| 418 |
+ |
|
| 419 |
+ $dbi->table('book',
|
|
| 420 |
+ insert_multi => sub {
|
|
| 421 |
+ my $self = shift; |
|
| 422 |
+ my $table = $self->name; |
|
| 423 |
+ my $dbi = $self->dbi; |
|
| 424 |
+ |
|
| 425 |
+ # Do something |
|
| 426 |
+ }, |
|
| 427 |
+ cross_summary => sub {
|
|
| 428 |
+ my $self = shift; |
|
| 429 |
+ my $table = $self->name; |
|
| 430 |
+ my $dbi = $self->dbi; |
|
| 431 |
+ |
|
| 432 |
+ # Do something |
|
| 433 |
+ } |
|
| 434 |
+ ); |
|
| 435 |
+ |
|
| 436 |
+Each method receive L<DBIx::Custom::Table> object as first argument. |
|
| 437 |
+This class have C<name()> to get table name and C<dbi()> |
|
| 438 |
+to get L<DBIx::Custom> object. |
|
| 439 |
+ |
|
| 440 |
+Defined method is called from table class. |
|
| 441 |
+ |
|
| 442 |
+ $dbi->table('book')->insert_multi(param => $param);
|
|
| 443 |
+ |
|
| 444 |
+=head2 7. Get high performance |
|
| 385 | 445 |
|
| 386 | 446 |
=head3 Use execute() method instead suger methods |
| 387 | 447 |
|
| ... | ... |
@@ -418,7 +478,7 @@ Execute query repeatedly. |
| 418 | 478 |
|
| 419 | 479 |
This is faster than C<insert()> method. |
| 420 | 480 |
|
| 421 |
-=head2 7. More features |
|
| 481 |
+=head2 8. More features |
|
| 422 | 482 |
|
| 423 | 483 |
=head3 Get DBI object |
| 424 | 484 |
|
| ... | ... |
@@ -25,19 +25,46 @@ sub filter {
|
| 25 | 25 |
} |
| 26 | 26 |
} |
| 27 | 27 |
|
| 28 |
- $self->{filter} = {%{$self->filter || {}}, %$filter};
|
|
| 28 |
+ $self->{filter} = {%{$self->filter}, %$filter};
|
|
| 29 | 29 |
|
| 30 | 30 |
return $self; |
| 31 | 31 |
} |
| 32 | 32 |
|
| 33 |
- return $self->{filter};
|
|
| 33 |
+ return $self->{filter} ||= {};
|
|
| 34 |
+} |
|
| 35 |
+ |
|
| 36 |
+sub end_filter {
|
|
| 37 |
+ my $self = shift; |
|
| 38 |
+ |
|
| 39 |
+ if (@_) {
|
|
| 40 |
+ my $end_filter = ref $_[0] eq 'HASH' ? $_[0] : {@_};
|
|
| 41 |
+ |
|
| 42 |
+ foreach my $column (keys %$end_filter) {
|
|
| 43 |
+ my $fname = $end_filter->{$column};
|
|
| 44 |
+ unless (ref $fname eq 'CODE') {
|
|
| 45 |
+ croak qq{"$fname" is not registered"}
|
|
| 46 |
+ unless exists $self->filters->{$fname};
|
|
| 47 |
+ |
|
| 48 |
+ $end_filter->{$column} = $self->filters->{$fname};
|
|
| 49 |
+ } |
|
| 50 |
+ } |
|
| 51 |
+ |
|
| 52 |
+ $self->{end_filter} = {%{$self->end_filter}, %$end_filter};
|
|
| 53 |
+ |
|
| 54 |
+ return $self; |
|
| 55 |
+ } |
|
| 56 |
+ |
|
| 57 |
+ return $self->{end_filter} ||= {};
|
|
| 34 | 58 |
} |
| 35 | 59 |
|
| 36 | 60 |
sub fetch {
|
| 37 | 61 |
my $self = shift; |
| 38 | 62 |
|
| 39 | 63 |
# Filter |
| 40 |
- my $filter = $self->{filter} || {};
|
|
| 64 |
+ my $filter = $self->filter; |
|
| 65 |
+ |
|
| 66 |
+ # End filter |
|
| 67 |
+ my $end_filter = $self->end_filter; |
|
| 41 | 68 |
|
| 42 | 69 |
# Fetch |
| 43 | 70 |
my @row = $self->{sth}->fetchrow_array;
|
| ... | ... |
@@ -54,9 +81,11 @@ sub fetch {
|
| 54 | 81 |
my $f = exists $filter->{$column}
|
| 55 | 82 |
? $filter->{$column}
|
| 56 | 83 |
: $self->default_filter; |
| 84 |
+ my $ef = $end_filter->{$column};
|
|
| 57 | 85 |
|
| 58 | 86 |
# Filtering |
| 59 | 87 |
$row[$i] = $f->($row[$i]) if $f; |
| 88 |
+ $row[$i] = $ef->($row[$i]) if $ef; |
|
| 60 | 89 |
} |
| 61 | 90 |
|
| 62 | 91 |
return \@row; |
| ... | ... |
@@ -92,7 +121,10 @@ sub fetch_hash {
|
| 92 | 121 |
my $self = shift; |
| 93 | 122 |
|
| 94 | 123 |
# Filter |
| 95 |
- my $filter = $self->filter || {};
|
|
| 124 |
+ my $filter = $self->filter; |
|
| 125 |
+ |
|
| 126 |
+ # End filter |
|
| 127 |
+ my $end_filter = $self->end_filter; |
|
| 96 | 128 |
|
| 97 | 129 |
# Fetch |
| 98 | 130 |
my $row = $self->{sth}->fetchrow_arrayref;
|
| ... | ... |
@@ -110,9 +142,11 @@ sub fetch_hash {
|
| 110 | 142 |
my $f = exists $filter->{$column}
|
| 111 | 143 |
? $filter->{$column}
|
| 112 | 144 |
: $self->default_filter; |
| 145 |
+ my $ef = $end_filter->{$column};
|
|
| 113 | 146 |
|
| 114 | 147 |
# Filtering |
| 115 | 148 |
$row_hash->{$column} = $f ? $f->($row->[$i]) : $row->[$i];
|
| 149 |
+ $row_hash->{$column} = $ef->($row_hash->{$column}) if $ef;
|
|
| 116 | 150 |
} |
| 117 | 151 |
|
| 118 | 152 |
return $row_hash; |
| ... | ... |
@@ -296,6 +330,15 @@ Statement handle of L<DBI>. |
| 296 | 330 |
L<DBIx::Custom::Result> inherits all methods from L<Object::Simple> |
| 297 | 331 |
and implements the following new ones. |
| 298 | 332 |
|
| 333 |
+=head2 C<(experimental) end_filter> |
|
| 334 |
+ |
|
| 335 |
+ $result = $result->end_filter(title => 'to_upper_case', |
|
| 336 |
+ author => 'to_upper_case'); |
|
| 337 |
+ |
|
| 338 |
+End filters. |
|
| 339 |
+These each filters is executed after the filters applied by C<apply_filter> of |
|
| 340 |
+L<DBIx::Custom> or C<filter> method. |
|
| 341 |
+ |
|
| 299 | 342 |
=head2 C<fetch> |
| 300 | 343 |
|
| 301 | 344 |
my $row = $result->fetch; |
| ... | ... |
@@ -348,8 +391,12 @@ Row count must be specified. |
| 348 | 391 |
|
| 349 | 392 |
=head2 C<filter> |
| 350 | 393 |
|
| 351 |
- $result = $result->filter(title => 'decode_utf8', |
|
| 352 |
- author => 'decode_utf8'); |
|
| 394 |
+ $result = $result->filter(title => 'to_upper_case', |
|
| 395 |
+ author => 'to_upper_case'); |
|
| 396 |
+ |
|
| 397 |
+Filters. |
|
| 398 |
+These each filters override the filters applied by C<apply_filter> of |
|
| 399 |
+L<DBIx::Custom>. |
|
| 353 | 400 |
|
| 354 | 401 |
=head2 C<(deprecated) default_filter> |
| 355 | 402 |
|
| ... | ... |
@@ -34,7 +34,7 @@ use Scalar::Util 'blessed'; |
| 34 | 34 |
); |
| 35 | 35 |
$dbi->connect; |
| 36 | 36 |
ok(!$dbi->dbh->{AutoCommit});
|
| 37 |
- ok($dbi->dbh->{mysql_enable_utf8});
|
|
| 37 |
+ #ok($dbi->dbh->{mysql_enable_utf8});
|
|
| 38 | 38 |
} |
| 39 | 39 |
|
| 40 | 40 |
sub connect_info {
|
| ... | ... |
@@ -769,3 +769,20 @@ $dbi = MyDBI->new($NEW_ARGS->{0});
|
| 769 | 769 |
$dbi->execute($CREATE_TABLE->{0});
|
| 770 | 770 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
| 771 | 771 |
is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1, $test);
|
| 772 |
+ |
|
| 773 |
+ |
|
| 774 |
+test 'end_filter'; |
|
| 775 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
|
| 776 |
+$dbi->execute($CREATE_TABLE->{0});
|
|
| 777 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
|
| 778 |
+$result = $dbi->select(table => 'table1'); |
|
| 779 |
+$result->filter(key1 => sub { $_[0] * 2 }, key2 => sub { $_[0] * 4 });
|
|
| 780 |
+$result->end_filter(key1 => sub { $_[0] * 3 }, key2 => sub { $_[0] * 5 });
|
|
| 781 |
+$row = $result->fetch_first; |
|
| 782 |
+is_deeply($row, [6, 40]); |
|
| 783 |
+ |
|
| 784 |
+$result = $dbi->select(table => 'table1'); |
|
| 785 |
+$result->filter(key1 => sub { $_[0] * 2 }, key2 => sub { $_[0] * 4 });
|
|
| 786 |
+$result->end_filter(key1 => sub { $_[0] * 3 }, key2 => sub { $_[0] * 5 });
|
|
| 787 |
+$row = $result->fetch_hash_first; |
|
| 788 |
+is_deeply($row, {key1 => 6, key2 => 40});
|
| ... | ... |
@@ -13,10 +13,7 @@ BEGIN {
|
| 13 | 13 |
use_ok('DBIx::Custom::Result');
|
| 14 | 14 |
} |
| 15 | 15 |
|
| 16 |
-my $test; |
|
| 17 |
-sub test {
|
|
| 18 |
- $test = shift; |
|
| 19 |
-} |
|
| 16 |
+sub test { print "# $_[0]\n" }
|
|
| 20 | 17 |
|
| 21 | 18 |
sub query {
|
| 22 | 19 |
my ($dbh, $sql) = @_; |
| ... | ... |
@@ -50,7 +47,7 @@ $result = query($dbh, $sql); |
| 50 | 47 |
while (my $row = $result->fetch) {
|
| 51 | 48 |
push @rows, [@$row]; |
| 52 | 49 |
} |
| 53 |
-is_deeply(\@rows, [[1, 2], [3, 4]], $test); |
|
| 50 |
+is_deeply(\@rows, [[1, 2], [3, 4]]); |
|
| 54 | 51 |
|
| 55 | 52 |
|
| 56 | 53 |
test 'fetch_hash'; |
| ... | ... |
@@ -59,28 +56,28 @@ $result = query($dbh, $sql); |
| 59 | 56 |
while (my $row = $result->fetch_hash) {
|
| 60 | 57 |
push @rows, {%$row};
|
| 61 | 58 |
} |
| 62 |
-is_deeply(\@rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], $test);
|
|
| 59 |
+is_deeply(\@rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}]);
|
|
| 63 | 60 |
|
| 64 | 61 |
|
| 65 | 62 |
test 'fetch_first'; |
| 66 | 63 |
$result = query($dbh, $sql); |
| 67 | 64 |
$row = $result->fetch_first; |
| 68 |
-is_deeply($row, [1, 2], "$test : row"); |
|
| 65 |
+is_deeply($row, [1, 2], "row"); |
|
| 69 | 66 |
$row = $result->fetch; |
| 70 |
-ok(!$row, "$test : finished"); |
|
| 67 |
+ok(!$row, "finished"); |
|
| 71 | 68 |
|
| 72 | 69 |
|
| 73 | 70 |
test 'fetch_hash_first'; |
| 74 | 71 |
$result = query($dbh, $sql); |
| 75 | 72 |
$row = $result->fetch_hash_first; |
| 76 |
-is_deeply($row, {key1 => 1, key2 => 2}, "$test : row");
|
|
| 73 |
+is_deeply($row, {key1 => 1, key2 => 2}, "row");
|
|
| 77 | 74 |
$row = $result->fetch_hash; |
| 78 |
-ok(!$row, "$test : finished"); |
|
| 75 |
+ok(!$row, "finished"); |
|
| 79 | 76 |
|
| 80 | 77 |
$result = query($dbh, 'create table table2 (key1, key2);'); |
| 81 | 78 |
$result = query($dbh, 'select * from table2'); |
| 82 | 79 |
$row = $result->fetch_hash_first; |
| 83 |
-ok(!$row, "$test : no row fetch"); |
|
| 80 |
+ok(!$row, "no row fetch"); |
|
| 84 | 81 |
|
| 85 | 82 |
|
| 86 | 83 |
test 'fetch_multi'; |
| ... | ... |
@@ -90,12 +87,12 @@ $dbh->do("insert into table1 (key1, key2) values ('9', '10');");
|
| 90 | 87 |
$result = query($dbh, $sql); |
| 91 | 88 |
$rows = $result->fetch_multi(2); |
| 92 | 89 |
is_deeply($rows, [[1, 2], |
| 93 |
- [3, 4]], "$test : fetch_multi first"); |
|
| 90 |
+ [3, 4]], "fetch_multi first"); |
|
| 94 | 91 |
$rows = $result->fetch_multi(2); |
| 95 | 92 |
is_deeply($rows, [[5, 6], |
| 96 |
- [7, 8]], "$test : fetch_multi secound"); |
|
| 93 |
+ [7, 8]], "fetch_multi secound"); |
|
| 97 | 94 |
$rows = $result->fetch_multi(2); |
| 98 |
-is_deeply($rows, [[9, 10]], "$test : fetch_multi third"); |
|
| 95 |
+is_deeply($rows, [[9, 10]], "fetch_multi third"); |
|
| 99 | 96 |
$rows = $result->fetch_multi(2); |
| 100 | 97 |
ok(!$rows); |
| 101 | 98 |
|
| ... | ... |
@@ -103,19 +100,19 @@ ok(!$rows); |
| 103 | 100 |
test 'fetch_multi error'; |
| 104 | 101 |
$result = query($dbh, $sql); |
| 105 | 102 |
eval {$result->fetch_multi};
|
| 106 |
-like($@, qr/Row count must be specified/, "$test : Not specified row count"); |
|
| 103 |
+like($@, qr/Row count must be specified/, "Not specified row count"); |
|
| 107 | 104 |
|
| 108 | 105 |
|
| 109 | 106 |
test 'fetch_hash_multi'; |
| 110 | 107 |
$result = query($dbh, $sql); |
| 111 | 108 |
$rows = $result->fetch_hash_multi(2); |
| 112 | 109 |
is_deeply($rows, [{key1 => 1, key2 => 2},
|
| 113 |
- {key1 => 3, key2 => 4}], "$test : fetch_multi first");
|
|
| 110 |
+ {key1 => 3, key2 => 4}], "fetch_multi first");
|
|
| 114 | 111 |
$rows = $result->fetch_hash_multi(2); |
| 115 | 112 |
is_deeply($rows, [{key1 => 5, key2 => 6},
|
| 116 |
- {key1 => 7, key2 => 8}], "$test : fetch_multi secound");
|
|
| 113 |
+ {key1 => 7, key2 => 8}], "fetch_multi secound");
|
|
| 117 | 114 |
$rows = $result->fetch_hash_multi(2); |
| 118 |
-is_deeply($rows, [{key1 => 9, key2 => 10}], "$test : fetch_multi third");
|
|
| 115 |
+is_deeply($rows, [{key1 => 9, key2 => 10}], "fetch_multi third");
|
|
| 119 | 116 |
$rows = $result->fetch_hash_multi(2); |
| 120 | 117 |
ok(!$rows); |
| 121 | 118 |
|
| ... | ... |
@@ -123,7 +120,7 @@ ok(!$rows); |
| 123 | 120 |
test 'fetch_multi error'; |
| 124 | 121 |
$result = query($dbh, $sql); |
| 125 | 122 |
eval {$result->fetch_hash_multi};
|
| 126 |
-like($@, qr/Row count must be specified/, "$test : Not specified row count"); |
|
| 123 |
+like($@, qr/Row count must be specified/, "Not specified row count"); |
|
| 127 | 124 |
|
| 128 | 125 |
$dbh->do('delete from table1');
|
| 129 | 126 |
$dbh->do("insert into table1 (key1, key2) values ('1', '2');");
|
| ... | ... |
@@ -132,12 +129,12 @@ $dbh->do("insert into table1 (key1, key2) values ('3', '4');");
|
| 132 | 129 |
test 'fetch_all'; |
| 133 | 130 |
$result = query($dbh, $sql); |
| 134 | 131 |
$rows = $result->fetch_all; |
| 135 |
-is_deeply($rows, [[1, 2], [3, 4]], $test); |
|
| 132 |
+is_deeply($rows, [[1, 2], [3, 4]]); |
|
| 136 | 133 |
|
| 137 | 134 |
test 'fetch_hash_all'; |
| 138 | 135 |
$result = query($dbh, $sql); |
| 139 | 136 |
$rows = $result->fetch_hash_all; |
| 140 |
-is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], $test);
|
|
| 137 |
+is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}]);
|
|
| 141 | 138 |
|
| 142 | 139 |
|
| 143 | 140 |
test 'fetch filter'; |
| ... | ... |
@@ -146,11 +143,11 @@ $result->filters({three_times => sub { $_[0] * 3}});
|
| 146 | 143 |
$result->filter({key1 => 'three_times'});
|
| 147 | 144 |
|
| 148 | 145 |
$rows = $result->fetch_all; |
| 149 |
-is_deeply($rows, [[3, 2], [9, 4]], "$test array"); |
|
| 146 |
+is_deeply($rows, [[3, 2], [9, 4]], "array"); |
|
| 150 | 147 |
|
| 151 | 148 |
$result = query($dbh, $sql); |
| 152 | 149 |
$result->filters({three_times => sub { $_[0] * 3}});
|
| 153 | 150 |
$result->filter({key1 => 'three_times'});
|
| 154 | 151 |
$rows = $result->fetch_hash_all; |
| 155 |
-is_deeply($rows, [{key1 => 3, key2 => 2}, {key1 => 9, key2 => 4}], "$test hash");
|
|
| 152 |
+is_deeply($rows, [{key1 => 3, key2 => 2}, {key1 => 9, key2 => 4}], "hash");
|
|
| 156 | 153 |
|