- 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  |