| ... | ... | 
                  @@ -170,14 +170,23 @@ sub do{
                 | 
              
| 170 | 170 | 
                  # Create query  | 
              
| 171 | 171 | 
                   sub create_query {
                 | 
              
| 172 | 172 | 
                  my ($self, $template) = @_;  | 
              
| 173 | 
                  + my $class = ref $self;  | 
              |
| 173 | 174 | 
                   | 
              
| 174 | 175 | 
                  # Create query from SQL template  | 
              
| 175 | 176 | 
                  my $sql_template = $self->sql_template;  | 
              
| 176 | 
                  -    my $query = eval{$sql_template->create_query($template)};
                 | 
              |
| 177 | 
                  - croak($@) if $@;  | 
              |
| 178 | 177 | 
                   | 
              
| 179 | 
                  - # Create Query object;  | 
              |
| 180 | 
                  - $query = DBI::Custom::Query->new($query);  | 
              |
| 178 | 
                  + # Try to get cached query  | 
              |
| 179 | 
                  +    my $query = $class->_query_caches->{$template};
                 | 
              |
| 180 | 
                  +  | 
              |
| 181 | 
                  + # Create query  | 
              |
| 182 | 
                  +    unless ($query) {
                 | 
              |
| 183 | 
                  +        $query = eval{$sql_template->create_query($template)};
                 | 
              |
| 184 | 
                  + croak($@) if $@;  | 
              |
| 185 | 
                  +  | 
              |
| 186 | 
                  + $query = DBI::Custom::Query->new($query);  | 
              |
| 187 | 
                  +  | 
              |
| 188 | 
                  + $class->_add_query_cache($template, $query);  | 
              |
| 189 | 
                  + }  | 
              |
| 181 | 190 | 
                   | 
              
| 182 | 191 | 
                  # Connect if not  | 
              
| 183 | 192 | 
                  $self->connect unless $self->connected;  | 
              
| ... | ... | 
                  @@ -556,6 +565,34 @@ sub delete_all {
                 | 
              
| 556 | 565 | 
                       return $self->delete($table, {}, $edit_query_cb, {allow_delete_all => 1});
                 | 
              
| 557 | 566 | 
                  }  | 
              
| 558 | 567 | 
                   | 
              
| 568 | 
                  +sub _query_caches     : ClassAttr { type => 'hash',
                 | 
              |
| 569 | 
                  +                                    auto_build => sub {shift->_query_caches({}) } }
                 | 
              |
| 570 | 
                  +  | 
              |
| 571 | 
                  +sub _query_cache_keys : ClassAttr { type => 'array',
                 | 
              |
| 572 | 
                  +                                    auto_build => sub {shift->_query_cache_keys([])} }
                 | 
              |
| 573 | 
                  +  | 
              |
| 574 | 
                  +sub query_cache_max   : ClassAttr { auto_build => sub {shift->query_cache_max(50)} }
                 | 
              |
| 575 | 
                  +  | 
              |
| 576 | 
                  +# Add query cahce  | 
              |
| 577 | 
                  +sub _add_query_cache {
                 | 
              |
| 578 | 
                  + my ($class, $template, $query) = @_;  | 
              |
| 579 | 
                  + my $query_cache_keys = $class->_query_cache_keys;  | 
              |
| 580 | 
                  + my $query_caches = $class->_query_caches;  | 
              |
| 581 | 
                  +  | 
              |
| 582 | 
                  +    return $class if $query_caches->{$template};
                 | 
              |
| 583 | 
                  +  | 
              |
| 584 | 
                  +    $query_caches->{$template} = $query;
                 | 
              |
| 585 | 
                  + push @$query_cache_keys, $template;  | 
              |
| 586 | 
                  +  | 
              |
| 587 | 
                  + my $overflow = @$query_cache_keys - $class->query_cache_max;  | 
              |
| 588 | 
                  +  | 
              |
| 589 | 
                  +    for (my $i = 0; $i < $overflow; $i++) {
                 | 
              |
| 590 | 
                  + my $template = shift @$query_cache_keys;  | 
              |
| 591 | 
                  +        delete $query_caches->{$template};
                 | 
              |
| 592 | 
                  + }  | 
              |
| 593 | 
                  +  | 
              |
| 594 | 
                  + return $class;  | 
              |
| 595 | 
                  +}  | 
              |
| 559 | 596 | 
                   | 
              
| 560 | 597 | 
                  Object::Simple->build_class;  | 
              
| 561 | 598 | 
                   | 
              
| ... | ... | 
                  @@ -857,6 +894,17 @@ If tranzation is died, rollback is execute.  | 
              
| 857 | 894 | 
                   | 
              
| 858 | 895 | 
                  This method is same as DBI last_insert_id;  | 
              
| 859 | 896 | 
                   | 
              
| 897 | 
                  +=head1 Class Accessors  | 
              |
| 898 | 
                  +  | 
              |
| 899 | 
                  +=head2 query_cache_max  | 
              |
| 900 | 
                  +  | 
              |
| 901 | 
                  + # Max query cache count  | 
              |
| 902 | 
                  + $class = $class->query_cache_max($query_cache_max);  | 
              |
| 903 | 
                  + $query_cache_max = $class->query_cache_max;  | 
              |
| 904 | 
                  +  | 
              |
| 905 | 
                  + # Sample  | 
              |
| 906 | 
                  + DBI::Custom->query_cache_max(50);  | 
              |
| 907 | 
                  +  | 
              |
| 860 | 908 | 
                  =head1 CAUTION  | 
              
| 861 | 909 | 
                   | 
              
| 862 | 910 | 
                  DBI::Custom have DIB object internal.  |