From 0382522b2b87679d365bf9000ea40d7fdf8ca1c0 Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Wed, 21 Dec 2016 16:32:26 -0500 Subject: [PATCH] LP#1651808: avoid a class of intermittent search failures This patch fixes a bug where catalog searches can sometimes fail with a PostgreSQL error that looks like this: ERROR: type of parameter 56 (double precision) does not match that when preparing the plan (numeric) CONTEXT: PL/pgSQL function search.query_parser_fts(integer,integer,text,integer[],integer[],integer,integer,integer,boolean,boolean,boolean,integer) line 319 at assignment In particular, it ensures that the relevance values are coerced to the Pg NUMERIC data type regardless of how the core query is constructed; otherwise, it can sometimes end up as a double precision value. Because of how Pg backends cache query plans, that change of type can result in the error above. To test ------- [1] (Optional) Configure the max_children values for open-ils.storage to permit only one drone, which in turn forces all catalog search requests to go through a single Pg backend. [2] Set the default_preferred_language_weight opensrf.xml setting to 0. [3] Perform a catalog search that has just a filter, e.g., item_lang(eng). [4] Perform a catalog search that includes search term, e.g., cats [5] The second search should fail. [6] Apply the patch and try steps 3 and 4 again; this time, both searches should work. Signed-off-by: Galen Charlton Signed-off-by: Mike Rylander Conflicts: Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm --- .../perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ea557699a6..6ce6fe26f2 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 @@ -875,7 +875,7 @@ sub toSQL { $with SELECT $key AS id, $agg_records, - $rel AS rel, + (${rel})::NUMERIC AS rel, $rank AS rank, FIRST(pubdate_t.value) AS tie_break FROM metabib.metarecord_source_map m -- 2.11.0