Showing 4 changed files with 46 additions and 4 deletions
+2
Changes
... ...
@@ -1,3 +1,5 @@
1
+0.1691
2
+    - fixed bug that type_rule from option can't receive filter name
1 3
 0.1690
2 4
     - use latest Object::Simple features
3 5
 0.1689
+18 -4
lib/DBIx/Custom.pm
... ...
@@ -1028,18 +1028,19 @@ sub type_rule {
1028 1028
     
1029 1029
     if (@_) {
1030 1030
         my $type_rule = ref $_[0] eq 'HASH' ? $_[0] : {@_};
1031
-        $type_rule->{from} = _array_to_hash($type_rule->{from});
1031
+        
1032
+        # Into
1032 1033
         $type_rule->{into} = _array_to_hash($type_rule->{into});
1033 1034
         $self->{type_rule} = $type_rule;
1034 1035
         $self->{_into} ||= {};
1035 1036
         $self->each_column(sub {
1036 1037
             my ($dbi, $table, $column, $column_info) = @_;
1037 1038
             
1038
-            my $type = $column_info->{TYPE_NAME};
1039
+            my $type_name = $column_info->{TYPE_NAME};
1039 1040
             if ($type_rule->{into} &&
1040
-                (my $filter = $type_rule->{into}->{$type}))
1041
+                (my $filter = $type_rule->{into}->{$type_name}))
1041 1042
             {
1042
-                return unless exists $type_rule->{into}->{$type};
1043
+                return unless exists $type_rule->{into}->{$type_name};
1043 1044
                 if  (defined $filter && ref $filter ne 'CODE') 
1044 1045
                 {
1045 1046
                     my $fname = $filter;
... ...
@@ -1053,6 +1054,19 @@ sub type_rule {
1053 1054
             }
1054 1055
         });
1055 1056
         
1057
+
1058
+        # From
1059
+        $type_rule->{from} = _array_to_hash($type_rule->{from});
1060
+        foreach my $data_type (keys %{$type_rule->{from} || {}}) {
1061
+            my $fname = $type_rule->{from}{$data_type};
1062
+            if (defined $fname && ref $fname ne 'CODE') {
1063
+                croak qq{Filter "$fname" is not registered" } . _subname
1064
+                  unless exists $self->filters->{$fname};
1065
+                
1066
+                $type_rule->{from}{$data_type} = $self->filters->{$fname};
1067
+            }
1068
+        }
1069
+        
1056 1070
         return $self;
1057 1071
     }
1058 1072
     
+20
t/dbix-custom-core-sqlite.t
... ...
@@ -2654,6 +2654,21 @@ $row = $result->one;
2654 2654
 is($row->{key1}, 'A');
2655 2655
 is($row->{key2}, 'B');
2656 2656
 
2657
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:');
2658
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
2659
+$dbi->register_filter(twice => sub { $_[0] * 2 });
2660
+$dbi->type_rule(
2661
+    from => {
2662
+        Date => 'twice',
2663
+    },
2664
+    into => {
2665
+        Date => 'twice',
2666
+    }
2667
+);
2668
+$dbi->insert({key1 => 2}, table => 'table1');
2669
+$result = $dbi->select(table => 'table1');
2670
+is($result->fetch->[0], 8);
2671
+
2657 2672
 
2658 2673
 test 'type_rule_off';
2659 2674
 $dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:');
... ...
@@ -2789,4 +2804,9 @@ $result->end_filter(key1 => sub { $_[0] * 5});
2789 2804
 is_deeply($result->fetch_first,
2790 2805
           [1, 2, 1, 3]);
2791 2806
 
2807
+
2808
+test 'available_date_type';
2809
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
2810
+ok($dbi->can('available_data_type'));
2811
+
2792 2812
 =cut
+6
t/dbix-custom-mysql-private.t
... ...
@@ -134,6 +134,12 @@ $dbi = DBIx::Custom->connect(
134 134
     password => $PASSWORD
135 135
 );
136 136
 eval{$dbi->execute("create table date_test (date DATE, datetime DATETIME)")};
137
+$dbi->each_column(
138
+    sub {
139
+        my ($self, $table, $column, $column_info) = @_;
140
+    }
141
+);
142
+
137 143
 $dbi->type_rule(
138 144
     into => {
139 145
         DATE=> sub {