separate DBIx::Custom::Result type_rule from filter...
...again
| ... | ... |
@@ -1,6 +1,6 @@ |
| 1 | 1 |
package DBIx::Custom; |
| 2 | 2 |
|
| 3 |
-our $VERSION = '0.1692'; |
|
| 3 |
+our $VERSION = '0.1693'; |
|
| 4 | 4 |
use 5.008001; |
| 5 | 5 |
|
| 6 | 6 |
use Object::Simple -base; |
| ... | ... |
@@ -50,42 +50,32 @@ sub filter {
|
| 50 | 50 |
sub fetch {
|
| 51 | 51 |
my $self = shift; |
| 52 | 52 |
|
| 53 |
- # Filter |
|
| 54 |
- my $filter = $self->filter; |
|
| 55 |
- |
|
| 56 |
- # End filter |
|
| 57 |
- my $end_filter = $self->{end_filter} || {};
|
|
| 58 |
- |
|
| 59 | 53 |
# Fetch |
| 60 | 54 |
my @row = $self->{sth}->fetchrow_array;
|
| 61 |
- |
|
| 62 |
- # No row |
|
| 63 | 55 |
return unless @row; |
| 64 | 56 |
|
| 65 | 57 |
# Filtering |
| 66 | 58 |
my $columns = $self->{sth}->{NAME};
|
| 67 | 59 |
my $types = $self->{sth}->{TYPE};
|
| 68 | 60 |
my $type_rule = $self->type_rule || {};
|
| 69 |
- |
|
| 61 |
+ my $filter = $self->filter; |
|
| 62 |
+ my $end_filter = $self->end_filter; |
|
| 70 | 63 |
for (my $i = 0; $i < @$columns; $i++) {
|
| 71 | 64 |
|
| 72 |
- # Filter name |
|
| 65 |
+ # Column |
|
| 73 | 66 |
my $column = $columns->[$i]; |
| 74 |
- my $f = exists $filter->{$column}
|
|
| 75 |
- ? $filter->{$column}
|
|
| 76 |
- : $self->{default_filter};
|
|
| 77 |
- my $ef = $end_filter->{$column};
|
|
| 78 | 67 |
|
| 79 |
- # Filtering |
|
| 80 |
- if ($f && !$self->filter_off) {
|
|
| 81 |
- $row[$i] = $f->($row[$i]); |
|
| 82 |
- } |
|
| 83 |
- elsif (!$self->type_rule_off && (my $rule = $type_rule->{lc($types->[$i])}))
|
|
| 84 |
- {
|
|
| 85 |
- $row[$i] = $rule->($row[$i]); |
|
| 86 |
- } |
|
| 87 |
- |
|
| 88 |
- $row[$i] = $ef->($row[$i]) if $ef && !$self->filter_off; |
|
| 68 |
+ # Type rule |
|
| 69 |
+ my $type_filter = $type_rule->{lc($types->[$i])};
|
|
| 70 |
+ $row[$i] = $type_filter->($row[$i]) |
|
| 71 |
+ if $type_filter && !$self->{type_rule_off};
|
|
| 72 |
+ |
|
| 73 |
+ # Filter |
|
| 74 |
+ my $filter = $filter->{$column} || $self->{default_filter};
|
|
| 75 |
+ $row[$i] = $filter->($row[$i]) |
|
| 76 |
+ if $filter && !$self->{filter_off};
|
|
| 77 |
+ $row[$i] = $end_filter->{$column}->($row[$i])
|
|
| 78 |
+ if $end_filter->{$column} && !$self->{filter_off};
|
|
| 89 | 79 |
} |
| 90 | 80 |
|
| 91 | 81 |
return \@row; |
| ... | ... |
@@ -120,46 +110,38 @@ sub fetch_first {
|
| 120 | 110 |
sub fetch_hash {
|
| 121 | 111 |
my $self = shift; |
| 122 | 112 |
|
| 123 |
- # Filter |
|
| 124 |
- my $filter = $self->filter; |
|
| 125 |
- |
|
| 126 |
- # End filter |
|
| 127 |
- my $end_filter = $self->{end_filter} || {};
|
|
| 128 |
- |
|
| 129 | 113 |
# Fetch |
| 130 | 114 |
my $row = $self->{sth}->fetchrow_arrayref;
|
| 131 |
- |
|
| 132 |
- # Cannot fetch |
|
| 133 | 115 |
return unless $row; |
| 134 | 116 |
|
| 135 | 117 |
# Filter |
| 136 |
- my $row_hash = {};
|
|
| 118 |
+ my $hash_row = {};
|
|
| 119 |
+ my $filter = $self->filter; |
|
| 120 |
+ my $end_filter = $self->end_filter || {};
|
|
| 137 | 121 |
my $columns = $self->{sth}->{NAME};
|
| 138 | 122 |
my $types = $self->{sth}->{TYPE};
|
| 139 | 123 |
my $type_rule = $self->type_rule || {};
|
| 140 | 124 |
for (my $i = 0; $i < @$columns; $i++) {
|
| 141 | 125 |
|
| 142 |
- # Filter name |
|
| 126 |
+ # Column |
|
| 143 | 127 |
my $column = $columns->[$i]; |
| 144 |
- my $f = exists $filter->{$column}
|
|
| 145 |
- ? $filter->{$column}
|
|
| 146 |
- : $self->{default_filter};
|
|
| 147 |
- my $ef = $end_filter->{$column};
|
|
| 148 | 128 |
|
| 149 |
- # Filtering |
|
| 150 |
- if ($f && !$self->filter_off) {
|
|
| 151 |
- $row_hash->{$column} = $f->($row->[$i]);
|
|
| 129 |
+ # Type rule |
|
| 130 |
+ my $type_filter = $type_rule->{lc($types->[$i])};
|
|
| 131 |
+ if (!$self->{type_rule_off} && $type_filter) {
|
|
| 132 |
+ $hash_row->{$column} = $type_filter->($row->[$i]);
|
|
| 152 | 133 |
} |
| 153 |
- elsif (!$self->type_rule_off && (my $rule = $type_rule->{lc($types->[$i])}))
|
|
| 154 |
- {
|
|
| 155 |
- $row_hash->{$column} = $rule->($row->[$i]);
|
|
| 156 |
- } |
|
| 157 |
- else { $row_hash->{$column} = $row->[$i] }
|
|
| 158 |
- $row_hash->{$column} = $ef->($row_hash->{$column})
|
|
| 159 |
- if $ef && !$self->filter_off; |
|
| 134 |
+ else { $hash_row->{$column} = $row->[$i] }
|
|
| 135 |
+ |
|
| 136 |
+ # Filter |
|
| 137 |
+ my $f = $filter->{$column} || $self->{default_filter};
|
|
| 138 |
+ $hash_row->{$column} = $f->($hash_row->{$column})
|
|
| 139 |
+ if $f && !$self->{filter_off};
|
|
| 140 |
+ $hash_row->{$column} = $end_filter->{$column}->($hash_row->{$column})
|
|
| 141 |
+ if $end_filter->{$column} && !$self->{filter_off};
|
|
| 160 | 142 |
} |
| 161 | 143 |
|
| 162 |
- return $row_hash; |
|
| 144 |
+ return $hash_row; |
|
| 163 | 145 |
} |
| 164 | 146 |
|
| 165 | 147 |
sub fetch_hash_all {
|
| ... | ... |
@@ -2864,7 +2864,19 @@ $dbi->type_rule( |
| 2864 | 2864 |
$dbi->insert({key1 => 2}, table => 'table1');
|
| 2865 | 2865 |
$result = $dbi->select(table => 'table1'); |
| 2866 | 2866 |
$result->filter(key1 => sub { $_[0] * 3 });
|
| 2867 |
-is($result->one->{key1}, 6);
|
|
| 2867 |
+is($result->one->{key1}, 12);
|
|
| 2868 |
+ |
|
| 2869 |
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
|
| 2870 |
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
| 2871 |
+$dbi->type_rule( |
|
| 2872 |
+ from => {
|
|
| 2873 |
+ date => sub { $_[0] * 2 },
|
|
| 2874 |
+ }, |
|
| 2875 |
+); |
|
| 2876 |
+$dbi->insert({key1 => 2}, table => 'table1');
|
|
| 2877 |
+$result = $dbi->select(table => 'table1'); |
|
| 2878 |
+$result->filter(key1 => sub { $_[0] * 3 });
|
|
| 2879 |
+is($result->fetch->[0], 12); |
|
| 2868 | 2880 |
|
| 2869 | 2881 |
test 'separator'; |
| 2870 | 2882 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|