| ... | ... | 
                  @@ -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);  |