Showing 2 changed files with 44 additions and 9 deletions
+18 -9
lib/DBI/Custom.pm
... ...
@@ -208,21 +208,24 @@ Object::Simple->build_class;
208 208
 package DBI::Custom::Result;
209 209
 use Object::Simple;
210 210
 
211
-sub sth : Attr {}
212
-sub fetch_filter {}
211
+sub sth          : Attr {}
212
+sub fetch_filter : Attr {}
213 213
 
214 214
 sub fetchrow_arrayref {
215 215
     my $self = shift;
216 216
     my $sth = $self->{sth};
217 217
     
218
+    $DB::single = 1;
218 219
     my $array = $sth->fetchrow_arrayref;
219 220
     
220 221
     return $array unless $array;
221 222
     
222 223
     my $keys = $sth->{NAME_lc};
223
-    
224
-    for (my $i = 0; $i < @$keys; $i++) {
225
-        $array->[$i] = $self->fetch_filter($keys->[$i], $array->[$i]);
224
+    my $fetch_filter = $self->fetch_filter;
225
+    if ($fetch_filter) {
226
+        for (my $i = 0; $i < @$keys; $i++) {
227
+            $array->[$i] = $fetch_filter->($keys->[$i], $array->[$i]);
228
+        }
226 229
     }
227 230
     return $array;
228 231
 }
... ...
@@ -237,8 +240,11 @@ sub fetchrow_array {
237 240
     
238 241
     my $keys = $sth->{NAME_lc};
239 242
     
240
-    for (my $i = 0; $i < @$keys; $i++) {
241
-        $array[$i] = $self->fetch_filter($keys->[$i], $array[$i]);
243
+    my $fetch_filter = $self->fetch_filter;
244
+    if ($fetch_filter) {
245
+        for (my $i = 0; $i < @$keys; $i++) {
246
+            $array[$i] = $fetch_filter->($keys->[$i], $array[$i]);
247
+        }
242 248
     }
243 249
     return @array;
244 250
 }
... ...
@@ -250,9 +256,12 @@ sub fetchrow_hashref {
250 256
     my $hash = $sth->fetchrow_hashref;
251 257
     
252 258
     return unless $hash;
259
+    my $fetch_filter = $self->fetch_filter;
253 260
     
254
-    foreach my $key (keys %$hash) {
255
-        $hash->{$key} = $self->fetch_filter($key, $hash->{$key});
261
+    if ($fetch_filter) {
262
+        foreach my $key (keys %$hash) {
263
+            $hash->{$key} = $fetch_filter->($key, $hash->{$key});
264
+        }
256 265
     }
257 266
     return $hash;
258 267
 }
+26
t/01-core.t
... ...
@@ -264,6 +264,32 @@ our ($U, $P, $D) = connect_info();
264 264
     is_deeply(\@bind, ['A', 'b'], 'sql template bind' );
265 265
 }
266 266
 
267
+{
268
+    my $dbi = DBI::Custom->new(
269
+        connect_info => {
270
+            user => $U,
271
+            password => $P,
272
+            data_source => "dbi:mysql:$D"
273
+        }
274
+    );
275
+    
276
+    $dbi->fetch_filter(sub {
277
+        my ($key, $value) = @_;
278
+        if ($key eq 'key1' && $value == 1 ) {
279
+            return $value * 3;
280
+        }
281
+        return $value;
282
+    });
283
+    
284
+    my $result = $dbi->query("select key1, key2 from test1");
285
+    
286
+    my $row = $result->fetchrow_arrayref;
287
+    my @values = @$row;
288
+    $result->finish;
289
+    
290
+    is_deeply(\@values, [3, 2]);
291
+}
292
+
267 293
 sub connect_info {
268 294
     my $file = 'password.tmp';
269 295
     open my $fh, '<', $file