| ... | ... | 
                  @@ -1,4 +1,8 @@  | 
              
| 1 | 
                  +0.1702  | 
              |
| 2 | 
                  + - removed EXPERIMENTAL status of some methods.  | 
              |
| 3 | 
                  + - fixed some join bug  | 
              |
| 1 | 4 | 
                  0.1701  | 
              
| 5 | 
                  + - added DBIx::Cusotm::Order prepend method automatically quoted syntax  | 
              |
| 2 | 6 | 
                  - simplified arguments check  | 
              
| 3 | 7 | 
                  - added EXPERIMENTAL each_table method  | 
              
| 4 | 8 | 
                  - select method column option [COLUMN, as => ALIAS] format is DEPRECATED!  | 
              
| ... | ... | 
                  @@ -1,7 +1,7 @@  | 
              
| 1 | 1 | 
                  package DBIx::Custom;  | 
              
| 2 | 2 | 
                  use Object::Simple -base;  | 
              
| 3 | 3 | 
                   | 
              
| 4 | 
                  -our $VERSION = '0.1701';  | 
              |
| 4 | 
                  +our $VERSION = '0.1702';  | 
              |
| 5 | 5 | 
                  use 5.008001;  | 
              
| 6 | 6 | 
                   | 
              
| 7 | 7 | 
                  use Carp 'croak';  | 
              
| ... | ... | 
                  @@ -1314,15 +1314,21 @@ sub _push_join {
                 | 
              
| 1314 | 1314 | 
                   | 
              
| 1315 | 1315 | 
                  # Search table in join clause  | 
              
| 1316 | 1316 | 
                  my $join_clause = $join->[$i];  | 
              
| 1317 | 
                  + my $j_clause = (split /\s+on\s+/, $join_clause)[-1];  | 
              |
| 1318 | 
                  + $j_clause =~ s/'.+?'//g;  | 
              |
| 1317 | 1319 | 
                  my $q_re = quotemeta($q);  | 
              
| 1318 | 
                  - my $join_re = $q ? qr/\s$q_re?([^\.\s$q_re]+?)$q_re?\..+?\s$q_re?([^\.\s$q_re]+?)$q_re?\..+?$/  | 
              |
| 1319 | 
                  - : qr/\s([^\.\s]+?)\..+?\s([^\.\s]+?)\..+?$/;  | 
              |
| 1320 | 
                  -        if ($join_clause =~ $join_re) {
                 | 
              |
| 1320 | 
                  + $j_clause =~ s/$q_re//g;  | 
              |
| 1321 | 
                  + my $c = $self->safety_character;  | 
              |
| 1322 | 
                  + my $join_re = qr/(?:^|\s)($c+)\.$c+\s+=\s+($c+)\.$c+/;  | 
              |
| 1323 | 
                  +        if ($j_clause =~ $join_re) {
                 | 
              |
| 1321 | 1324 | 
                  my $table1 = $1;  | 
              
| 1322 | 1325 | 
                  my $table2 = $2;  | 
              
| 1323 | 1326 | 
                               croak qq{right side table of "$join_clause" must be unique }
                 | 
              
| 1324 | 1327 | 
                  . _subname  | 
              
| 1325 | 1328 | 
                                 if exists $tree->{$table2};
                 | 
              
| 1329 | 
                  +            croak qq{Same table "$table1" is specified} . _subname
                 | 
              |
| 1330 | 
                  + if $table1 eq $table2;  | 
              |
| 1331 | 
                  +  | 
              |
| 1326 | 1332 | 
                               $tree->{$table2}
                 | 
              
| 1327 | 1333 | 
                                 = {position => $i, parent => $table1, join => $join_clause};
                 | 
              
| 1328 | 1334 | 
                  }  | 
              
| ... | ... | 
                  @@ -1878,7 +1884,7 @@ default to the following values.  | 
              
| 1878 | 1884 | 
                   | 
              
| 1879 | 1885 | 
                  Filters, registered by C<register_filter> method.  | 
              
| 1880 | 1886 | 
                   | 
              
| 1881 | 
                  -=head2 C<last_sql> EXPERIMENTAL  | 
              |
| 1887 | 
                  +=head2 C<last_sql>  | 
              |
| 1882 | 1888 | 
                   | 
              
| 1883 | 1889 | 
                  my $last_sql = $dbi->last_sql;  | 
              
| 1884 | 1890 | 
                  $dbi = $dbi->last_sql($last_sql);  | 
              
| ... | ... | 
                  @@ -2054,7 +2060,7 @@ Argument is callback when one column is found.  | 
              
| 2054 | 2060 | 
                  Callback receive four arguments, dbi object, table name,  | 
              
| 2055 | 2061 | 
                  column name and column information.  | 
              
| 2056 | 2062 | 
                   | 
              
| 2057 | 
                  -=head2 C<each_table> EXPERIMENTAL  | 
              |
| 2063 | 
                  +=head2 C<each_table>  | 
              |
| 2058 | 2064 | 
                   | 
              
| 2059 | 2065 | 
                  $dbi->each_table(  | 
              
| 2060 | 2066 | 
                           sub {
                 | 
              
| ... | ... | 
                  @@ -2219,7 +2225,7 @@ The above is same as the followin one.  | 
              
| 2219 | 2225 | 
                   | 
              
| 2220 | 2226 | 
                       $dbi->delete(where => {id1 => 4, id2 => 5}, table => 'book');
                 | 
              
| 2221 | 2227 | 
                   | 
              
| 2222 | 
                  -=item C<prefix> EXPERIMENTAL  | 
              |
| 2228 | 
                  +=item C<prefix>  | 
              |
| 2223 | 2229 | 
                   | 
              
| 2224 | 2230 | 
                  prefix => 'some'  | 
              
| 2225 | 2231 | 
                   | 
              
| ... | ... | 
                  @@ -2315,7 +2321,7 @@ The above is same as the followin one.  | 
              
| 2315 | 2321 | 
                  table => 'book'  | 
              
| 2316 | 2322 | 
                  );  | 
              
| 2317 | 2323 | 
                   | 
              
| 2318 | 
                  -=item C<prefix> EXPERIMENTAL  | 
              |
| 2324 | 
                  +=item C<prefix>  | 
              |
| 2319 | 2325 | 
                   | 
              
| 2320 | 2326 | 
                  prefix => 'or replace'  | 
              
| 2321 | 2327 | 
                   | 
              
| ... | ... | 
                  @@ -2654,7 +2660,7 @@ if C<column> is not specified, '*' is set.  | 
              
| 2654 | 2660 | 
                   | 
              
| 2655 | 2661 | 
                  column => '*'  | 
              
| 2656 | 2662 | 
                   | 
              
| 2657 | 
                  -You can specify hash of array reference. This is EXPERIMENTAL.  | 
              |
| 2663 | 
                  +You can specify hash of array reference.  | 
              |
| 2658 | 2664 | 
                   | 
              
| 2659 | 2665 | 
                  column => [  | 
              
| 2660 | 2666 | 
                           {book => [qw/author title/]},
                 | 
              
| ... | ... | 
                  @@ -2716,7 +2722,7 @@ you can pass parameter by C<param> option.  | 
              
| 2716 | 2722 | 
                  join => ['inner join (select * from table2 where table2.key3 = :table2.key3)' .  | 
              
| 2717 | 2723 | 
                  ' as table2 on table1.key1 = table2.key1']  | 
              
| 2718 | 2724 | 
                   | 
              
| 2719 | 
                  -=itme C<prefix> EXPERIMENTAL  | 
              |
| 2725 | 
                  +=itme C<prefix>  | 
              |
| 2720 | 2726 | 
                   | 
              
| 2721 | 2727 | 
                  prefix => 'SQL_CALC_FOUND_ROWS'  | 
              
| 2722 | 2728 | 
                   | 
              
| ... | ... | 
                  @@ -2868,7 +2874,7 @@ The above is same as the followin one.  | 
              
| 2868 | 2874 | 
                  table => 'book'  | 
              
| 2869 | 2875 | 
                  );  | 
              
| 2870 | 2876 | 
                   | 
              
| 2871 | 
                  -=item C<prefix> EXPERIMENTAL  | 
              |
| 2877 | 
                  +=item C<prefix>  | 
              |
| 2872 | 2878 | 
                   | 
              
| 2873 | 2879 | 
                  prefix => 'or replace'  | 
              
| 2874 | 2880 | 
                   | 
              
| ... | ... | 
                  @@ -488,7 +488,7 @@ By default, filterin is on.  | 
              
| 488 | 488 | 
                  Turn filtering by C<filter> method on.  | 
              
| 489 | 489 | 
                  By default, filterin is on.  | 
              
| 490 | 490 | 
                   | 
              
| 491 | 
                  -=head2 C<header> EXPERIMENTAL  | 
              |
| 491 | 
                  +=head2 C<header>  | 
              |
| 492 | 492 | 
                   | 
              
| 493 | 493 | 
                  my $header = $result->header;  | 
              
| 494 | 494 | 
                   | 
              
| ... | ... | 
                  @@ -2168,6 +2168,28 @@ $rows = $dbi->select(  | 
              
| 2168 | 2168 | 
                  )->all;  | 
              
| 2169 | 2169 | 
                   is_deeply($rows, [{latest_table1__key1 => 1}]);
                 | 
              
| 2170 | 2170 | 
                   | 
              
| 2171 | 
                  +$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
                 | 
              |
| 2172 | 
                  +$dbi->execute($CREATE_TABLE->{0});
                 | 
              |
| 2173 | 
                  +$dbi->execute($CREATE_TABLE->{2});
                 | 
              |
| 2174 | 
                  +$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
                 | 
              |
| 2175 | 
                  +$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 4});
                 | 
              |
| 2176 | 
                  +$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 5});
                 | 
              |
| 2177 | 
                  +$result = $dbi->select(  | 
              |
| 2178 | 
                  + table => 'table1',  | 
              |
| 2179 | 
                  + join => [  | 
              |
| 2180 | 
                  + "left outer join table2 on table2.key2 = '4' and table1.key1 = table2.key1"  | 
              |
| 2181 | 
                  + ]  | 
              |
| 2182 | 
                  +);  | 
              |
| 2183 | 
                  +is_deeply($result->all, [{key1 => 1, key2 => 2}]);
                 | 
              |
| 2184 | 
                  +$result = $dbi->select(  | 
              |
| 2185 | 
                  + table => 'table1',  | 
              |
| 2186 | 
                  +    column => [{table2 => ['key3']}],
                 | 
              |
| 2187 | 
                  + join => [  | 
              |
| 2188 | 
                  + "left outer join table2 on table2.key3 = '4' and table1.key1 = table2.key1"  | 
              |
| 2189 | 
                  + ]  | 
              |
| 2190 | 
                  +);  | 
              |
| 2191 | 
                  +is_deeply($result->all, [{'table2.key3' => 4}]);
                 | 
              |
| 2192 | 
                  +  | 
              |
| 2171 | 2193 | 
                  test 'mycolumn';  | 
              
| 2172 | 2194 | 
                   $dbi = MyDBI8->connect($NEW_ARGS->{0});
                 | 
              
| 2173 | 2195 | 
                   $dbi->execute($CREATE_TABLE->{0});
                 |