Showing 1 changed files with 148 additions and 115 deletions
+148 -115
lib/DBIx/Custom/Guide/Ja.pod
... ...
@@ -161,48 +161,60 @@ L<DBIx::Custom>はL<DBI>を補うとても便利なモジュールです。
161 161
 
162 162
 =head2 1. データベースへの接続
163 163
 
164
+まずL<DBIx::Custom>を読み込みます。
165
+
166
+    use DBIx::Custom;
167
+
164 168
 L<DBIx::Custom>オブジェクトを生成し、データベースに接続するには
165 169
 C<connect()>メソッドを使用します。
166 170
 
167
-    use DBIx::Custom;
168
-    my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=dbname",
169
-                                    user => 'ken', password => '!LFKD%$&');
171
+    my $dbi = DBIx::Custom->connect(
172
+        data_source => "dbi:mysql:database=dbname",
173
+        user => 'ken',
174
+        password => '!LFKD%$&',
175
+        dbi_options => {mysql_enable_utf8 => 1}
176
+    );
170 177
 
171
-B<Data sourceのサンプル:>
178
+C<data_source>はデータベースシステムに応じたフォーマットで
179
+指定する必要があります。以下にデータベースごとのフォーマット
180
+方法のサンプルを掲載しておきます。
172 181
 
173
-MySQL
182
+B<MySQL>
174 183
 
175 184
     "dbi:mysql:database=$database"
176 185
     "dbi:mysql:database=$database;host=$hostname;port=$port"
177 186
 
178
-SQLite
187
+B<SQLite>
179 188
 
180 189
     "dbi:SQLite:dbname=$database"
181 190
     "dbi:SQLite:dbname=:memory:"
182 191
 
183
-PostgreSQL
192
+B<PostgreSQL>
184 193
 
185 194
     "dbi:Pg:dbname=$dbname"
186 195
 
187
-Oracle
196
+B<Oracle>
188 197
 
189 198
     "dbi:Oracle:$dbname"
190 199
     "dbi:Oracle:host=$host;sid=$sid"
191 200
 
192
-ODBC(Microsoft Access)
201
+B<ODBC(Microsoft Access)>
193 202
 
194 203
     "dbi:ODBC:driver=Microsoft Access Driver (*.mdb);dbq=hoge.mdb"
195 204
 
196
-ODBC(SQL Server)
205
+B<ODBC(SQL Server)>
197 206
 
198 207
    "dbi:ODBC:driver={SQL Server};Server=(local);database=test;Trusted_Connection=yes;AutoTranslate=No;"
199 208
 
209
+また認証が求められる場合は、C<user>とC<password>ユーザ名と
210
+パスワードを指定する必要があります。
211
+
200 212
 L<DBIx::Custom>はL<DBI>のラッパです。
201
-L<DBI>オブジェクトはC<dbh>で取得することができます。
213
+L<DBI>のデータベースハンドルはC<dbh>で取得することができます。
202 214
 
203 215
     my $dbh = $dbi->dbh;
204 216
 
205
-データベースハンドル属性にはデフォルトで次のものが設定されます。
217
+L<DBIx::Custom>ではデータベースハンドル属性にはデフォルトで次のものが設定されます。
206 218
     
207 219
     $dbi->dbh->{RaiseError} = 1;
208 220
     $dbi->dbh->{PrintError} = 0;
... ...
@@ -212,206 +224,199 @@ L<DBI>オブジェクトはC<dbh>で取得することができます。
212 224
 例外が発生しプログラムは終了します。
213 225
 またクエリが発行されると自動的にコミットされます。
214 226
 
215
-=head2 2. シュガーメソッド
227
+=head2 2. 挿入、更新、削除、選択のためのメソッド
216 228
 
217 229
 L<DBIx::Custom>は、
218 230
 C<insert()>、C<update()>、C<delete()>、C<select()>
219
-のようなシュガーメソッドを持っています。
220
-小さなことを行うのであれば、SQL文を
221
-作成する必要はありません。
231
+のような挿入、更新、削除、選択を行うためのメソッドを持っています。
232
+簡単なことをを行うのであれば、SQLを自分で記述する必要がありません。
222 233
 
223 234
 =head3 C<insert()>
224 235
 
225
-C<insert>メソッドです。データベースにデータを挿入します。
236
+データベースにデータを挿入するにはC<insert()>を使用します。
226 237
 
227 238
     $dbi->insert(table  => 'book',
228 239
                  param  => {title => 'Perl', author => 'Ken'});
229 240
 
230
-これは次のL<DBI>の操作と同じです。
241
+C<table>にはテーブル名、C<param>には挿入したいデータを指定します。
231 242
 
232
-    my $sth = $dbh->prepare('insert into (title, author) values (?, ?);');
233
-    $sth->execute('Perl', 'Ken');
243
+次のSQLが発行されます。
244
+
245
+    insert into (title, author) values (?, ?);
234 246
 
235 247
 =head3 C<update()>
236 248
 
237
-C<update>メソッドです。データベースのデータを更新します。
249
+データベースのデータを更新するには、C<update()>を使用します。
238 250
 
239 251
     $dbi->update(table  => 'book', 
240 252
                  param  => {title => 'Perl', author => 'Ken'}, 
241 253
                  where  => {id => 5});
242 254
 
243
-これは次のL<DBI>の操作と同じです。
255
+C<table>にはテーブル名、C<param>には挿入したいデータ、C<where>には
256
+条件を指定します。
244 257
 
245
-    my $sth = $dbh->prepare(
246
-        'update book set title = ?, author = ? where id = ?;');
247
-    $sth->execute('Perl', 'Ken', 5);
258
+次のSQLが発行されます。
259
+
260
+    update book set title = ?, author = ?;
248 261
 
249 262
 C<update>メソッドは安全のため
250 263
 where句のないSQLを発行することを許可していません。
251 264
 もしすべての行を更新したい場合は
252
-C<update_all()>メソッドを使用してください。
265
+C<update_all()>を使用してください。
253 266
 
254 267
     $dbi->update_all(table  => 'book', 
255 268
                      param  => {title => 'Perl', author => 'Ken'});
256 269
 
257 270
 =head3 C<delete()>
258 271
 
259
-C<delete>メソッドです。データベースのデータを削除します。
272
+データベースのデータを1件削除するには、C<delete()>を使用します。
260 273
 
261 274
     $dbi->delete(table  => 'book',
262 275
                  where  => {author => 'Ken'});
263 276
 
264
-これは次のL<DBI>の操作と同じです。
277
+C<table>にはテーブル名、C<where>には条件を指定します。
265 278
 
266
-    my $sth = $dbh->prepare('delete from book where id = ?;');
267
-    $sth->execute('Ken');
279
+次のSQLが発行されます。
280
+
281
+    delete from book where id = ?;
268 282
 
269 283
 C<delete>メソッドは安全のため
270 284
 where句のないSQLを発行することを許可していません。
271 285
 もしすべての行を削除したい場合は
272
-C<delete_all()>メソッドを使用してください。
286
+C<delete_all()>を使用してください。
273 287
 
274 288
     $dbi->delete_all(table  => 'book');
275 289
 
276 290
 =head3 C<select()>
277 291
 
278
-C<select>メソッドです。テーブル名だけを指定しています。
292
+行を選択するにはC<select()>を使用します。
279 293
 
280 294
     my $result = $dbi->select(table => 'book');
281 295
 
282
-これは次のL<DBI>の操作と同じです。
296
+C<table>だけを指定して、他の条件を指定しない場合は次のSQLが発行されます。
283 297
 
284
-    my $sth = $dbh->prepare('select * from book;);
285
-    $sth->execute;
298
+    select * from book;
286 299
 
287 300
 C<select()>メソッドの戻り値はL<DBIx::Custom::Result>
288
-オブジェクトです。C<fetch>メソッドを使用して
289
-行をフェッチすることができます。
301
+オブジェクトです。行をフェッチするにはC<fetch()>を使用します。
290 302
 
291 303
     while (my $row = $result->fetch) {
292 304
         my $title  = $row->[0];
293 305
         my $author = $row->[1];
294 306
     }
295 307
 
308
+L<DBIx::Custom::Result>についてはこの後L<3. 行のフェッチ/"3. 行のフェッチ">で詳しく扱います。
309
+
310
+さまざまなC<select()>の使い方を見ていきましょう。
296 311
 次のC<select>は行の名前とwhere句を指定したものです。
297 312
 
298 313
     my $result = $dbi->select(
299 314
         table  => 'book',
300
-        column => [qw/author title/],
315
+        column => ['author',  'title'],
301 316
         where  => {author => 'Ken'}
302 317
     );
303 318
 
304
-次のL<DBI>の操作と同じです。
305
-    
306
-    my $sth = $dbh->prepare(
307
-        'select author, title from book where author = ?;');
308
-    $sht->execute('Ken');
319
+C<column>には列名を、C<where>には条件を指定することができます。
320
+次のSQLが発行されます。
321
+
322
+    select author, title from book where author = ?;
309 323
 
310
-テーブルをjoinしたい場合はC<relation>を使用します。
324
+テーブルを結合したい場合ははC<relation>にテーブルの
325
+関係を記述します。
311 326
 
312 327
     my $result = $dbi->select(
313 328
         table    => ['book', 'rental'],
314
-        column   => ['book.name as book_name']
329
+        where    => {book.name => 'Perl'},
315 330
         relation => {'book.id' => 'rental.book_id'}
316 331
     );
317 332
 
318
-次のL<DBI>の操作と同じです。
333
+bookテーブルのid列とrentalテーブルのbook_idが関連付けられます。
334
+次のSQLが発行されます。
319 335
 
320
-    my $sth = $dbh->prepare(
321
-        'select book.name as book_name from book, rental' .
322
-        'where book.id = rental.book_id;');
323
-    $sth->execute;
336
+    select * from book, rental where book.name = ? and book.id = rental.book_id;
324 337
 
325
-SQL文の末尾に文字列を追加したい場合は<append>オプションを使用します。
338
+SQL文の末尾に文字列を追加したい場合は<append>を使用します。
326 339
 
327 340
     my $result = $dbi->select(
328 341
         table  => 'book',
329 342
         where  => {author => 'Ken'},
330
-        append => 'order by price limit 5',
343
+        append => 'for update',
331 344
     );
332 345
 
333
-次のL<DBI>の操作と同じです。
346
+次のSQLが発行されます。
334 347
 
335
-    my $sth = $dbh->prepare(
336
-        'select * book where author = ? order by price limit 5;');
337
-    $sth->execute;
348
+    select * book where author = ? for update;
338 349
 
339
-C<append>オプションは、C<insert()>、C<update()>、C<update_all()>
340
-C<delete()>、C<select>メソッドで使用することが
341
-できます。
342
-
343
-この後のフィルタリングの解説で詳しく扱いますが、値をフィルタリングしたい
344
-場合はC<filter>オプションを使用することができます。
345
-
346
-    $dbi->insert(table  => 'book',
347
-                 param  => {title => 'Perl', author => 'Ken'});
348
-                 filter => {title  => 'encode_utf8',
349
-                            author => 'encode_utf8'});
350
-
351
-C<filter>オプションは、C<insert()>、C<update()>、C<update_all()>
352
-C<delete()>、C<select>メソッドで使用することが
353
-できます。
354
-
355
-C<select()>メソッドのC<where>オプションではハッシュの代わりに
356
-タグを利用することもできます。これによって柔軟な
357
-条件を指定することができます。
358
-
359
-    # Select, more flexible where
360
-    my $result = $dbi->select(
361
-        table  => 'book',
362
-        where  => ['{= author} and {like title}', 
363
-                   {author => 'Ken', title => '%Perl%'}]
364
-    );
365
-
366
-タグについては以降で解説します。
350
+またC<append>は、C<select>だけでなくC<insert()>、C<update()>、C<update_all()>
351
+C<delete()>、C<delete_all()>、C<select()>で使用することもできます。
367 352
 
368 353
 =head2 3. 行のフェッチ
369 354
 
370
-C<select()>メソッドの戻り値であるL<DBIx::Custom::Result>
371
-には行をフェッチするためのさまざまなメソッドが
355
+C<select()>メソッドの戻り値はL<DBIx::Custom::Result>オブジェクトです。
356
+L<DBIx::Custom::Result>には行をフェッチするためのさまざまなメソッドが
372 357
 用意されています。
373
-(このセクションの解説では「配列」は「配列のリファレンス」を
374
-「ハッシュ」は「ハッシュのリファレンス」を意味しますので
375
-注意してください。)
376 358
 
377 359
 =head3 C<fetch>
378 360
 
379
-一行フェッチして配列に格納します。
361
+一行フェッチして配列のリファレンスに格納するにはC<fetch()>を使用します。
380 362
 
381 363
     while (my $row = $result->fetch) {
382
-        my $author = $row->[0];
383
-        my $title  = $row->[1];
364
+        my $title  = $row->[0];
365
+        my $author = $row->[1];
384 366
     }
385 367
 
368
+whileループを使って、すべての行を取得することができます。
369
+
386 370
 =head3 C<fetch_first>
387 371
 
388
-一行だけフェッチして配列に格納します。
372
+一行だけフェッチして配列のリファレンスに格納するにはC<fetch_first()>
373
+を使用します。
389 374
 
390 375
     my $row = $result->fetch_first;
391 376
 
392
-フェッチが終わった後は、ステートメントハンドルからC<finish()>
393
-メソッドが呼び出されてそれ以上フェッチできなくなります。
377
+一行のフェッチが終わった後はそれ以上フェッチできなくなります。
378
+内部的には1行のフェッチが終わった後に
379
+ステートメントハンドルのC<finish()>が実行されます。
394 380
 
395 381
 =head3 C<fetch_multi>
396 382
 
397
-複数行をフェッチして配列の配列に格納します。
383
+複数行をフェッチして配列のリファレンスを要素に持つ
384
+配列のリファレンスに格納するにはC<fetch_multi()>を使用します。
398 385
 
399
-    while (my $rows = $result->fetch_multi(5)) {
400
-        my $first_author  = $rows->[0][0];
401
-        my $first_title   = $rows->[0][1];
402
-        my $second_author = $rows->[1][0];
403
-        my $second_value  = $rows->[1][1];
386
+    while (my $rows = $result->fetch_multi(2)) {
387
+        my $title0   = $rows->[0][0];
388
+        my $author0  = $rows->[0][1];
389
+        
390
+        my $title1   = $rows->[1][0];
391
+        my $author1  = $rows->[1][1];
404 392
     }
405 393
 
394
+引数には取り出したい行数を指定します。
395
+
396
+指定した行を格納した次のようなデータを取得できます。
397
+
398
+    [
399
+        ['Perl', 'Ken'],
400
+        ['Ruby', 'Mark']
401
+    ]
402
+
406 403
 =head3 C<fetch_all>
407 404
 
408
-すべての行をフェッチして配列の配列に格納します。
405
+すべての行をフェッチして配列のリファレンスを要素に持つ
406
+配列のリファレンスに格納するにはC<fetch_all()>を使用します。
409 407
 
410 408
     my $rows = $result->fetch_all;
411 409
 
410
+すべての行を格納した次のようなデータを取得できます。
411
+
412
+    [
413
+        ['Perl', 'Ken'],
414
+        ['Ruby', 'Mark']
415
+    ]
416
+
412 417
 =head3 C<fetch_hash>
413 418
 
414
-一行フェッチしてハッシュに格納します。
419
+一行フェッチしてハッシュのリファレンスに格納するにはC<fetch_hash()>を使用します。
415 420
 
416 421
     while (my $row = $result->fetch_hash) {
417 422
         my $title  = $row->{title};
... ...
@@ -420,36 +425,64 @@ C<select()>メソッドの戻り値であるL<DBIx::Custom::Result>
420 425
 
421 426
 =head3 C<fetch_hash_first>
422 427
 
423
-一行だけフェッチしてハッシュに格納します。
428
+一行だけフェッチしてハッシュのリファレンスに格納するには
429
+C<fetch_hash_first()>を使用します。
424 430
 
425 431
     my $row = $result->fetch_hash_first;
426 432
 
427
-フェッチが終わった後は、ステートメントハンドルからC<finish()>
428
-メソッドが呼び出されてそれ以上フェッチできなくなります。
433
+一行のフェッチが終わった後はそれ以上フェッチできなくなります。
434
+内部的には1行のフェッチが終わった後に
435
+ステートメントハンドルのC<finish()>が実行されます。
429 436
 
430 437
 =head3 C<fetch_hash_multi>
431 438
 
432
-複数行をフェッチしてハッシュの配列に格納します。
439
+複数行をフェッチしてハッシュのリファレンスを要素に持つ
440
+配列のリファレンスに格納するにはC<fetch_hash_multi()>
441
+を使用します。
433 442
 
434 443
     while (my $rows = $result->fetch_hash_multi(5)) {
435
-        my $first_title   = $rows->[0]{title};
436
-        my $first_author  = $rows->[0]{author};
437
-        my $second_title  = $rows->[1]{title};
438
-        my $second_author = $rows->[1]{author};
444
+        my $title0   = $rows->[0]{title};
445
+        my $author0  = $rows->[0]{author};
446
+        my $title1  = $rows->[1]{title};
447
+        my $author1 = $rows->[1]{author};
439 448
     }
440 449
 
450
+引数には取り出したい行数を指定します。
451
+
452
+指定した行を格納した次のようなデータを取得できます。
453
+
454
+    [
455
+        {title => 'Perl', author => 'Ken'},
456
+        {title => 'Ruby', author => 'Mark'}
457
+    ]
458
+
441 459
 =head3 C<fetch_all>
442 460
 
443
-すべての行をフェッチしてハッシュの配列に格納します。
461
+すべての行をフェッチしてハッシュのリファレンスを要素に持つ
462
+配列のリファレンスに格納するにはC<fetch_hash_all()>
463
+を使用します。
444 464
 
445 465
     my $rows = $result->fetch_hash_all;
446 466
 
447
-L<DBI>のステートメントハンドルに直接アクセスしたい場合は
448
-<sth>を使用します。
467
+すべての行を格納した次のようなデータを取得できます。
468
+
469
+    [
470
+        {title => 'Perl', author => 'Ken'},
471
+        {title => 'Ruby', author => 'Mark'}
472
+    ]
473
+
474
+=head3 sth
475
+
476
+ステートメントハンドルに直接アクセスしたい場合は
477
+<sth>で取得することができます。
449 478
 
450 479
     my $sth = $result->sth;
451 480
 
452
-=head2 4. ハッシュパラメタバインド
481
+フェッチのパフォーマンスが用件を満たさないときには、
482
+ステートメントハンドルから
483
+利用できる速度の速いメソッドを利用することができます。
484
+
485
+=head2 4. タグ
453 486
 
454 487
 L<DBIx::Custom>はハッシュパラメタバインドを提供します。
455 488