Showing 5 changed files with 194 additions and 101 deletions
+2 -1
.gitignore
... ...
@@ -3,10 +3,11 @@
3 3
 Build
4 4
 MANIFEST
5 5
 META.yml
6
-Makefile.PL
7 6
 _build/*
8 7
 blib/*
9 8
 *.tar.gz
10 9
 cover_db/*
11 10
 *.tmp
12 11
 t/*.db
12
+Makefile
13
+pm_to_blib
+2
Changes
... ...
@@ -1,3 +1,5 @@
1
+0.1620
2
+  updated document
1 3
 0.1619
2 4
   updated document
3 5
   added experimental expand method
+15
Makefile.PL
... ...
@@ -0,0 +1,15 @@
1
+use ExtUtils::MakeMaker;
2
+WriteMakefile
3
+(
4
+          'INSTALLDIRS' => 'site',
5
+          'NAME' => 'DBIx::Custom',
6
+          'EXE_FILES' => [],
7
+          'VERSION_FROM' => 'lib/DBIx/Custom.pm',
8
+          'PREREQ_PM' => {
9
+                           'Test::More' => 0,
10
+                           'Object::Simple' => '3.0201',
11
+                           'DBD::SQLite' => '1.25',
12
+                           'DBI' => '1.605'
13
+                         }
14
+        )
15
+;
+1 -1
lib/DBIx/Custom.pm
... ...
@@ -1,6 +1,6 @@
1 1
 package DBIx::Custom;
2 2
 
3
-our $VERSION = '0.1619';
3
+our $VERSION = '0.1620';
4 4
 
5 5
 use 5.008001;
6 6
 use strict;
+174 -99
lib/DBIx/Custom/Guides/Ja.pod
... ...
@@ -179,8 +179,6 @@ C<select()>メソッドの戻り値はL<DBIx::Custom::Result>
179 179
         'where books.id = rental.book_id;');
180 180
     $sth->execute;
181 181
 
182
-=head3 C<append>オプション
183
-
184 182
 SQL文の末尾に文字列を追加したい場合は<append>オプションを使用します。
185 183
 
186 184
     my $result = $dbi->select(
... ...
@@ -199,8 +197,6 @@ C<append>オプションは、C<insert()>、C<update()>、C<update_all()>
199 197
 C<delete()>、C<select>メソッドで使用することが
200 198
 できます。
201 199
 
202
-=head3 C<filter>オプション
203
-
204 200
 この後のフィルタリングの解説で詳しく扱いますが、値をフィルタリングしたい
205 201
 場合はC<filter>オプションを使用することができます。
206 202
 
... ...
@@ -213,6 +209,19 @@ C<filter>オプションは、C<insert()>、C<update()>、C<update_all()>
213 209
 C<delete()>、C<select>メソッドで使用することが
214 210
 できます。
215 211
 
212
+C<select()>メソッドのC<where>オプションではハッシュの代わりに
213
+タグを利用することもできます。これによって柔軟な
214
+条件を指定することができます。
215
+
216
+    # Select, more flexible where
217
+    my $result = $dbi->select(
218
+        table  => 'books',
219
+        where  => ['{= author} and {like title}', 
220
+                   {author => 'Ken', title => '%Perl%'}]
221
+    );
222
+
223
+タグについては以降で解説します。
224
+
216 225
 =head2 3. 行のフェッチ
217 226
 
218 227
 C<select()>メソッドの戻り値であるL<DBIx::Custom::Result>
... ...
@@ -292,18 +301,16 @@ C<select()>メソッドの戻り値であるL<DBIx::Custom::Result>
292 301
 
293 302
     my $rows = $result->fetch_hash_all;
294 303
 
295
-=head3 C<sth>
296
-
297
-L<DBI>のステートメントハンドルにアクセスしたい場合は
304
+L<DBI>のステートメントハンドルに直接アクセスしたい場合は
298 305
 <sth>を使用します。
299 306
 
300 307
     my $sth = $result->sth;
301 308
 
302
-=head2 4. Hash parameter binding
309
+=head2 4. ハッシュパラメタバインド
303 310
 
304
-L<DBIx::Custom> provides hash parameter binding.
311
+L<DBIx::Custom>はハッシュパラメタバインドを提供します。
305 312
 
306
-At frist, I show normal parameter binding.
313
+まず最初にL<DBI>による通常のパラメタバインドをご覧ください。
307 314
 
308 315
     use DBI;
309 316
     my $dbh = DBI->connect(...);
... ...
@@ -312,25 +319,31 @@ At frist, I show normal parameter binding.
312 319
     );
313 320
     $sth->execute('Ken', '%Perl%');
314 321
 
315
-This is very good way because database system can enable SQL caching,
316
-and parameter is quoted automatically. this is secure.
322
+これはデータベースシステムがSQLをキャッシュすることができ、
323
+パラメータは自動的にクォートされるので、
324
+パフォーマンス面でも、セキュリティ面でも
325
+とても良い方法です。
317 326
 
318
-L<DBIx::Custom> hash parameter binding system improve
319
-normal parameter binding to use hash parameter.
327
+
328
+L<DBIx::Custom>はこれを改善して、ハッシュで
329
+パラメタを指定できるようにしました。
320 330
 
321 331
     my $result = $dbi->execute(
322 332
         "select * from books where {= author} and {like title};"
323 333
         param => {author => 'Ken', title => '%Perl%'}
324 334
     );
325 335
 
326
-This is same as the normal way, execpt that the parameter is hash.
327
-{= author} and {like title} is called C<tag>.
328
-tag is expand to placeholder string internally.
336
+C<{= author}>とC<{like title}>はタグと呼ばれます。
337
+タグは内部ではプレースホルダを含む文字列に置き換えられます。
329 338
 
330 339
     select * from books where {= author} and {like title}
331
-      -> select * from books where author = ? and title like ?;
332 340
 
333
-The following tags is available.
341
+という文は以下のSQLに置き換えられます。
342
+
343
+    select * from books where author = ? and title like ?;
344
+
345
+このようにタグを使ってSQL文を表現するのがL<DBIx::Custom>の
346
+特徴です。以下のタグが利用可能です。
334 347
 
335 348
     [TAG]                       [REPLACED]
336 349
     {? NAME}               ->   ?
... ...
@@ -348,22 +361,29 @@ The following tags is available.
348 361
     {insert_param NAME1 NAME2}   ->   (NAME1, NAME2) values (?, ?)
349 362
     {update_param NAME1 NAME2}   ->   set NAME1 = ?, NAME2 = ?
350 363
 
351
-See also L<DBIx::Custom::QueryBuilder>.
364
+これらの変換はL<DBIx::Custom::QueryBuilder>によって行われます。
352 365
 
353
-C<{> and C<}> is reserved. If you use these charactors,
354
-you must escape them using '\'. Note that '\' is
355
-already perl escaped charactor, so you must write '\\'. 
366
+C<{>とC<}>は予約語です。これらの文字を使いたい場合は
367
+「\」を使ってエスケープする必要があります。
368
+'\'はPerlのエスケープ文字なので、
369
+エスケープするためには'\\'と書く必要があることに注意
370
+してください。
356 371
 
357 372
     'select * from books \\{ something statement \\}'
358 373
 
359
-=head2 5. Filtering
374
+=head2 5. フィルタリング
375
+
376
+=head3 パラメタバインド時のフィルタリング
360 377
 
361
-Usually, Perl string is kept as internal string.
362
-If you want to save the string to database, You must encode the string.
363
-Filtering system help you to convert a data to another data
364
-when you save to the data and get the data form database.
378
+データベースに登録するデータをフィルタリングしたい場合
379
+があります。たとえば、内部文字列で文字列を保持している場合は
380
+データベースにデータを登録する前に、バイト文字列に変換する
381
+必要があります。L<DBIx::Custom>のフィルタリングシステムは
382
+あるデータを他のデータに変換するのを手助けしてくれます。
365 383
 
366
-If you want to register filter, use C<register_filter()> method.
384
+フィルタリングを利用するにはまず、
385
+C<register_filter()>メソッドを使用して
386
+フィルタを登録しておく必要があります。
367 387
 
368 388
     $dbi->register_filter(
369 389
         to_upper_case => sub {
... ...
@@ -372,9 +392,11 @@ If you want to register filter, use C<register_filter()> method.
372 392
         }
373 393
     );
374 394
 
375
-C<encode_utf8> and C<decode_utf8> filter is registerd by default.
395
+デフォルトのフィルタとしてC<encode_utf8>とC<decode_utf8>
396
+が登録されています。
376 397
 
377
-You can specify these filters to C<filter> argument of C<execute()> method.
398
+登録されているフィルタはC<execute()>メソッドのC<filter>オプション
399
+で指定することができます。
378 400
 
379 401
     my $result = $dbi->execute(
380 402
         "select * from books where {= author} and {like title};"
... ...
@@ -382,16 +404,20 @@ You can specify these filters to C<filter> argument of C<execute()> method.
382 404
         filter => {author => 'to_upper_case, title => 'encode_utf8'}
383 405
     );
384 406
 
385
-C<filter> argument can be specified to suger methods, such as
386
-C<insert()>, C<update()>, C<update_all()>,
387
-C<delete()>, C<delete_all()>, C<select()>.
407
+この例ではC<author>の値はバインドされるときに大文字に変換され、
408
+C<title>の値はバイト文字列に変換されます。
409
+
410
+C<filter>オプションは
411
+C<insert()>、C<update()>、 C<update_all()>,
412
+C<delete()>、C<select()>
413
+メソッドにおいても使用することができます。
388 414
 
389
-    # insert(), having filter argument
415
+    # insert() with filter option
390 416
     $dbi->insert(table  => 'books',
391 417
                  param  => {title => 'Perl', author => 'Ken'},
392 418
                  filter => {title => 'encode_utf8'});
393 419
     
394
-    # select(), having filter argument
420
+    # select() with filter option
395 421
     my $result = $dbi->select(
396 422
         table  => 'books',
397 423
         column => [qw/author title/],
... ...
@@ -400,11 +426,13 @@ C<delete()>, C<delete_all()>, C<select()>.
400 426
         filter => {title => 'encode_utf8'}
401 427
     );
402 428
 
403
-Filter works each parmeter, but you prepare default filter for all parameters.
429
+C<filter>で指定されたフィルタはそれぞれのパラメータの値に働きますが、
430
+すべてのパラメータのためのデフォルトのフィルタを設定することもできます。
404 431
 
405 432
     $dbi->default_bind_filter('encode_utf8');
406 433
 
407
-C<filter()> argument overwrites this default filter.
434
+C<filter()>オプションで指定されたフィルタは、
435
+デフォルトのフィルタを上書きます。
408 436
     
409 437
     $dbi->default_bind_filter('encode_utf8');
410 438
     $dbi->insert(
... ...
@@ -413,26 +441,25 @@ C<filter()> argument overwrites this default filter.
413 441
         filter => {author => 'to_upper_case', price => undef}
414 442
     );
415 443
 
416
-This is same as the following example.
444
+C<title>の値にはデフォルトのフィルタであるC<encode_utf8>が適用され
445
+C<author>の値にはC<to_upper_case>が適用されます。
446
+C<price>にはundefを設定しているのでフィルタが解除されます。
417 447
 
418
-    $dbi->insert(
419
-        table  => 'books',
420
-        param  => {title => 'Perl', author => 'Ken', price => 1000},
421
-        filter => {title => 'encode_uft8' author => 'to_upper_case'}
422
-    );
448
+=head3 行のフェッチ時のフィルタリング
423 449
 
424
-You can also specify filter when the row is fetched. This is reverse of bind filter.
450
+行をフェッチするときのフィルタも設定することができます。
451
+これはL<DBIx::Custom::Result>クラスのC<filter>メソッドを使って
452
+行います。
425 453
 
426 454
     my $result = $dbi->select(table => 'books');
427 455
     $result->filter({title => 'decode_utf8', author => 'to_upper_case'});
428 456
 
429
-Filter works each column value, but you prepare a default filter
430
-for all clumn value.
457
+フィルタはそれぞれの列の値に作用しますが、
458
+すべての列のためのデフォルのトフィルタを設定することもできます。
431 459
 
432 460
     $dbi->default_fetch_filter('decode_utf8');
433 461
 
434
-C<filter()> method of L<DBIx::Custom::Result>
435
-overwrites this default filter.
462
+C<filter>メソッドで設定されたフィルタはデフォルトのフィルタを上書きます。
436 463
 
437 464
     $dbi->default_fetch_filter('decode_utf8');
438 465
     my $result = $dbi->select(
... ...
@@ -441,54 +468,54 @@ overwrites this default filter.
441 468
     );
442 469
     $result->filter({author => 'to_upper_case', price => undef});
443 470
 
444
-This is same as the following one.
471
+C<title>の値にはデフォルトのフィルタであるC<decode_utf8>が適用され
472
+C<author>の値にはC<to_upper_case>が適用されます。
473
+C<price>にはundefを設定しているのでフィルタが解除されます。
445 474
 
446
-    my $result = $dbi->select(
447
-        table => 'books',
448
-        columns => ['title', 'author', 'price']
449
-    );
450
-    $result->filter({title => 'decode_utf8', author => 'to_upper_case'});
451
-
452
-Note that in fetch filter, column names must be lower case
453
-even if the column name conatains upper case charactors.
454
-This is requirment not to depend database systems.
475
+フェッチのためのフィルタにおいて、
476
+たとえ、列名が大文字を含む場合であっても
477
+列名は小文字であることに注意してください。
478
+これはデータベースシステムに依存させないための要件です。
455 479
 
456
-=head2 6. Get high performance
480
+=head2 6. パフォーマンスの改善
457 481
 
458
-=head3 Disable filter checking
482
+=head3 フィルタのチェックを無効にする
459 483
 
460
-Filter checking is executed by default.
461
-This is done to check right filter name is specified,
462
-but sometimes damage performance.
484
+フィルタのチェックがデフォルトでは有効になっています。
485
+これは正しいフィルタ名が指定されているかどうかをチェック
486
+するためのものですが、ときにはパフォーマンスに影響を
487
+及ぼす可能性があります。
463 488
 
464
-If you disable this filter checking,
465
-Set C<filter_check> attribute to 0.
489
+フィルタのチェックを無効にするにはC<filter_check>
490
+に0を設定してください。
466 491
 
467 492
     $dbi->filter_check(0);
468 493
 
469
-=head3 Use execute() method instead suger methods
470
-
471
-If you execute insert statement by C<insert()> method,
472
-you sometimes can't get required performance.
494
+=head3 シュガーメソッドを使わない
473 495
 
474
-C<insert()> method is a little slow because SQL statement and statement handle
475
-is created every time.
496
+もしC<insert()>メソッドを使用してインサートを実行した場合、
497
+必要なパフォーマンスを得られない場合があるかもしれません。
498
+C<insert()>メソッドは、SQL文とステートメントハンドルを
499
+毎回作成するためすこし遅いです。
476 500
 
477
-In that case, you can prepare a query by C<create_query()> method.
501
+そのような場合は、C<create_query()>メソッドによって
502
+クエリを用意しておくことができます。
478 503
     
479 504
     my $query = $dbi->create_query(
480 505
         "insert into books {insert_param title author};"
481 506
     );
482 507
 
483
-Return value of C<create_query()> is L<DBIx::Custom::Query> object.
484
-This keep the information of SQL and column names.
508
+戻り値はL<DBIx::Custom::Query>オブジェクトです。
509
+このオブジェクトはSQL文とパラメータバインド時の列名を
510
+保持しています。またステートメントハンドルも保持しています。
485 511
 
486 512
     {
487 513
         sql     => 'insert into books (title, author) values (?, ?);',
488
-        columns => ['title', 'author']
514
+        columns => ['title', 'author'],
515
+        sth     => $sth
489 516
     }
490 517
 
491
-Execute query repeatedly.
518
+クエリオブジェクトを使って繰り返し実行するには次のようにします。
492 519
     
493 520
     my $inputs = [
494 521
         {title => 'Perl',      author => 'Ken'},
... ...
@@ -499,24 +526,18 @@ Execute query repeatedly.
499 526
         $dbi->execute($query, $input);
500 527
     }
501 528
 
502
-This is faster than C<insert()> method.
529
+C<execute>メソッドの第一引数にクエリオブジェトを渡すことができます。
530
+これはC<insert()>メソッドよりも高速です。
503 531
 
504
-=head3 caching
532
+=head3 キャッシング
505 533
 
506
-C<execute()> method caches the parsed result of the source of SQL.
507
-Default to 1
534
+C<execute()>メソッドはデフォルトでSQL文への解析結果をキャッシュします。
508 535
 
509 536
     $dbi->cache(1);
510 537
 
511
-Caching is on memory, but you can change this by C<cache_method()>.
512
-First argument is L<DBIx::Custom> object.
513
-Second argument is a source of SQL,
514
-such as "select * from books where {= title} and {= author};";
515
-Third argument is parsed result, such as
516
-{sql => "select * from books where title = ? and author = ?",
517
- columns => ['title', 'author']}, this is hash reference.
518
-If arguments is more than two, this method is called to set cache.
519
-If not, this method is called to get cache.
538
+キャッシングはメモリ上で行われますが、C<cache_method()>
539
+を使って変更することができます。これはキャッシュされるデータの保存と取得
540
+のためのメソッドを定義するのに利用されます。
520 541
 
521 542
     $dbi->cache_method(sub {
522 543
         sub {
... ...
@@ -536,14 +557,44 @@ If not, this method is called to get cache.
536 557
         }
537 558
     });
538 559
 
539
-=head2 7. More features
560
+最初の引数はL<DBIx::Custom>です。第二引数は、
561
+"select * from books where {= title} and {= author};";
562
+のようなSQL文の源です。
563
+第三引数は
564
+{sql => "select * from books where title = ? and author = ?",
565
+ columns => ['title', 'author']}
566
+のような解析後のデータです。これはハッシュリファレンスである必要
567
+があります。
568
+もし引数がふたつより大きい場合は、このメソッドはキャッシュを保存
569
+するのに利用されます。そうでない場合はキャッシュを取得するのに
570
+利用されます。
571
+
572
+=head2 7. その他の機能
540 573
 
541 574
 =head3 トランザクション
542 575
 
576
+トランザクションを便利に利用するために、
577
+C<begin_work()>、C<commit()>、C<rollback()>
578
+という三つのメソッドが容易されています。
579
+これはL<DBI>の同名のメソッドと同じ機能を持ちます。
580
+
581
+    $dbi->begin_work;
582
+    
583
+    eval {
584
+        $dbi->update(...);
585
+        $dbi->update(...);
586
+    };
587
+    
588
+    if ($@) {
589
+        $dbi->rollback;
590
+    }
591
+    else {
592
+        $dbi->commit;
593
+    }
543 594
 
544
-=head3 Change Result class
595
+=head3 selectメソッドの結果クラスの変更
545 596
 
546
-You can change Result class if you need.
597
+必要ならばC<select()>メソッドの結果クラスを変更することができます。
547 598
 
548 599
     package Your::Result;
549 600
     use base 'DBIx::Custom::Result';
... ...
@@ -559,9 +610,10 @@ You can change Result class if you need.
559 610
     my $dbi = DBIx::Custom->connect(...);
560 611
     $dbi->result_class('Your::Result');
561 612
 
562
-=head3 Custamize SQL builder object
613
+=head3 L<DBIx::Custom::QueryBuilder>の機能の拡張
563 614
 
564
-You can custamize SQL builder object
615
+新しいタグが欲しい場合はL<DBIx::Custom::QueryBuilder>の機能を拡張
616
+することができます。
565 617
 
566 618
     my $dbi = DBIx::Custom->connect(...);
567 619
     $dbi->query_builder->register_tag_processor(
... ...
@@ -570,9 +622,9 @@ You can custamize SQL builder object
570 622
         }
571 623
     );
572 624
 
573
-=head3 Resister helper method
625
+=head3 ヘルパーメソッドの登録
574 626
 
575
-You can resiter helper method.
627
+ヘルパーメソッドを登録することができます。
576 628
 
577 629
     $dbi->helper(
578 630
         update_or_insert => sub {
... ...
@@ -585,10 +637,33 @@ You can resiter helper method.
585 637
         }
586 638
     );
587 639
 
588
-Register helper methods.
589
-These method can be called from L<DBIx::Custom> object directory.
640
+<helper()>メソッドで登録したメソッドは
641
+L<DBIx::Custom>オブジェクトから直接呼び出すことができます。
590 642
 
591 643
     $dbi->update_or_insert;
592 644
     $dbi->find_or_create;
593 645
 
646
+=head3 ユーティリティメソッド(実験的)
647
+
648
+C<expand>メソッドを使用すると次のようなハッシュに含まれる
649
+テーブル名と列名を結合することができます。
650
+
651
+    my %expanded = $dbi->expand(\%source);
652
+
653
+以下のハッシュ
654
+
655
+    {books => {title => 'Perl', author => 'Ken'}}
656
+
657
+は次のように展開されます。
658
+
659
+    ('books.title' => 'Perl', 'books.author' => 'Ken')
660
+
661
+これはテーブル名を含むselect文で利用すると便利です。
662
+
663
+    my $param = {title => 'Perl', author => '%Ken%'};
664
+    $dbi->execute(
665
+        'select * from books where {= books.title} && {like books.author};',
666
+        param => {$dbi->expand({books => $param})}
667
+    );
668
+
594 669
 =cut