... | ... |
@@ -1,3 +1,5 @@ |
1 |
+0.1687 |
|
2 |
+ - added EXPERIMENTAL type_rule method |
|
1 | 3 |
0.1686 |
2 | 4 |
- select() column option can receive array reference in array. |
3 | 5 |
This is EXPERIMENTAL |
... | ... |
@@ -1,6 +1,6 @@ |
1 | 1 |
package DBIx::Custom; |
2 | 2 |
|
3 |
-our $VERSION = '0.1685'; |
|
3 |
+our $VERSION = '0.1687'; |
|
4 | 4 |
|
5 | 5 |
use 5.008001; |
6 | 6 |
use strict; |
... | ... |
@@ -566,11 +566,12 @@ sub execute { |
566 | 566 |
|
567 | 567 |
# Result |
568 | 568 |
my $result = $self->result_class->new( |
569 |
- sth => $sth, |
|
570 |
- filters => $self->filters, |
|
569 |
+ sth => $sth, |
|
570 |
+ filters => $self->filters, |
|
571 | 571 |
default_filter => $self->{default_in_filter}, |
572 |
- filter => $filter->{in} || {}, |
|
573 |
- end_filter => $filter->{end} || {} |
|
572 |
+ filter => $filter->{in} || {}, |
|
573 |
+ end_filter => $filter->{end} || {}, |
|
574 |
+ type_rule => $self->type_rule, |
|
574 | 575 |
); |
575 | 576 |
|
576 | 577 |
return $result; |
... | ... |
@@ -986,6 +987,19 @@ sub setup_model { |
986 | 987 |
return $self; |
987 | 988 |
} |
988 | 989 |
|
990 |
+sub type_rule { |
|
991 |
+ my $self = shift; |
|
992 |
+ |
|
993 |
+ if (@_) { |
|
994 |
+ my $type_rule = _array_to_hash([@_]); |
|
995 |
+ $self->{type_rule} = $type_rule; |
|
996 |
+ |
|
997 |
+ return $self; |
|
998 |
+ } |
|
999 |
+ |
|
1000 |
+ return $self->{type_rule} || {}; |
|
1001 |
+} |
|
1002 |
+ |
|
989 | 1003 |
our %UPDATE_ARGS |
990 | 1004 |
= map { $_ => 1 } @COMMON_ARGS, qw/param where allow_update_all where_param/; |
991 | 1005 |
|
... | ... |
@@ -9,7 +9,7 @@ use Carp 'croak'; |
9 | 9 |
use DBIx::Custom::Util qw/_array_to_hash _subname/; |
10 | 10 |
|
11 | 11 |
__PACKAGE__->attr( |
12 |
- [qw/filters sth/], |
|
12 |
+ [qw/filters sth type_rule/], |
|
13 | 13 |
stash => sub { {} } |
14 | 14 |
); |
15 | 15 |
|
... | ... |
@@ -106,8 +106,17 @@ sub fetch { |
106 | 106 |
|
107 | 107 |
# Filtering |
108 | 108 |
my $columns = $self->{sth}->{NAME}; |
109 |
+ my $types = $self->{sth}->{TYPE}; |
|
110 |
+ my $type_rule = $self->type_rule || {}; |
|
111 |
+ |
|
109 | 112 |
for (my $i = 0; $i < @$columns; $i++) { |
110 | 113 |
|
114 |
+ if ($type_rule->{$types->[$i]} && |
|
115 |
+ (my $rule = $type_rule->{$types->[$i]}->{from})) |
|
116 |
+ { |
|
117 |
+ $row[$i] = $rule->($row[$i]); |
|
118 |
+ } |
|
119 |
+ |
|
111 | 120 |
# Filter name |
112 | 121 |
my $column = $columns->[$i]; |
113 | 122 |
my $f = exists $filter->{$column} |
... | ... |
@@ -167,8 +176,17 @@ sub fetch_hash { |
167 | 176 |
# Filter |
168 | 177 |
my $row_hash = {}; |
169 | 178 |
my $columns = $self->{sth}->{NAME}; |
179 |
+ my $types = $self->{sth}->{TYPE}; |
|
180 |
+ my $type_rule = $self->type_rule || {}; |
|
170 | 181 |
for (my $i = 0; $i < @$columns; $i++) { |
171 | 182 |
|
183 |
+ # Type rule |
|
184 |
+ if ($type_rule->{$types->[$i]} && |
|
185 |
+ (my $rule = $type_rule->{$types->[$i]}->{from})) |
|
186 |
+ { |
|
187 |
+ $row->[$i] = $rule->($row->[$i]); |
|
188 |
+ } |
|
189 |
+ |
|
172 | 190 |
# Filter name |
173 | 191 |
my $column = $columns->[$i]; |
174 | 192 |
my $f = exists $filter->{$column} |
... | ... |
@@ -2561,4 +2561,20 @@ $result = $model->select( |
2561 | 2561 |
is_deeply($result->one, |
2562 | 2562 |
{'table2.key1' => 1, 'table2.key3' => 3}); |
2563 | 2563 |
|
2564 |
+ |
|
2565 |
+test 'type_rule from'; |
|
2566 |
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
|
2567 |
+$dbi->type_rule( |
|
2568 |
+ Date => { |
|
2569 |
+ from => sub { uc $_[0] } |
|
2570 |
+ } |
|
2571 |
+); |
|
2572 |
+$dbi->execute("create table table1 (key1 Date, key2 datetime)"); |
|
2573 |
+$dbi->insert({key1 => 'a'}, table => 'table1'); |
|
2574 |
+$result = $dbi->select(table => 'table1'); |
|
2575 |
+is($result->fetch_first->[0], 'A'); |
|
2576 |
+ |
|
2577 |
+$result = $dbi->select(table => 'table1'); |
|
2578 |
+is($result->one->{key1}, 'A'); |
|
2579 |
+ |
|
2564 | 2580 |
=cut |