$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";
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';
$mra_join
$mrv_join
$bre_join
+ $lang_join
WHERE 1=1
$flat_where
GROUP BY 1