| ... | ... | 
                  @@ -1,5 +1,5 @@  | 
              
| 1 | 1 | 
                  0.1703  | 
              
| 2 | 
                  - - added join new syntax.  | 
              |
| 2 | 
                  + - added EXPERIMENTAL join new syntax.  | 
              |
| 3 | 3 | 
                  0.1702  | 
              
| 4 | 4 | 
                  - removed EXPERIMENTAL status of some methods.  | 
              
| 5 | 5 | 
                  - fixed some join bug  | 
              
| ... | ... | 
                  @@ -1309,10 +1309,9 @@ sub _push_join {
                 | 
              
| 1309 | 1309 | 
                   | 
              
| 1310 | 1310 | 
                  # Push join clause  | 
              
| 1311 | 1311 | 
                       my $tree = {};
                 | 
              
| 1312 | 
                  - my $q = $self->_quote;  | 
              |
| 1313 | 1312 | 
                       for (my $i = 0; $i < @$join; $i++) {
                 | 
              
| 1314 | 1313 | 
                   | 
              
| 1315 | 
                  - # Search table in join clause  | 
              |
| 1314 | 
                  + # Arrange  | 
              |
| 1316 | 1315 | 
                  my $join_clause;;  | 
              
| 1317 | 1316 | 
                  my $option;  | 
              
| 1318 | 1317 | 
                           if (ref $join->[$i] eq 'HASH') {
                 | 
              
| ... | ... | 
                  @@ -1323,34 +1322,35 @@ sub _push_join {
                 | 
              
| 1323 | 1322 | 
                  $join_clause = $join->[$i];  | 
              
| 1324 | 1323 | 
                               $option = {};
                 | 
              
| 1325 | 1324 | 
                  };  | 
              
| 1326 | 
                  - my $j_clause = (split /\s+on\s+/, $join_clause)[-1];  | 
              |
| 1327 | 
                  - $j_clause =~ s/'.+?'//g;  | 
              |
| 1328 | 
                  - my $q_re = quotemeta($q);  | 
              |
| 1329 | 
                  - $j_clause =~ s/$q_re//g;  | 
              |
| 1330 | 
                  - my $c = $self->safety_character;  | 
              |
| 1331 | 
                  - my $join_re = qr/(?:^|\s)($c+)\.$c+\s+=\s+($c+)\.$c+/;  | 
              |
| 1332 | 
                  -  | 
              |
| 1325 | 
                  +  | 
              |
| 1326 | 
                  + # Find tables in join clause  | 
              |
| 1333 | 1327 | 
                  my $table1;  | 
              
| 1334 | 1328 | 
                  my $table2;  | 
              
| 1335 | 1329 | 
                           if (my $table = $option->{table}) {
                 | 
              
| 1336 | 1330 | 
                  $table1 = $table->[0];  | 
              
| 1337 | 1331 | 
                  $table2 = $table->[1];  | 
              
| 1338 | 1332 | 
                  }  | 
              
| 1339 | 
                  -        elsif ($j_clause =~ $join_re) {
                 | 
              |
| 1340 | 
                  - $table1 = $1;  | 
              |
| 1341 | 
                  - $table2 = $2;  | 
              |
| 1333 | 
                  +        else {
                 | 
              |
| 1334 | 
                  + my $q = $self->_quote;  | 
              |
| 1335 | 
                  + my $j_clause = (split /\s+on\s+/, $join_clause)[-1];  | 
              |
| 1336 | 
                  + $j_clause =~ s/'.+?'//g;  | 
              |
| 1337 | 
                  + my $q_re = quotemeta($q);  | 
              |
| 1338 | 
                  + $j_clause =~ s/$q_re//g;  | 
              |
| 1339 | 
                  + my $c = $self->safety_character;  | 
              |
| 1340 | 
                  + my $join_re = qr/(?:^|\s)($c+)\.$c+\s+=\s+($c+)\.$c+/;  | 
              |
| 1341 | 
                  +            if ($j_clause =~ $join_re) {
                 | 
              |
| 1342 | 
                  + $table1 = $1;  | 
              |
| 1343 | 
                  + $table2 = $2;  | 
              |
| 1344 | 
                  + }  | 
              |
| 1342 | 1345 | 
                  }  | 
              
| 1343 | 1346 | 
                           croak qq{join clause must have two table name after "on" keyword. } .
                 | 
              
| 1344 | 1347 | 
                                 qq{"$join_clause" is passed }  . _subname
                 | 
              
| 1345 | 1348 | 
                  unless defined $table1 && defined $table2;  | 
              
| 1346 | 
                  -  | 
              |
| 1347 | 1349 | 
                           croak qq{right side table of "$join_clause" must be unique }
                 | 
              
| 1348 | 1350 | 
                  . _subname  | 
              
| 1349 | 1351 | 
                             if exists $tree->{$table2};
                 | 
              
| 1350 | 
                  -  | 
              |
| 1351 | 1352 | 
                           croak qq{Same table "$table1" is specified} . _subname
                 | 
              
| 1352 | 1353 | 
                  if $table1 eq $table2;  | 
              
| 1353 | 
                  -  | 
              |
| 1354 | 1354 | 
                           $tree->{$table2}
                 | 
              
| 1355 | 1355 | 
                             = {position => $i, parent => $table1, join => $join_clause};
                 | 
              
| 1356 | 1356 | 
                  }  | 
              
| ... | ... | 
                  @@ -2776,7 +2776,7 @@ the following SQL is created  | 
              
| 2776 | 2776 | 
                  where company.name = ?;  | 
              
| 2777 | 2777 | 
                   | 
              
| 2778 | 2778 | 
                  You can specify two table by yourself. This is useful when join parser can't parse  | 
              
| 2779 | 
                  -the join clause correctly.  | 
              |
| 2779 | 
                  +the join clause correctly. This is EXPERIMENTAL.  | 
              |
| 2780 | 2780 | 
                   | 
              
| 2781 | 2781 | 
                  $dbi->select(  | 
              
| 2782 | 2782 | 
                  table => 'book',  | 
              
| ... | ... | 
                  @@ -2803,7 +2803,7 @@ Same as C<execute> method's C<query> option.  | 
              
| 2803 | 2803 | 
                   | 
              
| 2804 | 2804 | 
                  =item C<bind_type>  | 
              
| 2805 | 2805 | 
                   | 
              
| 2806 | 
                  -Same as C<execute> method's C<type> option.  | 
              |
| 2806 | 
                  +Same as C<execute> method's C<bind_type> option.  | 
              |
| 2807 | 2807 | 
                   | 
              
| 2808 | 2808 | 
                  =item C<table>  | 
              
| 2809 | 2809 | 
                   | 
              
| ... | ... | 
                  @@ -2937,7 +2937,7 @@ Same as C<select> method's C<where> option.  | 
              
| 2937 | 2937 | 
                   | 
              
| 2938 | 2938 | 
                  =item C<bind_type>  | 
              
| 2939 | 2939 | 
                   | 
              
| 2940 | 
                  -Same as C<execute> method's C<type> option.  | 
              |
| 2940 | 
                  +Same as C<execute> method's C<bind_type> option.  | 
              |
| 2941 | 2941 | 
                   | 
              
| 2942 | 2942 | 
                  =item C<type_rule_off> EXPERIMENTAL  | 
              
| 2943 | 2943 | 
                   | 
              
| ... | ... | 
                  @@ -3031,7 +3031,8 @@ L<DBIx::Custom>  | 
              
| 3031 | 3031 | 
                  # will be removed at 2017/1/1  | 
              
| 3032 | 3032 | 
                   | 
              
| 3033 | 3033 | 
                  # Others  | 
              
| 3034 | 
                  -    execute("select * from {= title}"); # execute tag parsing functionality
                 | 
              |
| 3034 | 
                  +    execute("select * from {= title}"); # execute method's
                 | 
              |
| 3035 | 
                  + # tag parsing functionality  | 
              |
| 3035 | 3036 | 
                  # will be removed at 2017/1/1  | 
              
| 3036 | 3037 | 
                  Query caching # will be removed at 2017/1/1  | 
              
| 3037 | 3038 | 
                   |