... | ... |
@@ -1075,20 +1075,6 @@ Query is L<DBIx::Custom::Query> object. |
1075 | 1075 |
Return value is L<DBIx::Custom::Result> if select statement is executed, |
1076 | 1076 |
or the count of affected rows if insert, update, delete statement is executed. |
1077 | 1077 |
|
1078 |
-=head2 C<(experimental) expand> |
|
1079 |
- |
|
1080 |
- my %expand = $dbi->expand($source); |
|
1081 |
- |
|
1082 |
-The following hash |
|
1083 |
- |
|
1084 |
- {book => {title => 'Perl', author => 'Ken'}} |
|
1085 |
- |
|
1086 |
-is expanded to |
|
1087 |
- |
|
1088 |
- ('book.title' => 'Perl', 'book.author' => 'Ken') |
|
1089 |
- |
|
1090 |
-This is used in C<select()> |
|
1091 |
- |
|
1092 | 1078 |
=head2 C<delete> |
1093 | 1079 |
|
1094 | 1080 |
$dbi->delete(table => $table, |
... | ... |
@@ -472,11 +472,11 @@ You can change Result class if you need. |
472 | 472 |
} |
473 | 473 |
); |
474 | 474 |
|
475 |
-=head3 Resister helper method |
|
475 |
+=head3 Resister method method |
|
476 | 476 |
|
477 |
-You can resiter helper method. |
|
477 |
+You can resiter method method. |
|
478 | 478 |
|
479 |
- $dbi->helper( |
|
479 |
+ $dbi->method( |
|
480 | 480 |
update_or_insert => sub { |
481 | 481 |
my $self = shift; |
482 | 482 |
# do something |
... | ... |
@@ -487,7 +487,7 @@ You can resiter helper method. |
487 | 487 |
} |
488 | 488 |
); |
489 | 489 |
|
490 |
-Register helper methods. |
|
490 |
+Register method methods. |
|
491 | 491 |
These method can be called from L<DBIx::Custom> object directory. |
492 | 492 |
|
493 | 493 |
$dbi->update_or_insert; |
... | ... |
@@ -585,6 +585,15 @@ C<delete_all()>、C<select()>で有効になります。 |
585 | 585 |
このような自動的に実行されるフィルタを登録できることがL<DBIx::Custom>の |
586 | 586 |
特徴のひとつです。 |
587 | 587 |
|
588 |
+C<apply_filter()>で適用されたフィルタはテーブル名をを含む列名に対しても有効です。 |
|
589 |
+ |
|
590 |
+ $dbi->select( |
|
591 |
+ table => 'book', |
|
592 |
+ where => {'book.title' => 'Perl', 'book.author' => 'Ken'} |
|
593 |
+ ); |
|
594 |
+ |
|
595 |
+テーブルを区別する必要があるときに便利な機能です。 |
|
596 |
+ |
|
588 | 597 |
=head3 個別のフィルタの適用 C<filter> |
589 | 598 |
|
590 | 599 |
C<apply_filter()>を使って最初にすべてのテーブルの列について |
... | ... |
@@ -1082,24 +1091,6 @@ C<table>を指定する必要のあることに注意してください。 |
1082 | 1091 |
|
1083 | 1092 |
=head2 8. その他の機能 |
1084 | 1093 |
|
1085 |
-=head3 結果クラスの変更 |
|
1086 |
- |
|
1087 |
-必要ならば結果クラスを変更することができます。 |
|
1088 |
- |
|
1089 |
- package MyResult; |
|
1090 |
- use base 'DBIx::Custom::Result'; |
|
1091 |
- |
|
1092 |
- sub some_method { ... } |
|
1093 |
- |
|
1094 |
- 1; |
|
1095 |
- |
|
1096 |
- package main; |
|
1097 |
- |
|
1098 |
- use MyResult; |
|
1099 |
- |
|
1100 |
- my $dbi = DBIx::Custom->connect(...); |
|
1101 |
- $dbi->result_class('MyResult'); |
|
1102 |
- |
|
1103 | 1094 |
=head3 メソッドの登録 |
1104 | 1095 |
|
1105 | 1096 |
メソッドを登録するにはC<method()>を使用します。 |
... | ... |
@@ -1121,27 +1112,60 @@ L<DBIx::Custom>オブジェクトから直接呼び出すことができます |
1121 | 1112 |
$dbi->update_or_insert; |
1122 | 1113 |
$dbi->find_or_create; |
1123 | 1114 |
|
1124 |
-=head3 その他便利なメソッド |
|
1115 |
+=head3 結果クラスの変更 |
|
1116 |
+ |
|
1117 |
+必要ならば結果クラスを変更することができます。 |
|
1118 |
+ |
|
1119 |
+ package MyResult; |
|
1120 |
+ use base 'DBIx::Custom::Result'; |
|
1121 |
+ |
|
1122 |
+ sub some_method { ... } |
|
1125 | 1123 |
|
1126 |
-C<expand>メソッドを使用すると次のようなハッシュに含まれる |
|
1127 |
-テーブル名と列名を結合することができます。 |
|
1124 |
+ 1; |
|
1125 |
+ |
|
1126 |
+ package main; |
|
1127 |
+ |
|
1128 |
+ use MyResult; |
|
1129 |
+ |
|
1130 |
+ my $dbi = DBIx::Custom->connect(...); |
|
1131 |
+ $dbi->result_class('MyResult'); |
|
1128 | 1132 |
|
1129 |
- my %expanded = $dbi->expand(\%source); |
|
1133 |
+=head3 キャッシング |
|
1130 | 1134 |
|
1131 |
-以下のハッシュ |
|
1135 |
+タグの展開後のSQLはパフォーマンスの理由のためにキャッシュされます。 |
|
1136 |
+これはC<chace>で設定でき、デフォルトではキャッシュを行う設定です。 |
|
1132 | 1137 |
|
1133 |
- {book => {title => 'Perl', author => 'Ken'}} |
|
1138 |
+ $dbi->cache(1); |
|
1134 | 1139 |
|
1135 |
-は次のように展開されます。 |
|
1140 |
+キャッシュ方法はC<cache_method>にメソッドを指定することで |
|
1141 |
+変更することができます。 |
|
1142 |
+データの保存と取得のためのメソッドを定義します。 |
|
1136 | 1143 |
|
1137 |
- ('book.title' => 'Perl', 'book.author' => 'Ken') |
|
1144 |
+デフォルトでは次のようにメモリ上にキャッシュを行うものになっています。 |
|
1138 | 1145 |
|
1139 |
-これはテーブル名を含むselect文で利用すると便利です。 |
|
1146 |
+ $dbi->cache_method(sub { |
|
1147 |
+ sub { |
|
1148 |
+ my $self = shift; |
|
1149 |
+ |
|
1150 |
+ $self->{_cached} ||= {}; |
|
1151 |
+ |
|
1152 |
+ if (@_ > 1) { |
|
1153 |
+ # Set |
|
1154 |
+ $self->{_cached}{$_[0]} = $_[1] |
|
1155 |
+ } |
|
1156 |
+ else { |
|
1157 |
+ # Get |
|
1158 |
+ return $self->{_cached}{$_[0]} |
|
1159 |
+ } |
|
1160 |
+ } |
|
1161 |
+ }); |
|
1162 |
+ |
|
1163 |
+第一はL<DBIx::Custom>オブジェクトです。 |
|
1164 |
+第二引数はタグの展開される前のSQLです。 |
|
1165 |
+第三引数はタグの展開後のSQLです。 |
|
1140 | 1166 |
|
1141 |
- my $param = {title => 'Perl', author => '%Ken%'}; |
|
1142 |
- $dbi->execute( |
|
1143 |
- 'select * from book where {= book.title} && {like book.author};', |
|
1144 |
- param => {$dbi->expand({book => $param})} |
|
1145 |
- ); |
|
1167 |
+自分で作成する場合は第三引数が存在した場合はキャッシュを設定し、 |
|
1168 |
+存在しなかった場合はキャッシュを取得する実装に |
|
1169 |
+してください。 |
|
1146 | 1170 |
|
1147 | 1171 |
=cut |