... | ... |
@@ -1,6 +1,6 @@ |
1 | 1 |
0.1629 |
2 |
- renamed auto_filter to filter |
|
3 |
- changed filter method arguments |
|
2 |
+ renamed auto_filter to apply_filter |
|
3 |
+ changed apply_filter method arguments |
|
4 | 4 |
deprecated cache_method |
5 | 5 |
0.1628 |
6 | 6 |
remove DBIx::Custom::Model |
... | ... |
@@ -66,35 +66,37 @@ sub apply_filter { |
66 | 66 |
|
67 | 67 |
$self->{filter} ||= {}; |
68 | 68 |
|
69 |
- # Table |
|
70 |
- my $table = shift; |
|
69 |
+ # Table and column informations |
|
70 |
+ my ($table, @cs) = @_; |
|
71 | 71 |
|
72 |
- if (@_) { |
|
73 |
- # Column infomations |
|
74 |
- my @cs = @_; |
|
72 |
+ if (@cs) { |
|
75 | 73 |
|
76 | 74 |
# Initialize filters |
77 | 75 |
$self->{filter}{out} ||= {}; |
78 | 76 |
$self->{filter}{in} ||= {}; |
79 | 77 |
|
80 |
- # Create auto filters |
|
81 |
- foreach my $c (@cs) { |
|
82 |
- croak "Usage \$dbi->apply_filter(" . |
|
83 |
- "TABLE, COLUMN, {in => INFILTER, out => OUTFILTER}, ...)" |
|
84 |
- unless ref $c eq 'ARRAY' && @$c == 3; |
|
78 |
+ # Create filters |
|
79 |
+ for (my $i = 0; $i < @cs; $i += 2) { |
|
85 | 80 |
|
86 | 81 |
# Column |
87 |
- my $column = $c->[0]; |
|
82 |
+ my $column = $cs[$i]; |
|
83 |
+ |
|
84 |
+ # Filter |
|
85 |
+ my $filter = $cs[$i + 1] || {}; |
|
86 |
+ my $in_filter = delete $filter->{in}; |
|
87 |
+ my $out_filter = delete $filter->{out}; |
|
88 |
+ croak "Usage \$dbi->apply_filter(" . |
|
89 |
+ "TABLE, COLUMN, {in => INFILTER, out => OUTFILTER}, ...)" |
|
90 |
+ if ref $filter ne 'HASH' || keys %$filter; |
|
88 | 91 |
|
89 |
- # Bind filter |
|
90 |
- my $out_filter = $c->[1]; |
|
92 |
+ # Out filter |
|
91 | 93 |
if (ref $out_filter eq 'CODE') { |
92 | 94 |
$self->{filter}{out}{$table}{$column} |
93 | 95 |
= $out_filter; |
94 | 96 |
$self->{filter}{out}{$table}{"$table.$column"} |
95 | 97 |
= $out_filter; |
96 | 98 |
} |
97 |
- else { |
|
99 |
+ elsif (defined $out_filter) { |
|
98 | 100 |
croak qq{"$out_filter" is not registered} |
99 | 101 |
unless exists $self->filters->{$out_filter}; |
100 | 102 |
|
... | ... |
@@ -102,17 +104,16 @@ sub apply_filter { |
102 | 104 |
= $self->filters->{$out_filter}; |
103 | 105 |
$self->{filter}{out}{$table}{"$table.$column"} |
104 | 106 |
= $self->filters->{$out_filter}; |
105 |
- } |
|
107 |
+ } |
|
106 | 108 |
|
107 |
- # Fetch filter |
|
108 |
- my $in_filter = $c->[2]; |
|
109 |
+ # In filter |
|
109 | 110 |
if (ref $in_filter eq 'CODE') { |
110 | 111 |
$self->{filter}{in}{$table}{$column} |
111 | 112 |
= $in_filter; |
112 | 113 |
$self->{filter}{in}{$table}{"$table.$column"} |
113 | 114 |
= $in_filter; |
114 | 115 |
} |
115 |
- else { |
|
116 |
+ elsif (defined $in_filter) { |
|
116 | 117 |
croak qq{"$in_filter" is not registered} |
117 | 118 |
unless exists $self->filters->{$in_filter}; |
118 | 119 |
$self->{filter}{in}{$table}{$column} |
... | ... |
@@ -549,23 +549,27 @@ is($dbi->twice(5), 10 , "$test : second"); |
549 | 549 |
eval {$dbi->XXXXXX}; |
550 | 550 |
like($@, qr/\QCan't locate object method "XXXXXX" via "DBIx::Custom"/, "$test : not exists"); |
551 | 551 |
|
552 |
-test 'auto bind filter'; |
|
552 |
+test 'out filter'; |
|
553 | 553 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
554 | 554 |
$dbi->execute($CREATE_TABLE->{0}); |
555 | 555 |
$dbi->register_filter(twice => sub { $_[0] * 2 }); |
556 | 556 |
$dbi->register_filter(three_times => sub { $_[0] * 3}); |
557 | 557 |
$dbi->apply_filter( |
558 |
- 'table1', ['key1', 'twice', 'twice'], ['key2', 'three_times', 'three_times']); |
|
558 |
+ 'table1', 'key1' => {out => 'twice', in => 'three_times'}, |
|
559 |
+ 'key2' => {out => 'three_times', in => 'twice'}); |
|
559 | 560 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}); |
560 | 561 |
$result = $dbi->execute($SELECT_SOURCES->{0}); |
561 | 562 |
$row = $result->fetch_hash_first; |
562 | 563 |
is_deeply($row, {key1 => 2, key2 => 6}, "$test : insert"); |
564 |
+$result = $dbi->select(table => 'table1'); |
|
565 |
+$row = $result->fetch_hash_first; |
|
566 |
+is_deeply($row, {key1 => 6, key2 => 12}, "$test : insert"); |
|
563 | 567 |
|
564 | 568 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
565 | 569 |
$dbi->execute($CREATE_TABLE->{0}); |
566 | 570 |
$dbi->register_filter(twice => sub { $_[0] * 2 }); |
567 | 571 |
$dbi->apply_filter( |
568 |
- 'table1', ['key1', 'twice', 'twice'] |
|
572 |
+ 'table1', 'key1' => {out => 'twice', in => 'twice'} |
|
569 | 573 |
); |
570 | 574 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}, filter => {key1 => undef}); |
571 | 575 |
$dbi->update(table => 'table1', param => {key1 => 2}, where => {key2 => 2}); |
... | ... |
@@ -577,7 +581,7 @@ $dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
577 | 581 |
$dbi->execute($CREATE_TABLE->{0}); |
578 | 582 |
$dbi->register_filter(twice => sub { $_[0] * 2 }); |
579 | 583 |
$dbi->apply_filter( |
580 |
- 'table1', ['key1', 'twice', 'twice'] |
|
584 |
+ 'table1', 'key1' => {out => 'twice', in => 'twice'} |
|
581 | 585 |
); |
582 | 586 |
$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 2}, filter => {key1=> undef}); |
583 | 587 |
$dbi->delete(table => 'table1', where => {key1 => 1}); |
... | ... |
@@ -589,7 +593,7 @@ $dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
589 | 593 |
$dbi->execute($CREATE_TABLE->{0}); |
590 | 594 |
$dbi->register_filter(twice => sub { $_[0] * 2 }); |
591 | 595 |
$dbi->apply_filter( |
592 |
- 'table1', ['key1', 'twice', 'twice'] |
|
596 |
+ 'table1', 'key1' => {out => 'twice', in => 'twice'} |
|
593 | 597 |
); |
594 | 598 |
$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 2}, filter => {key1 => undef}); |
595 | 599 |
$result = $dbi->select(table => 'table1', where => {key1 => 1}); |
... | ... |
@@ -601,7 +605,7 @@ $dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
601 | 605 |
$dbi->execute($CREATE_TABLE->{0}); |
602 | 606 |
$dbi->register_filter(twice => sub { $_[0] * 2 }); |
603 | 607 |
$dbi->apply_filter( |
604 |
- 'table1', ['key1', 'twice', 'twice'] |
|
608 |
+ 'table1', 'key1' => {out => 'twice', in => 'twice'} |
|
605 | 609 |
); |
606 | 610 |
$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 2}, filter => {key1 => undef}); |
607 | 611 |
$result = $dbi->execute("select * from table1 where {= key1} and {= key2};", |
... | ... |
@@ -616,10 +620,10 @@ $dbi->execute($CREATE_TABLE->{2}); |
616 | 620 |
$dbi->register_filter(twice => sub { $_[0] * 2 }); |
617 | 621 |
$dbi->register_filter(three_times => sub { $_[0] * 3 }); |
618 | 622 |
$dbi->apply_filter( |
619 |
- 'table1', ['key2', 'twice', 'twice'] |
|
623 |
+ 'table1', 'key2' => {out => 'twice', in => 'twice'} |
|
620 | 624 |
); |
621 | 625 |
$dbi->apply_filter( |
622 |
- 'table2', ['key3', 'three_times', 'three_times'] |
|
626 |
+ 'table2', 'key3' => {out => 'three_times', in => 'three_times'} |
|
623 | 627 |
); |
624 | 628 |
$dbi->insert(table => 'table1', param => {key1 => 5, key2 => 2}, filter => {key2 => undef}); |
625 | 629 |
$dbi->insert(table => 'table2', param => {key1 => 5, key3 => 6}, filter => {key3 => undef}); |
... | ... |
@@ -641,7 +645,7 @@ $result->filter({'key2' => 'twice'}); |
641 | 645 |
$rows = $result->fetch_hash_all; |
642 | 646 |
is_deeply($rows, [{key2 => 4, key3 => 18}], "$test : select : join : omit"); |
643 | 647 |
|
644 |
-test 'apply_filter_easy_build'; |
|
648 |
+test 'iterate_all_columns'; |
|
645 | 649 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
646 | 650 |
$dbi->execute($CREATE_TABLE->{2}); |
647 | 651 |
$dbi->execute($CREATE_TABLE->{3}); |