select, insert, update, update_all, delete, delete_all...
..., execute only receive hash...
... | ... |
@@ -1,3 +1,6 @@ |
1 |
+0.1601 |
|
2 |
+ select, insert, update, update_all, delete, delete_all, execute only receive hash argument(not backword compatible) |
|
3 |
+ |
|
1 | 4 |
0.1503 |
2 | 5 |
removed reconnect method |
3 | 6 |
removed connected method |
... | ... |
@@ -38,7 +38,7 @@ sub connect { |
38 | 38 |
my $password = $self->password; |
39 | 39 |
|
40 | 40 |
# Connect |
41 |
- my $dbh = eval{DBI->connect( |
|
41 |
+ my $dbh = eval {DBI->connect( |
|
42 | 42 |
$data_source, |
43 | 43 |
$user, |
44 | 44 |
$password, |
... | ... |
@@ -62,31 +62,29 @@ sub disconnect { |
62 | 62 |
my $self = shift; |
63 | 63 |
|
64 | 64 |
# Disconnect |
65 |
- $self->dbh->disconnect; |
|
65 |
+ my $ret = eval { $self->dbh->disconnect }; |
|
66 |
+ croak $@ if $@; |
|
66 | 67 |
$self->dbh(undef); |
67 | 68 |
|
68 |
- return $self; |
|
69 |
+ return $ret; |
|
69 | 70 |
} |
70 | 71 |
|
71 | 72 |
our %VALID_INSERT_ARGS = map { $_ => 1 } qw/table param append filter/; |
72 | 73 |
|
73 | 74 |
sub insert { |
74 |
- my $self = shift; |
|
75 |
- |
|
76 |
- # Arguments |
|
77 |
- my $args = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
75 |
+ my ($self, %args) = @_; |
|
78 | 76 |
|
79 | 77 |
# Check arguments |
80 |
- foreach my $name (keys %$args) { |
|
78 |
+ foreach my $name (keys %args) { |
|
81 | 79 |
croak "\"$name\" is invalid name" |
82 | 80 |
unless $VALID_INSERT_ARGS{$name}; |
83 | 81 |
} |
84 | 82 |
|
85 | 83 |
# Arguments |
86 |
- my $table = $args->{table} || ''; |
|
87 |
- my $param = $args->{param} || {}; |
|
88 |
- my $append = $args->{append} || ''; |
|
89 |
- my $filter = $args->{filter}; |
|
84 |
+ my $table = $args{table} || ''; |
|
85 |
+ my $param = $args{param} || {}; |
|
86 |
+ my $append = $args{append} || ''; |
|
87 |
+ my $filter = $args{filter}; |
|
90 | 88 |
|
91 | 89 |
# Insert keys |
92 | 90 |
my @insert_keys = keys %$param; |
... | ... |
@@ -110,23 +108,21 @@ our %VALID_UPDATE_ARGS |
110 | 108 |
= map { $_ => 1 } qw/table param where append filter allow_update_all/; |
111 | 109 |
|
112 | 110 |
sub update { |
113 |
- my $self = shift; |
|
114 |
- |
|
115 |
- my $args = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
111 |
+ my ($self, %args) = @_; |
|
116 | 112 |
|
117 | 113 |
# Check arguments |
118 |
- foreach my $name (keys %$args) { |
|
114 |
+ foreach my $name (keys %args) { |
|
119 | 115 |
croak "\"$name\" is invalid name" |
120 | 116 |
unless $VALID_UPDATE_ARGS{$name}; |
121 | 117 |
} |
122 | 118 |
|
123 | 119 |
# Arguments |
124 |
- my $table = $args->{table} || ''; |
|
125 |
- my $param = $args->{param} || {}; |
|
126 |
- my $where = $args->{where} || {}; |
|
127 |
- my $append_statement = $args->{append} || ''; |
|
128 |
- my $filter = $args->{filter}; |
|
129 |
- my $allow_update_all = $args->{allow_update_all}; |
|
120 |
+ my $table = $args{table} || ''; |
|
121 |
+ my $param = $args{param} || {}; |
|
122 |
+ my $where = $args{where} || {}; |
|
123 |
+ my $append_statement = $args{append} || ''; |
|
124 |
+ my $filter = $args{filter}; |
|
125 |
+ my $allow_update_all = $args{allow_update_all}; |
|
130 | 126 |
|
131 | 127 |
# Update keys |
132 | 128 |
my @update_keys = keys %$param; |
... | ... |
@@ -183,40 +179,26 @@ sub update { |
183 | 179 |
return $ret_val; |
184 | 180 |
} |
185 | 181 |
|
186 |
-sub update_all { |
|
187 |
- my $self = shift;; |
|
188 |
- |
|
189 |
- # Arguments |
|
190 |
- my $args = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
191 |
- |
|
192 |
- # Allow all update |
|
193 |
- $args->{allow_update_all} = 1; |
|
194 |
- |
|
195 |
- # Update all rows |
|
196 |
- return $self->update($args); |
|
197 |
-} |
|
182 |
+sub update_all { shift->update(allow_update_all => 1, @_) }; |
|
198 | 183 |
|
199 | 184 |
our %VALID_DELETE_ARGS |
200 | 185 |
= map { $_ => 1 } qw/table where append filter allow_delete_all/; |
201 | 186 |
|
202 | 187 |
sub delete { |
203 |
- my $self = shift; |
|
204 |
- |
|
205 |
- # Arguments |
|
206 |
- my $args = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
188 |
+ my ($self, %args) = @_; |
|
207 | 189 |
|
208 | 190 |
# Check arguments |
209 |
- foreach my $name (keys %$args) { |
|
191 |
+ foreach my $name (keys %args) { |
|
210 | 192 |
croak "\"$name\" is invalid name" |
211 | 193 |
unless $VALID_DELETE_ARGS{$name}; |
212 | 194 |
} |
213 | 195 |
|
214 | 196 |
# Arguments |
215 |
- my $table = $args->{table} || ''; |
|
216 |
- my $where = $args->{where} || {}; |
|
217 |
- my $append_statement = $args->{append}; |
|
218 |
- my $filter = $args->{filter}; |
|
219 |
- my $allow_delete_all = $args->{allow_delete_all}; |
|
197 |
+ my $table = $args{table} || ''; |
|
198 |
+ my $where = $args{where} || {}; |
|
199 |
+ my $append_statement = $args{append}; |
|
200 |
+ my $filter = $args{filter}; |
|
201 |
+ my $allow_delete_all = $args{allow_delete_all}; |
|
220 | 202 |
|
221 | 203 |
# Where keys |
222 | 204 |
my @where_keys = keys %$where; |
... | ... |
@@ -246,42 +228,29 @@ sub delete { |
246 | 228 |
return $ret_val; |
247 | 229 |
} |
248 | 230 |
|
249 |
-sub delete_all { |
|
250 |
- my $self = shift; |
|
251 |
- |
|
252 |
- # Arguments |
|
253 |
- my $args = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
254 |
- |
|
255 |
- # Allow all delete |
|
256 |
- $args->{allow_delete_all} = 1; |
|
257 |
- |
|
258 |
- # Delete all rows |
|
259 |
- return $self->delete($args); |
|
260 |
-} |
|
231 |
+sub delete_all { shift->delete(allow_delete_all => 1, @_) } |
|
261 | 232 |
|
262 | 233 |
our %VALID_SELECT_ARGS |
263 | 234 |
= map { $_ => 1 } qw/table column where append relation filter param/; |
264 | 235 |
|
265 | 236 |
sub select { |
266 |
- my $self = shift;; |
|
267 |
- |
|
268 |
- my $args = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
237 |
+ my ($self, %args) = @_; |
|
269 | 238 |
|
270 | 239 |
# Check arguments |
271 |
- foreach my $name (keys %$args) { |
|
240 |
+ foreach my $name (keys %args) { |
|
272 | 241 |
croak "\"$name\" is invalid name" |
273 | 242 |
unless $VALID_SELECT_ARGS{$name}; |
274 | 243 |
} |
275 | 244 |
|
276 | 245 |
# Arguments |
277 |
- my $tables = $args->{table} || []; |
|
246 |
+ my $tables = $args{table} || []; |
|
278 | 247 |
$tables = [$tables] unless ref $tables eq 'ARRAY'; |
279 |
- my $columns = $args->{column} || []; |
|
280 |
- my $where = $args->{where} || {}; |
|
281 |
- my $relation = $args->{relation}; |
|
282 |
- my $append = $args->{append}; |
|
283 |
- my $filter = $args->{filter}; |
|
284 |
- my $param = $args->{param} || {}; |
|
248 |
+ my $columns = $args{column} || []; |
|
249 |
+ my $where = $args{where} || {}; |
|
250 |
+ my $relation = $args{relation}; |
|
251 |
+ my $append = $args{append}; |
|
252 |
+ my $filter = $args{filter}; |
|
253 |
+ my $param = $args{param} || {}; |
|
285 | 254 |
|
286 | 255 |
# SQL template for select statement |
287 | 256 |
my $template = 'select '; |
... | ... |
@@ -359,7 +328,8 @@ sub create_query { |
359 | 328 |
} |
360 | 329 |
|
361 | 330 |
# Prepare statement handle |
362 |
- my $sth = $self->dbh->prepare($query->{sql}); |
|
331 |
+ my $sth = eval {$self->dbh->prepare($query->{sql})}; |
|
332 |
+ croak $@ if $@; |
|
363 | 333 |
|
364 | 334 |
# Set statement handle |
365 | 335 |
$query->sth($sth); |
... | ... |
@@ -370,19 +340,15 @@ sub create_query { |
370 | 340 |
our %VALID_EXECUTE_ARGS = map { $_ => 1 } qw/param filter/; |
371 | 341 |
|
372 | 342 |
sub execute{ |
373 |
- my $self = shift; |
|
374 |
- my $query = shift; |
|
375 |
- |
|
376 |
- # Arguments |
|
377 |
- my $args = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
343 |
+ my ($self, $query, %args) = @_; |
|
378 | 344 |
|
379 | 345 |
# Check arguments |
380 |
- foreach my $name (keys %$args) { |
|
346 |
+ foreach my $name (keys %args) { |
|
381 | 347 |
croak "\"$name\" is invalid name" |
382 | 348 |
unless $VALID_EXECUTE_ARGS{$name}; |
383 | 349 |
} |
384 | 350 |
|
385 |
- my $params = $args->{param} || {}; |
|
351 |
+ my $params = $args{param} || {}; |
|
386 | 352 |
|
387 | 353 |
# First argument is SQL template |
388 | 354 |
unless (ref $query eq 'DBIx::Custom::Query') { |
... | ... |
@@ -396,25 +362,15 @@ sub execute{ |
396 | 362 |
$query = $self->create_query($template); |
397 | 363 |
} |
398 | 364 |
|
399 |
- my $filter = $args->{filter} || $query->filter || {}; |
|
365 |
+ my $filter = $args{filter} || $query->filter || {}; |
|
400 | 366 |
|
401 | 367 |
# Create bind value |
402 | 368 |
my $bind_values = $self->_build_bind_values($query, $params, $filter); |
403 | 369 |
|
404 | 370 |
# Execute |
405 | 371 |
my $sth = $query->sth; |
406 |
- my $affected = eval{$sth->execute(@$bind_values)}; |
|
407 |
- |
|
408 |
- # Execute error |
|
409 |
- if (my $execute_error = $@) { |
|
410 |
- require Data::Dumper; |
|
411 |
- my $sql = $query->{sql} || ''; |
|
412 |
- my $params_dump = Data::Dumper->Dump([$params], ['*params']); |
|
413 |
- |
|
414 |
- croak("$execute_error" . |
|
415 |
- "<Your SQL>\n$sql\n" . |
|
416 |
- "<Your parameters>\n$params_dump"); |
|
417 |
- } |
|
372 |
+ my $affected = eval {$sth->execute(@$bind_values)}; |
|
373 |
+ croak $@ if $@; |
|
418 | 374 |
|
419 | 375 |
# Return resultset if select statement is executed |
420 | 376 |
if ($sth->{NUM_OF_FIELDS}) { |
... | ... |
@@ -494,6 +450,9 @@ sub register_filter { |
494 | 450 |
sub auto_commit { |
495 | 451 |
my $self = shift; |
496 | 452 |
|
453 |
+ # Not connected |
|
454 |
+ croak "Not connected" unless $self->dbh; |
|
455 |
+ |
|
497 | 456 |
if (@_) { |
498 | 457 |
|
499 | 458 |
# Set AutoCommit |
... | ... |
@@ -504,8 +463,16 @@ sub auto_commit { |
504 | 463 |
return $self->dbh->{AutoCommit}; |
505 | 464 |
} |
506 | 465 |
|
507 |
-sub commit { shift->dbh->commit } |
|
508 |
-sub rollback { shift->dbh->rollback } |
|
466 |
+sub commit { |
|
467 |
+ my $ret = eval { shift->dbh->commit }; |
|
468 |
+ croak $@ if $@; |
|
469 |
+ return $ret; |
|
470 |
+} |
|
471 |
+sub rollback { |
|
472 |
+ my $ret = eval { shift->dbh->rollback }; |
|
473 |
+ croak $@ if $@; |
|
474 |
+ return $ret; |
|
475 |
+} |
|
509 | 476 |
|
510 | 477 |
sub DESTROY { |
511 | 478 |
my $self = shift; |
... | ... |
@@ -67,7 +67,6 @@ $dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
67 | 67 |
$dbi->disconnect; |
68 | 68 |
ok(!$dbi->dbh, $test); |
69 | 69 |
|
70 |
- |
|
71 | 70 |
# Prepare table |
72 | 71 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
73 | 72 |
$dbi->execute($CREATE_TABLE->{0}); |
... | ... |
@@ -19,7 +19,6 @@ our $SQL_TMPL = { |
19 | 19 |
}; |
20 | 20 |
my $dbi; |
21 | 21 |
|
22 |
- |
|
23 | 22 |
test 'Constructor'; |
24 | 23 |
$dbi = DBIx::Custom->new( |
25 | 24 |
user => 'a', |
... | ... |
@@ -57,7 +57,7 @@ test 'last_insert_rowid'; |
57 | 57 |
$dbi = DBIx::Custom::SQLite->new; |
58 | 58 |
$dbi->connect_memory; |
59 | 59 |
$ret_val = $dbi->execute($CREATE_TABLE->{0}); |
60 |
-$dbi->insert({table => 'table1', param => {key1 => 1, key2 => 2}}); |
|
60 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}); |
|
61 | 61 |
is($dbi->last_insert_rowid, 1, "$test: first"); |
62 | 62 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}); |
63 | 63 |
is($dbi->last_insert_rowid, 2, "$test: second"); |