| ... | ... |
@@ -1,7 +1,8 @@ |
| 1 |
+0.1602 |
|
| 2 |
+ added cache_method attribute |
|
| 1 | 3 |
0.1601 |
| 2 | 4 |
added cache attribute |
| 3 | 5 |
select, insert, update, update_all, delete, delete_all, execute only receive hash argument(not backword compatible) |
| 4 |
- |
|
| 5 | 6 |
0.1503 |
| 6 | 7 |
removed reconnect method |
| 7 | 8 |
removed connected method |
| ... | ... |
@@ -25,7 +25,22 @@ __PACKAGE__->register_filter( |
| 25 | 25 |
|
| 26 | 26 |
__PACKAGE__->attr(result_class => 'DBIx::Custom::Result'); |
| 27 | 27 |
__PACKAGE__->attr(sql_template => sub { DBIx::Custom::SQLTemplate->new });
|
| 28 |
+ |
|
| 28 | 29 |
__PACKAGE__->attr(cache => 1); |
| 30 |
+__PACKAGE__->attr(cache_method => sub {
|
|
| 31 |
+ sub {
|
|
| 32 |
+ my $self = shift; |
|
| 33 |
+ |
|
| 34 |
+ $self->{_cached} ||= {};
|
|
| 35 |
+ |
|
| 36 |
+ if (@_ > 1) {
|
|
| 37 |
+ $self->{_cached}{$_[0]} = $_[1]
|
|
| 38 |
+ } |
|
| 39 |
+ else {
|
|
| 40 |
+ return $self->{_cached}{$_[0]}
|
|
| 41 |
+ } |
|
| 42 |
+ } |
|
| 43 |
+}); |
|
| 29 | 44 |
|
| 30 | 45 |
sub connect {
|
| 31 | 46 |
my $proto = shift; |
| ... | ... |
@@ -309,20 +324,30 @@ sub create_query {
|
| 309 | 324 |
# Create query from SQL template |
| 310 | 325 |
my $sql_template = $self->sql_template; |
| 311 | 326 |
|
| 312 |
- # Get cached query |
|
| 313 |
- my $cached = $self->{_cached}->{$template};
|
|
| 327 |
+ my $cache = $self->cache; |
|
| 314 | 328 |
|
| 315 | 329 |
# Create query |
| 316 | 330 |
my $query; |
| 317 |
- if ($cached) {
|
|
| 318 |
- $query = DBIx::Custom::Query->new($cached); |
|
| 331 |
+ if ($cache) {
|
|
| 332 |
+ |
|
| 333 |
+ # Cached query |
|
| 334 |
+ my $q = $self->cache_method->($self, $template); |
|
| 335 |
+ |
|
| 336 |
+ # Create query |
|
| 337 |
+ $query = DBIx::Custom::Query->new($q) if $q; |
|
| 319 | 338 |
} |
| 320 |
- else {
|
|
| 339 |
+ |
|
| 340 |
+ unless ($query) {
|
|
| 341 |
+ |
|
| 342 |
+ # Create query |
|
| 321 | 343 |
$query = eval{$sql_template->create_query($template)};
|
| 322 | 344 |
croak($@) if $@; |
| 323 | 345 |
|
| 324 |
- $self->{_cached}->{$template} = {sql => $query->sql, columns => $query->columns}
|
|
| 325 |
- if $self->cache && ! $self->{_cached}->{$template};
|
|
| 346 |
+ # Cache query |
|
| 347 |
+ $self->cache_method->($self, $template, |
|
| 348 |
+ {sql => $query->sql,
|
|
| 349 |
+ columns => $query->columns}) |
|
| 350 |
+ if $cache; |
|
| 326 | 351 |
} |
| 327 | 352 |
|
| 328 | 353 |
# Prepare statement handle |
| ... | ... |
@@ -485,11 +510,11 @@ DBIx::Custom - DBI with hash parameter binding and filtering system |
| 485 | 510 |
|
| 486 | 511 |
=head1 VERSION |
| 487 | 512 |
|
| 488 |
-Version 0.1503 |
|
| 513 |
+Version 0.1602 |
|
| 489 | 514 |
|
| 490 | 515 |
=cut |
| 491 | 516 |
|
| 492 |
-our $VERSION = '0.1503'; |
|
| 517 |
+our $VERSION = '0.1602'; |
|
| 493 | 518 |
$VERSION = eval $VERSION; |
| 494 | 519 |
|
| 495 | 520 |
=head1 STABILITY |
| ... | ... |
@@ -920,6 +945,39 @@ This is equal to |
| 920 | 945 |
|
| 921 | 946 |
$dbi->dbh->rollback; |
| 922 | 947 |
|
| 948 |
+=head2 cache |
|
| 949 |
+ |
|
| 950 |
+Cache the result of parsing SQL template. |
|
| 951 |
+ |
|
| 952 |
+ $dbi = $dbi->cache(1); |
|
| 953 |
+ $cache = $dbi->cache; |
|
| 954 |
+ |
|
| 955 |
+Default to 1. |
|
| 956 |
+ |
|
| 957 |
+=head2 cache_method |
|
| 958 |
+ |
|
| 959 |
+Method for cache. |
|
| 960 |
+ |
|
| 961 |
+ $dbi = $dbi->cache_method(sub { ... });
|
|
| 962 |
+ $cache_method = $dbi->cache_method |
|
| 963 |
+ |
|
| 964 |
+Example: |
|
| 965 |
+ |
|
| 966 |
+ $dbi->cache_method( |
|
| 967 |
+ sub {
|
|
| 968 |
+ my $self = shift; |
|
| 969 |
+ |
|
| 970 |
+ $self->{_cached} ||= {};
|
|
| 971 |
+ |
|
| 972 |
+ if (@_ > 1) {
|
|
| 973 |
+ $self->{_cached}{$_[0]} = $_[1]
|
|
| 974 |
+ } |
|
| 975 |
+ else {
|
|
| 976 |
+ return $self->{_cached}{$_[0]}
|
|
| 977 |
+ } |
|
| 978 |
+ } |
|
| 979 |
+ ); |
|
| 980 |
+ |
|
| 923 | 981 |
=head1 AUTHOR |
| 924 | 982 |
|
| 925 | 983 |
Yuki Kimoto, C<< <kimoto.yuki at gmail.com> >> |
| ... | ... |
@@ -932,3 +990,5 @@ This program is free software; you can redistribute it and/or modify it |
| 932 | 990 |
under the same terms as Perl itself. |
| 933 | 991 |
|
| 934 | 992 |
=cut |
| 993 |
+ |
|
| 994 |
+ |