From: Mike Rylander Date: Fri, 17 Jan 2014 22:09:00 +0000 (-0500) Subject: Perferred language query fix X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=03fc3c475efd798e29616dff30e42d11dd265878;p=working%2FEvergreen.git Perferred language query fix Signed-off-by: Mike Rylander --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm index 72cbead097..074d3090ca 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm @@ -770,14 +770,17 @@ sub toSQL { $sort_filter = 'rel'; } - my $lang_with = ''; + my $lang_join = ''; if (($filters{preferred_language} || $self->QueryParser->default_preferred_language) && ($filters{preferred_language_multiplier} || $self->QueryParser->default_preferred_language_multiplier)) { my $pl = $self->QueryParser->quote_value( $filters{preferred_language} ? $filters{preferred_language} : $self->QueryParser->default_preferred_language ); - $lang_with = "lang_with AS (SELECT id FROM config.coded_value_map WHERE ctype = 'item_lang' AND value = $pl)"; + $$flat_plan{with} .= ',' if $$flat_plan{with}; + $$flat_plan{with} .= "lang_with AS (SELECT id FROM config.coded_value_map WHERE ctype = 'item_lang' AND code = $pl)"; + $lang_join = ",lang_with"; my $plw = $filters{preferred_language_multiplier} ? $filters{preferred_language_multiplier} : $self->QueryParser->default_preferred_language_multiplier; $rel = "($rel * COALESCE( NULLIF( FIRST(mrv.vlist \@> ARRAY[lang_with.id]), FALSE )::INT * $plw, 1))"; + $$flat_plan{uses_mrv} = 1; } $rel = "1.0/($rel)::NUMERIC"; @@ -834,11 +837,6 @@ sub toSQL { my $with = $$flat_plan{with}; $with= "\nWITH $with" if $with; - if ($lang_with) { - $with .= ",\n" if $with; - $with .= $lang_with; - } - # Need an array for query parser db function; this gives a better plan # than the ARRAY_AGG(DISTINCT m.source) option as of PostgreSQL 9.1 my $agg_records = 'ARRAY[m.source] AS records'; @@ -860,6 +858,7 @@ SELECT $key AS id, $mra_join $mrv_join $bre_join + $lang_join WHERE 1=1 $flat_where GROUP BY 1