... | ... |
@@ -1,5 +1,7 @@ |
1 |
+0.1726 |
|
2 |
+ - improved join clause parsing |
|
1 | 3 |
0.1725 |
2 |
- - improved join clause parsing. |
|
4 |
+ - improved join clause parsing |
|
3 | 5 |
0.1724 |
4 | 6 |
- added EXPERIMENTAL like_value method to DBIx::Custom |
5 | 7 |
- sqlfilter option is renamed to after_build_sql, sqlfilter is DEPRECATED! |
... | ... |
@@ -1,7 +1,7 @@ |
1 | 1 |
package DBIx::Custom; |
2 | 2 |
use Object::Simple -base; |
3 | 3 |
|
4 |
-our $VERSION = '0.1725'; |
|
4 |
+our $VERSION = '0.1726'; |
|
5 | 5 |
use 5.008001; |
6 | 6 |
|
7 | 7 |
use Carp 'croak'; |
... | ... |
@@ -1460,7 +1460,7 @@ sub _push_join { |
1460 | 1460 |
|
1461 | 1461 |
my @j_clauses = reverse split /\s(and|on)\s/, $j_clause; |
1462 | 1462 |
my $c = $self->safety_character; |
1463 |
- my $join_re = qr/(?:^|\s)($c+)\.$c+\s.+\s($c+)\.$c+/; |
|
1463 |
+ my $join_re = qr/(?:^|\s)($c+)\.$c+[^$c]+($c+)\.$c+/; |
|
1464 | 1464 |
for my $clause (@j_clauses) { |
1465 | 1465 |
if ($clause =~ $join_re) { |
1466 | 1466 |
$table1 = $1; |
... | ... |
@@ -2205,14 +2205,14 @@ User name, used when C<connect> method is executed. |
2205 | 2205 |
my $user_column_info = $dbi->user_column_info; |
2206 | 2206 |
$dbi = $dbi->user_column_info($user_column_info); |
2207 | 2207 |
|
2208 |
-You can set the following data. |
|
2208 |
+You can set the date like the following one. |
|
2209 | 2209 |
|
2210 | 2210 |
[ |
2211 | 2211 |
{table => 'book', column => 'title', info => {...}}, |
2212 | 2212 |
{table => 'author', column => 'name', info => {...}} |
2213 | 2213 |
] |
2214 | 2214 |
|
2215 |
-Usually, you can set return value of C<get_column_info>. |
|
2215 |
+Usually, you set return value of C<get_column_info>. |
|
2216 | 2216 |
|
2217 | 2217 |
my $user_column_info |
2218 | 2218 |
= $dbi->get_column_info(exclude_table => qr/^system/); |
... | ... |
@@ -268,3 +268,21 @@ $rows = $dbi->select( |
268 | 268 |
append => "order by key2 {limit 1}" |
269 | 269 |
)->all; |
270 | 270 |
is_deeply($rows, [{key1 => 1, key2 => 2}]); |
271 |
+ |
|
272 |
+test 'join function'; |
|
273 |
+$dbi = DBIx::Custom->connect; |
|
274 |
+eval { $dbi->execute("drop table table1") }; |
|
275 |
+eval { $dbi->execute("drop table table2") }; |
|
276 |
+$dbi->execute($create_table1); |
|
277 |
+$dbi->execute("create table table2 (key1, key3)"); |
|
278 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}); |
|
279 |
+$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 4}); |
|
280 |
+$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 1}); |
|
281 |
+$result = $dbi->select( |
|
282 |
+ table => 'table1', |
|
283 |
+ column => [{table2 => ['key3']}], |
|
284 |
+ join => [ |
|
285 |
+ "left outer join table2 on coalesce(table2.key3, 0) > '3' and table1.key1 = table2.key1" |
|
286 |
+ ] |
|
287 |
+); |
|
288 |
+is_deeply($result->all, [{"table2.key3" => 4}]); |