| ... | ... |
@@ -1,6 +1,7 @@ |
| 1 | 1 |
0.1688 |
| 2 | 2 |
- fixed bug that model insert, update, delete select can't |
| 3 | 3 |
odd number arguments |
| 4 |
+ - improved type_rule method |
|
| 4 | 5 |
0.1687 |
| 5 | 6 |
- added EXPERIMENTAL type_rule method |
| 6 | 7 |
- added EXPERIMENTAL execute() type_rule_off option |
| ... | ... |
@@ -1009,6 +1009,19 @@ sub type_rule {
|
| 1009 | 1009 |
my $type_rule = _array_to_hash([@_]); |
| 1010 | 1010 |
$self->{type_rule} = $type_rule;
|
| 1011 | 1011 |
$self->{_into} ||= {};
|
| 1012 |
+ |
|
| 1013 |
+ foreach my $i (-1000 .. 1000) {
|
|
| 1014 |
+ my $type_info = $self->dbh->type_info($i); |
|
| 1015 |
+ my $data_type = $type_info->{DATA_TYPE};
|
|
| 1016 |
+ my $type_name = $type_info->{TYPE_NAME};
|
|
| 1017 |
+ foreach my $type (keys %$type_rule) {
|
|
| 1018 |
+ use Data::Dumper; |
|
| 1019 |
+ if ($type_name && lc $type eq lc $type_name) {
|
|
| 1020 |
+ $type_rule->{$data_type} = $type_rule->{$type};
|
|
| 1021 |
+ } |
|
| 1022 |
+ } |
|
| 1023 |
+ } |
|
| 1024 |
+ |
|
| 1012 | 1025 |
$self->each_column(sub {
|
| 1013 | 1026 |
my ($dbi, $table, $column, $column_info) = @_; |
| 1014 | 1027 |
|
| ... | ... |
@@ -126,6 +126,58 @@ $rows = $dbi->select( |
| 126 | 126 |
is_deeply($rows, [{key1 => 1, key2 => 2}]);
|
| 127 | 127 |
$dbi->delete_all(table => 'table1'); |
| 128 | 128 |
|
| 129 |
+ |
|
| 130 |
+test 'type_rule'; |
|
| 131 |
+$dbi = DBIx::Custom->connect( |
|
| 132 |
+ dsn => "dbi:mysql:database=$DATABASE", |
|
| 133 |
+ user => $USER, |
|
| 134 |
+ password => $PASSWORD |
|
| 135 |
+); |
|
| 136 |
+eval{$dbi->execute("create table date_test (date DATE, datetime DATETIME)")};
|
|
| 137 |
+$dbi->type_rule( |
|
| 138 |
+ DATE => {
|
|
| 139 |
+ into=> sub {
|
|
| 140 |
+ my $date = shift; |
|
| 141 |
+ $date =~ s/aaaaa//g; |
|
| 142 |
+ return $date; |
|
| 143 |
+ }, |
|
| 144 |
+ from => sub {
|
|
| 145 |
+ my $date = shift; |
|
| 146 |
+ $date .= 'bbbbb'; |
|
| 147 |
+ return $date; |
|
| 148 |
+ } |
|
| 149 |
+ }, |
|
| 150 |
+ 'DATETIME' => {
|
|
| 151 |
+ into => sub {
|
|
| 152 |
+ my $date = shift; |
|
| 153 |
+ $date =~ s/ccccc//g; |
|
| 154 |
+ return $date; |
|
| 155 |
+ |
|
| 156 |
+ }, |
|
| 157 |
+ }, |
|
| 158 |
+ 'TIMESTAMP' => {
|
|
| 159 |
+ from => sub {
|
|
| 160 |
+ my $date = shift; |
|
| 161 |
+ $date .= 'ddddd'; |
|
| 162 |
+ return $date; |
|
| 163 |
+ } |
|
| 164 |
+ } |
|
| 165 |
+); |
|
| 166 |
+ |
|
| 167 |
+$dbi->insert( |
|
| 168 |
+ {
|
|
| 169 |
+ date => 'aaaaa2010-aaaaa11-12aaaaa', |
|
| 170 |
+ datetime => '2010-11ccccc-12 10:ccccc55:56' |
|
| 171 |
+ }, |
|
| 172 |
+ table => 'date_test' |
|
| 173 |
+); |
|
| 174 |
+is_deeply( |
|
| 175 |
+ $dbi->select(table => 'date_test')->fetch, |
|
| 176 |
+ ['2010-11-12bbbbb', '2010-11-12 10:55:56ddddd'] |
|
| 177 |
+); |
|
| 178 |
+ |
|
| 179 |
+$dbi->execute("drop table date_test");
|
|
| 180 |
+ |
|
| 129 | 181 |
test 'dbh'; |
| 130 | 182 |
{
|
| 131 | 183 |
my $connector = DBIx::Connector->new( |