From 1319d9c2cfce7eb6a505243aea7b67ca2bc55b71 Mon Sep 17 00:00:00 2001 From: Lebbeous Fogle-Weekley Date: Fri, 13 Apr 2012 18:12:46 -0400 Subject: [PATCH] fix acq general search? out the door, will amend this commit msg later. Signed-off-by: Lebbeous Fogle-Weekley --- .../perlmods/lib/OpenILS/Application/Acq/Search.pm | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Search.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Search.pm index 16844d94d2..f8dda0d228 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Search.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Search.pm @@ -262,7 +262,8 @@ sub prepare_terms { } sub add_au_joins { - my ($graft_map) = shift; + my $graft_map = shift; + my $core_hint = shift; my $n = 0; foreach my $join (@_) { @@ -282,8 +283,14 @@ sub add_au_joins { } } }; - $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; @@ -294,7 +301,7 @@ sub build_from_clause_and_joins { my %graft_map = (); - $query->{from}{$core} = {}; + $graft_map{$core} = $query->{from}{$core} = {}; my $join_type = keys(%$or_terms) ? "left" : "inner"; @@ -322,10 +329,11 @@ sub build_from_clause_and_joins { $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; } } @@ -441,8 +449,8 @@ q/order_by clause must be of the long form, like: $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"} = { -- 2.11.0