removed experimental register_method(), and methods...
...attribute, because it is too...
| ... | ... |
@@ -1,3 +1,5 @@ |
| 1 |
+0.1616 |
|
| 2 |
+ removed experimental register_method(), and methods attribute, because it is too magical |
|
| 1 | 3 |
0.1615 |
| 2 | 4 |
fixed DBIx::Custom::QueryBuilder build_query() bug |
| 3 | 5 |
required Perl 5.008001 to use @CARP_NOT |
| ... | ... |
@@ -1,6 +1,6 @@ |
| 1 | 1 |
package DBIx::Custom; |
| 2 | 2 |
|
| 3 |
-our $VERSION = '0.1615'; |
|
| 3 |
+our $VERSION = '0.1616'; |
|
| 4 | 4 |
|
| 5 | 5 |
use 5.008001; |
| 6 | 6 |
use strict; |
| ... | ... |
@@ -58,6 +58,7 @@ sub connect {
|
| 58 | 58 |
my $user = $self->user; |
| 59 | 59 |
my $password = $self->password; |
| 60 | 60 |
|
| 61 |
+ |
|
| 61 | 62 |
# Connect |
| 62 | 63 |
my $dbh = eval {DBI->connect(
|
| 63 | 64 |
$data_source, |
| ... | ... |
@@ -116,7 +117,7 @@ sub insert {
|
| 116 | 117 |
|
| 117 | 118 |
# Execute query |
| 118 | 119 |
my $ret_val = $self->execute($source, param => $param, |
| 119 |
- filter => $filter); |
|
| 120 |
+ filter => $filter); |
|
| 120 | 121 |
|
| 121 | 122 |
return $ret_val; |
| 122 | 123 |
} |
| ... | ... |
@@ -354,11 +355,7 @@ sub create_query {
|
| 354 | 355 |
# Prepare statement handle |
| 355 | 356 |
my $sth; |
| 356 | 357 |
eval { $sth = $self->dbh->prepare($query->{sql})};
|
| 357 |
- if ($@) {
|
|
| 358 |
- my $error = $@; |
|
| 359 |
- $error =~ s/\s+at\s+.*?\s+line\s+\d+.*$//s; |
|
| 360 |
- croak qq{$error. SQL: "$query->{sql}"};
|
|
| 361 |
- } |
|
| 358 |
+ $self->_croak($@, qq{. SQL: "$query->{sql}"}) if $@;
|
|
| 362 | 359 |
|
| 363 | 360 |
# Set statement handle |
| 364 | 361 |
$query->sth($sth); |
| ... | ... |
@@ -366,6 +363,25 @@ sub create_query {
|
| 366 | 363 |
return $query; |
| 367 | 364 |
} |
| 368 | 365 |
|
| 366 |
+sub _croak {
|
|
| 367 |
+ my ($self, $error, $append) = @_; |
|
| 368 |
+ $append ||= ""; |
|
| 369 |
+ |
|
| 370 |
+ # Verbose |
|
| 371 |
+ if ($Carp::Verbose) { croak $error }
|
|
| 372 |
+ |
|
| 373 |
+ # Not verbose |
|
| 374 |
+ else {
|
|
| 375 |
+ |
|
| 376 |
+ # Remove line and module infromation |
|
| 377 |
+ my $at_pos = rindex($error, ' at '); |
|
| 378 |
+ $error = substr($error, 0, $at_pos); |
|
| 379 |
+ $error =~ s/\s+$//; |
|
| 380 |
+ |
|
| 381 |
+ croak "$error$append"; |
|
| 382 |
+ } |
|
| 383 |
+} |
|
| 384 |
+ |
|
| 369 | 385 |
our %VALID_EXECUTE_ARGS = map { $_ => 1 } qw/param filter/;
|
| 370 | 386 |
|
| 371 | 387 |
sub execute{
|
| ... | ... |
@@ -392,11 +408,7 @@ sub execute{
|
| 392 | 408 |
my $sth = $query->sth; |
| 393 | 409 |
my $affected; |
| 394 | 410 |
eval {$affected = $sth->execute(@$bind_values)};
|
| 395 |
- if ($@) {
|
|
| 396 |
- my $error = $@; |
|
| 397 |
- $error =~ s/\s+at\s+.*?\s+line\s+\d+.*$//s; |
|
| 398 |
- croak $error; |
|
| 399 |
- } |
|
| 411 |
+ $self->_croak($@) if $@; |
|
| 400 | 412 |
|
| 401 | 413 |
# Return resultset if select statement is executed |
| 402 | 414 |
if ($sth->{NUM_OF_FIELDS}) {
|
| ... | ... |
@@ -475,43 +487,12 @@ sub _check_filter {
|
| 475 | 487 |
} |
| 476 | 488 |
} |
| 477 | 489 |
|
| 478 |
-__PACKAGE__->attr('methods' => sub { {} });
|
|
| 479 |
- |
|
| 480 |
-sub register_method {
|
|
| 481 |
- my $self = shift; |
|
| 482 |
- |
|
| 483 |
- # Register method |
|
| 484 |
- my $methods = ref $_[0] eq 'HASH' ? $_[0] : {@_};
|
|
| 485 |
- $self->methods({%{$self->methods}, %$methods});
|
|
| 486 |
- |
|
| 487 |
- return $self; |
|
| 488 |
-} |
|
| 489 |
- |
|
| 490 |
-our $AUTOLOAD; |
|
| 491 |
-sub AUTOLOAD {
|
|
| 492 |
- my $self = shift; |
|
| 493 |
- my $method = $AUTOLOAD; |
|
| 494 |
- $method =~ s/.*:://; |
|
| 495 |
- |
|
| 496 |
- return if $method eq 'DESTROY'; |
|
| 497 |
- |
|
| 498 |
- croak qq{Method "$method" is not registered"}
|
|
| 499 |
- unless $self->methods->{$method};
|
|
| 500 |
- |
|
| 501 |
- return $self->methods->{$method}->($self, @_);
|
|
| 502 |
-} |
|
| 503 |
- |
|
| 504 | 490 |
1; |
| 505 | 491 |
|
| 506 | 492 |
=head1 NAME |
| 507 | 493 |
|
| 508 | 494 |
DBIx::Custom - DBI interface, having hash parameter binding and filtering system |
| 509 | 495 |
|
| 510 |
-=head1 STABILITY |
|
| 511 |
- |
|
| 512 |
-B<This module is not stable>. |
|
| 513 |
-Method name and implementations will be changed for a while. |
|
| 514 |
- |
|
| 515 | 496 |
=head1 SYNOPSYS |
| 516 | 497 |
|
| 517 | 498 |
Connect to the database. |
| ... | ... |
@@ -1236,13 +1217,6 @@ Default to 1. |
| 1236 | 1217 |
This check maybe damege performance. |
| 1237 | 1218 |
If you require performance, set C<filter_check> attribute to 0. |
| 1238 | 1219 |
|
| 1239 |
-=head2 C<(experimental) methods> |
|
| 1240 |
- |
|
| 1241 |
- my $methods = $dbi->methods; |
|
| 1242 |
- $dbi = $dbi->methods(\%methods); |
|
| 1243 |
- |
|
| 1244 |
-Additional methods. |
|
| 1245 |
- |
|
| 1246 | 1220 |
=head1 METHODS |
| 1247 | 1221 |
|
| 1248 | 1222 |
L<DBIx::Custom> inherits all methods from L<Object::Simple> |
| ... | ... |
@@ -1505,21 +1479,6 @@ B<Example:> |
| 1505 | 1479 |
} |
| 1506 | 1480 |
); |
| 1507 | 1481 |
|
| 1508 |
-=head2 C<(experimental) register_method> |
|
| 1509 |
- |
|
| 1510 |
- $dbi->register_method( |
|
| 1511 |
- begin_work => sub { shift->dbh->begin_work },
|
|
| 1512 |
- commit => sub { shift->dbh->commit },
|
|
| 1513 |
- rollback => sub { shift->dbh->rollback}
|
|
| 1514 |
- ); |
|
| 1515 |
- |
|
| 1516 |
-Register methods to the object. You can call these methods |
|
| 1517 |
-from the object. |
|
| 1518 |
- |
|
| 1519 |
- $dbi->begin_work; |
|
| 1520 |
- $dbi->commit; |
|
| 1521 |
- $dbi->rollback; |
|
| 1522 |
- |
|
| 1523 | 1482 |
=head1 BUGS |
| 1524 | 1483 |
|
| 1525 | 1484 |
Please tell me bugs if found. |
| ... | ... |
@@ -542,8 +542,17 @@ like($@, qr/\QColumn name "not_exists" in bind filter is not found in paramters/ |
| 542 | 542 |
test 'execute'; |
| 543 | 543 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| 544 | 544 |
$dbi->execute($CREATE_TABLE->{0});
|
| 545 |
-eval{$dbi->execute('select * frm table1')};
|
|
| 546 |
-like($@, qr/\Qselect * frm table1;/, "$test : fail prepare"); |
|
| 545 |
+{
|
|
| 546 |
+ local $Carp::Verbose = 0; |
|
| 547 |
+ eval{$dbi->execute('select * frm table1')};
|
|
| 548 |
+ like($@, qr/\Qselect * frm table1;/, "$test : fail prepare"); |
|
| 549 |
+ like($@, qr/\.t /, "$test: fail : not verbose"); |
|
| 550 |
+} |
|
| 551 |
+{
|
|
| 552 |
+ local $Carp::Verbose = 1; |
|
| 553 |
+ eval{$dbi->execute('select * frm table1')};
|
|
| 554 |
+ like($@, qr/Custom.*\.t /s, "$test : fail : verbose"); |
|
| 555 |
+} |
|
| 547 | 556 |
|
| 548 | 557 |
eval{$dbi->execute('select * from table1', no_exists => 1)};
|
| 549 | 558 |
like($@, qr/\Q"no_exists" is invalid argument/, "$test : invald SQL"); |
| ... | ... |
@@ -553,17 +562,13 @@ $dbi->dbh->disconnect; |
| 553 | 562 |
eval{$dbi->execute($query, param => {key1 => {a => 1}})};
|
| 554 | 563 |
ok($@, "$test: execute fail"); |
| 555 | 564 |
|
| 556 |
-eval{$dbi->create_query('select * from table1 where {0 key1}')};
|
|
| 557 |
-like($@, qr/\Q.t /, "$test : caller spec"); |
|
| 558 |
- |
|
| 559 |
- |
|
| 560 |
-test 'register_method'; |
|
| 561 |
-$dbi = DBIx::Custom::SQLite->new; |
|
| 562 |
-$dbi->register_method( |
|
| 563 |
- one => sub { 1 },
|
|
| 564 |
-); |
|
| 565 |
-$dbi->register_method({
|
|
| 566 |
- two => sub { 2 }
|
|
| 567 |
-}); |
|
| 568 |
-is($dbi->one, 1, "$test : hash"); |
|
| 569 |
-is($dbi->two, 2, "$test : hash reference"); |
|
| 565 |
+{
|
|
| 566 |
+ local $Carp::Verbose = 0; |
|
| 567 |
+ eval{$dbi->create_query('select * from table1 where {0 key1}')};
|
|
| 568 |
+ like($@, qr/\Q.t /, "$test : caller spec : not vebose"); |
|
| 569 |
+} |
|
| 570 |
+{
|
|
| 571 |
+ local $Carp::Verbose = 1; |
|
| 572 |
+ eval{$dbi->create_query('select * from table1 where {0 key1}')};
|
|
| 573 |
+ like($@, qr/QueryBuilder.*\.t /s, "$test : caller spec : not vebose"); |
|
| 574 |
+} |