| ... | ... |
@@ -1000,7 +1000,8 @@ L<DBIx::Custom>のC<not_exists>でDBIx::Custom::NotExistsオブジェクトを |
| 1000 | 1000 |
|
| 1001 | 1001 |
=head3 C<select()>との連携 |
| 1002 | 1002 |
|
| 1003 |
-C<select()>との連携です。C<select()>のC<where>に直接渡すことが |
|
| 1003 |
+L<DBIx::Custom::Where>オブジェクトは |
|
| 1004 |
+C<select()>のC<where>に直接渡すことが |
|
| 1004 | 1005 |
できます。 |
| 1005 | 1006 |
|
| 1006 | 1007 |
my $where = $dbi->where; |
| ... | ... |
@@ -1008,7 +1009,7 @@ C<select()>との連携です。C<select()>のC<where>に直接渡すことが |
| 1008 | 1009 |
$where->param($param); |
| 1009 | 1010 |
my $result = $dbi->select(table => 'book', where => $where); |
| 1010 | 1011 |
|
| 1011 |
-あるいはC<update>、C<delete>と連携することが可能です。 |
|
| 1012 |
+あるいはC<update()>、C<delete()>のwhereに指定することも可能です。 |
|
| 1012 | 1013 |
|
| 1013 | 1014 |
=head3 C<execute()>との連携 |
| 1014 | 1015 |
|
| ... | ... |
@@ -1028,18 +1029,23 @@ C<execute()>との連携です。SQLを作成するときに埋め込むこと |
| 1028 | 1029 |
|
| 1029 | 1030 |
=head2 7. パフォーマンスの改善 |
| 1030 | 1031 |
|
| 1031 |
-=head3 シュガーメソッドを使わない |
|
| 1032 |
+=head3 クエリの作成 |
|
| 1032 | 1033 |
|
| 1033 | 1034 |
もしC<insert()>メソッドを使用してインサートを実行した場合、 |
| 1034 | 1035 |
必要なパフォーマンスを得られない場合があるかもしれません。 |
| 1035 | 1036 |
C<insert()>メソッドは、SQL文とステートメントハンドルを |
| 1036 |
-毎回作成するためすこし遅いです。 |
|
| 1037 |
+毎回作成するためです。 |
|
| 1038 |
+ |
|
| 1039 |
+そのような場合は、C<query>オプションを指定することで、 |
|
| 1040 |
+クエリを取得することができます。 |
|
| 1041 |
+ |
|
| 1042 |
+ my $query = $dbi->insert(table => 'book', param => $param, query => 1); |
|
| 1043 |
+ |
|
| 1044 |
+またC<create_query()>メソッドを使って任意のSQLのクエリを作成 |
|
| 1045 |
+することもできます。 |
|
| 1037 | 1046 |
|
| 1038 |
-そのような場合は、C<create_query()>メソッドによって |
|
| 1039 |
-クエリを用意しておくことができます。 |
|
| 1040 |
- |
|
| 1041 | 1047 |
my $query = $dbi->create_query( |
| 1042 |
- "insert into book {insert_param title author};"
|
|
| 1048 |
+ "insert into book {insert_param title author};";
|
|
| 1043 | 1049 |
); |
| 1044 | 1050 |
|
| 1045 | 1051 |
戻り値はL<DBIx::Custom::Query>オブジェクトです。 |
| ... | ... |
@@ -1052,48 +1058,35 @@ C<insert()>メソッドは、SQL文とステートメントハンドルを |
| 1052 | 1058 |
sth => $sth |
| 1053 | 1059 |
} |
| 1054 | 1060 |
|
| 1055 |
-クエリオブジェクトを使って繰り返し実行するには次のようにします。 |
|
| 1061 |
+クエリオブジェクトを使って繰り返し実行するにはC<execute()>を使用します。 |
|
| 1056 | 1062 |
|
| 1057 |
- my $inputs = [ |
|
| 1063 |
+ my $params = [ |
|
| 1058 | 1064 |
{title => 'Perl', author => 'Ken'},
|
| 1059 | 1065 |
{title => 'Good days', author => 'Mike'}
|
| 1060 | 1066 |
]; |
| 1061 | 1067 |
|
| 1062 |
- foreach my $input (@$inputs) {
|
|
| 1063 |
- $dbi->execute($query, $input); |
|
| 1068 |
+ foreach my $param (@$paramss) {
|
|
| 1069 |
+ $dbi->execute($query, table => 'book', param => $input); |
|
| 1064 | 1070 |
} |
| 1065 | 1071 |
|
| 1066 | 1072 |
C<execute>メソッドの第一引数にクエリオブジェトを渡すことができます。 |
| 1067 |
-これはC<insert()>メソッドよりも高速です。 |
|
| 1068 |
- |
|
| 1069 |
-=head2 8. その他の機能 |
|
| 1073 |
+C<insert()>メソッドよりも高速です。 |
|
| 1070 | 1074 |
|
| 1071 |
-=head3 トランザクション |
|
| 1075 |
+注意点がいくつかあります。それはパラメータの数は必ず同じでなくてはならない |
|
| 1076 |
+ということです。最初に3つのパラメータだけを渡したのに、次の実行では |
|
| 1077 |
+二つのパラメータを渡すと予期しない結果になります。それは |
|
| 1078 |
+動的に生成されたSQLに含まれるプレースホルダの数が異なるからです。 |
|
| 1079 |
+またC<execute()>によっては自動的にはフィルタが有効にならないので、 |
|
| 1080 |
+C<table>を指定する必要のあることに注意してください。 |
|
| 1081 |
+本当に必要な場合だけ利用してください。 |
|
| 1072 | 1082 |
|
| 1073 |
-トランザクションを便利に利用するために、 |
|
| 1074 |
-C<begin_work()>、C<commit()>、C<rollback()> |
|
| 1075 |
-という三つのメソッドが容易されています。 |
|
| 1076 |
-これはL<DBI>の同名のメソッドと同じ機能を持ちます。 |
|
| 1077 |
-fc |
|
| 1078 |
- $dbi->begin_work; |
|
| 1079 |
- |
|
| 1080 |
- eval {
|
|
| 1081 |
- $dbi->update(...); |
|
| 1082 |
- $dbi->update(...); |
|
| 1083 |
- }; |
|
| 1084 |
- |
|
| 1085 |
- if ($@) {
|
|
| 1086 |
- $dbi->rollback; |
|
| 1087 |
- } |
|
| 1088 |
- else {
|
|
| 1089 |
- $dbi->commit; |
|
| 1090 |
- } |
|
| 1083 |
+=head2 8. その他の機能 |
|
| 1091 | 1084 |
|
| 1092 | 1085 |
=head3 結果クラスの変更 |
| 1093 | 1086 |
|
| 1094 |
-必要ならばC<select()>メソッドの結果クラスを変更することができます。 |
|
| 1087 |
+必要ならば結果クラスを変更することができます。 |
|
| 1095 | 1088 |
|
| 1096 |
- package Your::Result; |
|
| 1089 |
+ package MyResult; |
|
| 1097 | 1090 |
use base 'DBIx::Custom::Result'; |
| 1098 | 1091 |
|
| 1099 | 1092 |
sub some_method { ... }
|
| ... | ... |
@@ -1102,27 +1095,27 @@ fc |
| 1102 | 1095 |
|
| 1103 | 1096 |
package main; |
| 1104 | 1097 |
|
| 1105 |
- use Your::Result; |
|
| 1098 |
+ use MyResult; |
|
| 1106 | 1099 |
|
| 1107 | 1100 |
my $dbi = DBIx::Custom->connect(...); |
| 1108 |
- $dbi->result_class('Your::Result');
|
|
| 1101 |
+ $dbi->result_class('MyResult');
|
|
| 1109 | 1102 |
|
| 1110 |
-=head3 ヘルパーメソッドの登録 |
|
| 1103 |
+=head3 メソッドの登録 |
|
| 1111 | 1104 |
|
| 1112 |
-ヘルパーメソッドを登録することができます。 |
|
| 1105 |
+メソッドを登録するにはC<method()>を使用します。 |
|
| 1113 | 1106 |
|
| 1114 |
- $dbi->helper( |
|
| 1107 |
+ $dbi->method( |
|
| 1115 | 1108 |
update_or_insert => sub {
|
| 1116 | 1109 |
my $self = shift; |
| 1117 |
- # do something |
|
| 1110 |
+ # something |
|
| 1118 | 1111 |
}, |
| 1119 | 1112 |
find_or_create => sub {
|
| 1120 | 1113 |
my $self = shift; |
| 1121 |
- # do something |
|
| 1114 |
+ # something |
|
| 1122 | 1115 |
} |
| 1123 | 1116 |
); |
| 1124 | 1117 |
|
| 1125 |
-<helper()>メソッドで登録したメソッドは |
|
| 1118 |
+<method()>で登録したメソッドは |
|
| 1126 | 1119 |
L<DBIx::Custom>オブジェクトから直接呼び出すことができます。 |
| 1127 | 1120 |
|
| 1128 | 1121 |
$dbi->update_or_insert; |