... | ... |
@@ -25,7 +25,8 @@ __PACKAGE__->attr( |
25 | 25 |
query_builder => sub { DBIx::Custom::QueryBuilder->new }, |
26 | 26 |
result_class => 'DBIx::Custom::Result', |
27 | 27 |
base_table => sub { DBIx::Custom::Table->new(dbi => shift) }, |
28 |
- safety_column_name => sub { qr/^[\w\.]*$/ } |
|
28 |
+ safety_column_name => sub { qr/^[\w\.]*$/ }, |
|
29 |
+ stash => sub { {} } |
|
29 | 30 |
); |
30 | 31 |
|
31 | 32 |
__PACKAGE__->attr( |
... | ... |
@@ -490,18 +490,17 @@ use <sth()> to get statement handle. |
490 | 490 |
|
491 | 491 |
my $sth = $result->sth; |
492 | 492 |
|
493 |
-=head2 4. �t�B���^�����O |
|
493 |
+=head2 4. Filtering |
|
494 | 494 |
|
495 |
-�f�[�^�x�[�X�Ƀf�[�^��o�^����Ƃ���f�[�^�x�[�X����f�[�^��擾���� |
|
496 |
-�Ƃ��Ɏ����I�ɒl�̕ϊ���s�������ꍇ�������Ǝv���܂��B |
|
497 |
-���Ƃ��A��t��\�������̏ꍇ�́A |
|
498 |
-�f�[�^�x�[�X�ɓo�^����ꍇ��L<Time::Piece>�I�u�W�F�N�g���� |
|
499 |
-�f�[�^�x�[�X�̓�t�̃t�H�[�}�b�g�ɁA |
|
500 |
-�f�[�^�x�[�X����f�[�^��擾����Ƃ��́A���̋t��s����ƕ֗��ł��B |
|
495 |
+L<DBIx::Custom> provide value filtering. |
|
496 |
+For example, You maybe want to convert L<Time::Piece> object to |
|
497 |
+database date format when register data into database. |
|
498 |
+and convert database date fromat to L<Time::Piece> object |
|
499 |
+when get data from database. |
|
501 | 500 |
|
502 |
-=head3 �t�B���^�̓o�^ C<register_filter()> |
|
501 |
+=head3 Register filter C<register_filter()> |
|
503 | 502 |
|
504 |
-�t�B���^��o�^����ɂ�C<register_filter()>��g�p���܂��B |
|
503 |
+use C<register_filter() to register filter. |
|
505 | 504 |
|
506 | 505 |
$dbi->register_filter( |
507 | 506 |
# Time::Piece object to DATE format |
... | ... |
@@ -521,67 +520,60 @@ use <sth()> to get statement handle. |
521 | 520 |
}, |
522 | 521 |
); |
523 | 522 |
|
524 |
-�o�^�����t�B���^��C<apply_filter()>�Ȃǂŗ��p���邱�Ƃ��ł��܂��B |
|
523 |
+Registered filter is used by C<apply_filter()> or etc. |
|
525 | 524 |
|
526 |
-=head3 �t�B���^�̓K�p C<apply_filter()> |
|
525 |
+=head3 Apply filter C<apply_filter()> |
|
527 | 526 |
|
528 |
-�쐬�����t�B���^��K�p����ɂ́AC<apply_filter()>��g�p���܂��B |
|
527 |
+use C<apply_filter()> to apply registered filter. |
|
529 | 528 |
|
530 | 529 |
$dbi->apply_filter('book', |
531 | 530 |
issue_date => {out => 'tp_to_date', in => 'date_to_tp'}, |
532 | 531 |
first_issue_date => {out => 'tp_to_date', in => 'date_to_tp'} |
533 | 532 |
); |
534 | 533 |
|
535 |
-����̓e�[�u�����ł��B����ȍ~�́A�ƃt�B���^���[���̃y�A��L�q���܂��B |
|
536 |
-�t�B���^���[����out�ɂ́A�f�[�^�x�[�X�Ƀf�[�^�𑗐M����Ƃ��ɓK�p����t�B���^��A |
|
537 |
-�t�B���^���[����in�ɂ́A�f�[�^�x�[�X����f�[�^��擾����Ƃ��ɓK�p����t�B���^�� |
|
538 |
-�L�q���܂��Bout���f�[�^�x�[�X�ɑ��M������Ain���f�[�^�x�[�X������o�����ł��B |
|
539 |
-�t�B���^�ɂ́AC<register_filter>�œo�^�����t�B���^���̑��ɁA�R�[�h���t�@�����X�� |
|
540 |
-�w�肷�邱�Ƃ�ł��܂��B |
|
534 |
+First argument is table name. Arguments after first argument are pairs of column |
|
535 |
+name and fitering rule. C<out> of filtering rule is filter which is used when data |
|
536 |
+is send to database. C<in> of filtering rule is filter which is used when data |
|
537 |
+is got from database. |
|
538 |
+ |
|
539 |
+You can specify code reference as filter. |
|
541 | 540 |
|
542 | 541 |
issue_date => {out => sub { ... }, in => sub { ... }} |
543 | 542 |
|
544 |
-�K�p���ꂽ�t�B���^��C<insert()>�AC<update()>�AC<update_all()>�AC<delete()>�A |
|
545 |
-C<delete_all()>�AC<select()>�ŗL��ɂȂ�܂��B |
|
543 |
+Applied filter become effective at insert()>, C<update()>, C<update_all()>, |
|
544 |
+C<delete()>, C<delete_all()>, C<select()>. |
|
546 | 545 |
|
547 | 546 |
my $tp = Time::Piece->strptime('2010/10/14', '%Y/%m/%d'); |
548 |
- my $result = $dbi->select(table => 'book', where => {issu_date => $tp}); |
|
547 |
+ my $result = $dbi->select(table => 'book', where => {issue_date => $tp}); |
|
549 | 548 |
|
550 |
-�f�[�^�x�[�X�Ƀf�[�^�����M�����Ƃ��ɁAL<Time::Piece>�I�u�W�F�N�g�� |
|
551 |
-�f�[�^�x�[�X�̓�t�̃t�H�[�}�b�g�u2010-10-14�v�ɕϊ�����܂��B |
|
549 |
+When data is send to database, L<Time::Piece> object is converted |
|
550 |
+to database date format "2010-10-14" |
|
552 | 551 |
|
553 |
-�܂��t�Ƀf�[�^��t�F�b�`����Ƃ��ɂ́A�f�[�^�x�[�X�̓�t�̃t�H�[�}�b�g�� |
|
554 |
-�^�C���s�[�X�I�u�W�F�N�g�ɕϊ�����܂��B |
|
552 |
+When data is fetched, database date format is |
|
553 |
+converted to L<Time::Piece> object. |
|
555 | 554 |
|
556 | 555 |
my $row = $resutl->fetch_hash_first; |
557 | 556 |
my $tp = $row->{issue_date}; |
558 | 557 |
|
559 |
-���̂悤�Ȏ����I�Ɏ�s�����t�B���^��o�^�ł��邱�Ƃ�L<DBIx::Custom>�� |
|
560 |
-����̂ЂƂł��B |
|
561 |
- |
|
562 |
-C<apply_filter()>�œK�p���ꂽ�t�B���^�̓e�[�u�������܂ޗɑ��Ă�L��ł��B |
|
558 |
+You can also use column name which contains table name. |
|
563 | 559 |
|
564 | 560 |
$dbi->select( |
565 | 561 |
table => 'book', |
566 |
- where => {'book.title' => 'Perl', 'book.author' => 'Ken'} |
|
562 |
+ where => {'book.issue_date' => $tp} |
|
567 | 563 |
); |
568 | 564 |
|
569 |
-�e�[�u�����ʂ���K�v������Ƃ��ɕ֗��ȋ@�\�ł��B |
|
565 |
+=head3 Individual filter C<filter> |
|
570 | 566 |
|
571 |
-=head3 �ʂ̃t�B���^�̓K�p C<filter> |
|
567 |
+You can apply individual filter . |
|
568 |
+This filter overwrite the filter by C<apply_filter()> |
|
572 | 569 |
|
573 |
-C<apply_filter()>��g��čŏ��ɂ��ׂẴe�[�u���̗�ɂ��� |
|
574 |
-�t�B���^���`���邱�Ƃ�ł��܂����A |
|
575 |
-�ʂɃt�B���^��K�p���邱�Ƃ�ł��܂��B |
|
576 |
-�ʂ̃t�B���^��C<apply_filter()>�œK�p�����t�B���^��㏑���܂��B |
|
577 |
-�ʂ̃t�B���^��SQL��as��g��āA��̕ʖ���쐬����K�v������ꍇ�Ɋ��܂��B |
|
570 |
+use C<filter> option to apply individual filter |
|
571 |
+when data is send to database. |
|
572 |
+This option is used at C<insert()>, C<update()>, |
|
573 |
+C<update_all()>, C<delete()>, C<delete_all()>, C<select()>, |
|
574 |
+C<execute()>. |
|
578 | 575 |
|
579 |
-�f�[�^�x�[�X�ɑ��M����ꍇ�ɁA�ʂ̃t�B���^��K�p����ɂ́A�e���\�b�h�� |
|
580 |
-C<filter>�I�v�V������g�p���܂��B�ʂ̃t�B���^�́AC<insert()>�AC<update()>�A |
|
581 |
-C<update_all()>�AC<delete()>�AC<delete_all()>�AC<select()>�AC<execute()> |
|
582 |
-�Ŏg�p���邱�Ƃ��ł��܂��B |
|
583 |
- |
|
584 |
-C<insert()>�̗����܂��B |
|
576 |
+C<insert()> example: |
|
585 | 577 |
|
586 | 578 |
$dbi->insert( |
587 | 579 |
table => 'book', |
... | ... |
@@ -589,7 +581,7 @@ C<insert()> |
589 | 581 |
filter => {issue_date => 'tp_to_date', first_issue_date => 'tp_to_date'} |
590 | 582 |
); |
591 | 583 |
|
592 |
-C<execute()>�̗����܂��B |
|
584 |
+C<execute()> example: |
|
593 | 585 |
|
594 | 586 |
my $sql = <<"EOS"; |
595 | 587 |
select YEAR(issue_date) as issue_year |
... | ... |
@@ -603,30 +595,16 @@ EOS |
603 | 595 |
filter => {issue_year => 'tp_to_year'} |
604 | 596 |
); |
605 | 597 |
|
606 |
-�����C<filter>��g���ǂ������ł��Bissue_date�̕ϊ��ɂ��Ă�C<apply_filter()> |
|
607 |
-�œo�^���Ă���̂ł����A�V�����쐬������ł���issue_year�ɂ��ẮA |
|
608 |
-���̕ϊ���o�^����Ă��܂���B�ł��̂ŁA�ʂɃt�B���^��ݒ肵�Ă��܂��B |
|
609 |
- |
|
610 |
-�܂����ɍs��t�F�b�`����Ƃ��ɂ�ʂ̃t�B���^��K�p���邱�Ƃ��ł��܂��B |
|
611 |
-�t�B���^��K�p����ɂ́A |
|
612 |
-C<DBIx::Custom::Result>�N���X��C<filter>���\�b�h��g�p���܂��B |
|
598 |
+You can also apply indivisual filter when you fetch row. |
|
599 |
+use C<DBIx::Custom::Result>'s C<filter()>. |
|
613 | 600 |
|
614 | 601 |
$result->filter(issue_year => 'year_to_tp'); |
615 | 602 |
|
616 |
-�p�ɂɗ��p����̂ł���A�ʂɓo�^�������C<apply_filter()>�œo�^ |
|
617 |
-���Ă������ق����֗��ł��傤�BC<apply_filter()>�͑��݂��Ȃ���ɑ��Ă� |
|
618 |
-�t�B���^��K�p�ł��邩��ł��B |
|
619 |
- |
|
620 |
- $dbi->apply_filter('book', |
|
621 |
- 'issue_year' => {out => 'tp_to_year', in => 'year_to_tp'} |
|
622 |
- ); |
|
603 |
+=head3 End filtering : C<end_filter()> |
|
623 | 604 |
|
624 |
-=head3 �ŏI�o�͂̂��߂̃t�B���^�����O C<end_filter()> |
|
625 |
- |
|
626 |
-C<DBIx::Custom::Result>�ł͂���ɍŌ�ɂ���x�A�t�B���^��lj�� |
|
627 |
-�o�^���邱�Ƃ��ł��܂��B���Ƃ���HTML�ɏo�͂������ꍇ�ɁATime::Piece |
|
628 |
-�I�u�W�F�N�g����ǂ݂₷���L�q�ɕϊ����邱�Ƃ��ł��܂��B |
|
629 |
-�Ō�̃t�B���^��o�^����ɂ́AC<end_filter()>��g�p���܂��B |
|
605 |
+You can add filter at end. |
|
606 |
+It is useful to create last output. |
|
607 |
+use C<end_filter()> to add end filter. |
|
630 | 608 |
|
631 | 609 |
$result->end_filter(issue_date => sub { |
632 | 610 |
my $tp = shift; |
... | ... |
@@ -635,20 +613,12 @@ C<DBIx::Custom::Result> |
635 | 613 |
return $tp->strftime('%Y/%m/%d %h:%m:%s (%a)'); |
636 | 614 |
}); |
637 | 615 |
|
638 |
-��t��₷���`�Ƀt�H�[�}�b�g���邱�Ƃ��ł��܂��B |
|
639 |
- |
|
640 |
-�t�B���^�̓t�F�b�`��s���O�ɓo�^���Ă����K�v�����邱�Ƃ� |
|
641 |
-���ӂ��Ă��������B |
|
642 |
- |
|
643 |
- $result->filter(...); |
|
644 |
- $result->end_filter(...); |
|
645 |
- my $row = $result->fetch_hash_first; |
|
616 |
+In this example, L<Time::Piece> object is converted to readable format. |
|
646 | 617 |
|
647 |
-=head3 ��̏���Ƀt�B���^��K�p���� C<each_column()> |
|
618 |
+=head3 Automate applying filter C<each_column()> |
|
648 | 619 |
|
649 |
-��t�^�̗�͎蓮�Őݒ肵�Ȃ��Ă�A�����I�ɐݒ�ł���ƕ֗��ł��B |
|
650 |
-���̂��߂Ƀf�[�^�x�[�X�̃e�[�u���̗�̂��ׂĂ̏��� |
|
651 |
-���Ԃɏ������邽�߂�C<each_column()>������܂��B |
|
620 |
+It is useful to apply filter automatically at date type columns. |
|
621 |
+You can use C<each_column()> to process all column infos. |
|
652 | 622 |
|
653 | 623 |
$dbi->each_column( |
654 | 624 |
sub { |
... | ... |
@@ -665,154 +635,124 @@ C<DBIx::Custom::Result> |
665 | 635 |
} |
666 | 636 |
); |
667 | 637 |
|
668 |
-each_column�̓R�[���o�b�N����܂��B�R�[���o�b�N�̈�� |
|
669 |
-���Ԃ�L<DBIx::Custom>�I�u�W�F�N�g�A�e�[�u�����A�A��̏��ł��B |
|
670 |
-��̌^���̏����ƂɎ����I�ɁA�t�B���^��K�p���Ă��܂��B |
|
671 |
- |
|
672 |
-�ЂƂ̒��ӓ_�Ƃ��ăR�[���o�b�N�̒�����A�R�[���o�b�N�̊O�� |
|
673 |
-�̕ϐ���Q�Ƃ��Ȃ��悤�ɒ��ӂ��Ă��������Beach_column�� |
|
674 |
-���X1����s����邾���Ȃ̂ŁA�قƂ�ǂ̏ꍇ��肠��܂��A |
|
675 |
-�z�Q�Ƃɂ�郁�������[�N���������Ă��܂��\�����Ă��邩��ł��B |
|
638 |
+C<each_column() receive callback. |
|
639 |
+callback arguments are L<DBIx::Custom> object, table name, column name, column information. |
|
640 |
+Filter is applied automatically by column type. |
|
676 | 641 |
|
677 |
-=head2 5. �^�O |
|
642 |
+=head2 5. Tag |
|
678 | 643 |
|
679 |
-=head3 �^�O�̋@�\ |
|
644 |
+=head3 Basic of Tag |
|
680 | 645 |
|
681 |
-L<DBIx::Custom>��SQL�̒��Ƀ^�O�ߍ��ދ@�\���Ă��܂��B |
|
646 |
+You can embedd tag into SQL. |
|
682 | 647 |
|
683 | 648 |
select * from book where {= title} and {like author}; |
684 | 649 |
|
685 |
-{= title}��{like author}�̕������^�O�ł��B�^�O�͎��̂悤�Ȍ`�� |
|
686 |
-����܂��B |
|
650 |
+{= title} and {like author} are tag. Tag has the folloring format. |
|
687 | 651 |
|
688 |
- {�^�O�� ��1 ��2 ...} |
|
689 |
- |
|
690 |
-�^�O��C<{>�Ŏn�܂�AC<}>�ŏI���܂��B�ŏ���C<{>�ƃ^�O���̊� |
|
691 |
-�ɂ͋�}��Ȃ��悤���ӂ��Ă��������B |
|
652 |
+ {TAG_NAME ARG1 ARG2 ...} |
|
692 | 653 |
|
693 |
-�^�O�̋@�\�̂��߂�C<{>��C<}>�͗\���ɂȂ�Ă��܂��B |
|
694 |
-�����p�������ꍇ�͒��O��\����ăG�X�P�[�v��s���K�v������܂��B |
|
654 |
+Tag start C<{> and end C<}>. |
|
655 |
+Don't insert space between C<{} and tag name. |
|
656 |
+ |
|
657 |
+C<{> and C<}> are reserved word. |
|
658 |
+If you want to use these, escape it by '\'; |
|
695 | 659 |
|
696 | 660 |
select from book \\{ ... \\} |
697 | 661 |
|
662 |
+\ is perl's escape character, you need two \. |
|
663 |
+ |
|
698 | 664 |
C<\>���̂�Perl�̃G�X�P�[�v�����ł��̂ŁA |
699 |
-�G�X�P�[�v����ꍇ��C<\>����K�v�ɂȂ�Ƃ����_�ɒ��ӂ��Ă��������B |
|
665 |
+C<\>�͓�K�v�ɂȂ�܂��B |
|
700 | 666 |
|
701 |
-��L�̃^�O��SQL����s�����O�Ɏ���SQL�ɓW�J����܂��B |
|
667 |
+Tag is expanded before executing SQL. |
|
702 | 668 |
|
703 | 669 |
select * from book where title = ? and author like ?; |
704 | 670 |
|
705 |
-�^�O��܂�SQL���s����ɂ�C<execute()>��g�p���܂��B |
|
671 |
+use C<execute()> to execute SQL which contains tag |
|
706 | 672 |
|
707 | 673 |
my $sql = "select * from book where {= author} and {like title};" |
708 | 674 |
$dbi->execute($sql, param => {title => 'Perl', author => '%Ken%'}); |
709 | 675 |
|
710 |
-C<param>�I�v�V������g��āA�v���[�X�z���_�ɖ��ߍ��݂����l�� |
|
711 |
-�n�b�V�����t�@�����X�Ŏw�肷�邱�Ƃ��ł��܂��B |
|
676 |
+You can specify values embedded into place holder as hash reference using |
|
677 |
+C<param> option. |
|
712 | 678 |
|
713 |
-���̃��\�b�h�Ɠ��l��C<execute()>�ɂ����Ă�C<filter>��w�肷�邱�Ƃ��ł��܂��B |
|
679 |
+You can specify C<filter()> at C<execute()>. |
|
714 | 680 |
|
715 | 681 |
$dbi->execute($sql, param => {title => 'Perl', author => '%Ken%'} |
716 | 682 |
filter => {title => 'to_something'); |
717 | 683 |
|
718 |
-C<execute>�̂ЂƂ̒��ӓ_�Ƃ��Ă�C<apply_filter()>�œK�p���ꂽ�t�B���^ |
|
719 |
-�̓f�t�H���g�ł͗L��ł͂Ȃ��Ƃ������Ƃɒ��ӂ��Ă��������B |
|
720 |
-C<apply_filter()>�œK�p���ꂽ�t�B���^��L��ɂ���ɂ́A |
|
721 |
-C<table>��w�肷��K�v������܂��B |
|
684 |
+Note that at C<execute()> the filter applied by C<apply_filter()> |
|
685 |
+don't has effective to columns. |
|
686 |
+You need specify C<table> to have effective. |
|
722 | 687 |
|
723 | 688 |
$dbi->execute($sql, param => {title => 'Perl', author => '%Ken%'} |
724 | 689 |
table => ['book']); |
725 | 690 |
|
726 |
-=head3 �^�O�ꗗ |
|
691 |
+=head3 Tag list |
|
727 | 692 |
|
728 | 693 |
L<DBIx::Custom>�ł͎��̃^�O���g�p�\�ł��B |
729 | 694 |
|
730 |
-���̂悤�Ƀ^�O��g���SQL����\������̂�L<DBIx::Custom>�� |
|
731 |
-����ł��B�ȉ��̃^�O�����p�\�ł��B |
|
695 |
+The following tag is available. |
|
732 | 696 |
|
733 | 697 |
=head4 C<?> |
734 | 698 |
|
735 |
-C<?>�^�O�͈ȉ��̂悤�ɓW�J����܂��B |
|
736 |
- |
|
737 | 699 |
{? NAME} -> ? |
738 | 700 |
|
739 | 701 |
=head4 C<=> |
740 | 702 |
|
741 |
-C<=>�^�O�͈ȉ��̂悤�ɓW�J����܂��B |
|
742 |
- |
|
743 | 703 |
{= NAME} -> NAME = ? |
744 | 704 |
|
745 | 705 |
=head4 C<E<lt>E<gt>> |
746 | 706 |
|
747 |
-C<E<lt>E<gt>>�^�O�͈ȉ��̂悤�ɓW�J����܂��B |
|
748 |
- |
|
749 | 707 |
{<> NAME} -> NAME <> ? |
750 | 708 |
|
751 | 709 |
=head4 C<E<lt>> |
752 | 710 |
|
753 |
-C<E<lt>>�^�O�͈ȉ��̂悤�ɓW�J����܂��B |
|
754 |
- |
|
755 | 711 |
{< NAME} -> NAME < ? |
756 | 712 |
|
757 | 713 |
=head4 C<E<gt>> |
758 | 714 |
|
759 |
-C<E<gt>>�^�O�͈ȉ��̂悤�ɓW�J����܂��B |
|
760 |
- |
|
761 | 715 |
{> NAME} -> NAME > ? |
762 | 716 |
|
763 | 717 |
=head4 C<E<gt>=> |
764 | 718 |
|
765 |
-C<E<gt>=>�^�O�͈ȉ��̂悤�ɓW�J����܂��B |
|
766 |
- |
|
767 | 719 |
{>= NAME} -> NAME >= ? |
768 | 720 |
|
769 | 721 |
=head4 C<E<lt>=> |
770 | 722 |
|
771 |
-C<E<lt>=>�^�O�͈ȉ��̂悤�ɓW�J����܂��B |
|
772 |
- |
|
773 | 723 |
{<= NAME} -> NAME <= ? |
774 | 724 |
|
775 | 725 |
=head4 C<like> |
776 | 726 |
|
777 |
-C<like>�^�O�͈ȉ��̂悤�ɓW�J����܂��B |
|
778 |
- |
|
779 | 727 |
{like NAME} -> NAME like ? |
780 | 728 |
|
781 | 729 |
=head4 C<in> |
782 | 730 |
|
783 |
-C<in>�^�O�͈ȉ��̂悤�ɓW�J����܂��B�v���[�X�z���_�� |
|
784 |
-�����Ŏw�肷��K�v�����邱�Ƃɒ��ӂ��Ă��������B |
|
785 |
- |
|
786 | 731 |
{in NAME COUNT} -> NAME in [?, ?, ..] |
787 | 732 |
|
788 | 733 |
=head4 C<insert_param> |
789 | 734 |
|
790 |
-C<insert_param>�^�O�͈ȉ��̂悤�ɓW�J����܂��B |
|
791 |
- |
|
792 | 735 |
{insert_param NAME1 NAME2} -> (NAME1, NAME2) values (?, ?) |
793 | 736 |
|
794 | 737 |
=head4 C<update_param> |
795 | 738 |
|
796 |
-C<update_param>�^�O�͈ȉ��̂悤�ɓW�J����܂��B |
|
797 |
- |
|
798 | 739 |
{update_param NAME1 NAME2} -> set NAME1 = ?, NAME2 = ? |
799 | 740 |
|
800 |
-=head3 �����̗�̈��� |
|
741 |
+=head3 Manipulate same name's columns |
|
801 | 742 |
|
802 |
-�����̗��܂ރ^�O������ꍇ�ɂ�ASQL���s���邱�Ƃ��ł��܂��B |
|
803 |
-���Ƃ��A��̓�t�Ŕ�r���Ȃ���Ȃ�Ȃ��ꍇ�� |
|
804 |
-�l���Č��܂��傤�B |
|
743 |
+It is ok if there are same name's columns. |
|
744 |
+Let's think two date comparison. |
|
805 | 745 |
|
806 | 746 |
my $sql = "select * from table where {> date} and {< date};"; |
807 | 747 |
|
808 |
-���̂悤�ȏꍇ�͑Ή�����p�����[�^�̒l��z��̃��t�@�����X�ɂ��܂��B |
|
748 |
+In this case, You specify paramter values as array reference. |
|
809 | 749 |
|
810 | 750 |
my $dbi->execute($sql, param => {date => ['2010-10-01', '2012-02-10']}); |
811 | 751 |
|
812 |
-=head3 �^�O�̒lj� C<register_tag()> |
|
752 |
+=head3 Register Tag C<register_tag()> |
|
813 | 753 |
|
814 |
-L<DBIx::Custom>�ł̓^�O��Ǝ��ɒlj���邱�Ƃ��ł��܂��B |
|
815 |
-�^�O��lj����ɂ�C<register_tag()>��g�p���܂��B |
|
754 |
+You can register your tag. |
|
755 |
+use C<register_tag()> to register tag. |
|
816 | 756 |
|
817 | 757 |
$dbi->register_tag( |
818 | 758 |
'=' => sub { |
... | ... |
@@ -502,12 +502,13 @@ C<fetch_hash_first()>を使用します。 |
502 | 502 |
|
503 | 503 |
=head2 4. フィルタリング |
504 | 504 |
|
505 |
-データベースにデータを登録するときやデータベースからデータを取得する |
|
506 |
-ときに自動的に値の変換を行いたい場合が多いと思います。 |
|
507 |
-たとえば、日付を表現する列の場合は、 |
|
508 |
-データベースに登録する場合はL<Time::Piece>オブジェクトから |
|
509 |
-データベースの日付のフォーマットに、 |
|
510 |
-データベースからデータを取得するときは、その逆を行えると便利です。 |
|
505 |
+L<DBIx::Custom>は値のフィルタリング機能を提供します。 |
|
506 |
+ |
|
507 |
+たとえば、データをデータベースに登録するときは |
|
508 |
+L<Time::Piece>オブジェクトからデータベースの日付のフォーマットに、 |
|
509 |
+データベースからデータを取得するときは、 |
|
510 |
+データベースの日付のフォーマットからL<Time::Piece>オブジェクト |
|
511 |
+に変換を行いたいと思うことでしょう。 |
|
511 | 512 |
|
512 | 513 |
=head3 フィルタの登録 C<register_filter()> |
513 | 514 |
|
... | ... |
@@ -542,11 +543,12 @@ C<fetch_hash_first()>を使用します。 |
542 | 543 |
first_issue_date => {out => 'tp_to_date', in => 'date_to_tp'} |
543 | 544 |
); |
544 | 545 |
|
545 |
-第一引数はテーブル名です。第二引数以降は、列名とフィルタルールのペアを記述します。 |
|
546 |
+第一引数はテーブル名です。第1引数より後の引数は、列名とフィルタルールのペアを記述します。 |
|
546 | 547 |
フィルタルールのoutには、データベースにデータを送信するときに適用するフィルタを、 |
547 | 548 |
フィルタルールのinには、データベースからデータを取得するときに適用するフィルタを |
548 |
-記述します。outがデータベースに送信する方向、inがデータベースから取り出す方向です。 |
|
549 |
-フィルタには、C<register_filter>で登録したフィルタ名の他に、コードリファレンスを |
|
549 |
+記述します。 |
|
550 |
+ |
|
551 |
+フィルタとしてコードリファレンスを |
|
550 | 552 |
指定することもできます。 |
551 | 553 |
|
552 | 554 |
issue_date => {out => sub { ... }, in => sub { ... }} |
... | ... |
@@ -560,39 +562,29 @@ C<delete_all()>、C<select()>で有効になります。 |
560 | 562 |
データベースにデータが送信されるときに、L<Time::Piece>オブジェクトは |
561 | 563 |
データベースの日付のフォーマット「2010-10-14」に変換されます。 |
562 | 564 |
|
563 |
-また逆にデータをフェッチするときには、データベースの日付のフォーマットは |
|
564 |
-タイムピースオブジェクトに変換されます。 |
|
565 |
+データをフェッチするときには、データベースの日付のフォーマットは |
|
566 |
+L<Time::Piece>オブジェクトに変換されます。 |
|
565 | 567 |
|
566 | 568 |
my $row = $resutl->fetch_hash_first; |
567 | 569 |
my $tp = $row->{issue_date}; |
568 | 570 |
|
569 |
-このような自動的に実行されるフィルタを登録できることがL<DBIx::Custom>の |
|
570 |
-特徴のひとつです。 |
|
571 |
- |
|
572 |
-C<apply_filter()>で適用されたフィルタはテーブル名をを含む列名に対しても有効です。 |
|
571 |
+テーブル名を含む列名を使用することもできます。 |
|
573 | 572 |
|
574 | 573 |
$dbi->select( |
575 | 574 |
table => 'book', |
576 | 575 |
where => {'book.title' => 'Perl', 'book.author' => 'Ken'} |
577 | 576 |
); |
578 | 577 |
|
579 |
-テーブルを区別する必要があるときに便利な機能です。 |
|
580 |
- |
|
581 |
-=head3 個別のフィルタの適用 C<filter> |
|
578 |
+=head3 個別のフィルタ C<filter> |
|
582 | 579 |
|
583 |
-C<apply_filter()>を使って最初にすべてのテーブルの列について |
|
584 |
-フィルタを定義することもできますが、 |
|
585 | 580 |
個別にフィルタを適用することもできます。 |
586 | 581 |
個別のフィルタはC<apply_filter()>で適用したフィルタを上書きます。 |
587 |
-個別のフィルタはSQLのasを使って、列の別名を作成する必要がある場合に活躍します。 |
|
588 | 582 |
|
589 |
-データベースに送信する場合に、個別のフィルタを適用するには、各メソッドの |
|
590 |
-C<filter>オプションを使用します。個別のフィルタは、C<insert()>、C<update()>、 |
|
583 |
+データを送信する場合に個別のフィルタを適用するには、C<filter>オプションを使用します。 |
|
584 |
+このオプションはC<insert()>、C<update()>、 |
|
591 | 585 |
C<update_all()>、C<delete()>、C<delete_all()>、C<select()>、C<execute()> |
592 | 586 |
で使用することができます。 |
593 | 587 |
|
594 |
-C<insert()>の例を示します。 |
|
595 |
- |
|
596 | 588 |
$dbi->insert( |
597 | 589 |
table => 'book', |
598 | 590 |
param => {issue_date => $tp, first_issue_date => $tp}, |
... | ... |
@@ -613,30 +605,16 @@ EOS |
613 | 605 |
filter => {issue_year => 'tp_to_year'} |
614 | 606 |
); |
615 | 607 |
|
616 |
-これはC<filter>を使う良くある例です。issue_dateの変換についてはC<apply_filter()> |
|
617 |
-で登録してあるのですが、新しく作成した列であるissue_yearについては、 |
|
618 |
-何の変換も登録されていません。ですので、個別にフィルタを設定しています。 |
|
619 |
- |
|
620 |
-また反対に行をフェッチするときにも個別のフィルタを適用することができます。 |
|
621 |
-フィルタを適用するには、 |
|
622 |
-C<DBIx::Custom::Result>クラスのC<filter>メソッドを使用します。 |
|
608 |
+行をフェッチするときにも個別のフィルタを適用することができます。 |
|
609 |
+C<DBIx::Custom::Result>のC<filter()>を使用します。 |
|
623 | 610 |
|
624 | 611 |
$result->filter(issue_year => 'year_to_tp'); |
625 | 612 |
|
626 |
-頻繁に利用するのであれば、個別に登録するよりもC<apply_filter()>で登録 |
|
627 |
-しておいたほうが便利でしょう。C<apply_filter()>は存在しない列に対しても |
|
628 |
-フィルタを適用できるからです。 |
|
629 |
- |
|
630 |
- $dbi->apply_filter('book', |
|
631 |
- 'issue_year' => {out => 'tp_to_year', in => 'year_to_tp'} |
|
632 |
- ); |
|
613 |
+=head3 最後のフィルタリング : C<end_filter()> |
|
633 | 614 |
|
634 |
-=head3 最終出力のためのフィルタリング C<end_filter()> |
|
635 |
- |
|
636 |
-C<DBIx::Custom::Result>ではさらに最後にもう一度、フィルタを追加で |
|
637 |
-登録することができます。たとえばHTMLに出力したい場合に、Time::Piece |
|
638 |
-オブジェクトから読みやすい記述に変換することができます。 |
|
639 |
-最後のフィルタを登録するには、C<end_filter()>を使用します。 |
|
615 |
+最後にもうひとつフィルタを追加することができます。 |
|
616 |
+最終的な出力を作成する場合に便利です。 |
|
617 |
+最後のフィルタを登録するにはC<end_filter()>を使用します。 |
|
640 | 618 |
|
641 | 619 |
$result->end_filter(issue_date => sub { |
642 | 620 |
my $tp = shift; |
... | ... |
@@ -645,20 +623,12 @@ C<DBIx::Custom::Result>ではさらに最後にもう一度、フィルタを追 |
645 | 623 |
return $tp->strftime('%Y/%m/%d %h:%m:%s (%a)'); |
646 | 624 |
}); |
647 | 625 |
|
648 |
-日付を見やすい形にフォーマットすることができます。 |
|
626 |
+この例ではL<Time::Piece>オブジェクトを読みやすい書式に変換しています。 |
|
649 | 627 |
|
650 |
-フィルタはフェッチを行う前に登録しておく必要があることに |
|
651 |
-注意してください。 |
|
628 |
+=head3 フィルタの適用の自動化 C<each_column()> |
|
652 | 629 |
|
653 |
- $result->filter(...); |
|
654 |
- $result->end_filter(...); |
|
655 |
- my $row = $result->fetch_hash_first; |
|
656 |
- |
|
657 |
-=head3 列の情報を元にフィルタを適用する C<each_column()> |
|
658 |
- |
|
659 |
-日付型の列は手動で設定しなくても、自動的に設定できると便利です。 |
|
660 |
-このためにデータベースのテーブルの列のすべての情報を |
|
661 |
-順番に処理するためのC<each_column()>があります。 |
|
630 |
+日付型の列は自動的にフィルタを適用できると便利です。 |
|
631 |
+列のすべての情報を処理するためのC<each_column()>を利用することができます。 |
|
662 | 632 |
|
663 | 633 |
$dbi->each_column( |
664 | 634 |
sub { |
... | ... |
@@ -676,19 +646,14 @@ C<DBIx::Custom::Result>ではさらに最後にもう一度、フィルタを追 |
676 | 646 |
); |
677 | 647 |
|
678 | 648 |
each_columnはコールバックを受け取ります。コールバックの引数は |
679 |
-順番にL<DBIx::Custom>オブジェクト、テーブル名、列名、列の情報です。 |
|
649 |
+L<DBIx::Custom>オブジェクト、テーブル名、列名、列の情報です。 |
|
680 | 650 |
列の型名の情報をもとに自動的に、フィルタを適用しています。 |
681 | 651 |
|
682 |
-ひとつの注意点としてコールバックの中から、コールバックの外側 |
|
683 |
-の変数を参照しないように注意してください。each_columnは |
|
684 |
-高々1回だけ実行されるだけなので、ほとんどの場合問題ありませんが、 |
|
685 |
-循環参照によるメモリリークが発生してしまう可能性を持っているからです。 |
|
686 |
- |
|
687 | 652 |
=head2 5. タグ |
688 | 653 |
|
689 |
-=head3 タグの機能 |
|
654 |
+=head3 タグの基本 |
|
690 | 655 |
|
691 |
-L<DBIx::Custom>はSQLの中にタグを埋め込む機能を持っています。 |
|
656 |
+SQLの中にタグを埋め込むことができます。 |
|
692 | 657 |
|
693 | 658 |
select * from book where {= title} and {like author}; |
694 | 659 |
|
... | ... |
@@ -700,15 +665,15 @@ L<DBIx::Custom>はSQLの中にタグを埋め込む機能を持っています |
700 | 665 |
タグはC<{>で始まり、C<}>で終わります。最初のC<{>とタグ名の間 |
701 | 666 |
には空白を挿入しないよう注意してください。 |
702 | 667 |
|
703 |
-タグの機能のためにC<{>とC<}>は予約語になっています。 |
|
704 |
-もし利用したい場合は直前に\をおいてエスケープを行う必要があります。 |
|
668 |
+C<{>とC<}>は予約語になっています。 |
|
669 |
+もし利用したい場合は\でエスケープを行う必要があります。 |
|
705 | 670 |
|
706 | 671 |
select from book \\{ ... \\} |
707 | 672 |
|
708 | 673 |
C<\>自体がPerlのエスケープ文字ですので、 |
709 |
-エスケープする場合はC<\>が二つ必要になるという点に注意してください。 |
|
674 |
+C<\>は二つ必要になります。 |
|
710 | 675 |
|
711 |
-上記のタグはSQLが実行される前に次のSQLに展開されます。 |
|
676 |
+タグはSQLが実行される前に展開されます。 |
|
712 | 677 |
|
713 | 678 |
select * from book where title = ? and author like ?; |
714 | 679 |
|
... | ... |
@@ -720,13 +685,13 @@ C<\>自体がPerlのエスケープ文字ですので、 |
720 | 685 |
C<param>オプションを使って、プレースホルダに埋め込みたい値を |
721 | 686 |
ハッシュリファレンスで指定することができます。 |
722 | 687 |
|
723 |
-他のメソッドと同様にC<execute()>においてもC<filter>を指定することができます。 |
|
688 |
+C<execute()>においてもC<filter>を指定することができます。 |
|
724 | 689 |
|
725 | 690 |
$dbi->execute($sql, param => {title => 'Perl', author => '%Ken%'} |
726 | 691 |
filter => {title => 'to_something'); |
727 | 692 |
|
728 |
-C<execute>のひとつの注意点としてはC<apply_filter()>で適用されたフィルタ |
|
729 |
-はデフォルトでは有効ではないということに注意してください。 |
|
693 |
+C<execute>ではC<apply_filter()>で適用されたフィルタ |
|
694 |
+は有効ではないということに注意してください。 |
|
730 | 695 |
C<apply_filter()>で適用されたフィルタを有効にするには、 |
731 | 696 |
C<table>を指定する必要があります。 |
732 | 697 |
|
... | ... |
@@ -735,93 +700,65 @@ C<table>を指定する必要があります。 |
735 | 700 |
|
736 | 701 |
=head3 タグ一覧 |
737 | 702 |
|
738 |
-L<DBIx::Custom>では次のタグが使用可能です。 |
|
739 |
- |
|
740 |
-このようにタグを使ってSQL文を表現するのがL<DBIx::Custom>の |
|
741 |
-特徴です。以下のタグが利用可能です。 |
|
742 |
- |
|
743 | 703 |
=head4 C<?> |
744 | 704 |
|
745 |
-C<?>タグは以下のように展開されます。 |
|
746 |
- |
|
747 | 705 |
{? NAME} -> ? |
748 | 706 |
|
749 | 707 |
=head4 C<=> |
750 | 708 |
|
751 |
-C<=>タグは以下のように展開されます。 |
|
752 |
- |
|
753 | 709 |
{= NAME} -> NAME = ? |
754 | 710 |
|
755 | 711 |
=head4 C<E<lt>E<gt>> |
756 | 712 |
|
757 |
-C<E<lt>E<gt>>タグは以下のように展開されます。 |
|
758 |
- |
|
759 | 713 |
{<> NAME} -> NAME <> ? |
760 | 714 |
|
761 | 715 |
=head4 C<E<lt>> |
762 | 716 |
|
763 |
-C<E<lt>>タグは以下のように展開されます。 |
|
764 |
- |
|
765 | 717 |
{< NAME} -> NAME < ? |
766 | 718 |
|
767 | 719 |
=head4 C<E<gt>> |
768 | 720 |
|
769 |
-C<E<gt>>タグは以下のように展開されます。 |
|
770 |
- |
|
771 | 721 |
{> NAME} -> NAME > ? |
772 | 722 |
|
773 | 723 |
=head4 C<E<gt>=> |
774 | 724 |
|
775 |
-C<E<gt>=>タグは以下のように展開されます。 |
|
776 |
- |
|
777 | 725 |
{>= NAME} -> NAME >= ? |
778 | 726 |
|
779 | 727 |
=head4 C<E<lt>=> |
780 | 728 |
|
781 |
-C<E<lt>=>タグは以下のように展開されます。 |
|
782 |
- |
|
783 | 729 |
{<= NAME} -> NAME <= ? |
784 | 730 |
|
785 | 731 |
=head4 C<like> |
786 | 732 |
|
787 |
-C<like>タグは以下のように展開されます。 |
|
788 |
- |
|
789 | 733 |
{like NAME} -> NAME like ? |
790 | 734 |
|
791 | 735 |
=head4 C<in> |
792 | 736 |
|
793 |
-C<in>タグは以下のように展開されます。プレースホルダの |
|
794 |
-数を引数で指定する必要があることに注意してください。 |
|
795 |
- |
|
796 | 737 |
{in NAME COUNT} -> NAME in [?, ?, ..] |
797 | 738 |
|
798 | 739 |
=head4 C<insert_param> |
799 | 740 |
|
800 |
-C<insert_param>タグは以下のように展開されます。 |
|
801 |
- |
|
802 | 741 |
{insert_param NAME1 NAME2} -> (NAME1, NAME2) values (?, ?) |
803 | 742 |
|
804 | 743 |
=head4 C<update_param> |
805 | 744 |
|
806 |
-C<update_param>タグは以下のように展開されます。 |
|
807 |
- |
|
808 | 745 |
{update_param NAME1 NAME2} -> set NAME1 = ?, NAME2 = ? |
809 | 746 |
|
810 | 747 |
=head3 同名の列の扱い |
811 | 748 |
|
812 |
-同名の列を含むタグがある場合にも、SQLを実行することができます。 |
|
813 |
-たとえば、二つの日付で比較しなければならない場合を |
|
749 |
+同名の列を含むタグがある場合でも大丈夫です。 |
|
750 |
+二つの日付で比較しなければならない場合を |
|
814 | 751 |
考えて見ましょう。 |
815 | 752 |
|
816 | 753 |
my $sql = "select * from table where {> date} and {< date};"; |
817 | 754 |
|
818 |
-このような場合は対応するパラメータの値を配列のリファレンスにします。 |
|
755 |
+このような場合はパラメータの値を配列のリファレンスで指定します。 |
|
819 | 756 |
|
820 | 757 |
my $dbi->execute($sql, param => {date => ['2010-10-01', '2012-02-10']}); |
821 | 758 |
|
822 |
-=head3 タグの追加 C<register_tag()> |
|
759 |
+=head3 タグの登録 C<register_tag()> |
|
823 | 760 |
|
824 |
-L<DBIx::Custom>ではタグを独自に追加することができます。 |
|
761 |
+独自のタグを登録することができます。 |
|
825 | 762 |
タグを追加するにはC<register_tag()>を使用します。 |
826 | 763 |
|
827 | 764 |
$dbi->register_tag( |