... | ... |
@@ -1,3 +1,6 @@ |
1 |
+0.22 |
|
2 |
+ - added EXPERIMENTAL DBIx::Custom::Result::kv method |
|
3 |
+ - added EXPERIMENTAL DBIx::Custom::Result::flat method |
|
1 | 4 |
0.2111 |
2 | 5 |
- "created_at" option is renamed to "ctime" option. |
3 | 6 |
"created_at" is DEPRECATED! |
... | ... |
@@ -18,36 +18,6 @@ sub column { |
18 | 18 |
return $column; |
19 | 19 |
} |
20 | 20 |
|
21 |
-sub filter { |
|
22 |
- my $self = shift; |
|
23 |
- |
|
24 |
- # Set |
|
25 |
- if (@_) { |
|
26 |
- |
|
27 |
- # Convert filter name to subroutine |
|
28 |
- my $filter = @_ == 1 ? $_[0] : [@_]; |
|
29 |
- $filter = _array_to_hash($filter); |
|
30 |
- for my $column (keys %$filter) { |
|
31 |
- my $fname = $filter->{$column}; |
|
32 |
- if (exists $filter->{$column} |
|
33 |
- && defined $fname |
|
34 |
- && ref $fname ne 'CODE') |
|
35 |
- { |
|
36 |
- croak qq{Filter "$fname" is not registered" } . _subname |
|
37 |
- unless exists $self->dbi->filters->{$fname}; |
|
38 |
- $filter->{$column} = $self->dbi->filters->{$fname}; |
|
39 |
- } |
|
40 |
- } |
|
41 |
- |
|
42 |
- # Merge |
|
43 |
- $self->{filter} = {%{$self->filter}, %$filter}; |
|
44 |
- |
|
45 |
- return $self; |
|
46 |
- } |
|
47 |
- |
|
48 |
- return $self->{filter} ||= {}; |
|
49 |
-} |
|
50 |
- |
|
51 | 21 |
sub fetch { |
52 | 22 |
my $self = shift; |
53 | 23 |
|
... | ... |
@@ -246,6 +216,46 @@ sub fetch_one { |
246 | 216 |
return $row; |
247 | 217 |
} |
248 | 218 |
|
219 |
+sub filter { |
|
220 |
+ my $self = shift; |
|
221 |
+ |
|
222 |
+ # Set |
|
223 |
+ if (@_) { |
|
224 |
+ |
|
225 |
+ # Convert filter name to subroutine |
|
226 |
+ my $filter = @_ == 1 ? $_[0] : [@_]; |
|
227 |
+ $filter = _array_to_hash($filter); |
|
228 |
+ for my $column (keys %$filter) { |
|
229 |
+ my $fname = $filter->{$column}; |
|
230 |
+ if (exists $filter->{$column} |
|
231 |
+ && defined $fname |
|
232 |
+ && ref $fname ne 'CODE') |
|
233 |
+ { |
|
234 |
+ croak qq{Filter "$fname" is not registered" } . _subname |
|
235 |
+ unless exists $self->dbi->filters->{$fname}; |
|
236 |
+ $filter->{$column} = $self->dbi->filters->{$fname}; |
|
237 |
+ } |
|
238 |
+ } |
|
239 |
+ |
|
240 |
+ # Merge |
|
241 |
+ $self->{filter} = {%{$self->filter}, %$filter}; |
|
242 |
+ |
|
243 |
+ return $self; |
|
244 |
+ } |
|
245 |
+ |
|
246 |
+ return $self->{filter} ||= {}; |
|
247 |
+} |
|
248 |
+ |
|
249 |
+sub flat { |
|
250 |
+ my $self = shift; |
|
251 |
+ |
|
252 |
+ my @flat; |
|
253 |
+ while (my $row = $self->fetch) { |
|
254 |
+ push @flat, @$row; |
|
255 |
+ } |
|
256 |
+ return @flat; |
|
257 |
+} |
|
258 |
+ |
|
249 | 259 |
sub header { shift->sth->{NAME} } |
250 | 260 |
|
251 | 261 |
*one = \&fetch_hash_one; |
... | ... |
@@ -563,6 +573,29 @@ Set filter for column. |
563 | 573 |
You can use subroutine or filter name as filter. |
564 | 574 |
This filter is executed after C<type_rule> filter. |
565 | 575 |
|
576 |
+=head2 C<flat> EXPERIMENTAL |
|
577 |
+ |
|
578 |
+ my $flat = $result->flat; |
|
579 |
+ |
|
580 |
+All value is flatten and added to one array reference. |
|
581 |
+ |
|
582 |
+ my @flat = $dbi->select(['id', 'title'])->flat; |
|
583 |
+ |
|
584 |
+If C<fetch_all> method return the following data |
|
585 |
+ |
|
586 |
+ [ |
|
587 |
+ [1, 'Perl'], |
|
588 |
+ [2, 'Ruby'] |
|
589 |
+ ] |
|
590 |
+ |
|
591 |
+C<flat> method return the following data. |
|
592 |
+ |
|
593 |
+ (1, 'Perl', 2, 'Ruby') |
|
594 |
+ |
|
595 |
+You can create key-value pair easily. |
|
596 |
+ |
|
597 |
+ my %titles = $dbi->select(['id', 'title'])->flat; |
|
598 |
+ |
|
566 | 599 |
=head2 C<header> |
567 | 600 |
|
568 | 601 |
my $header = $result->header; |
... | ... |
@@ -3579,6 +3579,11 @@ $result->filter({$key1 => 'three_times'}); |
3579 | 3579 |
$rows = $result->fetch_hash_all; |
3580 | 3580 |
is_deeply($rows, [{$key1 => 3, $key2 => 2}, {$key1 => 9, $key2 => 4}], "hash"); |
3581 | 3581 |
|
3582 |
+test 'flat'; |
|
3583 |
+$result = $dbi->select(table => $table1); |
|
3584 |
+$rows = [$result->flat]; |
|
3585 |
+is_deeply($rows, [1, 2, 3, 4]); |
|
3586 |
+ |
|
3582 | 3587 |
test 'DBIx::Custom::Result fetch_multi'; |
3583 | 3588 |
eval { $dbi->execute("drop table $table1") }; |
3584 | 3589 |
$dbi->execute($create_table1); |