- update_param_tag is DEPRECATED! use update_param...
...instead.
| ... | ... |
@@ -1,3 +1,9 @@ |
| 1 |
+0.1684 |
|
| 2 |
+ - update_param_tag is DEPRECATED! use update_param instead. |
|
| 3 |
+ - insert_param_tag is DEPRECATED! use insert_param instead. |
|
| 4 |
+ - assing_param_tag is DEPRECATED! use assign_param instead. |
|
| 5 |
+ - Tag system such as {? title}, {= title} is DEPRECATED!
|
|
| 6 |
+ and added paramter system such as :title. |
|
| 1 | 7 |
0.1683 |
| 2 | 8 |
- data_source is DEPRECATED! It is renamed to dsn |
| 3 | 9 |
0.1682 |
| ... | ... |
@@ -152,8 +152,7 @@ sub apply_filter {
|
| 152 | 152 |
return $self; |
| 153 | 153 |
} |
| 154 | 154 |
|
| 155 |
- |
|
| 156 |
-sub assign_tag {
|
|
| 155 |
+sub assign_param {
|
|
| 157 | 156 |
my ($self, $param) = @_; |
| 158 | 157 |
|
| 159 | 158 |
# Create set tag |
| ... | ... |
@@ -163,9 +162,9 @@ sub assign_tag {
|
| 163 | 162 |
foreach my $column (keys %$param) {
|
| 164 | 163 |
croak qq{"$column" is not safety column name } . _subname
|
| 165 | 164 |
unless $column =~ /^[$safety\.]+$/; |
| 166 |
- my $column = "$q$column$q"; |
|
| 167 |
- $column =~ s/\./$q.$q/; |
|
| 168 |
- push @params, "$column = {? $column}";
|
|
| 165 |
+ my $column_quote = "$q$column$q"; |
|
| 166 |
+ $column_quote =~ s/\./$q.$q/; |
|
| 167 |
+ push @params, "$column_quote = :$column"; |
|
| 169 | 168 |
} |
| 170 | 169 |
my $tag = join(', ', @params);
|
| 171 | 170 |
|
| ... | ... |
@@ -595,20 +594,9 @@ sub insert {
|
| 595 | 594 |
# Reserved word quote |
| 596 | 595 |
my $q = $self->reserved_word_quote; |
| 597 | 596 |
|
| 598 |
- # Columns |
|
| 599 |
- my @columns; |
|
| 600 |
- my $safety = $self->safety_character; |
|
| 601 |
- foreach my $column (keys %$param) {
|
|
| 602 |
- croak qq{"$column" is not safety column name } . _subname
|
|
| 603 |
- unless $column =~ /^[$safety\.]+$/; |
|
| 604 |
- $column = "$q$column$q"; |
|
| 605 |
- $column =~ s/\./$q.$q/; |
|
| 606 |
- push @columns, $column; |
|
| 607 |
- } |
|
| 608 |
- |
|
| 609 | 597 |
# Insert statement |
| 610 | 598 |
my @sql; |
| 611 |
- push @sql, "insert into $q$table$q {insert_param ". join(' ', @columns) . '}';
|
|
| 599 |
+ push @sql, "insert into $q$table$q " . $self->insert_param($param); |
|
| 612 | 600 |
push @sql, $append if $append; |
| 613 | 601 |
my $sql = join (' ', @sql);
|
| 614 | 602 |
|
| ... | ... |
@@ -649,7 +637,7 @@ sub insert_at {
|
| 649 | 637 |
return $self->insert(param => $param, %args); |
| 650 | 638 |
} |
| 651 | 639 |
|
| 652 |
-sub insert_param_tag {
|
|
| 640 |
+sub insert_param {
|
|
| 653 | 641 |
my ($self, $param) = @_; |
| 654 | 642 |
|
| 655 | 643 |
# Create insert parameter tag |
| ... | ... |
@@ -660,10 +648,10 @@ sub insert_param_tag {
|
| 660 | 648 |
foreach my $column (keys %$param) {
|
| 661 | 649 |
croak qq{"$column" is not safety column name } . _subname
|
| 662 | 650 |
unless $column =~ /^[$safety\.]+$/; |
| 663 |
- $column = "$q$column$q"; |
|
| 664 |
- $column =~ s/\./$q.$q/; |
|
| 665 |
- push @columns, $column; |
|
| 666 |
- push @placeholders, "{? $column}";
|
|
| 651 |
+ my $column_quote = "$q$column$q"; |
|
| 652 |
+ $column_quote =~ s/\./$q.$q/; |
|
| 653 |
+ push @columns, $column_quote; |
|
| 654 |
+ push @placeholders, ":$column"; |
|
| 667 | 655 |
} |
| 668 | 656 |
|
| 669 | 657 |
return '(' . join(', ', @columns) . ') ' . 'values ' .
|
| ... | ... |
@@ -1030,21 +1018,9 @@ sub update {
|
| 1030 | 1018 |
croak qq{"$name" is wrong option } . _subname
|
| 1031 | 1019 |
unless $UPDATE_ARGS{$name};
|
| 1032 | 1020 |
} |
| 1033 |
- |
|
| 1034 |
- # Columns |
|
| 1035 |
- my @columns; |
|
| 1036 |
- my $safety = $self->safety_character; |
|
| 1037 |
- my $q = $self->reserved_word_quote; |
|
| 1038 |
- foreach my $column (keys %$param) {
|
|
| 1039 |
- croak qq{"$column" is not safety column name } . _subname
|
|
| 1040 |
- unless $column =~ /^[$safety\.]+$/; |
|
| 1041 |
- $column = "$q$column$q"; |
|
| 1042 |
- $column =~ s/\./$q.$q/; |
|
| 1043 |
- push @columns, "$column"; |
|
| 1044 |
- } |
|
| 1045 | 1021 |
|
| 1046 | 1022 |
# Update clause |
| 1047 |
- my $update_clause = '{update_param ' . join(' ', @columns) . '}';
|
|
| 1023 |
+ my $update_clause = $self->update_param($param); |
|
| 1048 | 1024 |
|
| 1049 | 1025 |
# Where |
| 1050 | 1026 |
my $where_clause = ''; |
| ... | ... |
@@ -1066,6 +1042,7 @@ sub update {
|
| 1066 | 1042 |
|
| 1067 | 1043 |
# Update statement |
| 1068 | 1044 |
my @sql; |
| 1045 |
+ my $q = $self->reserved_word_quote; |
|
| 1069 | 1046 |
push @sql, "update $q$table$q $update_clause $where_clause"; |
| 1070 | 1047 |
push @sql, $append if $append; |
| 1071 | 1048 |
|
| ... | ... |
@@ -1112,11 +1089,11 @@ sub update_at {
|
| 1112 | 1089 |
return $self->update(where => $where_param, %args); |
| 1113 | 1090 |
} |
| 1114 | 1091 |
|
| 1115 |
-sub update_param_tag {
|
|
| 1092 |
+sub update_param {
|
|
| 1116 | 1093 |
my ($self, $param, $opt) = @_; |
| 1117 | 1094 |
|
| 1118 | 1095 |
# Create update parameter tag |
| 1119 |
- my $tag = $self->assign_tag($param); |
|
| 1096 |
+ my $tag = $self->assign_param($param); |
|
| 1120 | 1097 |
$tag = "set $tag" unless $opt->{no_set};
|
| 1121 | 1098 |
|
| 1122 | 1099 |
return $tag; |
| ... | ... |
@@ -1340,9 +1317,9 @@ sub _where_to_obj {
|
| 1340 | 1317 |
my $clause = ['and']; |
| 1341 | 1318 |
my $q = $self->reserved_word_quote; |
| 1342 | 1319 |
foreach my $column (keys %$where) {
|
| 1343 |
- $column = "$q$column$q"; |
|
| 1344 |
- $column =~ s/\./$q.$q/; |
|
| 1345 |
- push @$clause, "{= $column}" for keys %$where;
|
|
| 1320 |
+ my $column_quote = "$q$column$q"; |
|
| 1321 |
+ $column_quote =~ s/\./$q.$q/; |
|
| 1322 |
+ push @$clause, "$column_quote = :$column" for keys %$where; |
|
| 1346 | 1323 |
} |
| 1347 | 1324 |
$obj = $self->where(clause => $clause, param => $where); |
| 1348 | 1325 |
} |
| ... | ... |
@@ -1427,10 +1404,10 @@ sub default_fetch_filter {
|
| 1427 | 1404 |
} |
| 1428 | 1405 |
|
| 1429 | 1406 |
# DEPRECATED! |
| 1430 |
-sub insert_param {
|
|
| 1431 |
- warn "insert_param is renamed to insert_param_tag." |
|
| 1432 |
- . " insert_param is DEPRECATED!"; |
|
| 1433 |
- return shift->insert_param_tag(@_); |
|
| 1407 |
+sub insert_param_tag {
|
|
| 1408 |
+ warn "insert_param_tag is DEPRECATED! " . |
|
| 1409 |
+ "use insert_param instead!"; |
|
| 1410 |
+ return shift->insert_param(@_); |
|
| 1434 | 1411 |
} |
| 1435 | 1412 |
|
| 1436 | 1413 |
# DEPRECATED! |
| ... | ... |
@@ -1439,10 +1416,10 @@ sub register_tag_processor {
|
| 1439 | 1416 |
} |
| 1440 | 1417 |
|
| 1441 | 1418 |
# DEPRECATED! |
| 1442 |
-sub update_param {
|
|
| 1443 |
- warn "update_param is renamed to update_param_tag." |
|
| 1444 |
- . " update_param is DEPRECATED!"; |
|
| 1445 |
- return shift->update_param_tag(@_); |
|
| 1419 |
+sub update_param_tag {
|
|
| 1420 |
+ warn "update_param is DEPRECATED! " . |
|
| 1421 |
+ "use update_param instead"; |
|
| 1422 |
+ return shift->update_param(@_); |
|
| 1446 | 1423 |
} |
| 1447 | 1424 |
# DEPRECATED! |
| 1448 | 1425 |
sub _push_relation {
|
| ... | ... |
@@ -1547,7 +1524,7 @@ DBIx::Custom - Useful database access, respecting SQL! |
| 1547 | 1524 |
|
| 1548 | 1525 |
# Execute SQL with parameter. |
| 1549 | 1526 |
$dbi->execute( |
| 1550 |
- "select id from book where {= author} and {like title}",
|
|
| 1527 |
+ "select id from book where author = :author and title like :title", |
|
| 1551 | 1528 |
param => {author => 'ken', title => '%Perl%'}
|
| 1552 | 1529 |
); |
| 1553 | 1530 |
|
| ... | ... |
@@ -1758,15 +1735,15 @@ You can set multiple filters at once. |
| 1758 | 1735 |
} |
| 1759 | 1736 |
); |
| 1760 | 1737 |
|
| 1761 |
-=head2 C<assign_tag> EXPERIMENTAL |
|
| 1738 |
+=head2 C<assign_param> EXPERIMENTAL |
|
| 1762 | 1739 |
|
| 1763 |
- my $assign_tag = $dbi->assign_tag({title => 'a', age => 2});
|
|
| 1740 |
+ my $assign_param = $dbi->assign_param({title => 'a', age => 2});
|
|
| 1764 | 1741 |
|
| 1765 | 1742 |
Create assign tag. |
| 1766 | 1743 |
|
| 1767 |
- title = {? title}, author = {? author}
|
|
| 1744 |
+ title = :title, author = :author |
|
| 1768 | 1745 |
|
| 1769 |
-This is equal to C<update_param_tag> exept that set is not added. |
|
| 1746 |
+This is equal to C<update_param> exept that set is not added. |
|
| 1770 | 1747 |
|
| 1771 | 1748 |
=head2 C<connect> |
| 1772 | 1749 |
|
| ... | ... |
@@ -1848,7 +1825,7 @@ column name and column information. |
| 1848 | 1825 |
=head2 C<execute> |
| 1849 | 1826 |
|
| 1850 | 1827 |
my $result = $dbi->execute( |
| 1851 |
- "select * from book where {= title} and {like author}",
|
|
| 1828 |
+ "select * from book where title = :title and author like :author", |
|
| 1852 | 1829 |
param => {title => 'Perl', author => '%Ken%'}
|
| 1853 | 1830 |
); |
| 1854 | 1831 |
|
| ... | ... |
@@ -1943,14 +1920,14 @@ or array refrence, which contains where clause and paramter. |
| 1943 | 1920 |
|
| 1944 | 1921 |
# DBIx::Custom::Where object |
| 1945 | 1922 |
my $where = $dbi->where( |
| 1946 |
- clause => ['and', '{= author}', '{like title}'],
|
|
| 1923 |
+ clause => ['and', 'author = :author', 'title like :title'], |
|
| 1947 | 1924 |
param => {author => 'Ken', title => '%Perl%'}
|
| 1948 | 1925 |
); |
| 1949 | 1926 |
$dbi->delete(where => $where); |
| 1950 | 1927 |
|
| 1951 | 1928 |
# String(with where_param option) |
| 1952 | 1929 |
$dbi->delete( |
| 1953 |
- where => '{like title}',
|
|
| 1930 |
+ where => 'title like :title', |
|
| 1954 | 1931 |
where_param => {title => '%Perl%'}
|
| 1955 | 1932 |
); |
| 1956 | 1933 |
|
| ... | ... |
@@ -2190,13 +2167,13 @@ Place holders are set to 5 and 'Perl'. |
| 2190 | 2167 |
|
| 2191 | 2168 |
=back |
| 2192 | 2169 |
|
| 2193 |
-=head2 C<insert_param_tag> |
|
| 2170 |
+=head2 C<insert_param> |
|
| 2194 | 2171 |
|
| 2195 |
- my $insert_param_tag = $dbi->insert_param_tag({title => 'a', age => 2});
|
|
| 2172 |
+ my $insert_param = $dbi->insert_param({title => 'a', age => 2});
|
|
| 2196 | 2173 |
|
| 2197 |
-Create insert parameter tag. |
|
| 2174 |
+Create insert parameters. |
|
| 2198 | 2175 |
|
| 2199 |
- (title, author) values ({? title}, {? author});
|
|
| 2176 |
+ (title, author) values (title = :title, age = :age); |
|
| 2200 | 2177 |
|
| 2201 | 2178 |
=head2 C<include_model> |
| 2202 | 2179 |
|
| ... | ... |
@@ -2331,7 +2308,7 @@ This is used by C<clause> of L<DBIx::Custom::Where> . |
| 2331 | 2308 |
|
| 2332 | 2309 |
Register filters, used by C<filter> option of many methods. |
| 2333 | 2310 |
|
| 2334 |
-=head2 C<register_tag> |
|
| 2311 |
+=head2 C<register_tag> DEPRECATED! |
|
| 2335 | 2312 |
|
| 2336 | 2313 |
$dbi->register_tag( |
| 2337 | 2314 |
update => sub {
|
| ... | ... |
@@ -2412,14 +2389,14 @@ or array refrence, which contains where clause and paramter. |
| 2412 | 2389 |
|
| 2413 | 2390 |
# DBIx::Custom::Where object |
| 2414 | 2391 |
my $where = $dbi->where( |
| 2415 |
- clause => ['and', '{= author}', '{like title}'],
|
|
| 2392 |
+ clause => ['and', 'author = :author', 'title like :title'], |
|
| 2416 | 2393 |
param => {author => 'Ken', title => '%Perl%'}
|
| 2417 | 2394 |
); |
| 2418 | 2395 |
$dbi->select(where => $where); |
| 2419 | 2396 |
|
| 2420 | 2397 |
# String(with where_param option) |
| 2421 | 2398 |
$dbi->select( |
| 2422 |
- where => '{like title}',
|
|
| 2399 |
+ where => 'title like :title', |
|
| 2423 | 2400 |
where_param => {title => '%Perl%'}
|
| 2424 | 2401 |
); |
| 2425 | 2402 |
|
| ... | ... |
@@ -2462,7 +2439,7 @@ Parameter shown before where clause. |
| 2462 | 2439 |
table => 'table1', |
| 2463 | 2440 |
column => 'table1.key1 as table1_key1, key2, key3', |
| 2464 | 2441 |
where => {'table1.key2' => 3},
|
| 2465 |
- join => ['inner join (select * from table2 where {= table2.key3})' .
|
|
| 2442 |
+ join => ['inner join (select * from table2 where table2.key3 = :table2.key3)' . |
|
| 2466 | 2443 |
' as table2 on table1.key1 = table2.key1'], |
| 2467 | 2444 |
param => {'table2.key3' => 5}
|
| 2468 | 2445 |
); |
| ... | ... |
@@ -2622,7 +2599,7 @@ or array refrence. |
| 2622 | 2599 |
|
| 2623 | 2600 |
# DBIx::Custom::Where object |
| 2624 | 2601 |
my $where = $dbi->where( |
| 2625 |
- clause => ['and', '{= author}', '{like title}'],
|
|
| 2602 |
+ clause => ['and', 'author = :author', 'title like :title'], |
|
| 2626 | 2603 |
param => {author => 'Ken', title => '%Perl%'}
|
| 2627 | 2604 |
); |
| 2628 | 2605 |
$dbi->update(where => $where); |
| ... | ... |
@@ -2739,28 +2716,20 @@ Place holders are set to 'Perl' and 5. |
| 2739 | 2716 |
|
| 2740 | 2717 |
=back |
| 2741 | 2718 |
|
| 2742 |
-=head2 C<update_param_tag> |
|
| 2719 |
+=head2 C<update_param> |
|
| 2743 | 2720 |
|
| 2744 |
- my $update_param_tag = $dbi->update_param_tag({title => 'a', age => 2});
|
|
| 2721 |
+ my $update_param = $dbi->update_param({title => 'a', age => 2});
|
|
| 2745 | 2722 |
|
| 2746 | 2723 |
Create update parameter tag. |
| 2747 | 2724 |
|
| 2748 |
- set title = {? title}, author = {? author}
|
|
| 2725 |
+ set title = :title, author = :author |
|
| 2749 | 2726 |
|
| 2750 |
-You can create tag without 'set ' |
|
| 2751 |
-by C<no_set> option. |
|
| 2752 |
- |
|
| 2753 |
- my $update_param_tag = $dbi->update_param_tag( |
|
| 2754 |
- {title => 'a', age => 2}
|
|
| 2755 |
- {no_set => 1}
|
|
| 2756 |
- ); |
|
| 2757 |
- |
|
| 2758 |
- title = {? title}, author = {? author}
|
|
| 2727 |
+C<no_set> option is DEPRECATED! use C<assing_param> instead. |
|
| 2759 | 2728 |
|
| 2760 | 2729 |
=head2 C<where> |
| 2761 | 2730 |
|
| 2762 | 2731 |
my $where = $dbi->where( |
| 2763 |
- clause => ['and', '{= title}', '{= author}'],
|
|
| 2732 |
+ clause => ['and', 'title = :title', 'author = :author'], |
|
| 2764 | 2733 |
param => {title => 'Perl', author => 'Ken'}
|
| 2765 | 2734 |
); |
| 2766 | 2735 |
|
| ... | ... |
@@ -2773,71 +2742,87 @@ Create a new L<DBIx::Custom::Where> object. |
| 2773 | 2742 |
Setup all model objects. |
| 2774 | 2743 |
C<columns> of model object is automatically set, parsing database information. |
| 2775 | 2744 |
|
| 2776 |
-=head1 Tags |
|
| 2745 |
+=head1 Parameter |
|
| 2746 |
+ |
|
| 2747 |
+Parameter start at ':'. This is replaced to place holoder |
|
| 2748 |
+ |
|
| 2749 |
+ $dbi->execute( |
|
| 2750 |
+ "select * from book where title = :title and author = :author" |
|
| 2751 |
+ param => {title => 'Perl', author => 'Ken'}
|
|
| 2752 |
+ ); |
|
| 2753 |
+ |
|
| 2754 |
+ "select * from book where title = ? and author = ?" |
|
| 2755 |
+ |
|
| 2756 |
+=head1 Tags DEPRECATED! |
|
| 2757 |
+ |
|
| 2758 |
+B<Tag> system is DEPRECATED! use parameter system :name instead. |
|
| 2759 |
+Parameter is simple and readable. |
|
| 2760 |
+ |
|
| 2761 |
+Note that you can't use both tag and paramter at same time. |
|
| 2777 | 2762 |
|
| 2778 | 2763 |
The following tags is available. |
| 2779 | 2764 |
|
| 2780 |
-=head2 C<?> |
|
| 2765 |
+=head2 C<?> DEPRECATED! |
|
| 2781 | 2766 |
|
| 2782 | 2767 |
Placeholder tag. |
| 2783 | 2768 |
|
| 2784 | 2769 |
{? NAME} -> ?
|
| 2785 | 2770 |
|
| 2786 |
-=head2 C<=> |
|
| 2771 |
+=head2 C<=> DEPRECATED! |
|
| 2787 | 2772 |
|
| 2788 | 2773 |
Equal tag. |
| 2789 | 2774 |
|
| 2790 | 2775 |
{= NAME} -> NAME = ?
|
| 2791 | 2776 |
|
| 2792 |
-=head2 C<E<lt>E<gt>> |
|
| 2777 |
+=head2 C<E<lt>E<gt>> DEPRECATED! |
|
| 2793 | 2778 |
|
| 2794 | 2779 |
Not equal tag. |
| 2795 | 2780 |
|
| 2796 | 2781 |
{<> NAME} -> NAME <> ?
|
| 2797 | 2782 |
|
| 2798 |
-=head2 C<E<lt>> |
|
| 2783 |
+=head2 C<E<lt>> DEPRECATED! |
|
| 2799 | 2784 |
|
| 2800 | 2785 |
Lower than tag |
| 2801 | 2786 |
|
| 2802 | 2787 |
{< NAME} -> NAME < ?
|
| 2803 | 2788 |
|
| 2804 |
-=head2 C<E<gt>> |
|
| 2789 |
+=head2 C<E<gt>> DEPRECATED! |
|
| 2805 | 2790 |
|
| 2806 | 2791 |
Greater than tag |
| 2807 | 2792 |
|
| 2808 | 2793 |
{> NAME} -> NAME > ?
|
| 2809 | 2794 |
|
| 2810 |
-=head2 C<E<gt>=> |
|
| 2795 |
+=head2 C<E<gt>=> DEPRECATED! |
|
| 2811 | 2796 |
|
| 2812 | 2797 |
Greater than or equal tag |
| 2813 | 2798 |
|
| 2814 | 2799 |
{>= NAME} -> NAME >= ?
|
| 2815 | 2800 |
|
| 2816 |
-=head2 C<E<lt>=> |
|
| 2801 |
+=head2 C<E<lt>=> DEPRECATED! |
|
| 2817 | 2802 |
|
| 2818 | 2803 |
Lower than or equal tag |
| 2819 | 2804 |
|
| 2820 | 2805 |
{<= NAME} -> NAME <= ?
|
| 2821 | 2806 |
|
| 2822 |
-=head2 C<like> |
|
| 2807 |
+=head2 C<like> DEPRECATED! |
|
| 2823 | 2808 |
|
| 2824 | 2809 |
Like tag |
| 2825 | 2810 |
|
| 2826 | 2811 |
{like NAME} -> NAME like ?
|
| 2827 | 2812 |
|
| 2828 |
-=head2 C<in> |
|
| 2813 |
+=head2 C<in> DEPRECATED! |
|
| 2829 | 2814 |
|
| 2830 | 2815 |
In tag. |
| 2831 | 2816 |
|
| 2832 | 2817 |
{in NAME COUNT} -> NAME in [?, ?, ..]
|
| 2833 | 2818 |
|
| 2834 |
-=head2 C<insert_param> |
|
| 2819 |
+=head2 C<insert_param> DEPRECATED! |
|
| 2835 | 2820 |
|
| 2836 | 2821 |
Insert parameter tag. |
| 2837 | 2822 |
|
| 2838 | 2823 |
{insert_param NAME1 NAME2} -> (NAME1, NAME2) values (?, ?)
|
| 2839 | 2824 |
|
| 2840 |
-=head2 C<update_param> |
|
| 2825 |
+=head2 C<update_param> DEPRECATED! |
|
| 2841 | 2826 |
|
| 2842 | 2827 |
Updata parameter tag. |
| 2843 | 2828 |
|
| ... | ... |
@@ -2879,5 +2864,3 @@ This program is free software; you can redistribute it and/or modify it |
| 2879 | 2864 |
under the same terms as Perl itself. |
| 2880 | 2865 |
|
| 2881 | 2866 |
=cut |
| 2882 |
- |
|
| 2883 |
- |
| ... | ... |
@@ -162,7 +162,7 @@ use C<connect()> to connect to database. |
| 162 | 162 |
Return value is L<DBIx::Custom> object. |
| 163 | 163 |
|
| 164 | 164 |
my $dbi = DBIx::Custom->connect( |
| 165 |
- dsn => "dbi:mysql:database=bookstore", |
|
| 165 |
+ dsn => "dbi:mysql:database=bookshop", |
|
| 166 | 166 |
user => 'ken', |
| 167 | 167 |
password => '!LFKD%$&', |
| 168 | 168 |
dbi_options => {mysql_enable_utf8 => 1}
|
| ... | ... |
@@ -8,7 +8,12 @@ use base 'Object::Simple'; |
| 8 | 8 |
use Carp 'croak'; |
| 9 | 9 |
use DBIx::Custom::Util '_subname'; |
| 10 | 10 |
|
| 11 |
-__PACKAGE__->attr([qw/columns sql sth filters tables/]); |
|
| 11 |
+__PACKAGE__->attr( |
|
| 12 |
+ [qw/sth filters/], |
|
| 13 |
+ sql => '', |
|
| 14 |
+ tables => sub { [] },
|
|
| 15 |
+ columns => sub { [] }
|
|
| 16 |
+); |
|
| 12 | 17 |
|
| 13 | 18 |
sub filter {
|
| 14 | 19 |
my $self = shift; |
| ... | ... |
@@ -13,120 +13,102 @@ use DBIx::Custom::Util '_subname'; |
| 13 | 13 |
push @DBIx::Custom::CARP_NOT, __PACKAGE__; |
| 14 | 14 |
push @DBIx::Custom::Where::CARP_NOT, __PACKAGE__; |
| 15 | 15 |
|
| 16 |
-# Attributes |
|
| 17 |
-__PACKAGE__->attr('tags' => sub { {} });
|
|
| 16 |
+# Parameter regex |
|
| 17 |
+our $PARAM_RE = qr/(^|[^\.\w]):([\.\w]+)([^\.\w]|$)/sm; |
|
| 18 | 18 |
|
| 19 | 19 |
sub build_query {
|
| 20 |
- my ($self, $source) = @_; |
|
| 20 |
+ my ($self, $source) = @_; |
|
| 21 | 21 |
|
| 22 |
- # Parse |
|
| 23 |
- my $tree = $self->_parse($source); |
|
| 22 |
+ my $query; |
|
| 23 |
+ |
|
| 24 |
+ # Parse tag. tag is DEPRECATED! |
|
| 25 |
+ if ($source =~ /\{/ && $source =~ /\}/) {
|
|
| 26 |
+ $query = $self->_parse_tag($source); |
|
| 27 |
+ my $tag_count = delete $query->{tag_count};
|
|
| 28 |
+ warn qq/Tag system such as {? name} is DEPRECATED! This will be removed after 2017/ .
|
|
| 29 |
+ qq/use parameter system :name instead/ |
|
| 30 |
+ if $tag_count; |
|
| 31 |
+ my $query2 = $self->_parse_parameter($query->sql); |
|
| 32 |
+ $query->sql($query2->sql); |
|
| 33 |
+ for (my $i =0; $i < @{$query->columns}; $i++) {
|
|
| 34 |
+ my $column = $query->columns->[$i]; |
|
| 35 |
+ if ($column eq 'RESERVED_PARAMETER') {
|
|
| 36 |
+ my $column2 = shift @{$query2->columns};
|
|
| 37 |
+ croak ":name syntax is wrong" |
|
| 38 |
+ unless defined $column2; |
|
| 39 |
+ $query->columns->[$i] = $column2; |
|
| 40 |
+ } |
|
| 41 |
+ } |
|
| 42 |
+ } |
|
| 24 | 43 |
|
| 25 |
- # Build query |
|
| 26 |
- my $query = $self->_build_query($tree); |
|
| 44 |
+ # Parse parameter |
|
| 45 |
+ else {
|
|
| 46 |
+ $query = $self->_parse_parameter($source); |
|
| 47 |
+ } |
|
| 27 | 48 |
|
| 49 |
+ my $sql = $query->sql; |
|
| 50 |
+ $sql .= ';' unless $source =~ /;$/; |
|
| 51 |
+ $query->sql($sql); |
|
| 52 |
+ |
|
| 53 |
+ # Check placeholder count |
|
| 54 |
+ croak qq{Placeholder count in "$sql" must be same as column count}
|
|
| 55 |
+ . _subname |
|
| 56 |
+ unless $self->_placeholder_count($sql) eq @{$query->columns};
|
|
| 57 |
+ |
|
| 28 | 58 |
return $query; |
| 29 | 59 |
} |
| 30 | 60 |
|
| 31 |
-sub register_tag {
|
|
| 32 |
- my $self = shift; |
|
| 33 |
- |
|
| 34 |
- # Merge tag |
|
| 35 |
- my $tags = ref $_[0] eq 'HASH' ? $_[0] : {@_};
|
|
| 36 |
- $self->tags({%{$self->tags}, %$tags});
|
|
| 61 |
+sub _placeholder_count {
|
|
| 62 |
+ my ($self, $sql) = @_; |
|
| 37 | 63 |
|
| 38 |
- return $self; |
|
| 64 |
+ # Count |
|
| 65 |
+ $sql ||= ''; |
|
| 66 |
+ my $count = 0; |
|
| 67 |
+ my $pos = -1; |
|
| 68 |
+ while (($pos = index($sql, '?', $pos + 1)) != -1) {
|
|
| 69 |
+ $count++; |
|
| 70 |
+ } |
|
| 71 |
+ return $count; |
|
| 39 | 72 |
} |
| 40 | 73 |
|
| 41 |
-sub _build_query {
|
|
| 42 |
- my ($self, $tree) = @_; |
|
| 43 |
- |
|
| 44 |
- # SQL |
|
| 45 |
- my $sql = ''; |
|
| 46 |
- |
|
| 47 |
- # All Columns |
|
| 48 |
- my $all_columns = []; |
|
| 49 |
- |
|
| 50 |
- # Tables |
|
| 51 |
- my $tables = []; |
|
| 74 |
+sub _parse_parameter {
|
|
| 75 |
+ my ($self, $source) = @_; |
|
| 52 | 76 |
|
| 53 |
- # Build SQL |
|
| 54 |
- foreach my $node (@$tree) {
|
|
| 55 |
- |
|
| 56 |
- # Text |
|
| 57 |
- if ($node->{type} eq 'text') { $sql .= $node->{value} }
|
|
| 58 |
- |
|
| 59 |
- # Tag |
|
| 60 |
- else {
|
|
| 61 |
- |
|
| 62 |
- # Tag name |
|
| 63 |
- my $tag_name = $node->{tag_name};
|
|
| 64 |
- |
|
| 65 |
- # Tag arguments |
|
| 66 |
- my $tag_args = $node->{tag_args};
|
|
| 67 |
- |
|
| 68 |
- # Table |
|
| 69 |
- if ($tag_name eq 'table') {
|
|
| 70 |
- my $table = $tag_args->[0]; |
|
| 71 |
- push @$tables, $table; |
|
| 72 |
- $sql .= $table; |
|
| 73 |
- next; |
|
| 74 |
- } |
|
| 75 |
- |
|
| 76 |
- # Get tag |
|
| 77 |
- my $tag = $self->tag_processors->{$tag_name}
|
|
| 78 |
- || $self->tags->{$tag_name};
|
|
| 79 |
- |
|
| 80 |
- # Tag is not registered |
|
| 81 |
- croak qq{Tag "$tag_name" is not registered } . _subname
|
|
| 82 |
- unless $tag; |
|
| 83 |
- |
|
| 84 |
- # Tag not sub reference |
|
| 85 |
- croak qq{Tag "$tag_name" must be sub reference } . _subname
|
|
| 86 |
- unless ref $tag eq 'CODE'; |
|
| 87 |
- |
|
| 88 |
- # Execute tag |
|
| 89 |
- my $r = $tag->(@$tag_args); |
|
| 90 |
- |
|
| 91 |
- # Check tag return value |
|
| 92 |
- croak qq{Tag "$tag_name" must return [STRING, ARRAY_REFERENCE] }
|
|
| 93 |
- . _subname |
|
| 94 |
- unless ref $r eq 'ARRAY' && defined $r->[0] && ref $r->[1] eq 'ARRAY'; |
|
| 95 |
- |
|
| 96 |
- # Part of SQL statement and colum names |
|
| 97 |
- my ($part, $columns) = @$r; |
|
| 98 |
- |
|
| 99 |
- # Add columns |
|
| 100 |
- push @$all_columns, @$columns; |
|
| 101 |
- |
|
| 102 |
- # Join part tag to SQL |
|
| 103 |
- $sql .= $part; |
|
| 104 |
- } |
|
| 77 |
+ # Get and replace parameters |
|
| 78 |
+ my $sql = $source || ''; |
|
| 79 |
+ my $columns = []; |
|
| 80 |
+ while ($source =~ /$PARAM_RE/g) {
|
|
| 81 |
+ push @$columns, $2; |
|
| 105 | 82 |
} |
| 83 |
+ $sql =~ s/$PARAM_RE/$1?$3/g; |
|
| 106 | 84 |
|
| 107 |
- # Check placeholder count |
|
| 108 |
- my $placeholder_count = $self->_placeholder_count($sql); |
|
| 109 |
- my $column_count = @$all_columns; |
|
| 110 |
- croak qq{Placeholder count in "$sql" must be same as column count $column_count}
|
|
| 111 |
- . _subname |
|
| 112 |
- unless $placeholder_count eq @$all_columns; |
|
| 113 |
- |
|
| 114 |
- # Add semicolon |
|
| 115 |
- $sql .= ';' unless $sql =~ /;$/; |
|
| 116 |
- |
|
| 117 |
- # Query |
|
| 85 |
+ # Create query |
|
| 118 | 86 |
my $query = DBIx::Custom::Query->new( |
| 119 | 87 |
sql => $sql, |
| 120 |
- columns => $all_columns, |
|
| 121 |
- tables => $tables |
|
| 88 |
+ columns => $columns |
|
| 122 | 89 |
); |
| 123 | 90 |
|
| 124 | 91 |
return $query; |
| 125 | 92 |
} |
| 126 | 93 |
|
| 127 |
-sub _parse {
|
|
| 128 |
- my ($self, $source) = @_; |
|
| 94 |
+# DEPRECATED! |
|
| 95 |
+__PACKAGE__->attr('tags' => sub { {} });
|
|
| 96 |
+ |
|
| 97 |
+# DEPRECATED! |
|
| 98 |
+sub register_tag {
|
|
| 99 |
+ my $self = shift; |
|
| 129 | 100 |
|
| 101 |
+ # Merge tag |
|
| 102 |
+ my $tags = ref $_[0] eq 'HASH' ? $_[0] : {@_};
|
|
| 103 |
+ $self->tags({%{$self->tags}, %$tags});
|
|
| 104 |
+ |
|
| 105 |
+ return $self; |
|
| 106 |
+} |
|
| 107 |
+ |
|
| 108 |
+# DEPRECATED! |
|
| 109 |
+sub _parse_tag {
|
|
| 110 |
+ my ($self, $source) = @_; |
|
| 111 |
+ |
|
| 130 | 112 |
# Source |
| 131 | 113 |
$source ||= ''; |
| 132 | 114 |
|
| ... | ... |
@@ -147,11 +129,17 @@ sub _parse {
|
| 147 | 129 |
|
| 148 | 130 |
# Parse |
| 149 | 131 |
my $original = $source; |
| 132 |
+ my $tag_count = 0; |
|
| 150 | 133 |
while (defined(my $c = substr($source, $pos, 1))) {
|
| 151 | 134 |
|
| 152 | 135 |
# Last |
| 153 | 136 |
last unless length $c; |
| 154 | 137 |
|
| 138 |
+ # Parameter |
|
| 139 |
+ if ($c eq ':' && (substr($source, $pos + 1, 1) || '') =~ /\w/) {
|
|
| 140 |
+ push @tree, {type => 'param'};;
|
|
| 141 |
+ } |
|
| 142 |
+ |
|
| 155 | 143 |
# State is text |
| 156 | 144 |
if ($state eq 'text') {
|
| 157 | 145 |
|
| ... | ... |
@@ -240,6 +228,9 @@ sub _parse {
|
| 240 | 228 |
|
| 241 | 229 |
# Clear |
| 242 | 230 |
$value = ''; |
| 231 |
+ |
|
| 232 |
+ # Countup |
|
| 233 |
+ $tag_count++; |
|
| 243 | 234 |
} |
| 244 | 235 |
} |
| 245 | 236 |
|
| ... | ... |
@@ -258,24 +249,90 @@ sub _parse {
|
| 258 | 249 |
croak qq{Tag not finished. "$original" } . _subname
|
| 259 | 250 |
if $state eq 'tag'; |
| 260 | 251 |
|
| 252 |
+ # Not contains tag |
|
| 253 |
+ return DBIx::Custom::Query->new(sql => $source, tag_count => $tag_count) |
|
| 254 |
+ if $tag_count == 0; |
|
| 255 |
+ |
|
| 261 | 256 |
# Add rest text |
| 262 | 257 |
push @tree, {type => 'text', value => $value}
|
| 263 | 258 |
if $value; |
| 259 |
+ |
|
| 260 |
+ # SQL |
|
| 261 |
+ my $sql = ''; |
|
| 264 | 262 |
|
| 265 |
- return \@tree; |
|
| 266 |
-} |
|
| 267 |
- |
|
| 268 |
-sub _placeholder_count {
|
|
| 269 |
- my ($self, $expand) = @_; |
|
| 263 |
+ # All Columns |
|
| 264 |
+ my $all_columns = []; |
|
| 270 | 265 |
|
| 271 |
- # Count |
|
| 272 |
- $expand ||= ''; |
|
| 273 |
- my $count = 0; |
|
| 274 |
- my $pos = -1; |
|
| 275 |
- while (($pos = index($expand, '?', $pos + 1)) != -1) {
|
|
| 276 |
- $count++; |
|
| 266 |
+ # Tables |
|
| 267 |
+ my $tables = []; |
|
| 268 |
+ |
|
| 269 |
+ # Build SQL |
|
| 270 |
+ foreach my $node (@tree) {
|
|
| 271 |
+ |
|
| 272 |
+ # Text |
|
| 273 |
+ if ($node->{type} eq 'text') { $sql .= $node->{value} }
|
|
| 274 |
+ |
|
| 275 |
+ # Parameter |
|
| 276 |
+ elsif ($node->{type} eq 'param') {
|
|
| 277 |
+ push @$all_columns, 'RESERVED_PARAMETER'; |
|
| 278 |
+ } |
|
| 279 |
+ # Tag |
|
| 280 |
+ else {
|
|
| 281 |
+ |
|
| 282 |
+ # Tag name |
|
| 283 |
+ my $tag_name = $node->{tag_name};
|
|
| 284 |
+ |
|
| 285 |
+ # Tag arguments |
|
| 286 |
+ my $tag_args = $node->{tag_args};
|
|
| 287 |
+ |
|
| 288 |
+ # Table |
|
| 289 |
+ if ($tag_name eq 'table') {
|
|
| 290 |
+ my $table = $tag_args->[0]; |
|
| 291 |
+ push @$tables, $table; |
|
| 292 |
+ $sql .= $table; |
|
| 293 |
+ next; |
|
| 294 |
+ } |
|
| 295 |
+ |
|
| 296 |
+ # Get tag |
|
| 297 |
+ my $tag = $self->tag_processors->{$tag_name}
|
|
| 298 |
+ || $self->tags->{$tag_name};
|
|
| 299 |
+ |
|
| 300 |
+ # Tag is not registered |
|
| 301 |
+ croak qq{Tag "$tag_name" is not registered } . _subname
|
|
| 302 |
+ unless $tag; |
|
| 303 |
+ |
|
| 304 |
+ # Tag not sub reference |
|
| 305 |
+ croak qq{Tag "$tag_name" must be sub reference } . _subname
|
|
| 306 |
+ unless ref $tag eq 'CODE'; |
|
| 307 |
+ |
|
| 308 |
+ # Execute tag |
|
| 309 |
+ my $r = $tag->(@$tag_args); |
|
| 310 |
+ |
|
| 311 |
+ # Check tag return value |
|
| 312 |
+ croak qq{Tag "$tag_name" must return [STRING, ARRAY_REFERENCE] }
|
|
| 313 |
+ . _subname |
|
| 314 |
+ unless ref $r eq 'ARRAY' && defined $r->[0] && ref $r->[1] eq 'ARRAY'; |
|
| 315 |
+ |
|
| 316 |
+ # Part of SQL statement and colum names |
|
| 317 |
+ my ($part, $columns) = @$r; |
|
| 318 |
+ |
|
| 319 |
+ # Add columns |
|
| 320 |
+ push @$all_columns, @$columns; |
|
| 321 |
+ |
|
| 322 |
+ # Join part tag to SQL |
|
| 323 |
+ $sql .= $part; |
|
| 324 |
+ } |
|
| 277 | 325 |
} |
| 278 |
- return $count; |
|
| 326 |
+ |
|
| 327 |
+ # Query |
|
| 328 |
+ my $query = DBIx::Custom::Query->new( |
|
| 329 |
+ sql => $sql, |
|
| 330 |
+ columns => $all_columns, |
|
| 331 |
+ tables => $tables, |
|
| 332 |
+ tag_count => $tag_count |
|
| 333 |
+ ); |
|
| 334 |
+ |
|
| 335 |
+ return $query; |
|
| 279 | 336 |
} |
| 280 | 337 |
|
| 281 | 338 |
# DEPRECATED! |
| ... | ... |
@@ -285,6 +342,8 @@ __PACKAGE__->attr('tag_processors' => sub { {} });
|
| 285 | 342 |
sub register_tag_processor {
|
| 286 | 343 |
my $self = shift; |
| 287 | 344 |
|
| 345 |
+ warn "register_tag_processor is DEPRECATED! use register_tag instead"; |
|
| 346 |
+ |
|
| 288 | 347 |
# Merge tag |
| 289 | 348 |
my $tag_processors = ref $_[0] eq 'HASH' ? $_[0] : {@_};
|
| 290 | 349 |
$self->tag_processors({%{$self->tag_processors}, %{$tag_processors}});
|
| ... | ... |
@@ -302,18 +361,9 @@ DBIx::Custom::QueryBuilder - Query builder |
| 302 | 361 |
|
| 303 | 362 |
my $builder = DBIx::Custom::QueryBuilder->new; |
| 304 | 363 |
my $query = $builder->build_query( |
| 305 |
- "select from table {= k1} && {<> k2} || {like k3}"
|
|
| 364 |
+ "select from table title = :title and author = :author" |
|
| 306 | 365 |
); |
| 307 | 366 |
|
| 308 |
-=head1 ATTRIBUTES |
|
| 309 |
- |
|
| 310 |
-=head2 C<tags> |
|
| 311 |
- |
|
| 312 |
- my $tags = $builder->tags; |
|
| 313 |
- $builder = $builder->tags(\%tags); |
|
| 314 |
- |
|
| 315 |
-Tags. |
|
| 316 |
- |
|
| 317 | 367 |
=head1 METHODS |
| 318 | 368 |
|
| 319 | 369 |
L<DBIx::Custom::QueryBuilder> inherits all methods from L<Object::Simple> |
| ... | ... |
@@ -324,43 +374,5 @@ and implements the following new ones. |
| 324 | 374 |
my $query = $builder->build_query($source); |
| 325 | 375 |
|
| 326 | 376 |
Create a new L<DBIx::Custom::Query> object from SQL source. |
| 327 |
-SQL source contains tags, such as {= title}, {like author}.
|
|
| 328 |
- |
|
| 329 |
-C<{> and C<}> is reserved. If you use these charactors,
|
|
| 330 |
-you must escape them using '\'. Note that '\' is |
|
| 331 |
-already perl escaped charactor, so you must write '\\'. |
|
| 332 |
- |
|
| 333 |
- 'select * from books \\{ something statement \\}'
|
|
| 334 |
- |
|
| 335 |
-B<Example:> |
|
| 336 |
- |
|
| 337 |
-SQL source |
|
| 338 |
- |
|
| 339 |
- "select * from table where {= title} && {like author} || {<= price}"
|
|
| 340 |
- |
|
| 341 |
-Query |
|
| 342 |
- |
|
| 343 |
- {
|
|
| 344 |
- sql => "select * from table where title = ? && author like ? price <= ?;" |
|
| 345 |
- columns => ['title', 'author', 'price'] |
|
| 346 |
- } |
|
| 347 |
- |
|
| 348 |
-=head2 C<register_tag> |
|
| 349 |
- |
|
| 350 |
- $builder->register_tag(\%tags); |
|
| 351 |
- $builder->register_tag(%tags); |
|
| 352 |
- |
|
| 353 |
-Register tag. |
|
| 354 |
- |
|
| 355 |
-B<Example:> |
|
| 356 |
- |
|
| 357 |
- $builder->register_tag( |
|
| 358 |
- '?' => sub {
|
|
| 359 |
- my $column = shift; |
|
| 360 |
- |
|
| 361 |
- return ['?', [$column]]; |
|
| 362 |
- } |
|
| 363 |
- ); |
|
| 364 |
- |
|
| 365 |
-See also L<DBIx::Custom::Tag> to know tag. |
|
| 366 | 377 |
|
| 378 |
+=cut |
| ... | ... |
@@ -1,3 +1,4 @@ |
| 1 |
+# DEPRECATED! |
|
| 1 | 2 |
package DBIx::Custom::Tag; |
| 2 | 3 |
|
| 3 | 4 |
use strict; |
| ... | ... |
@@ -92,4 +93,7 @@ sub _basic {
|
| 92 | 93 |
|
| 93 | 94 |
=head1 NAME |
| 94 | 95 |
|
| 95 |
-DBIx::Custom::Tag - Tag processor |
|
| 96 |
+DBIx::Custom::Tag - DEPRECATED! |
|
| 97 |
+ |
|
| 98 |
+=cut |
|
| 99 |
+ |
| ... | ... |
@@ -36,6 +36,14 @@ sub new {
|
| 36 | 36 |
sub to_string {
|
| 37 | 37 |
my $self = shift; |
| 38 | 38 |
|
| 39 |
+ # Check if column name is safety character; |
|
| 40 |
+ my $safety = $self->safety_character; |
|
| 41 |
+ if (ref $self->param eq 'HASH') {
|
|
| 42 |
+ foreach my $column (keys %{$self->param}) {
|
|
| 43 |
+ croak qq{"$column" is not safety column name (} . _subname . ")"
|
|
| 44 |
+ unless $column =~ /^[$safety\.]+$/; |
|
| 45 |
+ } |
|
| 46 |
+ } |
|
| 39 | 47 |
# Clause |
| 40 | 48 |
my $clause = $self->clause; |
| 41 | 49 |
$clause = ['and', $clause] unless ref $clause eq 'ARRAY'; |
| ... | ... |
@@ -95,7 +103,7 @@ sub _parse {
|
| 95 | 103 |
return $pushed; |
| 96 | 104 |
} |
| 97 | 105 |
elsif (@$columns != 1) {
|
| 98 |
- croak qq{Each tag contains one column name: tag "$clause" (}
|
|
| 106 |
+ croak qq{Each part contains one column name: "$clause" (}
|
|
| 99 | 107 |
. _subname . ")"; |
| 100 | 108 |
} |
| 101 | 109 |
|
| ... | ... |
@@ -181,3 +189,4 @@ If all parameter names is exists. |
| 181 | 189 |
|
| 182 | 190 |
Convert where clause to string correspoinding to param name. |
| 183 | 191 |
|
| 192 |
+=cut |
| ... | ... |
@@ -204,6 +204,37 @@ $rows = $result->fetch_hash_all; |
| 204 | 204 |
is_deeply($rows, [{key1 => 1, key2 => 1, key3 => 1, key4 => 1, key5 => 5},
|
| 205 | 205 |
{key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}], "basic");
|
| 206 | 206 |
|
| 207 |
+ |
|
| 208 |
+test 'parameter'; |
|
| 209 |
+$dbi->execute($DROP_TABLE->{0});
|
|
| 210 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 211 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
|
|
| 212 |
+$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
|
| 213 |
+ |
|
| 214 |
+$source = "select * from table1 where key1 = :key1 and key2 = :key2"; |
|
| 215 |
+$result = $dbi->execute($source, param => {key1 => 1, key2 => 2});
|
|
| 216 |
+$rows = $result->fetch_hash_all; |
|
| 217 |
+is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
|
| 218 |
+ |
|
| 219 |
+$source = "select * from table1 where key1 = \n:key1\n and key2 = :key2"; |
|
| 220 |
+$result = $dbi->execute($source, param => {key1 => 1, key2 => 2});
|
|
| 221 |
+$rows = $result->fetch_hash_all; |
|
| 222 |
+is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
|
| 223 |
+ |
|
| 224 |
+$source = "select * from table1 where key1 = :key1 or key1 = :key1"; |
|
| 225 |
+$result = $dbi->execute($source, param => {key1 => [1, 2]});
|
|
| 226 |
+$rows = $result->fetch_hash_all; |
|
| 227 |
+is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
|
| 228 |
+ |
|
| 229 |
+$source = "select * from table1 where key1 = :table1.key1 and key2 = :table1.key2"; |
|
| 230 |
+$result = $dbi->execute( |
|
| 231 |
+ $source, |
|
| 232 |
+ param => {'table1.key1' => 1, 'table1.key2' => 1},
|
|
| 233 |
+ filter => {'table1.key2' => sub { $_[0] * 2 }}
|
|
| 234 |
+); |
|
| 235 |
+$rows = $result->fetch_hash_all; |
|
| 236 |
+is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
|
| 237 |
+ |
|
| 207 | 238 |
test 'Error case'; |
| 208 | 239 |
eval {DBIx::Custom->connect(dsn => 'dbi:SQLit')};
|
| 209 | 240 |
ok($@, "connect error"); |
| ... | ... |
@@ -307,7 +338,7 @@ $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| 307 | 338 |
$dbi->execute($CREATE_TABLE->{0});
|
| 308 | 339 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
| 309 | 340 |
$where = $dbi->where; |
| 310 |
-$where->clause(['and', '{= key1}', '{= key2}']);
|
|
| 341 |
+$where->clause(['and', 'key1 = :key1', 'key2 = :key2']); |
|
| 311 | 342 |
$where->param({key1 => 1, key2 => 2});
|
| 312 | 343 |
$dbi->update(table => 'table1', param => {key1 => 3}, where => $where);
|
| 313 | 344 |
$result = $dbi->select(table => 'table1'); |
| ... | ... |
@@ -1354,7 +1385,7 @@ $dbi->default_bind_filter(undef); |
| 1354 | 1385 |
ok(!defined $dbi->default_bind_filter); |
| 1355 | 1386 |
$dbi->default_fetch_filter(undef); |
| 1356 | 1387 |
ok(!defined $dbi->default_fetch_filter); |
| 1357 |
-eval {$dbi->execute('select * from table1 {= author') };
|
|
| 1388 |
+eval {$dbi->execute('select * from table1 {} {= author') };
|
|
| 1358 | 1389 |
like($@, qr/Tag not finished/); |
| 1359 | 1390 |
|
| 1360 | 1391 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| ... | ... |
@@ -1792,20 +1823,20 @@ $result = $model->select( |
| 1792 | 1823 |
is_deeply($result->fetch_hash_first, |
| 1793 | 1824 |
{key1 => 1, key2 => 2, 'table2__key1' => 1, 'table2__key3' => 3});
|
| 1794 | 1825 |
|
| 1795 |
-test 'update_param_tag'; |
|
| 1826 |
+test 'update_param'; |
|
| 1796 | 1827 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| 1797 | 1828 |
$dbi->execute($CREATE_TABLE->{1});
|
| 1798 | 1829 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
|
| 1799 | 1830 |
$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
| 1800 | 1831 |
|
| 1801 | 1832 |
$param = {key2 => 11};
|
| 1802 |
-$update_param = $dbi->update_param_tag($param); |
|
| 1833 |
+$update_param = $dbi->update_param($param); |
|
| 1803 | 1834 |
$sql = <<"EOS"; |
| 1804 |
-update {table table1} $update_param
|
|
| 1835 |
+update table1 $update_param |
|
| 1805 | 1836 |
where key1 = 1 |
| 1806 | 1837 |
EOS |
| 1807 | 1838 |
$dbi->execute($sql, param => $param); |
| 1808 |
-$result = $dbi->execute($SELECT_SOURCES->{0});
|
|
| 1839 |
+$result = $dbi->execute($SELECT_SOURCES->{0}, table => 'table1');
|
|
| 1809 | 1840 |
$rows = $result->fetch_hash_all; |
| 1810 | 1841 |
is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
|
| 1811 | 1842 |
{key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}],
|
| ... | ... |
@@ -1818,13 +1849,13 @@ $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4
|
| 1818 | 1849 |
$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
| 1819 | 1850 |
|
| 1820 | 1851 |
$param = {key2 => 11, key3 => 33};
|
| 1821 |
-$update_param = $dbi->update_param_tag($param); |
|
| 1852 |
+$update_param = $dbi->update_param($param); |
|
| 1822 | 1853 |
$sql = <<"EOS"; |
| 1823 |
-update {table table1} $update_param
|
|
| 1854 |
+update table1 $update_param |
|
| 1824 | 1855 |
where key1 = 1 |
| 1825 | 1856 |
EOS |
| 1826 | 1857 |
$dbi->execute($sql, param => $param); |
| 1827 |
-$result = $dbi->execute($SELECT_SOURCES->{0});
|
|
| 1858 |
+$result = $dbi->execute($SELECT_SOURCES->{0}, table => 'table1');
|
|
| 1828 | 1859 |
$rows = $result->fetch_hash_all; |
| 1829 | 1860 |
is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 33, key4 => 4, key5 => 5},
|
| 1830 | 1861 |
{key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}],
|
| ... | ... |
@@ -1836,37 +1867,36 @@ $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4
|
| 1836 | 1867 |
$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
| 1837 | 1868 |
|
| 1838 | 1869 |
$param = {key2 => 11, key3 => 33};
|
| 1839 |
-$update_param = $dbi->update_param_tag($param, {no_set => 1});
|
|
| 1870 |
+$update_param = $dbi->update_param($param, {no_set => 1});
|
|
| 1840 | 1871 |
$sql = <<"EOS"; |
| 1841 |
-update {table table1} set $update_param
|
|
| 1872 |
+update table1 set $update_param |
|
| 1842 | 1873 |
where key1 = 1 |
| 1843 | 1874 |
EOS |
| 1844 | 1875 |
$dbi->execute($sql, param => $param); |
| 1845 |
-$result = $dbi->execute($SELECT_SOURCES->{0});
|
|
| 1876 |
+$result = $dbi->execute($SELECT_SOURCES->{0}, table => 'table1');
|
|
| 1846 | 1877 |
$rows = $result->fetch_hash_all; |
| 1847 | 1878 |
is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 33, key4 => 4, key5 => 5},
|
| 1848 | 1879 |
{key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}],
|
| 1849 | 1880 |
"update param no_set"); |
| 1850 | 1881 |
|
| 1851 | 1882 |
|
| 1852 |
-eval { $dbi->update_param_tag({";" => 1}) };
|
|
| 1883 |
+eval { $dbi->update_param({";" => 1}) };
|
|
| 1853 | 1884 |
like($@, qr/not safety/); |
| 1854 | 1885 |
|
| 1855 | 1886 |
|
| 1856 |
-test 'set_tag'; |
|
| 1857 |
-test 'update_param_tag'; |
|
| 1887 |
+test 'update_param'; |
|
| 1858 | 1888 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| 1859 | 1889 |
$dbi->execute($CREATE_TABLE->{1});
|
| 1860 | 1890 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
|
| 1861 | 1891 |
$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
| 1862 | 1892 |
|
| 1863 | 1893 |
$param = {key2 => 11};
|
| 1864 |
-$update_param = $dbi->assign_tag($param); |
|
| 1894 |
+$update_param = $dbi->assign_param($param); |
|
| 1865 | 1895 |
$sql = <<"EOS"; |
| 1866 |
-update {table table1} set $update_param
|
|
| 1896 |
+update table1 set $update_param |
|
| 1867 | 1897 |
where key1 = 1 |
| 1868 | 1898 |
EOS |
| 1869 |
-$dbi->execute($sql, param => $param); |
|
| 1899 |
+$dbi->execute($sql, param => $param, table => 'table1'); |
|
| 1870 | 1900 |
$result = $dbi->execute($SELECT_SOURCES->{0});
|
| 1871 | 1901 |
$rows = $result->fetch_hash_all; |
| 1872 | 1902 |
is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
|
| ... | ... |
@@ -1878,11 +1908,11 @@ test 'insert_param'; |
| 1878 | 1908 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| 1879 | 1909 |
$dbi->execute($CREATE_TABLE->{1});
|
| 1880 | 1910 |
$param = {key1 => 1, key2 => 2};
|
| 1881 |
-$insert_param = $dbi->insert_param_tag($param); |
|
| 1911 |
+$insert_param = $dbi->insert_param($param); |
|
| 1882 | 1912 |
$sql = <<"EOS"; |
| 1883 |
-insert into {table table1} $insert_param
|
|
| 1913 |
+insert into table1 $insert_param |
|
| 1884 | 1914 |
EOS |
| 1885 |
-$dbi->execute($sql, param => $param); |
|
| 1915 |
+$dbi->execute($sql, param => $param, table => 'table1'); |
|
| 1886 | 1916 |
is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
|
| 1887 | 1917 |
is($dbi->select(table => 'table1')->fetch_hash_first->{key2}, 2);
|
| 1888 | 1918 |
|
| ... | ... |
@@ -1890,15 +1920,15 @@ $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| 1890 | 1920 |
$dbi->reserved_word_quote('"');
|
| 1891 | 1921 |
$dbi->execute($CREATE_TABLE->{1});
|
| 1892 | 1922 |
$param = {key1 => 1, key2 => 2};
|
| 1893 |
-$insert_param = $dbi->insert_param_tag($param); |
|
| 1923 |
+$insert_param = $dbi->insert_param($param); |
|
| 1894 | 1924 |
$sql = <<"EOS"; |
| 1895 |
-insert into {table table1} $insert_param
|
|
| 1925 |
+insert into table1 $insert_param |
|
| 1896 | 1926 |
EOS |
| 1897 |
-$dbi->execute($sql, param => $param); |
|
| 1927 |
+$dbi->execute($sql, param => $param, table => 'table1'); |
|
| 1898 | 1928 |
is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
|
| 1899 | 1929 |
is($dbi->select(table => 'table1')->fetch_hash_first->{key2}, 2);
|
| 1900 | 1930 |
|
| 1901 |
-eval { $dbi->insert_param_tag({";" => 1}) };
|
|
| 1931 |
+eval { $dbi->insert_param({";" => 1}) };
|
|
| 1902 | 1932 |
like($@, qr/not safety/); |
| 1903 | 1933 |
|
| 1904 | 1934 |
|
| ... | ... |
@@ -2238,3 +2268,5 @@ $dbi->update( |
| 2238 | 2268 |
); |
| 2239 | 2269 |
$rows = $dbi->select(table => 'table1')->fetch_hash_all; |
| 2240 | 2270 |
is_deeply($rows, [{key1 => 5, key2 => 2}]);
|
| 2271 |
+ |
|
| 2272 |
+=cut |
| ... | ... |
@@ -2,6 +2,8 @@ use Test::More; |
| 2 | 2 |
use strict; |
| 3 | 3 |
use warnings; |
| 4 | 4 |
|
| 5 |
+$SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /DEPRECATED/};
|
|
| 6 |
+ |
|
| 5 | 7 |
# user password database |
| 6 | 8 |
our ($USER, $PASSWORD, $DATABASE) = connect_info(); |
| 7 | 9 |
|
| ... | ... |
@@ -8,6 +8,8 @@ use DBIx::Custom; |
| 8 | 8 |
# Function for test name |
| 9 | 9 |
sub test{ print "# $_[0]\n" }
|
| 10 | 10 |
|
| 11 |
+$SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /DEPRECATED/};
|
|
| 12 |
+ |
|
| 11 | 13 |
# Variable for test |
| 12 | 14 |
my $datas; |
| 13 | 15 |
my $builder; |
| ... | ... |
@@ -57,7 +59,7 @@ for (my $i = 0; $i < @$datas; $i++) {
|
| 57 | 59 |
my $builder = DBIx::Custom->new->query_builder; |
| 58 | 60 |
my $query = $builder->build_query($data->{source});
|
| 59 | 61 |
is($query->{sql}, $data->{sql_expected}, "$data->{name} : sql");
|
| 60 |
- is_deeply($query->{columns}, $data->{columns_expected}, "$data->{name} : columns");
|
|
| 62 |
+ is_deeply($query->columns, $data->{columns_expected}, "$data->{name} : columns");
|
|
| 61 | 63 |
} |
| 62 | 64 |
|
| 63 | 65 |
|
| ... | ... |
@@ -123,7 +125,7 @@ $builder->register_tag( |
| 123 | 125 |
} |
| 124 | 126 |
); |
| 125 | 127 |
eval{$builder->build_query("{a}")};
|
| 126 |
-like($@, qr/\QPlaceholder count in "? ? ?" must be same as column count 1/, "placeholder count is invalid"); |
|
| 128 |
+like($@, qr/\QPlaceholder count/, "placeholder count is invalid"); |
|
| 127 | 129 |
|
| 128 | 130 |
|
| 129 | 131 |
test 'Default tag Error case'; |
| ... | ... |
@@ -166,4 +168,4 @@ $source = "a {= {}";
|
| 166 | 168 |
eval{$builder->build_query($source)};
|
| 167 | 169 |
like($@, qr/unexpected "{"/, "error : 2");
|
| 168 | 170 |
|
| 169 |
- |
|
| 171 |
+=cut |