... | ... |
@@ -21,7 +21,8 @@ sub dbi_options : ClassObjectAttr { initialize => {clone => 'hash', |
21 | 21 |
sub bind_filter : ClassObjectAttr { initialize => {clone => 'scalar'} } |
22 | 22 |
sub fetch_filter : ClassObjectAttr { initialize => {clone => 'scalar'} } |
23 | 23 |
|
24 |
-sub no_filters : ClassObjectAttr { initialize => {clone => 'array'} } |
|
24 |
+sub no_bind_filters : ClassObjectAttr { initialize => {clone => 'array'} } |
|
25 |
+sub no_fetch_filters : ClassObjectAttr { initialize => {clone => 'array'} } |
|
25 | 26 |
|
26 | 27 |
sub filters : ClassObjectAttr { |
27 | 28 |
type => 'hash', |
... | ... |
@@ -163,8 +164,21 @@ sub create_query { |
163 | 164 |
# Prepare statement handle |
164 | 165 |
my $sth = $self->dbh->prepare($query->{sql}); |
165 | 166 |
|
167 |
+ # Set statement handle |
|
166 | 168 |
$query->sth($sth); |
167 | 169 |
|
170 |
+ # Set bind filter |
|
171 |
+ $query->bind_filter($self->bind_filter); |
|
172 |
+ |
|
173 |
+ # Set no filter keys when binding |
|
174 |
+ $query->no_bind_filters($self->no_bind_filters); |
|
175 |
+ |
|
176 |
+ # Set fetch filter |
|
177 |
+ $query->fetch_filter($self->fetch_filter); |
|
178 |
+ |
|
179 |
+ # Set no filter keys when fetching |
|
180 |
+ $query->no_fetch_filters($self->no_fetch_filters); |
|
181 |
+ |
|
168 | 182 |
return $query; |
169 | 183 |
} |
170 | 184 |
|
... | ... |
@@ -172,18 +186,6 @@ sub execute { |
172 | 186 |
my ($self, $query, $params) = @_; |
173 | 187 |
$params ||= {}; |
174 | 188 |
|
175 |
- # Create query if First argument is template |
|
176 |
- if (!ref $query) { |
|
177 |
- my $template = $query; |
|
178 |
- $query = $self->create_query($template); |
|
179 |
- } |
|
180 |
- |
|
181 |
- # Set bind filter |
|
182 |
- $query->bind_filter($self->bind_filter) unless $query->bind_filter; |
|
183 |
- |
|
184 |
- # Set no filter keys |
|
185 |
- $query->no_filters($self->no_filters) unless $query->no_filters; |
|
186 |
- |
|
187 | 189 |
# Create bind value |
188 | 190 |
my $bind_values = $self->_build_bind_values($query, $params); |
189 | 191 |
|
... | ... |
@@ -195,8 +197,9 @@ sub execute { |
195 | 197 |
if ($sth->{NUM_OF_FIELDS}) { |
196 | 198 |
my $result_class = $self->result_class; |
197 | 199 |
my $result = $result_class->new({ |
198 |
- sth => $sth, |
|
199 |
- fetch_filter => $self->fetch_filter |
|
200 |
+ sth => $sth, |
|
201 |
+ fetch_filter => $query->fetch_filter, |
|
202 |
+ no_fetch_filters => $query->no_fetch_filters |
|
200 | 203 |
}); |
201 | 204 |
return $result; |
202 | 205 |
} |
... | ... |
@@ -206,9 +209,9 @@ sub execute { |
206 | 209 |
sub _build_bind_values { |
207 | 210 |
my ($self, $query, $params) = @_; |
208 | 211 |
|
209 |
- my $key_infos = $query->key_infos; |
|
210 |
- my $bind_filter = $query->bind_filter; |
|
211 |
- my $no_filters_map = $query->_no_filters_map || {}; |
|
212 |
+ my $key_infos = $query->key_infos; |
|
213 |
+ my $bind_filter = $query->bind_filter; |
|
214 |
+ my $no_bind_filters_map = $query->_no_bind_filters_map || {}; |
|
212 | 215 |
|
213 | 216 |
# binding values |
214 | 217 |
my @bind_values; |
... | ... |
@@ -233,8 +236,10 @@ sub _build_bind_values { |
233 | 236 |
|
234 | 237 |
if ($i == @$access_key - 1) { |
235 | 238 |
if (ref $key eq 'ARRAY') { |
236 |
- if ($bind_filter && !$no_filters_map->{$original_key}) { |
|
237 |
- push @bind_values, $bind_filter->($root_params->[$key->[0]], $original_key, $table, $column); |
|
239 |
+ if ($bind_filter && !$no_bind_filters_map->{$original_key}) { |
|
240 |
+ push @bind_values, |
|
241 |
+ $bind_filter->($root_params->[$key->[0]], |
|
242 |
+ $original_key, $table, $column); |
|
238 | 243 |
} |
239 | 244 |
else { |
240 | 245 |
push @bind_values, scalar $root_params->[$key->[0]]; |
... | ... |
@@ -242,8 +247,10 @@ sub _build_bind_values { |
242 | 247 |
} |
243 | 248 |
else { |
244 | 249 |
next ACCESS_KEYS unless exists $root_params->{$key}; |
245 |
- if ($bind_filter && !$no_filters_map->{$original_key}) { |
|
246 |
- push @bind_values, scalar $bind_filter->($root_params->{$key}, $original_key, $table, $column); |
|
250 |
+ if ($bind_filter && !$no_bind_filters_map->{$original_key}) { |
|
251 |
+ push @bind_values, |
|
252 |
+ $bind_filter->($root_params->{$key}, |
|
253 |
+ $original_key, $table, $column); |
|
247 | 254 |
} |
248 | 255 |
else { |
249 | 256 |
push @bind_values, scalar $root_params->{$key}; |
... | ... |
@@ -373,11 +380,17 @@ you can get DBI database handle if you need. |
373 | 380 |
# Sample |
374 | 381 |
$dbi->fetch_filter($self->filters->{default_fetch_filter}); |
375 | 382 |
|
376 |
-=head2 no_filters |
|
383 |
+=head2 no_bind_filters |
|
384 |
+ |
|
385 |
+ # Set and get no filter keys when binding |
|
386 |
+ $self = $dbi->no_bind_filters($no_bind_filters); |
|
387 |
+ $no_bind_filters = $dbi->no_bind_filters; |
|
388 |
+ |
|
389 |
+=head2 no_fetch_filters |
|
377 | 390 |
|
378 |
- # Set and get no filter keys |
|
379 |
- $self = $dbi->no_filters($no_filters); |
|
380 |
- $no_filters = $dbi->no_filters; |
|
391 |
+ # Set and get no filter keys when fetching |
|
392 |
+ $self = $dbi->no_fetch_filters($no_fetch_filters); |
|
393 |
+ $no_fetch_filters = $dbi->no_fetch_filters; |
|
381 | 394 |
|
382 | 395 |
=head2 result_class |
383 | 396 |
|