Showing 3 changed files with 32 additions and 13 deletions
+2
Changes
... ...
@@ -1,4 +1,6 @@
1 1
 0.1692
2
+    - removed EXPERIMENTAL DBIx::Model result_filter
3
+    - DBIx::Custom::Result filter override type_rule
2 4
     - added EXPERIMENTAL DBIx::Custom::Result type_rule
3 5
     - added EXPERIMENTAL available_type_name method 
4 6
     - EXPERIMENTAL type_rule_off is not passed form execute method 
+16 -13
lib/DBIx/Custom/Result.pm
... ...
@@ -68,10 +68,6 @@ sub fetch {
68 68
     my $type_rule = $self->type_rule || {};
69 69
     
70 70
     for (my $i = 0; $i < @$columns; $i++) {
71
-        if (!$self->type_rule_off && (my $rule = $type_rule->{lc($types->[$i])}))
72
-        {
73
-            $row[$i] = $rule->($row[$i]);
74
-        }
75 71
         
76 72
         # Filter name
77 73
         my $column = $columns->[$i];
... ...
@@ -81,7 +77,14 @@ sub fetch {
81 77
         my $ef = $end_filter->{$column};
82 78
         
83 79
         # Filtering
84
-        $row[$i] = $f->($row[$i]) if $f && !$self->filter_off;
80
+        if ($f && !$self->filter_off) {
81
+            $row[$i] = $f->($row[$i]);
82
+        }
83
+        elsif (!$self->type_rule_off && (my $rule = $type_rule->{lc($types->[$i])}))
84
+        {
85
+            $row[$i] = $rule->($row[$i]);
86
+        }
87
+
85 88
         $row[$i] = $ef->($row[$i]) if $ef && !$self->filter_off;
86 89
     }
87 90
 
... ...
@@ -136,12 +139,6 @@ sub fetch_hash {
136 139
     my $type_rule = $self->type_rule || {};
137 140
     for (my $i = 0; $i < @$columns; $i++) {
138 141
         
139
-        # Type rule
140
-        if (!$self->type_rule_off && (my $rule = $type_rule->{lc($types->[$i])}))
141
-        {
142
-            $row->[$i] = $rule->($row->[$i]);
143
-        }
144
-        
145 142
         # Filter name
146 143
         my $column = $columns->[$i];
147 144
         my $f  = exists $filter->{$column}
... ...
@@ -150,8 +147,14 @@ sub fetch_hash {
150 147
         my $ef = $end_filter->{$column};
151 148
         
152 149
         # Filtering
153
-        $row_hash->{$column} = $f && !$self->filter_off ? $f->($row->[$i])
154
-                                                        : $row->[$i];
150
+        if ($f && !$self->filter_off) {
151
+            $row_hash->{$column} =  $f->($row->[$i]);
152
+        }
153
+        elsif (!$self->type_rule_off && (my $rule = $type_rule->{lc($types->[$i])}))
154
+        {
155
+            $row_hash->{$column} = $rule->($row->[$i]);
156
+        }
157
+        else { $row_hash->{$column} = $row->[$i] }
155 158
         $row_hash->{$column} = $ef->($row_hash->{$column})
156 159
           if $ef && !$self->filter_off;
157 160
     }
+14
t/dbix-custom-core-sqlite.t
... ...
@@ -2854,6 +2854,20 @@ $row = $result->one;
2854 2854
 is($row->{key1}, 2);
2855 2855
 is($row->{key2}, 8);
2856 2856
 
2857
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:');
2858
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
2859
+$dbi->type_rule(
2860
+    from => {
2861
+        date => sub { $_[0] * 2 },
2862
+    },
2863
+);
2864
+$dbi->insert({key1 => 2}, table => 'table1');
2865
+$result = $dbi->select(table => 'table1');
2866
+$result->filter(key1 => sub { $_[0] * 3});
2867
+is($result->one->{key1}, 6);
2868
+$result = $dbi->select(table => 'table1');
2869
+$result->filter(key1 => sub { $_[0] * 3});
2870
+is($result->fetch->[0], 6);
2857 2871
 
2858 2872
 test 'result_filter';
2859 2873
 $dbi = DBIx::Custom->connect($NEW_ARGS->{0});