}
sub add_au_joins {
- my ($graft_map) = shift;
+ my $graft_map = shift;
+ my $core_hint = shift;
my $n = 0;
foreach my $join (@_) {
}
}
};
- $start->{"join"} ||= {};
- $start->{"join"}->{"au$num"} = $clause;
+
+ if ($hint eq $core_hint) {
+ $start->{"au$num"} = $clause;
+ } else {
+ $start->{"join"} ||= {};
+ $start->{"join"}->{"au$num"} = $clause;
+ }
+
$n++;
}
$n;
my %graft_map = ();
- $query->{from}{$core} = {};
+ $graft_map{$core} = $query->{from}{$core} = {};
my $join_type = keys(%$or_terms) ? "left" : "inner";
$acqlia_join->();
}
} elsif ($class eq 'acqinv' or $core eq 'acqinv') {
- $graft_map{$class} = $query->{from}{$core}{acqmapinv}{join}{$class};
+ $graft_map{$class} =
+ $query->{from}{$core}{acqmapinv}{join}{$class} ||= {};
$graft_map{$class}{type} = $join_type;
} else {
- $graft_map{$class} = $query->{from}{$core}{$class};
+ $graft_map{$class} = $query->{from}{$core}{$class} ||= {};
$graft_map{$class}{type} = $join_type;
}
}
$and_terms = prepare_terms($and_terms, 1);
$or_terms = prepare_terms($or_terms, 0);
- my $offset = add_au_joins($graft_map, prepare_au_terms($and_terms));
- add_au_joins($graft_map, prepare_au_terms($or_terms, $offset));
+ my $offset = add_au_joins($graft_map, $hint, prepare_au_terms($and_terms));
+ add_au_joins($graft_map, $hint, prepare_au_terms($or_terms, $offset));
if ($and_terms and $or_terms) {
$query->{"where"} = {