Showing 1 changed files with 39 additions and 26 deletions
+39 -26
lib/DBI/Custom.pm
... ...
@@ -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