... | ... |
@@ -2369,17 +2369,32 @@ Table name. |
2369 | 2369 |
|
2370 | 2370 |
Column clause. This is array reference or constant value. |
2371 | 2371 |
|
2372 |
- # Hash refernce |
|
2372 |
+ # Array reference |
|
2373 | 2373 |
$dbi->select(column => ['author', 'title']); |
2374 | 2374 |
|
2375 | 2375 |
# Constant value |
2376 | 2376 |
$dbi->select(column => 'author'); |
2377 |
- |
|
2378 |
-Default is '*' unless C<column> is specified. |
|
2377 |
+ |
|
2378 |
+Default is '*' if C<column> is not specified. |
|
2379 | 2379 |
|
2380 | 2380 |
# Default |
2381 | 2381 |
$dbi->select(column => '*'); |
2382 | 2382 |
|
2383 |
+You can specify hash reference. |
|
2384 |
+ |
|
2385 |
+ # Hash reference |
|
2386 |
+ $dbi->select(column => [ |
|
2387 |
+ {book => [qw/author title/]}, |
|
2388 |
+ {person => [qw/name age/]} |
|
2389 |
+ ]); |
|
2390 |
+ |
|
2391 |
+This is expanded to the following one by C<column> method automatically. |
|
2392 |
+ |
|
2393 |
+ book.author as book__author, |
|
2394 |
+ book.title as book__title, |
|
2395 |
+ person.name as person__name, |
|
2396 |
+ person.age as person__age |
|
2397 |
+ |
|
2383 | 2398 |
=item C<where> |
2384 | 2399 |
|
2385 | 2400 |
Where clause. This is hash reference or L<DBIx::Custom::Where> object, |
... | ... |
@@ -22,11 +22,11 @@ and make easy difficult works if you use only L<DBI>. |
22 | 22 |
If you already learn SQL, it is easy to use L<DBIx::Custom>. |
23 | 23 |
|
24 | 24 |
I explain L<DBIx::Custom> a little in this section. |
25 |
-In L<DBIx::Custom>, you embbed tag in SQL. |
|
25 |
+In L<DBIx::Custom>, you embbed parameter in SQL. |
|
26 | 26 |
|
27 |
- select * from book where {= title} and {=author}; |
|
27 |
+ select * from book where title = :title and author = :author; |
|
28 | 28 |
|
29 |
-The part arround {} is tag. |
|
29 |
+The part :title is parameter. |
|
30 | 30 |
This SQL is converted to the one which contains place holder. |
31 | 31 |
|
32 | 32 |
select * from book where title = ? and author = ?; |
... | ... |
@@ -107,7 +107,7 @@ L<DBIx::Custom> prepare the way to make it easy. |
107 | 107 |
|
108 | 108 |
# Search condition |
109 | 109 |
$where->clause( |
110 |
- ['and', '{= title}', {'= author'}] |
|
110 |
+ ['and', 'title = :title', 'author = :author'] |
|
111 | 111 |
); |
112 | 112 |
|
113 | 113 |
# Setting to automatically select needed column |
... | ... |
@@ -385,10 +385,10 @@ use C<execute()> to execute SQL |
385 | 385 |
|
386 | 386 |
$dbi->execute("select * from book;"); |
387 | 387 |
|
388 |
-Process tag and execute SQL. |
|
388 |
+Process parameter and execute SQL. |
|
389 | 389 |
|
390 | 390 |
$dbi->execute( |
391 |
- "select * from book {= title} and {= author};" |
|
391 |
+ "select * from book title = :title and author = :author;" |
|
392 | 392 |
param => {title => 'Perl', author => 'Ken'} |
393 | 393 |
); |
394 | 394 |
|
... | ... |
@@ -398,7 +398,7 @@ Following SQL is executed. |
398 | 398 |
|
399 | 399 |
Values of title and author is embbdeded into placeholder. |
400 | 400 |
|
401 |
-See L<5. Tag/"5. Tag"> about tag. |
|
401 |
+See L<5. Parameter/"5. Parameter"> about parameter. |
|
402 | 402 |
|
403 | 403 |
You don't have to wirte last semicolon in C<execute()>. |
404 | 404 |
|
... | ... |
@@ -749,35 +749,23 @@ C<each_column()> receive callback. |
749 | 749 |
callback arguments are L<DBIx::Custom> object, table name, column name, column information. |
750 | 750 |
Filter is applied automatically by column type. |
751 | 751 |
|
752 |
-=head2 5. Tag |
|
752 |
+=head2 5. Parameter |
|
753 | 753 |
|
754 |
-=head3 Basic of Tag |
|
754 |
+=head3 Basic of Parameter |
|
755 | 755 |
|
756 |
-You can embedd tag into SQL. |
|
756 |
+You can embedd parameter into SQL. |
|
757 | 757 |
|
758 |
- select * from book where {= title} and {like author}; |
|
758 |
+ select * from book where title = :title and author like :author; |
|
759 | 759 |
|
760 |
-{= title} and {like author} are tag. Tag has the folloring format. |
|
760 |
+:title and :author is parameter |
|
761 | 761 |
|
762 |
- {TAG_NAME ARG1 ARG2 ...} |
|
763 |
- |
|
764 |
-Tag start C<{> and end C<}>. |
|
765 |
-Don't insert space between C<{}> and tag name. |
|
766 |
- |
|
767 |
-C<{> and C<}> are reserved word. |
|
768 |
-If you want to use these, escape it by '\'; |
|
769 |
- |
|
770 |
- select from book \\{ ... \\} |
|
771 |
- |
|
772 |
-\ is perl's escape character, you need two \. |
|
773 |
- |
|
774 |
-Tag is expanded before executing SQL. |
|
762 |
+Parameter is converted to place holder. |
|
775 | 763 |
|
776 | 764 |
select * from book where title = ? and author like ?; |
777 | 765 |
|
778 |
-use C<execute()> to execute SQL which contains tag |
|
766 |
+use C<execute()> to execute SQL. |
|
779 | 767 |
|
780 |
- my $sql = "select * from book where {= author} and {like title};" |
|
768 |
+ my $sql = "select * from book where title = :title and author like :author;" |
|
781 | 769 |
$dbi->execute($sql, param => {title => 'Perl', author => '%Ken%'}); |
782 | 770 |
|
783 | 771 |
You can specify values embedded into place holder as hash reference using |
... | ... |
@@ -794,113 +782,17 @@ You have to use C<table> option |
794 | 782 |
|
795 | 783 |
$dbi->execute($sql, table => ['author', 'book']); |
796 | 784 |
|
797 |
-=head3 Tag list |
|
798 |
- |
|
799 |
-The following tag is available. |
|
800 |
- |
|
801 |
-=head4 C<?> |
|
802 |
- |
|
803 |
- {? NAME} -> ? |
|
804 |
- |
|
805 |
-=head4 C<=> |
|
806 |
- |
|
807 |
- {= NAME} -> NAME = ? |
|
808 |
- |
|
809 |
-=head4 C<E<lt>E<gt>> |
|
810 |
- |
|
811 |
- {<> NAME} -> NAME <> ? |
|
812 |
- |
|
813 |
-=head4 C<E<lt>> |
|
814 |
- |
|
815 |
- {< NAME} -> NAME < ? |
|
816 |
- |
|
817 |
-=head4 C<E<gt>> |
|
818 |
- |
|
819 |
- {> NAME} -> NAME > ? |
|
820 |
- |
|
821 |
-=head4 C<E<gt>=> |
|
822 |
- |
|
823 |
- {>= NAME} -> NAME >= ? |
|
824 |
- |
|
825 |
-=head4 C<E<lt>=> |
|
826 |
- |
|
827 |
- {<= NAME} -> NAME <= ? |
|
828 |
- |
|
829 |
-=head4 C<like> |
|
830 |
- |
|
831 |
- {like NAME} -> NAME like ? |
|
832 |
- |
|
833 |
-=head4 C<in> |
|
834 |
- |
|
835 |
- {in NAME COUNT} -> NAME in [?, ?, ..] |
|
836 |
- |
|
837 |
-=head4 C<insert_param> |
|
838 |
- |
|
839 |
- {insert_param NAME1 NAME2} -> (NAME1, NAME2) values (?, ?) |
|
840 |
- |
|
841 |
-=head4 C<update_param> |
|
842 |
- |
|
843 |
- {update_param NAME1 NAME2} -> set NAME1 = ?, NAME2 = ? |
|
844 |
- |
|
845 | 785 |
=head3 Manipulate same name's columns |
846 | 786 |
|
847 | 787 |
It is ok if there are same name's columns. |
848 | 788 |
Let's think two date comparison. |
849 | 789 |
|
850 |
- my $sql = "select * from table where {> date} and {< date};"; |
|
790 |
+ my $sql = "select * from table where date > :date and date < :date;"; |
|
851 | 791 |
|
852 | 792 |
In this case, You specify paramter values as array reference. |
853 | 793 |
|
854 | 794 |
my $dbi->execute($sql, param => {date => ['2010-10-01', '2012-02-10']}); |
855 | 795 |
|
856 |
-=head3 Register Tag : C<register_tag()> |
|
857 |
- |
|
858 |
-You can register custom tag. |
|
859 |
-use C<register_tag()> to register tag. |
|
860 |
- |
|
861 |
- $dbi->register_tag( |
|
862 |
- '=' => sub { |
|
863 |
- my $column = shift; |
|
864 |
- |
|
865 |
- return ["$column = ?", [$column]]; |
|
866 |
- } |
|
867 |
- ); |
|
868 |
- |
|
869 |
-This is implementation of C<=> tag. |
|
870 |
-Tag format is the following one. |
|
871 |
- |
|
872 |
- {TAG_NAME ARG1 ARG2 ...} |
|
873 |
- |
|
874 |
-In case C<=> tag. Format is |
|
875 |
- |
|
876 |
- {= title} |
|
877 |
- |
|
878 |
-So subroutine receive one argument "title". |
|
879 |
-You have to return array reference in the following format. |
|
880 |
- |
|
881 |
- [ |
|
882 |
- String after expanding, |
|
883 |
- [COLUMN1(This is used for place holder), COLUMN2 , ...] |
|
884 |
- ] |
|
885 |
- |
|
886 |
-First element is expanded stirng. In this example, |
|
887 |
- |
|
888 |
- 'title = ?' |
|
889 |
- |
|
890 |
-Secount element is array reference which is used to embedd value to |
|
891 |
-place holder. In this example, |
|
892 |
- |
|
893 |
- ['title'] |
|
894 |
- |
|
895 |
-If there are more than one placeholders, |
|
896 |
-This elements is multipul. |
|
897 |
- |
|
898 |
-You return the following array reference. |
|
899 |
- |
|
900 |
- ['title = ?', ['title']] |
|
901 |
- |
|
902 |
-See source of L<DBIx::Custom::Tag> to see many implementation. |
|
903 |
- |
|
904 | 796 |
=head2 6. Dinamically create where clause |
905 | 797 |
|
906 | 798 |
=head3 Dinamically create where clause : where() |
... | ... |
@@ -910,15 +802,15 @@ Let's think the following three cases. |
910 | 802 |
|
911 | 803 |
Case1: Search only C<title> |
912 | 804 |
|
913 |
- where {= title} |
|
805 |
+ where title = :title |
|
914 | 806 |
|
915 | 807 |
Case2: Search only C<author> |
916 | 808 |
|
917 |
- where {= author} |
|
809 |
+ where author = :author |
|
918 | 810 |
|
919 | 811 |
Case3: Search C<title> and C<author> |
920 | 812 |
|
921 |
- where {= title} and {=author} |
|
813 |
+ where title = :title and author = :author |
|
922 | 814 |
|
923 | 815 |
L<DBIx::Custom> support dinamic where clause creating. |
924 | 816 |
At first, create L<DBIx::Custom::Where> object by C<where()>. |
... | ... |
@@ -928,24 +820,24 @@ At first, create L<DBIx::Custom::Where> object by C<where()>. |
928 | 820 |
Set clause by C<clause()> |
929 | 821 |
|
930 | 822 |
$where->clause( |
931 |
- ['and', '{= title'}, '{= author}'] |
|
823 |
+ ['and', 'title = :title, 'author = :author'] |
|
932 | 824 |
); |
933 | 825 |
|
934 | 826 |
C<clause> is the following format. |
935 | 827 |
|
936 |
- ['or' or 'and', TAG1, TAG2, TAG3] |
|
828 |
+ ['or' or 'and', PART1, PART1, PART1] |
|
937 | 829 |
|
938 | 830 |
First argument is 'or' or 'and'. |
939 |
-Later than first argument are tag names. |
|
831 |
+Later than first argument are part which contains parameter. |
|
940 | 832 |
|
941 | 833 |
You can write more complex format. |
942 | 834 |
|
943 | 835 |
['and', |
944 |
- '{= title}', |
|
945 |
- ['or', '{= author}', '{like date}'] |
|
836 |
+ 'title = :title', |
|
837 |
+ ['or', 'author = :author', 'date like :date'] |
|
946 | 838 |
] |
947 | 839 |
|
948 |
-This mean "{=title} and ( {=author} or {like date} )". |
|
840 |
+This mean "title = :title and ( author = :author or date like :date )". |
|
949 | 841 |
|
950 | 842 |
After setting C<clause>, set C<param>. |
951 | 843 |
|
... | ... |
@@ -960,7 +852,7 @@ which contain only parameter name. |
960 | 852 |
|
961 | 853 |
Parameter name is only title, the following where clause is created. |
962 | 854 |
|
963 |
- where {= title} |
|
855 |
+ where title = :title |
|
964 | 856 |
|
965 | 857 |
You can also create where clause by stringification. |
966 | 858 |
|
... | ... |
@@ -970,7 +862,7 @@ This is useful to embbed it into SQL. |
970 | 862 |
|
971 | 863 |
=head3 In case where clause contains same name columns |
972 | 864 |
|
973 |
-Even if same name tags exists, you can create where clause. |
|
865 |
+Even if same name parameters exists, you can create where clause. |
|
974 | 866 |
Let's think that there are starting date and ending date. |
975 | 867 |
|
976 | 868 |
my $param = {start_date => '2010-11-15', end_date => '2011-11-21'}; |
... | ... |
@@ -979,10 +871,10 @@ In this case, you set parameter value as array reference. |
979 | 871 |
|
980 | 872 |
my $p = {date => ['2010-11-15', '2011-11-21']}; |
981 | 873 |
|
982 |
-You can embbed these values into same name tags. |
|
874 |
+You can embbed these values into same name parameters. |
|
983 | 875 |
|
984 | 876 |
$where->clause( |
985 |
- ['and', '{> date}', '{< date}'] |
|
877 |
+ ['and', 'date > :date', 'date < :date'] |
|
986 | 878 |
); |
987 | 879 |
$where->param($p); |
988 | 880 |
|
... | ... |
@@ -1014,7 +906,7 @@ This logic is a little difficut. See the following ones. |
1014 | 906 |
You can pass L<DBIx::Custom::Where> object to C<where> of C<select()>. |
1015 | 907 |
|
1016 | 908 |
my $where = $dbi->where; |
1017 |
- $where->clause(['and', '{= title}', '{= author}']); |
|
909 |
+ $where->clause(['and', 'title = :title', 'author = :author']); |
|
1018 | 910 |
$where->param({title => 'Perl'}); |
1019 | 911 |
my $result = $dbi->select(table => 'book', where => $where); |
1020 | 912 |
|
... | ... |
@@ -1025,15 +917,15 @@ You can also pass it to C<where> of C<update()>AC<delete()> |
1025 | 917 |
L<DBIx::Custom::Where> object is embedded into SQL. |
1026 | 918 |
|
1027 | 919 |
my $where = $dbi->where; |
1028 |
- $where->clause(['and', '{= title}', '{= author}']); |
|
920 |
+ $where->clause(['and', 'title = :title', 'author = :author']); |
|
1029 | 921 |
$where->param({title => 'Perl'}); |
1030 | 922 |
|
1031 | 923 |
my $sql = <<"EOS"; |
1032 |
- select * from {table book}; |
|
924 |
+ select * from book; |
|
1033 | 925 |
$where |
1034 | 926 |
EOS |
1035 | 927 |
|
1036 |
- $dbi->execute($sql, param => $param); |
|
928 |
+ $dbi->execute($sql, param => $param, table => 'book'); |
|
1037 | 929 |
|
1038 | 930 |
=head2 7. Model |
1039 | 931 |
|
... | ... |
@@ -24,12 +24,12 @@ L<DBIx::Custom>の主な目的は、SQLを尊重しつつ、L<DBI>だけでは |
24 | 24 |
活用することができます。 |
25 | 25 |
|
26 | 26 |
L<DBIx::Custom>の仕組みを少しだけ説明しておきます。 |
27 |
-L<DBIx::Custom>では、タグと呼ばれるものを |
|
27 |
+L<DBIx::Custom>では、パラメーターと呼ばれるものを |
|
28 | 28 |
SQLの中に埋め込むことができます。 |
29 | 29 |
|
30 |
- select * from book where {= title} and {=author}; |
|
30 |
+ select * from book where title = :title and author = :author; |
|
31 | 31 |
|
32 |
-{}で囲まれた部分がタグです。このSQLは実際に実行されるときには |
|
32 |
+:titleや:authorがパラメーターです。このSQLは実際に実行されるときには |
|
33 | 33 |
次のようにプレースホルダに展開されます。 |
34 | 34 |
|
35 | 35 |
select * from book where title = ? and author = ?; |
... | ... |
@@ -113,7 +113,7 @@ L<DBIx::Custom>はさらに簡単で便利な方法を用意しています。 |
113 | 113 |
|
114 | 114 |
# 検索条件 |
115 | 115 |
$where->clause( |
116 |
- ['and', '{= title}', {'= author'}] |
|
116 |
+ ['and', 'title = :title', 'author = :author'] |
|
117 | 117 |
); |
118 | 118 |
|
119 | 119 |
# 必要な列を自動的に選択するための設定 |
... | ... |
@@ -391,10 +391,10 @@ SQLを実行するにはC<execute()>を使用します。 |
391 | 391 |
|
392 | 392 |
$dbi->execute("select * from book;"); |
393 | 393 |
|
394 |
-タグを処理してSQLを実行します。 |
|
394 |
+パラメーターを処理してSQLを実行します。 |
|
395 | 395 |
|
396 | 396 |
$dbi->execute( |
397 |
- "select * from book {= title} and {= author};" |
|
397 |
+ "select * from book title = :title and author = :author;" |
|
398 | 398 |
param => {title => 'Perl', author => 'Ken'} |
399 | 399 |
); |
400 | 400 |
|
... | ... |
@@ -404,7 +404,7 @@ SQLを実行するにはC<execute()>を使用します。 |
404 | 404 |
|
405 | 405 |
プレースホルダにtitleとauthorの値が埋め込まれます。 |
406 | 406 |
|
407 |
-タグについてはL<5. タグ/"5. タグ">を見てください。 |
|
407 |
+パラメーターについてはL<5. パラメーター/"5. パラメーター">を見てください。 |
|
408 | 408 |
|
409 | 409 |
またC<execute()>のSQLの末尾にはセミコロンを置く必要はありません。 |
410 | 410 |
|
... | ... |
@@ -759,37 +759,23 @@ each_columnはコールバックを受け取ります。コールバックの引 |
759 | 759 |
L<DBIx::Custom>オブジェクト、テーブル名、列名、列の情報です。 |
760 | 760 |
列の型名の情報をもとに自動的に、フィルタを適用しています。 |
761 | 761 |
|
762 |
-=head2 5. タグ |
|
762 |
+=head2 5. パラメーター |
|
763 | 763 |
|
764 |
-=head3 タグの基本 |
|
764 |
+=head3 パラメーターの基本 |
|
765 | 765 |
|
766 |
-SQLの中にタグを埋め込むことができます。 |
|
766 |
+SQLの中にパラメーターを埋め込むことができます。 |
|
767 | 767 |
|
768 |
- select * from book where {= title} and {like author}; |
|
768 |
+ select * from book where title = :title and author like :author; |
|
769 | 769 |
|
770 |
-{= title}と{like author}の部分がタグです。タグは次のような形式 |
|
771 |
-を持ちます。 |
|
772 |
- |
|
773 |
- {タグ名 引数1 引数2 ...} |
|
770 |
+:titleと:authorの部分がパラメーターです。 |
|
774 | 771 |
|
775 |
-タグはC<{>で始まり、C<}>で終わります。最初のC<{>とタグ名の間 |
|
776 |
-には空白を挿入しないよう注意してください。 |
|
777 |
- |
|
778 |
-C<{>とC<}>は予約語になっています。 |
|
779 |
-もし利用したい場合は\でエスケープを行う必要があります。 |
|
780 |
- |
|
781 |
- select from book \\{ ... \\} |
|
782 |
- |
|
783 |
-C<\>自体がPerlのエスケープ文字ですので、 |
|
784 |
-C<\>は二つ必要になります。 |
|
785 |
- |
|
786 |
-タグはSQLが実行される前に展開されます。 |
|
772 |
+パラメーターはSQLが実行される前に展開されます。 |
|
787 | 773 |
|
788 | 774 |
select * from book where title = ? and author like ?; |
789 | 775 |
|
790 |
-タグを含むSQLを実行するにはC<execute()>を使用します。 |
|
776 |
+パラメーターを含むSQLを実行するにはC<execute()>を使用します。 |
|
791 | 777 |
|
792 |
- my $sql = "select * from book where {= author} and {like title};" |
|
778 |
+ my $sql = "select * from book where author = :author and title like :title;" |
|
793 | 779 |
$dbi->execute($sql, param => {title => 'Perl', author => '%Ken%'}); |
794 | 780 |
|
795 | 781 |
C<param>オプションを使って、プレースホルダに埋め込みたい値を |
... | ... |
@@ -809,118 +795,18 @@ C<table>オプションを利用します。 |
809 | 795 |
|
810 | 796 |
後ろで適用したフィルタのほうが優先順位が高くなります。 |
811 | 797 |
|
812 |
-=head3 タグ一覧 |
|
813 |
- |
|
814 |
-=head4 C<?> |
|
815 |
- |
|
816 |
- {? NAME} -> ? |
|
817 |
- |
|
818 |
-=head4 C<=> |
|
819 |
- |
|
820 |
- {= NAME} -> NAME = ? |
|
821 |
- |
|
822 |
-=head4 C<E<lt>E<gt>> |
|
823 |
- |
|
824 |
- {<> NAME} -> NAME <> ? |
|
825 |
- |
|
826 |
-=head4 C<E<lt>> |
|
827 |
- |
|
828 |
- {< NAME} -> NAME < ? |
|
829 |
- |
|
830 |
-=head4 C<E<gt>> |
|
831 |
- |
|
832 |
- {> NAME} -> NAME > ? |
|
833 |
- |
|
834 |
-=head4 C<E<gt>=> |
|
835 |
- |
|
836 |
- {>= NAME} -> NAME >= ? |
|
837 |
- |
|
838 |
-=head4 C<E<lt>=> |
|
839 |
- |
|
840 |
- {<= NAME} -> NAME <= ? |
|
841 |
- |
|
842 |
-=head4 C<like> |
|
843 |
- |
|
844 |
- {like NAME} -> NAME like ? |
|
845 |
- |
|
846 |
-=head4 C<in> |
|
847 |
- |
|
848 |
- {in NAME COUNT} -> NAME in [?, ?, ..] |
|
849 |
- |
|
850 |
-=head4 C<insert_param> |
|
851 |
- |
|
852 |
- {insert_param NAME1 NAME2} -> (NAME1, NAME2) values (?, ?) |
|
853 |
- |
|
854 |
-=head4 C<update_param> |
|
855 |
- |
|
856 |
- {update_param NAME1 NAME2} -> set NAME1 = ?, NAME2 = ? |
|
857 |
- |
|
858 | 798 |
=head3 同名の列の扱い |
859 | 799 |
|
860 |
-同名の列を含むタグがある場合でも大丈夫です。 |
|
800 |
+同名の列を含むパラメーターがある場合でも大丈夫です。 |
|
861 | 801 |
二つの日付で比較しなければならない場合を |
862 | 802 |
考えて見ましょう。 |
863 | 803 |
|
864 |
- my $sql = "select * from table where {> date} and {< date};"; |
|
804 |
+ my $sql = "select * from table where date > :date and date < :date;"; |
|
865 | 805 |
|
866 | 806 |
このような場合はパラメータの値を配列のリファレンスで指定します。 |
867 | 807 |
|
868 | 808 |
my $dbi->execute($sql, param => {date => ['2010-10-01', '2012-02-10']}); |
869 | 809 |
|
870 |
-=head3 タグの登録 C<register_tag()> |
|
871 |
- |
|
872 |
-独自のタグを登録することができます。 |
|
873 |
-タグを追加するにはC<register_tag()>を使用します。 |
|
874 |
- |
|
875 |
- $dbi->register_tag( |
|
876 |
- '=' => sub { |
|
877 |
- my $column = shift; |
|
878 |
- |
|
879 |
- return ["$column = ?", [$column]]; |
|
880 |
- } |
|
881 |
- ); |
|
882 |
- |
|
883 |
-ここではデフォルトのC<=>タグがどのように実装されているかを示しています。 |
|
884 |
-タグの形式は次のようになっています。 |
|
885 |
- |
|
886 |
- {タグ名 引数1 引数2 ...} |
|
887 |
- |
|
888 |
-C<=>タグの場合は |
|
889 |
- |
|
890 |
- {= title} |
|
891 |
- |
|
892 |
-という形式ですから、サブルーチンにはtitleというひとつの列名がわたってきます。 |
|
893 |
- |
|
894 |
-サブルーチンの戻り値には次の形式の配列のリファレンスを返す必要があります。 |
|
895 |
- |
|
896 |
- [ |
|
897 |
- 展開後の文字列, |
|
898 |
- [プレースホルダに埋め込みに利用する列名1, 列名2, ...] |
|
899 |
- ] |
|
900 |
- |
|
901 |
-一つ目の要素は展開後の文字列です。この例では |
|
902 |
- |
|
903 |
- 'title = ?' |
|
904 |
- |
|
905 |
-を返す必要があります。 |
|
906 |
- |
|
907 |
-二つ目の要素はプレースホルダに埋め込みに利用する列名を含む配列の |
|
908 |
-リファレンスです。今回の例では |
|
909 |
- |
|
910 |
- ['title'] |
|
911 |
- |
|
912 |
-を返す必要があります。複数のプレースホルダを含む場合は、この部分が |
|
913 |
-複数になります。 |
|
914 |
- |
|
915 |
-上記を合わせると |
|
916 |
- |
|
917 |
- ['title = ?', ['title']] |
|
918 |
- |
|
919 |
-を返す必要があるということです。 |
|
920 |
- |
|
921 |
-タグの実装の他のサンプルはL<DBIx::Custom::Tag>のソースコード |
|
922 |
-をご覧になってみてください。 |
|
923 |
- |
|
924 | 810 |
=head2 6. Where句の動的な生成 |
925 | 811 |
|
926 | 812 |
=head3 Where句の動的な生成 where() |
... | ... |
@@ -930,15 +816,15 @@ C<=>タグの場合は |
930 | 816 |
|
931 | 817 |
titleの値だけで検索したい場合 |
932 | 818 |
|
933 |
- where {= title} |
|
819 |
+ where title = :title |
|
934 | 820 |
|
935 | 821 |
authorの値だけで検索したい場合 |
936 | 822 |
|
937 |
- where {= author} |
|
823 |
+ where author = :author |
|
938 | 824 |
|
939 | 825 |
titleとauthorの両方の値で検索したい場合 |
940 | 826 |
|
941 |
- where {= title} and {=author} |
|
827 |
+ where title = :title and author = :author |
|
942 | 828 |
|
943 | 829 |
L<DBIx::Custom>では動的なWhere句の生成をサポートしています。 |
944 | 830 |
まずC<where()>でL<DBIx::Custom::Where>オブジェクトを生成します。 |
... | ... |
@@ -948,25 +834,25 @@ L<DBIx::Custom>では動的なWhere句の生成をサポートしています。 |
948 | 834 |
次にC<clause()>を使用してwhere句を記述します。 |
949 | 835 |
|
950 | 836 |
$where->clause( |
951 |
- ['and', '{= title'}, '{= author}'] |
|
837 |
+ ['and', 'title = :title', 'author = :author'] |
|
952 | 838 |
); |
953 | 839 |
|
954 | 840 |
clauseの指定方法は次のようになります。 |
955 | 841 |
|
956 |
- ['or' あるいは 'and', タグ1, タグ2, タグ3] |
|
842 |
+ ['or' あるいは 'and', パラメーター1, パラメーター2, パラメーター3] |
|
957 | 843 |
|
958 | 844 |
第一引数にはorあるいはandを指定します。第二引数以降には |
959 |
-検索条件をタグを使って記述します。 |
|
845 |
+検索条件をパラメーターを使って記述します。 |
|
960 | 846 |
|
961 | 847 |
C<clause>の指定は入れ子にすることもでき、さらに複雑な条件 |
962 | 848 |
を記述することもできます。 |
963 | 849 |
|
964 | 850 |
['and', |
965 |
- '{= title}', |
|
966 |
- ['or', '{= author}', '{like date}'] |
|
851 |
+ 'title = :title', |
|
852 |
+ ['or', 'author = :author', 'date like :date'] |
|
967 | 853 |
] |
968 | 854 |
|
969 |
-これは "{=title} and ( {=author} or {like date} )" 意味しています。 |
|
855 |
+これは "title = :title and ( author = :author or date like :date )" 意味しています。 |
|
970 | 856 |
|
971 | 857 |
C<clause>を設定した後にC<param>にパラメータを指定します。 |
972 | 858 |
|
... | ... |
@@ -981,7 +867,7 @@ where句を生成することができます。 |
981 | 867 |
|
982 | 868 |
パラメータはtitleだけですので、次のようなwhere句が生成されます。 |
983 | 869 |
|
984 |
- where {= title} |
|
870 |
+ where title = :title |
|
985 | 871 |
|
986 | 872 |
またL<DBIx::Custom>は文字列の評価をオーバーロードして、C<to_string()> |
987 | 873 |
を呼び出すようにしていますので、次のようにしてwhere句を生成することも |
... | ... |
@@ -993,7 +879,7 @@ where句を生成することができます。 |
993 | 879 |
|
994 | 880 |
=head3 同一の列名を含む場合 |
995 | 881 |
|
996 |
-タグの中に同一の名前を持つものが存在した場合でも動的に |
|
882 |
+パラメーターの中に同一の名前を持つものが存在した場合でも動的に |
|
997 | 883 |
where句を作成することができます。 |
998 | 884 |
|
999 | 885 |
たとえば、パラメータとして開始日付と終了日付を受け取ったことを |
... | ... |
@@ -1005,10 +891,10 @@ where句を作成することができます。 |
1005 | 891 |
|
1006 | 892 |
my $p = {date => ['2010-11-15', '2011-11-21']}; |
1007 | 893 |
|
1008 |
-同名の列を含むタグに順番に埋め込むことができます。 |
|
894 |
+同名の列を含むパラメーターに順番に埋め込むことができます。 |
|
1009 | 895 |
|
1010 | 896 |
$where->clause( |
1011 |
- ['and', '{> date}', '{< date}'] |
|
897 |
+ ['and', 'date > :date', 'date < :date'] |
|
1012 | 898 |
); |
1013 | 899 |
$where->param($p); |
1014 | 900 |
|
... | ... |
@@ -376,6 +376,12 @@ Statement handle of L<DBI>. |
376 | 376 |
L<DBIx::Custom::Result> inherits all methods from L<Object::Simple> |
377 | 377 |
and implements the following new ones. |
378 | 378 |
|
379 |
+=head2 C<all> |
|
380 |
+ |
|
381 |
+ my $rows = $result->all; |
|
382 |
+ |
|
383 |
+This is alias for C<fetch_hash_all>. |
|
384 |
+ |
|
379 | 385 |
=head2 C<end_filter> |
380 | 386 |
|
381 | 387 |
$result = $result->end_filter(title => 'to_something', |
... | ... |
@@ -448,6 +454,12 @@ Filters. |
448 | 454 |
These each filters override the filters applied by C<apply_filter> of |
449 | 455 |
L<DBIx::Custom>. |
450 | 456 |
|
457 |
+=head2 C<one> |
|
458 |
+ |
|
459 |
+ my $row = $result->one; |
|
460 |
+ |
|
461 |
+This is alias for C<fetch_hash_first>. |
|
462 |
+ |
|
451 | 463 |
=head2 C<remove_end_filter> |
452 | 464 |
|
453 | 465 |
$result->remove_end_filter; |
... | ... |
@@ -1078,7 +1078,7 @@ $row = $result->fetch_hash_all; |
1078 | 1078 |
is_deeply($row, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}]); |
1079 | 1079 |
|
1080 | 1080 |
$where = $dbi->where |
1081 |
- ->clause(['and', ['or', '{> key1}', '{< key1}'], '{= key2}']) |
|
1081 |
+ ->clause(['and', ['or', 'key1 > :key1', 'key1 < :key1'], 'key2 = :key2']) |
|
1082 | 1082 |
->param({key1 => [0, 3], key2 => 2}); |
1083 | 1083 |
$result = $dbi->select( |
1084 | 1084 |
table => 'table1', |