... | ... |
@@ -77,62 +77,68 @@ sub AUTOLOAD { |
77 | 77 |
sub auto_filter { |
78 | 78 |
my $self = shift; |
79 | 79 |
|
80 |
+ $self->{auto_filter} ||= {}; |
|
81 |
+ |
|
80 | 82 |
# Table |
81 | 83 |
my $table = shift; |
82 | 84 |
|
83 |
- # Column infomations |
|
84 |
- my @cs = @_; |
|
85 |
- |
|
86 |
- # Initialize filters |
|
87 |
- $self->{_auto_bind_filter} ||= {}; |
|
88 |
- $self->{_auto_fetch_filter} ||= {}; |
|
89 |
- |
|
90 |
- # Create auto filters |
|
91 |
- foreach my $c (@cs) { |
|
92 |
- croak "Usage \$dbi->auto_filter(" . |
|
93 |
- "TABLE, [COLUMN, BIND_FILTER, FETCH_FILTER], [...])" |
|
94 |
- unless ref $c eq 'ARRAY' && @$c == 3; |
|
85 |
+ if (@_) { |
|
86 |
+ # Column infomations |
|
87 |
+ my @cs = @_; |
|
95 | 88 |
|
96 |
- # Column |
|
97 |
- my $column = $c->[0]; |
|
89 |
+ # Initialize filters |
|
90 |
+ $self->{auto_filter}{bind} ||= {}; |
|
91 |
+ $self->{auto_filter}{fetch} ||= {}; |
|
98 | 92 |
|
99 |
- # Bind filter |
|
100 |
- my $bind_filter = $c->[1]; |
|
101 |
- if (ref $bind_filter eq 'CODE') { |
|
102 |
- $self->{_auto_bind_filter}{$table}{$column} |
|
103 |
- = $bind_filter; |
|
104 |
- $self->{_auto_bind_filter}{$table}{"$table.$column"} |
|
105 |
- = $bind_filter; |
|
93 |
+ # Create auto filters |
|
94 |
+ foreach my $c (@cs) { |
|
95 |
+ croak "Usage \$dbi->auto_filter(" . |
|
96 |
+ "TABLE, [COLUMN, BIND_FILTER, FETCH_FILTER], [...])" |
|
97 |
+ unless ref $c eq 'ARRAY' && @$c == 3; |
|
98 |
+ |
|
99 |
+ # Column |
|
100 |
+ my $column = $c->[0]; |
|
101 |
+ |
|
102 |
+ # Bind filter |
|
103 |
+ my $bind_filter = $c->[1]; |
|
104 |
+ if (ref $bind_filter eq 'CODE') { |
|
105 |
+ $self->{auto_filter}{bind}{$table}{$column} |
|
106 |
+ = $bind_filter; |
|
107 |
+ $self->{auto_filter}{bind}{$table}{"$table.$column"} |
|
108 |
+ = $bind_filter; |
|
109 |
+ } |
|
110 |
+ else { |
|
111 |
+ croak qq{"$bind_filter" is not registered} |
|
112 |
+ unless exists $self->filters->{$bind_filter}; |
|
113 |
+ |
|
114 |
+ $self->{auto_filter}{bind}{$table}{$column} |
|
115 |
+ = $self->filters->{$bind_filter}; |
|
116 |
+ $self->{auto_filter}{bind}{$table}{"$table.$column"} |
|
117 |
+ = $self->filters->{$bind_filter}; |
|
118 |
+ } |
|
119 |
+ |
|
120 |
+ # Fetch filter |
|
121 |
+ my $fetch_filter = $c->[2]; |
|
122 |
+ if (ref $fetch_filter eq 'CODE') { |
|
123 |
+ $self->{auto_filter}{fetch}{$table}{$column} |
|
124 |
+ = $fetch_filter; |
|
125 |
+ $self->{auto_filter}{fetch}{$table}{"$table.$column"} |
|
126 |
+ = $fetch_filter; |
|
127 |
+ } |
|
128 |
+ else { |
|
129 |
+ croak qq{"$fetch_filter" is not registered} |
|
130 |
+ unless exists $self->filters->{$fetch_filter}; |
|
131 |
+ $self->{auto_filter}{fetch}{$table}{$column} |
|
132 |
+ = $self->filters->{$fetch_filter}; |
|
133 |
+ $self->{auto_filter}{fetch}{$table}{"$table.$column"} |
|
134 |
+ = $self->filters->{$fetch_filter}; |
|
135 |
+ } |
|
106 | 136 |
} |
107 |
- else { |
|
108 |
- croak qq{"$bind_filter" is not registered} |
|
109 |
- unless exists $self->filters->{$bind_filter}; |
|
110 |
- |
|
111 |
- $self->{_auto_bind_filter}{$table}{$column} |
|
112 |
- = $self->filters->{$bind_filter}; |
|
113 |
- $self->{_auto_bind_filter}{$table}{"$table.$column"} |
|
114 |
- = $self->filters->{$bind_filter}; |
|
115 |
- } |
|
116 | 137 |
|
117 |
- # Fetch filter |
|
118 |
- my $fetch_filter = $c->[2]; |
|
119 |
- if (ref $fetch_filter eq 'CODE') { |
|
120 |
- $self->{_auto_fetch_filter}{$table}{$column} |
|
121 |
- = $fetch_filter; |
|
122 |
- $self->{_auto_fetch_filter}{$table}{"$table.$column"} |
|
123 |
- = $fetch_filter; |
|
124 |
- } |
|
125 |
- else { |
|
126 |
- croak qq{"$fetch_filter" is not registered} |
|
127 |
- unless exists $self->filters->{$fetch_filter}; |
|
128 |
- $self->{_auto_fetch_filter}{$table}{$column} |
|
129 |
- = $self->filters->{$fetch_filter}; |
|
130 |
- $self->{_auto_fetch_filter}{$table}{"$table.$column"} |
|
131 |
- = $self->filters->{$fetch_filter}; |
|
132 |
- } |
|
138 |
+ return $self; |
|
133 | 139 |
} |
134 | 140 |
|
135 |
- return $self; |
|
141 |
+ return $self->{auto_filter}; |
|
136 | 142 |
} |
137 | 143 |
|
138 | 144 |
sub helper { |
... | ... |
@@ -228,36 +234,44 @@ sub create_query { |
228 | 234 |
|
229 | 235 |
sub default_bind_filter { |
230 | 236 |
my $self = shift; |
231 |
- my $fname = $_[0]; |
|
232 | 237 |
|
233 |
- if (@_ && !$fname) { |
|
234 |
- $self->{_default_bind_filter} = undef; |
|
235 |
- } |
|
236 |
- else { |
|
237 |
- croak qq{"$fname" is not registered} |
|
238 |
- unless exists $self->filters->{$fname}; |
|
239 |
- |
|
240 |
- $self->{_default_bind_filter} = $self->filters->{$fname}; |
|
238 |
+ if (@_) { |
|
239 |
+ my $fname = $_[0]; |
|
240 |
+ |
|
241 |
+ if (@_ && !$fname) { |
|
242 |
+ $self->{default_bind_filter} = undef; |
|
243 |
+ } |
|
244 |
+ else { |
|
245 |
+ croak qq{"$fname" is not registered} |
|
246 |
+ unless exists $self->filters->{$fname}; |
|
247 |
+ |
|
248 |
+ $self->{default_bind_filter} = $self->filters->{$fname}; |
|
249 |
+ } |
|
250 |
+ return $self; |
|
241 | 251 |
} |
242 | 252 |
|
243 |
- return $self; |
|
253 |
+ return $self->{default_bind_filter}; |
|
244 | 254 |
} |
245 | 255 |
|
246 | 256 |
sub default_fetch_filter { |
247 | 257 |
my $self = shift; |
248 | 258 |
my $fname = $_[0]; |
249 | 259 |
|
250 |
- if (@_ && !$fname) { |
|
251 |
- $self->{_default_fetch_filter} = undef; |
|
252 |
- } |
|
253 |
- else { |
|
254 |
- croak qq{"$fname" is not registered} |
|
255 |
- unless exists $self->filters->{$fname}; |
|
256 |
- |
|
257 |
- $self->{_default_fetch_filter} = $self->filters->{$fname}; |
|
260 |
+ if (@_) { |
|
261 |
+ if (@_ && !$fname) { |
|
262 |
+ $self->{default_fetch_filter} = undef; |
|
263 |
+ } |
|
264 |
+ else { |
|
265 |
+ croak qq{"$fname" is not registered} |
|
266 |
+ unless exists $self->filters->{$fname}; |
|
267 |
+ |
|
268 |
+ $self->{default_fetch_filter} = $self->filters->{$fname}; |
|
269 |
+ } |
|
270 |
+ |
|
271 |
+ return $self; |
|
258 | 272 |
} |
259 | 273 |
|
260 |
- return $self; |
|
274 |
+ return $self->{default_fetch_filter} |
|
261 | 275 |
} |
262 | 276 |
|
263 | 277 |
our %VALID_DELETE_ARGS |
... | ... |
@@ -339,7 +353,7 @@ sub execute{ |
339 | 353 |
foreach my $table (@$auto_filter_tables) { |
340 | 354 |
$auto_filter = { |
341 | 355 |
%$auto_filter, |
342 |
- %{$self->{_auto_bind_filter}->{$table} || {}} |
|
356 |
+ %{$self->{auto_filter}{bind}->{$table} || {}} |
|
343 | 357 |
} |
344 | 358 |
} |
345 | 359 |
|
... | ... |
@@ -373,17 +387,17 @@ sub execute{ |
373 | 387 |
foreach my $table (@$auto_filter_tables) { |
374 | 388 |
$auto_fetch_filter = { |
375 | 389 |
%$auto_filter, |
376 |
- %{$self->{_auto_fetch_filter}{$table} || {}} |
|
390 |
+ %{$self->{auto_filter}{fetch}{$table} || {}} |
|
377 | 391 |
} |
378 | 392 |
} |
379 | 393 |
|
380 | 394 |
# Result |
381 | 395 |
my $result = $self->result_class->new( |
382 |
- sth => $sth, |
|
383 |
- filters => $self->filters, |
|
384 |
- filter_check => $self->filter_check, |
|
385 |
- _auto_filter => $auto_fetch_filter || {}, |
|
386 |
- _default_filter => $self->{_default_fetch_filter} |
|
396 |
+ sth => $sth, |
|
397 |
+ filters => $self->filters, |
|
398 |
+ filter_check => $self->filter_check, |
|
399 |
+ _auto_filter => $auto_fetch_filter || {}, |
|
400 |
+ _default_filter => $self->default_fetch_filter |
|
387 | 401 |
); |
388 | 402 |
|
389 | 403 |
return $result; |
... | ... |
@@ -673,7 +687,7 @@ sub _build_bind_values { |
673 | 687 |
: $params->{$column}; |
674 | 688 |
|
675 | 689 |
# Filtering |
676 |
- my $f = $filter->{$column} || $self->{_default_bind_filter} || ''; |
|
690 |
+ my $f = $filter->{$column} || $self->{default_bind_filter} || ''; |
|
677 | 691 |
|
678 | 692 |
push @bind_values, $f ? $f->($value) : $value; |
679 | 693 |
|
... | ... |
@@ -1009,12 +1023,14 @@ instead of suger methods. |
1009 | 1023 |
|
1010 | 1024 |
=head2 C<(deprecated) default_bind_filter> |
1011 | 1025 |
|
1012 |
- $dbi = $dbi->default_bind_filter($fname); |
|
1026 |
+ my $default_bind_filter = $dbi->default_bind_filter; |
|
1027 |
+ $dbi = $dbi->default_bind_filter($fname); |
|
1013 | 1028 |
|
1014 | 1029 |
Default filter when parameter binding is executed. |
1015 | 1030 |
|
1016 | 1031 |
=head2 C<(deprecated) default_fetch_filter> |
1017 | 1032 |
|
1033 |
+ my $default_fetch_filter = $dbi->default_fetch_filter; |
|
1018 | 1034 |
$dbi = $dbi->default_fetch_filter($fname); |
1019 | 1035 |
|
1020 | 1036 |
=head2 C<execute> |