| ... | ... |
@@ -1,3 +1,6 @@ |
| 1 |
+0.1622 |
|
| 2 |
+ deprecated DBIx::Custom::SQLite and DBIx::Custom::MySQL |
|
| 3 |
+ |
|
| 1 | 4 |
0.1621 |
| 2 | 5 |
cleanup (removed undocumented features) |
| 3 | 6 |
0.1620 |
| ... | ... |
@@ -1,6 +1,6 @@ |
| 1 | 1 |
package DBIx::Custom; |
| 2 | 2 |
|
| 3 |
-our $VERSION = '0.1621'; |
|
| 3 |
+our $VERSION = '0.1622'; |
|
| 4 | 4 |
|
| 5 | 5 |
use 5.008001; |
| 6 | 6 |
use strict; |
| ... | ... |
@@ -16,7 +16,7 @@ use DBIx::Custom::QueryBuilder; |
| 16 | 16 |
use Encode qw/encode_utf8 decode_utf8/; |
| 17 | 17 |
|
| 18 | 18 |
__PACKAGE__->attr([qw/data_source dbh default_bind_filter |
| 19 |
- default_fetch_filter password user/]); |
|
| 19 |
+ dbi_options default_fetch_filter password user/]); |
|
| 20 | 20 |
|
| 21 | 21 |
__PACKAGE__->attr(cache => 1); |
| 22 | 22 |
__PACKAGE__->attr(cache_method => sub {
|
| ... | ... |
@@ -84,6 +84,19 @@ sub helper {
|
| 84 | 84 |
return $self; |
| 85 | 85 |
} |
| 86 | 86 |
|
| 87 |
+#sub new {
|
|
| 88 |
+# my $self = shift->SUPER::new(@_); |
|
| 89 |
+# |
|
| 90 |
+# # Check attribute names |
|
| 91 |
+# my @attrs = keys %$self; |
|
| 92 |
+# foreach my $attr (@attrs) {
|
|
| 93 |
+# croak qq{"$attr" is invalid attribute name"}
|
|
| 94 |
+# unless $self->can($attr); |
|
| 95 |
+# } |
|
| 96 |
+# |
|
| 97 |
+# return $self; |
|
| 98 |
+#} |
|
| 99 |
+ |
|
| 87 | 100 |
sub connect {
|
| 88 | 101 |
my $proto = shift; |
| 89 | 102 |
|
| ... | ... |
@@ -92,10 +105,13 @@ sub connect {
|
| 92 | 105 |
|
| 93 | 106 |
# Information |
| 94 | 107 |
my $data_source = $self->data_source; |
| 108 |
+ |
|
| 109 |
+ croak qq{"data_source" must be specfied to connect method"}
|
|
| 110 |
+ unless $data_source; |
|
| 111 |
+ |
|
| 95 | 112 |
my $user = $self->user; |
| 96 | 113 |
my $password = $self->password; |
| 97 | 114 |
|
| 98 |
- |
|
| 99 | 115 |
# Connect |
| 100 | 116 |
my $dbh = eval {DBI->connect(
|
| 101 | 117 |
$data_source, |
| ... | ... |
@@ -383,6 +383,52 @@ Note that in fetch filter, column names must be lower case |
| 383 | 383 |
even if the column name conatains upper case charactors. |
| 384 | 384 |
This is requirment not to depend database systems. |
| 385 | 385 |
|
| 386 |
+B<Filter examples> |
|
| 387 |
+ |
|
| 388 |
+MySQL |
|
| 389 |
+ |
|
| 390 |
+ # Time::Piece object to DATETIME format |
|
| 391 |
+ tp_to_datetime => sub {
|
|
| 392 |
+ return shift->strftime('%Y-%m-%d %H:%M:%S');
|
|
| 393 |
+ } |
|
| 394 |
+ |
|
| 395 |
+ # Time::Piece object to DATE format |
|
| 396 |
+ tp_to_date => sub {
|
|
| 397 |
+ return shift->strftime('%Y-%m-%d');
|
|
| 398 |
+ }, |
|
| 399 |
+ |
|
| 400 |
+ # DATETIME to Time::Piece object |
|
| 401 |
+ datetime_to_tp => sub {
|
|
| 402 |
+ return Time::Piece->strptime(shift, '%Y-%m-%d %H:%M:%S'); |
|
| 403 |
+ } |
|
| 404 |
+ |
|
| 405 |
+ # DATE to Time::Piece object |
|
| 406 |
+ date_to_tp => sub {
|
|
| 407 |
+ return Time::Piece->strptime(shift, '%Y-%m-%d'); |
|
| 408 |
+ } |
|
| 409 |
+ |
|
| 410 |
+SQLite |
|
| 411 |
+ |
|
| 412 |
+ # Time::Piece object to DATETIME format |
|
| 413 |
+ tp_to_datetime => sub {
|
|
| 414 |
+ return shift->strftime('%Y-%m-%d %H:%M:%S');
|
|
| 415 |
+ } |
|
| 416 |
+ |
|
| 417 |
+ # Time::Piece object to DATE format |
|
| 418 |
+ tp_to_date => sub {
|
|
| 419 |
+ return shift->strftime('%Y-%m-%d');
|
|
| 420 |
+ }, |
|
| 421 |
+ |
|
| 422 |
+ # DATETIME to Time::Piece object |
|
| 423 |
+ datetime_to_tp => sub {
|
|
| 424 |
+ return Time::Piece->strptime(shift, $FORMATS->{db_datetime});
|
|
| 425 |
+ } |
|
| 426 |
+ |
|
| 427 |
+ # DATE to Time::Piece object |
|
| 428 |
+ date_to_tp => sub {
|
|
| 429 |
+ return Time::Piece->strptime(shift, $FORMATS->{db_date});
|
|
| 430 |
+ } |
|
| 431 |
+ |
|
| 386 | 432 |
=head2 6. Get high performance |
| 387 | 433 |
|
| 388 | 434 |
=head3 Disable filter checking |
| ... | ... |
@@ -458,6 +458,52 @@ C<title>の値にはデフォルトのフィルタであるC<encode_utf8>が適 |
| 458 | 458 |
C<author>の値にはC<to_upper_case>が適用されます。 |
| 459 | 459 |
C<price>にはundefを設定しているのでフィルタが解除されます。 |
| 460 | 460 |
|
| 461 |
+B<フィルタのサンプル> |
|
| 462 |
+ |
|
| 463 |
+MySQL |
|
| 464 |
+ |
|
| 465 |
+ # Time::Piece object to DATETIME format |
|
| 466 |
+ tp_to_datetime => sub {
|
|
| 467 |
+ return shift->strftime('%Y-%m-%d %H:%M:%S');
|
|
| 468 |
+ } |
|
| 469 |
+ |
|
| 470 |
+ # Time::Piece object to DATE format |
|
| 471 |
+ tp_to_date => sub {
|
|
| 472 |
+ return shift->strftime('%Y-%m-%d');
|
|
| 473 |
+ } |
|
| 474 |
+ |
|
| 475 |
+ # DATETIME to Time::Piece object |
|
| 476 |
+ datetime_to_tp => sub {
|
|
| 477 |
+ return Time::Piece->strptime(shift, '%Y-%m-%d %H:%M:%S'); |
|
| 478 |
+ } |
|
| 479 |
+ |
|
| 480 |
+ # DATE to Time::Piece object |
|
| 481 |
+ date_to_tp => sub {
|
|
| 482 |
+ return Time::Piece->strptime(shift, '%Y-%m-%d'); |
|
| 483 |
+ } |
|
| 484 |
+ |
|
| 485 |
+SQLite |
|
| 486 |
+ |
|
| 487 |
+ # Time::Piece object to DATETIME format |
|
| 488 |
+ tp_to_datetime => sub {
|
|
| 489 |
+ return shift->strftime('%Y-%m-%d %H:%M:%S');
|
|
| 490 |
+ } |
|
| 491 |
+ |
|
| 492 |
+ # Time::Piece object to DATE format |
|
| 493 |
+ tp_to_date => sub {
|
|
| 494 |
+ return shift->strftime('%Y-%m-%d');
|
|
| 495 |
+ } |
|
| 496 |
+ |
|
| 497 |
+ # DATETIME to Time::Piece object |
|
| 498 |
+ datetime_to_tp => sub {
|
|
| 499 |
+ return Time::Piece->strptime(shift, $FORMATS->{db_datetime});
|
|
| 500 |
+ } |
|
| 501 |
+ |
|
| 502 |
+ # DATE to Time::Piece object |
|
| 503 |
+ date_to_tp => sub {
|
|
| 504 |
+ return Time::Piece->strptime(shift, $FORMATS->{db_date});
|
|
| 505 |
+ } |
|
| 506 |
+ |
|
| 461 | 507 |
=head3 行のフェッチ時のフィルタリング |
| 462 | 508 |
|
| 463 | 509 |
行をフェッチするときのフィルタも設定することができます。 |