... | ... |
@@ -555,6 +555,23 @@ sub select { |
555 | 555 |
my $relation = $args{relation}; |
556 | 556 |
my $append = $args{append}; |
557 | 557 |
my $filter = $args{filter}; |
558 |
+ |
|
559 |
+ # Relation table |
|
560 |
+ if (!$selection && $relation) { |
|
561 |
+ foreach my $rcolumn (keys %$relation) { |
|
562 |
+ my $table1 = (split (/\./, $rcolumn))[0]; |
|
563 |
+ my $table2 = (split (/\./, $relation->{$rcolumn}))[0]; |
|
564 |
+ |
|
565 |
+ my $table1_exists; |
|
566 |
+ my $table2_exists; |
|
567 |
+ foreach my $table (@$tables) { |
|
568 |
+ $table1_exists = 1 if $table eq $table1; |
|
569 |
+ $table2_exists = 1 if $table eq $table2; |
|
570 |
+ } |
|
571 |
+ push @$tables, $table1 unless $table1_exists; |
|
572 |
+ push @$tables, $table2 unless $table2_exists; |
|
573 |
+ } |
|
574 |
+ } |
|
558 | 575 |
|
559 | 576 |
# SQL stack |
560 | 577 |
my @sql; |
... | ... |
@@ -610,6 +627,10 @@ sub select { |
610 | 627 |
if (!$selection && $relation) { |
611 | 628 |
push @sql, $swhere eq '' ? 'where' : 'and'; |
612 | 629 |
foreach my $rcolumn (keys %$relation) { |
630 |
+ my $table1 = (split (/\./, $rcolumn))[0]; |
|
631 |
+ my $table2 = (split (/\./, $relation->{$rcolumn}))[0]; |
|
632 |
+ push @$tables, ($table1, $table2); |
|
633 |
+ |
|
613 | 634 |
push @sql, ("$rcolumn = " . $relation->{$rcolumn}, 'and'); |
614 | 635 |
} |
615 | 636 |
} |
... | ... |
@@ -1258,6 +1258,12 @@ $result = $dbi->select( |
1258 | 1258 |
); |
1259 | 1259 |
is($result->fetch_first->[0], 'B'); |
1260 | 1260 |
|
1261 |
+$result = $dbi->select( |
|
1262 |
+ table => 'company', relation => {'company.location_id' => 'location.id'}, |
|
1263 |
+ column => ['location.name as location__name'] |
|
1264 |
+); |
|
1265 |
+is($result->fetch_first->[0], 'B'); |
|
1266 |
+ |
|
1261 | 1267 |
test 'selection'; |
1262 | 1268 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
1263 | 1269 |
$dbi->execute($CREATE_TABLE->{0}); |