... | ... |
@@ -14,9 +14,8 @@ sub user : ClassObjectAttr { initialize => {clone => 'scalar'} } |
14 | 14 |
sub password : ClassObjectAttr { initialize => {clone => 'scalar'} } |
15 | 15 |
sub data_source : ClassObjectAttr { initialize => {clone => 'scalar'} } |
16 | 16 |
sub database : ClassObjectAttr { initialize => {clone => 'scalar'} } |
17 |
- |
|
18 | 17 |
sub dbi_options : ClassObjectAttr { initialize => {clone => 'hash', |
19 |
- default => sub { {} } } } |
|
18 |
+ default => sub { {} } } } |
|
20 | 19 |
|
21 | 20 |
sub bind_filter : ClassObjectAttr { initialize => {clone => 'scalar'} } |
22 | 21 |
sub fetch_filter : ClassObjectAttr { initialize => {clone => 'scalar'} } |
... | ... |
@@ -213,7 +212,8 @@ sub execute { |
213 | 212 |
|
214 | 213 |
# Execute |
215 | 214 |
my $sth = $query->sth; |
216 |
- my $ret_val = $sth->execute(@$bind_values); |
|
215 |
+ my $ret_val = eval{$sth->execute(@$bind_values)}; |
|
216 |
+ croak($@) if $@; |
|
217 | 217 |
|
218 | 218 |
# Return resultset if select statement is executed |
219 | 219 |
if ($sth->{NUM_OF_FIELDS}) { |
... | ... |
@@ -238,7 +238,7 @@ sub _build_bind_values { |
238 | 238 |
# binding values |
239 | 239 |
my @bind_values; |
240 | 240 |
|
241 |
- # Filter and sdd bind values |
|
241 |
+ # Create bind values |
|
242 | 242 |
foreach my $key_info (@$key_infos) { |
243 | 243 |
my $filtering_key = $key_info->{key}; |
244 | 244 |
my $access_keys = $key_info->{access_keys}; |
... | ... |
@@ -247,6 +247,7 @@ sub _build_bind_values { |
247 | 247 |
my $table = $key_info->{table} || ''; |
248 | 248 |
my $column = $key_info->{column} || ''; |
249 | 249 |
|
250 |
+ my $found; |
|
250 | 251 |
ACCESS_KEYS : |
251 | 252 |
foreach my $access_key (@$access_keys) { |
252 | 253 |
my $root_params = $params; |
... | ... |
@@ -278,7 +279,7 @@ sub _build_bind_values { |
278 | 279 |
push @bind_values, scalar $root_params->{$key}; |
279 | 280 |
} |
280 | 281 |
} |
281 |
- return @bind_values; |
|
282 |
+ $found = 1; |
|
282 | 283 |
} |
283 | 284 |
|
284 | 285 |
if ($key eq 'ARRAY') { |
... | ... |
@@ -290,8 +291,17 @@ sub _build_bind_values { |
290 | 291 |
} |
291 | 292 |
} |
292 | 293 |
} |
293 |
- croak("Cannot find key"); |
|
294 |
+ |
|
295 |
+ unless ($found) { |
|
296 |
+ require Data::Dumper; |
|
297 |
+ my $key_info_dump = Data::Dumper->Dump([$key_info], ['*key_info']); |
|
298 |
+ my $params_dump = Data::Dumper->Dump([$params], ['*params']); |
|
299 |
+ croak("Key not found\n\n" . |
|
300 |
+ "<Key information>\n$key_info_dump\n\n" . |
|
301 |
+ "<Your parameters>\n$params_dump\n"); |
|
302 |
+ } |
|
294 | 303 |
} |
304 |
+ return \@bind_values; |
|
295 | 305 |
} |
296 | 306 |
|
297 | 307 |
|
... | ... |
@@ -553,6 +563,8 @@ If tranzation is died, rollback is execute. |
553 | 563 |
|
554 | 564 |
Yuki Kimoto, C<< <kimoto.yuki at gmail.com> >> |
555 | 565 |
|
566 |
+Github L<http://github.com/yuki-kimoto> |
|
567 |
+ |
|
556 | 568 |
=head1 COPYRIGHT & LICENSE |
557 | 569 |
|
558 | 570 |
Copyright 2009 Yuki Kimoto, all rights reserved. |
... | ... |
@@ -105,30 +105,28 @@ $result = $dbi->execute($query); |
105 | 105 |
@rows = $result->fetch_all; |
106 | 106 |
is_deeply(\@rows, [[1, 2], [3, 4]], "$test : fetch_all_hash list context"); |
107 | 107 |
|
108 |
-__END__ |
|
109 |
- |
|
110 | 108 |
test 'Filter'; |
111 | 109 |
$dbi->reconnect; |
112 |
-$dbi->dbh->do($CREATE_TABLE->{0}); |
|
110 |
+$dbi->do($CREATE_TABLE->{0}); |
|
113 | 111 |
|
114 | 112 |
$insert_tmpl = "insert into table1 {insert_values key1 key2};"; |
115 | 113 |
$insert_query = $dbi->create_query($insert_tmpl); |
116 | 114 |
$insert_query->bind_filter(sub { |
117 |
- my ($key, $value) = @_; |
|
118 |
- if ($key eq 'key1') { |
|
115 |
+ my ($key, $value, $table, $column) = @_; |
|
116 |
+ if ($key eq 'key1' && $table eq '' && $column eq 'key1') { |
|
119 | 117 |
return $value * 2; |
120 | 118 |
} |
121 | 119 |
return $value; |
122 | 120 |
}); |
123 |
-$DB::single = 1; |
|
121 |
+ |
|
124 | 122 |
$ret_val = $dbi->execute($insert_query, {key1 => 1, key2 => 2}); |
125 | 123 |
ok($ret_val, "Insert success return value"); |
126 | 124 |
|
127 |
-$select_tmpl = "select k1, k2 from table1"; |
|
128 |
-$select_query = $dbi->create_query($select_query); |
|
125 |
+$select_tmpl = "select key1, key2 from table1"; |
|
126 |
+$select_query = $dbi->create_query($select_tmpl); |
|
129 | 127 |
$select_query->fetch_filter(sub { |
130 |
- my ($key, $value); |
|
131 |
- if ($key eq 'key2') { |
|
128 |
+ my ($key, $value, $type, $sth, $i) = @_; |
|
129 |
+ if ($key eq 'key2' && $type =~ /char/ && $sth->can('execute') && $i == 1) { |
|
132 | 130 |
return $value * 3; |
133 | 131 |
} |
134 | 132 |
return $value; |
... | ... |
@@ -136,7 +134,7 @@ $select_query->fetch_filter(sub { |
136 | 134 |
$result = $dbi->execute($select_query); |
137 | 135 |
|
138 | 136 |
$rows = $result->fetch_all_hash; |
139 |
-is_deeply($rows, {k1 => 2, k2 => 6}, "$test : bind_filter fetch_filter"); |
|
137 |
+is_deeply($rows, [{key1 => 2, key2 => 6}], "$test : bind_filter fetch_filter"); |
|
140 | 138 |
|
141 | 139 |
__END__ |
142 | 140 |
|