| ... | ... |
@@ -1,4 +1,5 @@ |
| 1 | 1 |
0.1694 |
| 2 |
+ - EXPERIMENTAL type_rule argument format is changed |
|
| 2 | 3 |
- DBIx::Custom::Result type_rule method on setting return self |
| 3 | 4 |
- reserved_word_quote is DEPRECATED! this is renamed to quote |
| 4 | 5 |
- DBIx::Custom::Model type attribute is DEPRECATED! |
| ... | ... |
@@ -20,7 +20,7 @@ use constant DEBUG => $ENV{DBIX_CUSTOM_DEBUG} || 0;
|
| 20 | 20 |
use constant DEBUG_ENCODING => $ENV{DBIX_CUSTOM_DEBUG_ENCODING} || 'UTF-8';
|
| 21 | 21 |
|
| 22 | 22 |
our @COMMON_ARGS = qw/bind_type table query filter id primary_key |
| 23 |
- type_rule_off type/; |
|
| 23 |
+ type_rule_off type_rule1_off type_rule2_off type/; |
|
| 24 | 24 |
|
| 25 | 25 |
has [qw/connector dsn password quote user/], |
| 26 | 26 |
cache => 0, |
| ... | ... |
@@ -362,6 +362,10 @@ sub execute {
|
| 362 | 362 |
my $bind_type = delete $args{bind_type} || delete $args{type};
|
| 363 | 363 |
$bind_type = _array_to_hash($bind_type); |
| 364 | 364 |
my $type_rule_off = delete $args{type_rule_off};
|
| 365 |
+ my $type_rule_off_parts = {
|
|
| 366 |
+ 1 => delete $args{type_rule1_off},
|
|
| 367 |
+ 2 => delete $args{type_rule2_off}
|
|
| 368 |
+ }; |
|
| 365 | 369 |
my $query_return = delete $args{query};
|
| 366 | 370 |
|
| 367 | 371 |
# Check argument names |
| ... | ... |
@@ -384,7 +388,7 @@ sub execute {
|
| 384 | 388 |
} |
| 385 | 389 |
|
| 386 | 390 |
# Type rule |
| 387 |
- my $type_filter = {};
|
|
| 391 |
+ my $type_filters = {};
|
|
| 388 | 392 |
unless ($type_rule_off) {
|
| 389 | 393 |
foreach my $name (keys %$param) {
|
| 390 | 394 |
my $table; |
| ... | ... |
@@ -395,12 +399,16 @@ sub execute {
|
| 395 | 399 |
} |
| 396 | 400 |
$table ||= $main_table; |
| 397 | 401 |
|
| 398 |
- my $into = $self->{_into} || {};
|
|
| 399 |
- if (defined $table && $into->{$table} &&
|
|
| 400 |
- (my $rule = $into->{$table}->{$column}))
|
|
| 401 |
- {
|
|
| 402 |
- $type_filter->{$column} = $rule;
|
|
| 403 |
- $type_filter->{"$table.$column"} = $rule;
|
|
| 402 |
+ foreach my $i (1 .. 2) {
|
|
| 403 |
+ unless ($type_rule_off_parts->{$i}) {
|
|
| 404 |
+ my $into = $self->{"_into$i"} || {};
|
|
| 405 |
+ if (defined $table && $into->{$table} &&
|
|
| 406 |
+ (my $rule = $into->{$table}->{$column}))
|
|
| 407 |
+ {
|
|
| 408 |
+ $type_filters->{$i}->{$column} = $rule;
|
|
| 409 |
+ $type_filters->{$i}->{"$table.$column"} = $rule;
|
|
| 410 |
+ } |
|
| 411 |
+ } |
|
| 404 | 412 |
} |
| 405 | 413 |
} |
| 406 | 414 |
} |
| ... | ... |
@@ -433,7 +441,7 @@ sub execute {
|
| 433 | 441 |
$param, |
| 434 | 442 |
$query->columns, |
| 435 | 443 |
$filter, |
| 436 |
- $type_filter, |
|
| 444 |
+ $type_filters, |
|
| 437 | 445 |
$bind_type |
| 438 | 446 |
); |
| 439 | 447 |
|
| ... | ... |
@@ -495,7 +503,10 @@ sub execute {
|
| 495 | 503 |
default_filter => $self->{default_in_filter},
|
| 496 | 504 |
filter => $filter->{in} || {},
|
| 497 | 505 |
end_filter => $filter->{end} || {},
|
| 498 |
- type_rule => \%{$self->type_rule->{from}},
|
|
| 506 |
+ type_rule => {
|
|
| 507 |
+ from1 => $self->type_rule->{from1},
|
|
| 508 |
+ from2 => $self->type_rule->{from2}
|
|
| 509 |
+ }, |
|
| 499 | 510 |
); |
| 500 | 511 |
|
| 501 | 512 |
return $result; |
| ... | ... |
@@ -960,46 +971,50 @@ sub type_rule {
|
| 960 | 971 |
my $type_rule = ref $_[0] eq 'HASH' ? $_[0] : {@_};
|
| 961 | 972 |
|
| 962 | 973 |
# Into |
| 963 |
- $type_rule->{into} = _array_to_hash($type_rule->{into});
|
|
| 964 |
- $self->{type_rule} = $type_rule;
|
|
| 965 |
- $self->{_into} = {};
|
|
| 966 |
- foreach my $type_name (keys %{$type_rule->{into} || {}}) {
|
|
| 967 |
- croak qq{type name of into section must be lower case}
|
|
| 968 |
- if $type_name =~ /[A-Z]/; |
|
| 969 |
- } |
|
| 970 |
- $self->each_column(sub {
|
|
| 971 |
- my ($dbi, $table, $column, $column_info) = @_; |
|
| 972 |
- |
|
| 973 |
- my $type_name = lc $column_info->{TYPE_NAME};
|
|
| 974 |
- if ($type_rule->{into} &&
|
|
| 975 |
- (my $filter = $type_rule->{into}->{$type_name}))
|
|
| 976 |
- {
|
|
| 977 |
- return unless exists $type_rule->{into}->{$type_name};
|
|
| 978 |
- if (defined $filter && ref $filter ne 'CODE') |
|
| 974 |
+ foreach my $i (1 .. 2) {
|
|
| 975 |
+ my $into = "into$i"; |
|
| 976 |
+ $type_rule->{$into} = _array_to_hash($type_rule->{$into});
|
|
| 977 |
+ $self->{type_rule} = $type_rule;
|
|
| 978 |
+ $self->{"_$into"} = {};
|
|
| 979 |
+ foreach my $type_name (keys %{$type_rule->{$into} || {}}) {
|
|
| 980 |
+ croak qq{type name of $into section must be lower case}
|
|
| 981 |
+ if $type_name =~ /[A-Z]/; |
|
| 982 |
+ } |
|
| 983 |
+ $self->each_column(sub {
|
|
| 984 |
+ my ($dbi, $table, $column, $column_info) = @_; |
|
| 985 |
+ |
|
| 986 |
+ my $type_name = lc $column_info->{TYPE_NAME};
|
|
| 987 |
+ if ($type_rule->{$into} &&
|
|
| 988 |
+ (my $filter = $type_rule->{$into}->{$type_name}))
|
|
| 979 | 989 |
{
|
| 980 |
- my $fname = $filter; |
|
| 990 |
+ return unless exists $type_rule->{$into}->{$type_name};
|
|
| 991 |
+ if (defined $filter && ref $filter ne 'CODE') |
|
| 992 |
+ {
|
|
| 993 |
+ my $fname = $filter; |
|
| 994 |
+ croak qq{Filter "$fname" is not registered" } . _subname
|
|
| 995 |
+ unless exists $self->filters->{$fname};
|
|
| 996 |
+ |
|
| 997 |
+ $filter = $self->filters->{$fname};
|
|
| 998 |
+ } |
|
| 999 |
+ |
|
| 1000 |
+ $self->{"_$into"}{$table}{$column} = $filter;
|
|
| 1001 |
+ } |
|
| 1002 |
+ }); |
|
| 1003 |
+ } |
|
| 1004 |
+ |
|
| 1005 |
+ # From |
|
| 1006 |
+ foreach my $i (1 .. 2) {
|
|
| 1007 |
+ $type_rule->{"from$i"} = _array_to_hash($type_rule->{"from$i"});
|
|
| 1008 |
+ foreach my $data_type (keys %{$type_rule->{"from$i"} || {}}) {
|
|
| 1009 |
+ croak qq{data type of from$i section must be lower case or number}
|
|
| 1010 |
+ if $data_type =~ /[A-Z]/; |
|
| 1011 |
+ my $fname = $type_rule->{"from$i"}{$data_type};
|
|
| 1012 |
+ if (defined $fname && ref $fname ne 'CODE') {
|
|
| 981 | 1013 |
croak qq{Filter "$fname" is not registered" } . _subname
|
| 982 | 1014 |
unless exists $self->filters->{$fname};
|
| 983 | 1015 |
|
| 984 |
- $filter = $self->filters->{$fname};
|
|
| 1016 |
+ $type_rule->{"from$i"}{$data_type} = $self->filters->{$fname};
|
|
| 985 | 1017 |
} |
| 986 |
- |
|
| 987 |
- $self->{_into}{$table}{$column} = $filter;
|
|
| 988 |
- } |
|
| 989 |
- }); |
|
| 990 |
- |
|
| 991 |
- |
|
| 992 |
- # From |
|
| 993 |
- $type_rule->{from} = _array_to_hash($type_rule->{from});
|
|
| 994 |
- foreach my $data_type (keys %{$type_rule->{from} || {}}) {
|
|
| 995 |
- croak qq{data type of into section must be lower case or number}
|
|
| 996 |
- if $data_type =~ /[A-Z]/; |
|
| 997 |
- my $fname = $type_rule->{from}{$data_type};
|
|
| 998 |
- if (defined $fname && ref $fname ne 'CODE') {
|
|
| 999 |
- croak qq{Filter "$fname" is not registered" } . _subname
|
|
| 1000 |
- unless exists $self->filters->{$fname};
|
|
| 1001 |
- |
|
| 1002 |
- $type_rule->{from}{$data_type} = $self->filters->{$fname};
|
|
| 1003 | 1018 |
} |
| 1004 | 1019 |
} |
| 1005 | 1020 |
|
| ... | ... |
@@ -1177,7 +1192,7 @@ sub _apply_filter {
|
| 1177 | 1192 |
} |
| 1178 | 1193 |
|
| 1179 | 1194 |
sub _create_bind_values {
|
| 1180 |
- my ($self, $params, $columns, $filter, $type_filter, $bind_type) = @_; |
|
| 1195 |
+ my ($self, $params, $columns, $filter, $type_filters, $bind_type) = @_; |
|
| 1181 | 1196 |
|
| 1182 | 1197 |
# Create bind values |
| 1183 | 1198 |
my $bind = []; |
| ... | ... |
@@ -1210,8 +1225,11 @@ sub _create_bind_values {
|
| 1210 | 1225 |
$value = $f->($value) if $f; |
| 1211 | 1226 |
|
| 1212 | 1227 |
# Type rule |
| 1213 |
- my $tf = $type_filter->{$column};
|
|
| 1214 |
- $value = $tf->($value) if $tf; |
|
| 1228 |
+ foreach my $i (1 .. 2) {
|
|
| 1229 |
+ my $type_filter = $type_filters->{$i};
|
|
| 1230 |
+ my $tf = $type_filter->{$column};
|
|
| 1231 |
+ $value = $tf->($value) if $tf; |
|
| 1232 |
+ } |
|
| 1215 | 1233 |
|
| 1216 | 1234 |
# Bind values |
| 1217 | 1235 |
push @$bind, {value => $value, bind_type => $bind_type->{$column}};
|
| ... | ... |
@@ -2104,7 +2122,19 @@ by C<insert()>, C<update()>, C<delete()>, C<select()>. |
| 2104 | 2122 |
|
| 2105 | 2123 |
type_rule_off => 1 |
| 2106 | 2124 |
|
| 2107 |
-Trun type rule off. |
|
| 2125 |
+Turn C<into1> and C<into2> type rule off. |
|
| 2126 |
+ |
|
| 2127 |
+=item C<type_rule1_off> EXPERIMENTAL |
|
| 2128 |
+ |
|
| 2129 |
+ type_rule1_off => 1 |
|
| 2130 |
+ |
|
| 2131 |
+Turn C<into1> type rule off. |
|
| 2132 |
+ |
|
| 2133 |
+=item C<type_rule2_off> EXPERIMENTAL |
|
| 2134 |
+ |
|
| 2135 |
+ type_rule2_off => 1 |
|
| 2136 |
+ |
|
| 2137 |
+Turn C<into2> type rule off. |
|
| 2108 | 2138 |
|
| 2109 | 2139 |
=back |
| 2110 | 2140 |
|
| ... | ... |
@@ -2168,6 +2198,18 @@ Same as C<execute> method's C<type> option. |
| 2168 | 2198 |
|
| 2169 | 2199 |
Same as C<execute> method's C<type_rule_off> option. |
| 2170 | 2200 |
|
| 2201 |
+=item C<type_rule1_off> EXPERIMENTAL |
|
| 2202 |
+ |
|
| 2203 |
+ type_rule1_off => 1 |
|
| 2204 |
+ |
|
| 2205 |
+Same as C<execute> method's C<type_rule1_off> option. |
|
| 2206 |
+ |
|
| 2207 |
+=item C<type_rule2_off> EXPERIMENTAL |
|
| 2208 |
+ |
|
| 2209 |
+ type_rule2_off => 1 |
|
| 2210 |
+ |
|
| 2211 |
+Same as C<execute> method's C<type_rule2_off> option. |
|
| 2212 |
+ |
|
| 2171 | 2213 |
=back |
| 2172 | 2214 |
|
| 2173 | 2215 |
=head2 C<delete_all> |
| ... | ... |
@@ -2253,6 +2295,18 @@ Same as C<execute> method's C<type> option. |
| 2253 | 2295 |
|
| 2254 | 2296 |
Same as C<execute> method's C<type_rule_off> option. |
| 2255 | 2297 |
|
| 2298 |
+=item C<type_rule1_off> EXPERIMENTAL |
|
| 2299 |
+ |
|
| 2300 |
+ type_rule1_off => 1 |
|
| 2301 |
+ |
|
| 2302 |
+Same as C<execute> method's C<type_rule1_off> option. |
|
| 2303 |
+ |
|
| 2304 |
+=item C<type_rule2_off> EXPERIMENTAL |
|
| 2305 |
+ |
|
| 2306 |
+ type_rule2_off => 1 |
|
| 2307 |
+ |
|
| 2308 |
+Same as C<execute> method's C<type_rule2_off> option. |
|
| 2309 |
+ |
|
| 2256 | 2310 |
=back |
| 2257 | 2311 |
|
| 2258 | 2312 |
=over 4 |
| ... | ... |
@@ -2401,14 +2455,23 @@ Register filters, used by C<filter> option of many methods. |
| 2401 | 2455 |
=head2 C<type_rule> EXPERIMENTAL |
| 2402 | 2456 |
|
| 2403 | 2457 |
$dbi->type_rule( |
| 2404 |
- into => {
|
|
| 2458 |
+ into1 => {
|
|
| 2405 | 2459 |
date => sub { ... },
|
| 2406 | 2460 |
datetime => sub { ... }
|
| 2407 | 2461 |
}, |
| 2408 |
- from => {
|
|
| 2462 |
+ into2 => {
|
|
| 2463 |
+ date => sub { ... },
|
|
| 2464 |
+ datetime => sub { ... }
|
|
| 2465 |
+ }, |
|
| 2466 |
+ from1 => {
|
|
| 2467 |
+ # DATE |
|
| 2468 |
+ 9 => sub { ... },
|
|
| 2469 |
+ # DATETIME or TIMESTAMP |
|
| 2470 |
+ 11 => sub { ... },
|
|
| 2471 |
+ } |
|
| 2472 |
+ from2 => {
|
|
| 2409 | 2473 |
# DATE |
| 2410 | 2474 |
9 => sub { ... },
|
| 2411 |
- |
|
| 2412 | 2475 |
# DATETIME or TIMESTAMP |
| 2413 | 2476 |
11 => sub { ... },
|
| 2414 | 2477 |
} |
| ... | ... |
@@ -2417,12 +2480,17 @@ Register filters, used by C<filter> option of many methods. |
| 2417 | 2480 |
Filtering rule when data is send into and get from database. |
| 2418 | 2481 |
This has a little complex problem. |
| 2419 | 2482 |
|
| 2420 |
-In C<into> you can specify type name as same as type name defined |
|
| 2483 |
+In C<into1> and C<into2> you can specify |
|
| 2484 |
+type name as same as type name defined |
|
| 2421 | 2485 |
by create table, such as C<DATETIME> or C<DATE>. |
| 2422 |
-Type rule of C<into> is enabled on the following pattern. |
|
| 2486 |
+ |
|
| 2487 |
+C<into2> is executed after C<into1>. |
|
| 2423 | 2488 |
|
| 2424 | 2489 |
Note that type name and data type don't contain upper case. |
| 2425 |
-If that contain upper case charactor, you specify it lower case. |
|
| 2490 |
+If these contain upper case charactor, you convert it to lower case. |
|
| 2491 |
+ |
|
| 2492 |
+Type rule of C<into1> and C<into2> is enabled on the following |
|
| 2493 |
+column name. |
|
| 2426 | 2494 |
|
| 2427 | 2495 |
=over 4 |
| 2428 | 2496 |
|
| ... | ... |
@@ -2442,33 +2510,18 @@ You get all type name used in database by C<available_type_name>. |
| 2442 | 2510 |
|
| 2443 | 2511 |
print $dbi->available_type_name; |
| 2444 | 2512 |
|
| 2445 |
-In C<from> you can't specify type name defined by create table. |
|
| 2446 |
-You must specify data type, this is internal one. |
|
| 2513 |
+In C<from1> and C<from2> you data type, not type name. |
|
| 2514 |
+C<from2> is executed after C<from1>. |
|
| 2447 | 2515 |
You get all data type by C<available_data_type>. |
| 2448 | 2516 |
|
| 2449 | 2517 |
print $dbi->available_data_type; |
| 2450 | 2518 |
|
| 2451 |
-Type rule of C<from> is enabled on the following pattern. |
|
| 2452 |
- |
|
| 2453 |
-=item 4. table name and column name, separator is hyphen |
|
| 2454 |
- |
|
| 2455 |
- book-issue_date |
|
| 2456 |
- book-issue_datetime |
|
| 2457 |
- |
|
| 2458 |
-This is useful in HTML. |
|
| 2459 |
- |
|
| 2460 |
-=back |
|
| 2461 |
- |
|
| 2462 |
-You can also specify multiple types |
|
| 2519 |
+You can also specify multiple types at once. |
|
| 2463 | 2520 |
|
| 2464 | 2521 |
$dbi->type_rule( |
| 2465 |
- into => [ |
|
| 2522 |
+ into1 => [ |
|
| 2466 | 2523 |
[qw/DATE DATETIME/] => sub { ... },
|
| 2467 | 2524 |
], |
| 2468 |
- from => {
|
|
| 2469 |
- # DATE |
|
| 2470 |
- [qw/9 11/] => sub { ... },
|
|
| 2471 |
- } |
|
| 2472 | 2525 |
); |
| 2473 | 2526 |
|
| 2474 | 2527 |
=head2 C<select> |
| ... | ... |
@@ -2624,6 +2677,18 @@ Table name. |
| 2624 | 2677 |
|
| 2625 | 2678 |
Same as C<execute> method's C<type_rule_off> option. |
| 2626 | 2679 |
|
| 2680 |
+=item C<type_rule1_off> EXPERIMENTAL |
|
| 2681 |
+ |
|
| 2682 |
+ type_rule1_off => 1 |
|
| 2683 |
+ |
|
| 2684 |
+Same as C<execute> method's C<type_rule1_off> option. |
|
| 2685 |
+ |
|
| 2686 |
+=item C<type_rule2_off> EXPERIMENTAL |
|
| 2687 |
+ |
|
| 2688 |
+ type_rule2_off => 1 |
|
| 2689 |
+ |
|
| 2690 |
+Same as C<execute> method's C<type_rule2_off> option. |
|
| 2691 |
+ |
|
| 2627 | 2692 |
=item C<where> |
| 2628 | 2693 |
|
| 2629 | 2694 |
# Hash refrence |
| ... | ... |
@@ -2729,7 +2794,19 @@ Same as C<execute> method's C<type> option. |
| 2729 | 2794 |
|
| 2730 | 2795 |
=item C<type_rule_off> EXPERIMENTAL |
| 2731 | 2796 |
|
| 2732 |
-Same as C<execute> method's <type_rule_off>. |
|
| 2797 |
+Same as C<execute> method's C<type_rule_off> option. |
|
| 2798 |
+ |
|
| 2799 |
+=item C<type_rule1_off> EXPERIMENTAL |
|
| 2800 |
+ |
|
| 2801 |
+ type_rule1_off => 1 |
|
| 2802 |
+ |
|
| 2803 |
+Same as C<execute> method's C<type_rule1_off> option. |
|
| 2804 |
+ |
|
| 2805 |
+=item C<type_rule2_off> EXPERIMENTAL |
|
| 2806 |
+ |
|
| 2807 |
+ type_rule2_off => 1 |
|
| 2808 |
+ |
|
| 2809 |
+Same as C<execute> method's C<type_rule2_off> option. |
|
| 2733 | 2810 |
|
| 2734 | 2811 |
=back |
| 2735 | 2812 |
|
| ... | ... |
@@ -4,7 +4,7 @@ use Object::Simple -base; |
| 4 | 4 |
use Carp 'croak'; |
| 5 | 5 |
use DBIx::Custom::Util qw/_array_to_hash _subname/; |
| 6 | 6 |
|
| 7 |
-has [qw/filters filter_off sth type_rule_off/]; |
|
| 7 |
+has [qw/filters filter_off sth type_rule_off type_rule1_off type_rule2_off/]; |
|
| 8 | 8 |
has stash => sub { {} };
|
| 9 | 9 |
|
| 10 | 10 |
*all = \&fetch_hash_all; |
| ... | ... |
@@ -49,7 +49,8 @@ sub fetch {
|
| 49 | 49 |
# Filtering |
| 50 | 50 |
my $columns = $self->{sth}->{NAME};
|
| 51 | 51 |
my $types = $self->{sth}->{TYPE};
|
| 52 |
- my $type_rule = $self->type_rule || {};
|
|
| 52 |
+ my $type_rule1 = $self->type_rule->{from1} || {};
|
|
| 53 |
+ my $type_rule2 = $self->type_rule->{from2} || {};
|
|
| 53 | 54 |
my $filter = $self->filter; |
| 54 | 55 |
my $end_filter = $self->end_filter; |
| 55 | 56 |
for (my $i = 0; $i < @$columns; $i++) {
|
| ... | ... |
@@ -58,9 +59,14 @@ sub fetch {
|
| 58 | 59 |
my $column = $columns->[$i]; |
| 59 | 60 |
|
| 60 | 61 |
# Type rule |
| 61 |
- my $type_filter = $type_rule->{lc($types->[$i])};
|
|
| 62 |
- $row[$i] = $type_filter->($row[$i]) |
|
| 63 |
- if $type_filter && !$self->{type_rule_off};
|
|
| 62 |
+ my $type_filter1 = $type_rule1->{lc($types->[$i])};
|
|
| 63 |
+ $row[$i] = $type_filter1->($row[$i]) |
|
| 64 |
+ if $type_filter1 && !$self->{type_rule_off}
|
|
| 65 |
+ && !$self->{type_rule1_off};
|
|
| 66 |
+ my $type_filter2 = $type_rule2->{lc($types->[$i])};
|
|
| 67 |
+ $row[$i] = $type_filter2->($row[$i]) |
|
| 68 |
+ if $type_filter2 && !$self->{type_rule_off}
|
|
| 69 |
+ && !$self->{type_rule2_off};
|
|
| 64 | 70 |
|
| 65 | 71 |
# Filter |
| 66 | 72 |
my $filter = $filter->{$column} || $self->{default_filter};
|
| ... | ... |
@@ -109,18 +115,23 @@ sub fetch_hash {
|
| 109 | 115 |
my $end_filter = $self->end_filter || {};
|
| 110 | 116 |
my $columns = $self->{sth}->{NAME};
|
| 111 | 117 |
my $types = $self->{sth}->{TYPE};
|
| 112 |
- my $type_rule = $self->type_rule || {};
|
|
| 118 |
+ my $type_rule1 = $self->type_rule->{from1} || {};
|
|
| 119 |
+ my $type_rule2 = $self->type_rule->{from2} || {};
|
|
| 113 | 120 |
for (my $i = 0; $i < @$columns; $i++) {
|
| 114 | 121 |
|
| 115 | 122 |
# Column |
| 116 | 123 |
my $column = $columns->[$i]; |
| 124 |
+ $hash_row->{$column} = $row->[$i];
|
|
| 117 | 125 |
|
| 118 | 126 |
# Type rule |
| 119 |
- my $type_filter = $type_rule->{lc($types->[$i])};
|
|
| 120 |
- if (!$self->{type_rule_off} && $type_filter) {
|
|
| 121 |
- $hash_row->{$column} = $type_filter->($row->[$i]);
|
|
| 122 |
- } |
|
| 123 |
- else { $hash_row->{$column} = $row->[$i] }
|
|
| 127 |
+ my $type_filter1 = $type_rule1->{lc($types->[$i])};
|
|
| 128 |
+ $hash_row->{$column} = $type_filter1->($hash_row->{$column})
|
|
| 129 |
+ if !$self->{type_rule_off} && !$self->{type_rule1_off}
|
|
| 130 |
+ && $type_filter1; |
|
| 131 |
+ my $type_filter2 = $type_rule2->{lc($types->[$i])};
|
|
| 132 |
+ $hash_row->{$column} = $type_filter2->($hash_row->{$column})
|
|
| 133 |
+ if !$self->{type_rule_off} && !$self->{type_rule2_off}
|
|
| 134 |
+ && $type_filter2; |
|
| 124 | 135 |
|
| 125 | 136 |
# Filter |
| 126 | 137 |
my $f = $filter->{$column} || $self->{default_filter};
|
| ... | ... |
@@ -197,31 +208,30 @@ sub fetch_multi {
|
| 197 | 208 |
sub type_rule {
|
| 198 | 209 |
my $self = shift; |
| 199 | 210 |
|
| 200 |
- # Merge type rule |
|
| 201 | 211 |
if (@_) {
|
| 202 |
- my $type_rule = @_ == 1 ? $_[0] : [@_]; |
|
| 203 |
- $type_rule = _array_to_hash($type_rule) || {};
|
|
| 204 |
- foreach my $data_type (keys %{$type_rule || {}}) {
|
|
| 205 |
- croak qq{data type of into section must be lower case or number}
|
|
| 206 |
- if $data_type =~ /[A-Z]/; |
|
| 207 |
- my $fname = $type_rule->{$data_type};
|
|
| 208 |
- if (defined $fname && ref $fname ne 'CODE') {
|
|
| 209 |
- croak qq{Filter "$fname" is not registered" } . _subname
|
|
| 210 |
- unless exists $self->filters->{$fname};
|
|
| 211 |
- |
|
| 212 |
- $type_rule->{$data_type} = $self->filters->{$fname};
|
|
| 212 |
+ my $type_rule = ref $_[0] eq 'HASH' ? $_[0] : {@_};
|
|
| 213 |
+ |
|
| 214 |
+ # From |
|
| 215 |
+ foreach my $i (1 .. 2) {
|
|
| 216 |
+ $type_rule->{"from$i"} = _array_to_hash($type_rule->{"from$i"});
|
|
| 217 |
+ foreach my $data_type (keys %{$type_rule->{"from$i"} || {}}) {
|
|
| 218 |
+ croak qq{data type of from$i section must be lower case or number}
|
|
| 219 |
+ if $data_type =~ /[A-Z]/; |
|
| 220 |
+ my $fname = $type_rule->{"from$i"}{$data_type};
|
|
| 221 |
+ if (defined $fname && ref $fname ne 'CODE') {
|
|
| 222 |
+ croak qq{Filter "$fname" is not registered" } . _subname
|
|
| 223 |
+ unless exists $self->filters->{$fname};
|
|
| 224 |
+ |
|
| 225 |
+ $type_rule->{"from$i"}{$data_type} = $self->filters->{$fname};
|
|
| 226 |
+ } |
|
| 213 | 227 |
} |
| 214 | 228 |
} |
| 215 |
- |
|
| 216 |
- # Replace |
|
| 217 |
- if (@_ == 1) { $self->{type_rule} = $type_rule }
|
|
| 218 |
- # Merge |
|
| 219 |
- else { $self->{type_rule} = {%{$self->type_rule}, %$type_rule} }
|
|
| 229 |
+ $self->{type_rule} = $type_rule;
|
|
| 220 | 230 |
|
| 221 | 231 |
return $self; |
| 222 | 232 |
} |
| 223 | 233 |
|
| 224 |
- return $self->{type_rule} ||= {};
|
|
| 234 |
+ return $self->{type_rule} || {};
|
|
| 225 | 235 |
} |
| 226 | 236 |
|
| 227 | 237 |
# DEPRECATED! |
| ... | ... |
@@ -355,7 +365,21 @@ Statement handle of L<DBI>. |
| 355 | 365 |
my $type_rule_off = $result->type_rule_off; |
| 356 | 366 |
$result = $result->type_rule_off(1); |
| 357 | 367 |
|
| 358 |
-Filtering by C<type_rule> is turned off. |
|
| 368 |
+Turn C<from1> and C<from2> type rule off. |
|
| 369 |
+ |
|
| 370 |
+=head2 C<type_rule1_off> EXPERIMENTAL |
|
| 371 |
+ |
|
| 372 |
+ my $type_rule1_off = $result->type_rule1_off; |
|
| 373 |
+ $result = $result->type_rule1_off(1); |
|
| 374 |
+ |
|
| 375 |
+Turn C<from1> type rule off. |
|
| 376 |
+ |
|
| 377 |
+=head2 C<type_rule2_off> EXPERIMENTAL |
|
| 378 |
+ |
|
| 379 |
+ my $type_rule2_off = $result->type_rule2_off; |
|
| 380 |
+ $result = $result->type_rule2_off(1); |
|
| 381 |
+ |
|
| 382 |
+Turn C<from2> type rule off. |
|
| 359 | 383 |
|
| 360 | 384 |
=head1 METHODS |
| 361 | 385 |
|
| ... | ... |
@@ -2648,7 +2648,7 @@ is_deeply($result->one, |
| 2648 | 2648 |
test 'type_rule from'; |
| 2649 | 2649 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2650 | 2650 |
$dbi->type_rule( |
| 2651 |
- from => {
|
|
| 2651 |
+ from1 => {
|
|
| 2652 | 2652 |
date => sub { uc $_[0] }
|
| 2653 | 2653 |
} |
| 2654 | 2654 |
); |
| ... | ... |
@@ -2665,7 +2665,7 @@ test 'type_rule into'; |
| 2665 | 2665 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2666 | 2666 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2667 | 2667 |
$dbi->type_rule( |
| 2668 |
- into => {
|
|
| 2668 |
+ into1 => {
|
|
| 2669 | 2669 |
date => sub { uc $_[0] }
|
| 2670 | 2670 |
} |
| 2671 | 2671 |
); |
| ... | ... |
@@ -2676,7 +2676,7 @@ is($result->one->{key1}, 'A');
|
| 2676 | 2676 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2677 | 2677 |
$dbi->execute("create table table1 (key1 date, key2 datetime)");
|
| 2678 | 2678 |
$dbi->type_rule( |
| 2679 |
- into => [ |
|
| 2679 |
+ into1 => [ |
|
| 2680 | 2680 |
[qw/date datetime/] => sub { uc $_[0] }
|
| 2681 | 2681 |
] |
| 2682 | 2682 |
); |
| ... | ... |
@@ -2690,7 +2690,7 @@ $dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2690 | 2690 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2691 | 2691 |
$dbi->insert({key1 => 'a', key2 => 'B'}, table => 'table1');
|
| 2692 | 2692 |
$dbi->type_rule( |
| 2693 |
- into => [ |
|
| 2693 |
+ into1 => [ |
|
| 2694 | 2694 |
[qw/date datetime/] => sub { uc $_[0] }
|
| 2695 | 2695 |
] |
| 2696 | 2696 |
); |
| ... | ... |
@@ -2706,7 +2706,7 @@ $dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2706 | 2706 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2707 | 2707 |
$dbi->insert({key1 => 'A', key2 => 'B'}, table => 'table1');
|
| 2708 | 2708 |
$dbi->type_rule( |
| 2709 |
- into => [ |
|
| 2709 |
+ into1 => [ |
|
| 2710 | 2710 |
[qw/date datetime/] => sub { uc $_[0] }
|
| 2711 | 2711 |
] |
| 2712 | 2712 |
); |
| ... | ... |
@@ -2723,10 +2723,10 @@ $dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2723 | 2723 |
$dbi->execute("create table table1 (key1 date, key2 datetime)");
|
| 2724 | 2724 |
$dbi->register_filter(twice => sub { $_[0] * 2 });
|
| 2725 | 2725 |
$dbi->type_rule( |
| 2726 |
- from => {
|
|
| 2726 |
+ from1 => {
|
|
| 2727 | 2727 |
date => 'twice', |
| 2728 | 2728 |
}, |
| 2729 |
- into => {
|
|
| 2729 |
+ into1 => {
|
|
| 2730 | 2730 |
date => 'twice', |
| 2731 | 2731 |
} |
| 2732 | 2732 |
); |
| ... | ... |
@@ -2738,26 +2738,55 @@ test 'type_rule and filter order'; |
| 2738 | 2738 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2739 | 2739 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2740 | 2740 |
$dbi->type_rule( |
| 2741 |
- into => {
|
|
| 2741 |
+ into1 => {
|
|
| 2742 | 2742 |
date => sub { $_[0] . 'b' }
|
| 2743 | 2743 |
}, |
| 2744 |
- from => {
|
|
| 2744 |
+ into2 => {
|
|
| 2745 | 2745 |
date => sub { $_[0] . 'c' }
|
| 2746 |
+ }, |
|
| 2747 |
+ from1 => {
|
|
| 2748 |
+ date => sub { $_[0] . 'd' }
|
|
| 2749 |
+ }, |
|
| 2750 |
+ from2 => {
|
|
| 2751 |
+ date => sub { $_[0] . 'e' }
|
|
| 2746 | 2752 |
} |
| 2747 | 2753 |
); |
| 2748 | 2754 |
$dbi->insert({key1 => '1'}, table => 'table1', filter => {key1 => sub { $_[0] . 'a' }});
|
| 2749 | 2755 |
$result = $dbi->select(table => 'table1'); |
| 2750 |
-$result->filter(key1 => sub { $_[0] . 'd' });
|
|
| 2751 |
-is($result->fetch_first->[0], '1abcd'); |
|
| 2756 |
+$result->filter(key1 => sub { $_[0] . 'f' });
|
|
| 2757 |
+is($result->fetch_first->[0], '1abcdef'); |
|
| 2758 |
+ |
|
| 2759 |
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
|
| 2760 |
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
| 2761 |
+$dbi->type_rule( |
|
| 2762 |
+ from1 => {
|
|
| 2763 |
+ date => sub { $_[0] . 'p' }
|
|
| 2764 |
+ }, |
|
| 2765 |
+ from2 => {
|
|
| 2766 |
+ date => sub { $_[0] . 'q' }
|
|
| 2767 |
+ }, |
|
| 2768 |
+); |
|
| 2769 |
+$dbi->insert({key1 => '1'}, table => 'table1');
|
|
| 2770 |
+$result = $dbi->select(table => 'table1'); |
|
| 2771 |
+$result->type_rule( |
|
| 2772 |
+ from1 => {
|
|
| 2773 |
+ date => sub { $_[0] . 'd' }
|
|
| 2774 |
+ }, |
|
| 2775 |
+ from2 => {
|
|
| 2776 |
+ date => sub { $_[0] . 'e' }
|
|
| 2777 |
+ } |
|
| 2778 |
+); |
|
| 2779 |
+$result->filter(key1 => sub { $_[0] . 'f' });
|
|
| 2780 |
+is($result->fetch_first->[0], '1def'); |
|
| 2752 | 2781 |
|
| 2753 | 2782 |
test 'type_rule_off'; |
| 2754 | 2783 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2755 | 2784 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2756 | 2785 |
$dbi->type_rule( |
| 2757 |
- from => {
|
|
| 2786 |
+ from1 => {
|
|
| 2758 | 2787 |
date => sub { $_[0] * 2 },
|
| 2759 | 2788 |
}, |
| 2760 |
- into => {
|
|
| 2789 |
+ into1 => {
|
|
| 2761 | 2790 |
date => sub { $_[0] * 2 },
|
| 2762 | 2791 |
} |
| 2763 | 2792 |
); |
| ... | ... |
@@ -2768,10 +2797,10 @@ is($result->type_rule_off(1)->fetch->[0], 2); |
| 2768 | 2797 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2769 | 2798 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2770 | 2799 |
$dbi->type_rule( |
| 2771 |
- from => {
|
|
| 2800 |
+ from1 => {
|
|
| 2772 | 2801 |
date => sub { $_[0] * 2 },
|
| 2773 | 2802 |
}, |
| 2774 |
- into => {
|
|
| 2803 |
+ into1 => {
|
|
| 2775 | 2804 |
date => sub { $_[0] * 3 },
|
| 2776 | 2805 |
} |
| 2777 | 2806 |
); |
| ... | ... |
@@ -2782,10 +2811,10 @@ is($result->one->{key1}, 4);
|
| 2782 | 2811 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2783 | 2812 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2784 | 2813 |
$dbi->type_rule( |
| 2785 |
- from => {
|
|
| 2814 |
+ from1 => {
|
|
| 2786 | 2815 |
date => sub { $_[0] * 2 },
|
| 2787 | 2816 |
}, |
| 2788 |
- into => {
|
|
| 2817 |
+ into1 => {
|
|
| 2789 | 2818 |
date => sub { $_[0] * 3 },
|
| 2790 | 2819 |
} |
| 2791 | 2820 |
); |
| ... | ... |
@@ -2796,10 +2825,10 @@ is($result->one->{key1}, 12);
|
| 2796 | 2825 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2797 | 2826 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2798 | 2827 |
$dbi->type_rule( |
| 2799 |
- from => {
|
|
| 2828 |
+ from1 => {
|
|
| 2800 | 2829 |
date => sub { $_[0] * 2 },
|
| 2801 | 2830 |
}, |
| 2802 |
- into => {
|
|
| 2831 |
+ into1 => {
|
|
| 2803 | 2832 |
date => sub { $_[0] * 3 },
|
| 2804 | 2833 |
} |
| 2805 | 2834 |
); |
| ... | ... |
@@ -2811,7 +2840,7 @@ $dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2811 | 2840 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2812 | 2841 |
$dbi->register_filter(ppp => sub { uc $_[0] });
|
| 2813 | 2842 |
$dbi->type_rule( |
| 2814 |
- into => {
|
|
| 2843 |
+ into1 => {
|
|
| 2815 | 2844 |
date => 'ppp' |
| 2816 | 2845 |
} |
| 2817 | 2846 |
); |
| ... | ... |
@@ -2820,32 +2849,17 @@ $result = $dbi->select(table => 'table1'); |
| 2820 | 2849 |
is($result->one->{key1}, 'A');
|
| 2821 | 2850 |
|
| 2822 | 2851 |
eval{$dbi->type_rule(
|
| 2823 |
- into => {
|
|
| 2852 |
+ into1 => {
|
|
| 2824 | 2853 |
date => 'pp' |
| 2825 | 2854 |
} |
| 2826 | 2855 |
)}; |
| 2827 | 2856 |
like($@, qr/not registered/); |
| 2828 | 2857 |
|
| 2829 |
-$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
|
| 2830 |
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
| 2831 |
-$dbi->type_rule( |
|
| 2832 |
- from => {
|
|
| 2833 |
- date => sub { $_[0] * 2 },
|
|
| 2834 |
- }, |
|
| 2835 |
- into => {
|
|
| 2836 |
- date => sub { $_[0] * 3 },
|
|
| 2837 |
- } |
|
| 2838 |
-); |
|
| 2839 |
-$dbi->insert({key1 => 2}, table => 'table1');
|
|
| 2840 |
-$result = $dbi->select(table => 'table1'); |
|
| 2841 |
-delete $result->type_rule->{date};
|
|
| 2842 |
-is($result->one->{key1}, 6);
|
|
| 2843 |
- |
|
| 2844 | 2858 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2845 | 2859 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2846 | 2860 |
eval {
|
| 2847 | 2861 |
$dbi->type_rule( |
| 2848 |
- from => {
|
|
| 2862 |
+ from1 => {
|
|
| 2849 | 2863 |
Date => sub { $_[0] * 2 },
|
| 2850 | 2864 |
} |
| 2851 | 2865 |
); |
| ... | ... |
@@ -2854,7 +2868,7 @@ like($@, qr/lower/); |
| 2854 | 2868 |
|
| 2855 | 2869 |
eval {
|
| 2856 | 2870 |
$dbi->type_rule( |
| 2857 |
- into => {
|
|
| 2871 |
+ into1 => {
|
|
| 2858 | 2872 |
Date => sub { $_[0] * 2 },
|
| 2859 | 2873 |
} |
| 2860 | 2874 |
); |
| ... | ... |
@@ -2864,10 +2878,10 @@ like($@, qr/lower/); |
| 2864 | 2878 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2865 | 2879 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2866 | 2880 |
$dbi->type_rule( |
| 2867 |
- from => {
|
|
| 2881 |
+ from1 => {
|
|
| 2868 | 2882 |
date => sub { $_[0] * 2 },
|
| 2869 | 2883 |
}, |
| 2870 |
- into => {
|
|
| 2884 |
+ into1 => {
|
|
| 2871 | 2885 |
date => sub { $_[0] * 3 },
|
| 2872 | 2886 |
} |
| 2873 | 2887 |
); |
| ... | ... |
@@ -2879,48 +2893,68 @@ is($result->one->{key1}, 6);
|
| 2879 | 2893 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2880 | 2894 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2881 | 2895 |
$dbi->type_rule( |
| 2882 |
- from => {
|
|
| 2896 |
+ from1 => {
|
|
| 2883 | 2897 |
date => sub { $_[0] * 2 },
|
| 2884 | 2898 |
datetime => sub { $_[0] * 4 },
|
| 2885 | 2899 |
}, |
| 2886 | 2900 |
); |
| 2887 | 2901 |
$dbi->insert({key1 => 2, key2 => 2}, table => 'table1');
|
| 2888 | 2902 |
$result = $dbi->select(table => 'table1'); |
| 2889 |
-$result->type_rule(date => sub { $_[0] * 3 });
|
|
| 2903 |
+$result->type_rule( |
|
| 2904 |
+ from1 => {
|
|
| 2905 |
+ date => sub { $_[0] * 3 }
|
|
| 2906 |
+ } |
|
| 2907 |
+); |
|
| 2890 | 2908 |
$row = $result->one; |
| 2891 | 2909 |
is($row->{key1}, 6);
|
| 2892 |
-is($row->{key2}, 8);
|
|
| 2910 |
+is($row->{key2}, 2);
|
|
| 2911 |
+ |
|
| 2893 | 2912 |
$result = $dbi->select(table => 'table1'); |
| 2894 |
-$result->type_rule(date => sub { $_[0] * 3 });
|
|
| 2913 |
+$result->type_rule( |
|
| 2914 |
+ from1 => {
|
|
| 2915 |
+ date => sub { $_[0] * 3 }
|
|
| 2916 |
+ } |
|
| 2917 |
+); |
|
| 2895 | 2918 |
$row = $result->one; |
| 2896 | 2919 |
is($row->{key1}, 6);
|
| 2897 |
-is($row->{key2}, 8);
|
|
| 2920 |
+is($row->{key2}, 2);
|
|
| 2921 |
+ |
|
| 2898 | 2922 |
$result = $dbi->select(table => 'table1'); |
| 2899 |
-$result->type_rule({date => sub { $_[0] * 3 }});
|
|
| 2923 |
+$result->type_rule( |
|
| 2924 |
+ from1 => {
|
|
| 2925 |
+ date => sub { $_[0] * 3 }
|
|
| 2926 |
+ } |
|
| 2927 |
+); |
|
| 2900 | 2928 |
$row = $result->one; |
| 2901 | 2929 |
is($row->{key1}, 6);
|
| 2902 | 2930 |
is($row->{key2}, 2);
|
| 2903 | 2931 |
$result = $dbi->select(table => 'table1'); |
| 2904 |
-$result->type_rule([date => sub { $_[0] * 3 }]);
|
|
| 2932 |
+$result->type_rule( |
|
| 2933 |
+ from1 => [date => sub { $_[0] * 3 }]
|
|
| 2934 |
+); |
|
| 2905 | 2935 |
$row = $result->one; |
| 2906 | 2936 |
is($row->{key1}, 6);
|
| 2907 | 2937 |
is($row->{key2}, 2);
|
| 2908 | 2938 |
$dbi->register_filter(fivetimes => sub { $_[0] * 5});
|
| 2909 | 2939 |
$result = $dbi->select(table => 'table1'); |
| 2910 |
-$result->type_rule(date => 'fivetimes'); |
|
| 2940 |
+$result->type_rule( |
|
| 2941 |
+ from1 => [date => 'fivetimes'] |
|
| 2942 |
+); |
|
| 2911 | 2943 |
$row = $result->one; |
| 2912 | 2944 |
is($row->{key1}, 10);
|
| 2913 |
-is($row->{key2}, 8);
|
|
| 2945 |
+is($row->{key2}, 2);
|
|
| 2914 | 2946 |
$result = $dbi->select(table => 'table1'); |
| 2915 |
-$result->type_rule(date => undef); |
|
| 2947 |
+$result->type_rule( |
|
| 2948 |
+ from1 => [date => undef] |
|
| 2949 |
+); |
|
| 2916 | 2950 |
$row = $result->one; |
| 2917 | 2951 |
is($row->{key1}, 2);
|
| 2918 |
-is($row->{key2}, 8);
|
|
| 2952 |
+is($row->{key2}, 2);
|
|
| 2919 | 2953 |
|
| 2920 | 2954 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2921 | 2955 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2922 | 2956 |
$dbi->type_rule( |
| 2923 |
- from => {
|
|
| 2957 |
+ from1 => {
|
|
| 2924 | 2958 |
date => sub { $_[0] * 2 },
|
| 2925 | 2959 |
}, |
| 2926 | 2960 |
); |
| ... | ... |
@@ -2932,7 +2966,7 @@ is($result->one->{key1}, 12);
|
| 2932 | 2966 |
$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 2933 | 2967 |
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
| 2934 | 2968 |
$dbi->type_rule( |
| 2935 |
- from => {
|
|
| 2969 |
+ from1 => {
|
|
| 2936 | 2970 |
date => sub { $_[0] * 2 },
|
| 2937 | 2971 |
}, |
| 2938 | 2972 |
); |
| ... | ... |
@@ -2941,6 +2975,69 @@ $result = $dbi->select(table => 'table1'); |
| 2941 | 2975 |
$result->filter(key1 => sub { $_[0] * 3 });
|
| 2942 | 2976 |
is($result->fetch->[0], 12); |
| 2943 | 2977 |
|
| 2978 |
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
|
| 2979 |
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
| 2980 |
+$dbi->type_rule( |
|
| 2981 |
+ into1 => {
|
|
| 2982 |
+ date => sub { $_[0] . 'b' }
|
|
| 2983 |
+ }, |
|
| 2984 |
+ into2 => {
|
|
| 2985 |
+ date => sub { $_[0] . 'c' }
|
|
| 2986 |
+ }, |
|
| 2987 |
+ from1 => {
|
|
| 2988 |
+ date => sub { $_[0] . 'd' }
|
|
| 2989 |
+ }, |
|
| 2990 |
+ from2 => {
|
|
| 2991 |
+ date => sub { $_[0] . 'e' }
|
|
| 2992 |
+ } |
|
| 2993 |
+); |
|
| 2994 |
+$dbi->insert({key1 => '1'}, table => 'table1', type_rule_off => 1);
|
|
| 2995 |
+$result = $dbi->select(table => 'table1'); |
|
| 2996 |
+$result->type_rule_off(1); |
|
| 2997 |
+is($result->fetch_first->[0], '1'); |
|
| 2998 |
+ |
|
| 2999 |
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
|
| 3000 |
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
| 3001 |
+$dbi->type_rule( |
|
| 3002 |
+ into1 => {
|
|
| 3003 |
+ date => sub { $_[0] . 'b' }
|
|
| 3004 |
+ }, |
|
| 3005 |
+ into2 => {
|
|
| 3006 |
+ date => sub { $_[0] . 'c' }
|
|
| 3007 |
+ }, |
|
| 3008 |
+ from1 => {
|
|
| 3009 |
+ date => sub { $_[0] . 'd' }
|
|
| 3010 |
+ }, |
|
| 3011 |
+ from2 => {
|
|
| 3012 |
+ date => sub { $_[0] . 'e' }
|
|
| 3013 |
+ } |
|
| 3014 |
+); |
|
| 3015 |
+$dbi->insert({key1 => '1'}, table => 'table1', type_rule1_off => 1);
|
|
| 3016 |
+$result = $dbi->select(table => 'table1'); |
|
| 3017 |
+$result->type_rule1_off(1); |
|
| 3018 |
+is($result->fetch_first->[0], '1ce'); |
|
| 3019 |
+ |
|
| 3020 |
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
|
| 3021 |
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
| 3022 |
+$dbi->type_rule( |
|
| 3023 |
+ into1 => {
|
|
| 3024 |
+ date => sub { $_[0] . 'b' }
|
|
| 3025 |
+ }, |
|
| 3026 |
+ into2 => {
|
|
| 3027 |
+ date => sub { $_[0] . 'c' }
|
|
| 3028 |
+ }, |
|
| 3029 |
+ from1 => {
|
|
| 3030 |
+ date => sub { $_[0] . 'd' }
|
|
| 3031 |
+ }, |
|
| 3032 |
+ from2 => {
|
|
| 3033 |
+ date => sub { $_[0] . 'e' }
|
|
| 3034 |
+ } |
|
| 3035 |
+); |
|
| 3036 |
+$dbi->insert({key1 => '1'}, table => 'table1', type_rule2_off => 1);
|
|
| 3037 |
+$result = $dbi->select(table => 'table1'); |
|
| 3038 |
+$result->type_rule2_off(1); |
|
| 3039 |
+is($result->fetch_first->[0], '1bd'); |
|
| 3040 |
+ |
|
| 2944 | 3041 |
test 'separator'; |
| 2945 | 3042 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| 2946 | 3043 |
$dbi->execute($CREATE_TABLE->{0});
|
| ... | ... |
@@ -141,7 +141,7 @@ $dbi->each_column( |
| 141 | 141 |
); |
| 142 | 142 |
|
| 143 | 143 |
$dbi->type_rule( |
| 144 |
- into => {
|
|
| 144 |
+ into1 => {
|
|
| 145 | 145 |
date=> sub {
|
| 146 | 146 |
my $date = shift; |
| 147 | 147 |
$date =~ s/aaaaa//g; |
| ... | ... |
@@ -153,7 +153,7 @@ $dbi->type_rule( |
| 153 | 153 |
return $date; |
| 154 | 154 |
}, |
| 155 | 155 |
}, |
| 156 |
- from => {
|
|
| 156 |
+ from1 => {
|
|
| 157 | 157 |
# DATE |
| 158 | 158 |
9 => sub {
|
| 159 | 159 |
my $date = shift; |