]> granicus.if.org Git - postgresql/commitdiff
pg_trgm's set_limit() now uses SetConfigOption()
authorTeodor Sigaev <teodor@sigaev.ru>
Fri, 18 Mar 2016 09:26:27 +0000 (12:26 +0300)
committerTeodor Sigaev <teodor@sigaev.ru>
Fri, 18 Mar 2016 09:26:27 +0000 (12:26 +0300)
Deprecated set_limit() is modified to use SetConfigOption() to set
similarity_threshold which is actually an instance of
pg_trgm.similarity_threshold GUC variable. Previous coding directly sets
similarity_threshold what could cause an inconsistency between states of
actual variable and GUC representation.

Per gripe from Tom Lane

contrib/pg_trgm/trgm_op.c

index eaf20e4515971dc4e610e97130f8fcbb8cde683f..3ca6e5e951ee7b0ea9e0a8b649904d6e6bc15cb7 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "catalog/pg_type.h"
 #include "tsearch/ts_locale.h"
+#include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/pg_crc.h"
 
@@ -80,12 +81,17 @@ Datum
 set_limit(PG_FUNCTION_ARGS)
 {
        float4          nlimit = PG_GETARG_FLOAT4(0);
+       char       *nlimit_str;
+       Oid                     func_out_oid;
+       bool            is_varlena;
+
+       getTypeOutputInfo(FLOAT4OID, &func_out_oid, &is_varlena);
+
+       nlimit_str = OidOutputFunctionCall(func_out_oid, Float4GetDatum(nlimit));
+
+       SetConfigOption("pg_trgm.similarity_threshold", nlimit_str,
+                                       PGC_USERSET, PGC_S_SESSION);
 
-       if (nlimit < 0 || nlimit > 1.0)
-               ereport(ERROR,
-                               (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
-                                errmsg("wrong threshold, should be between 0 and 1")));
-       similarity_threshold = nlimit;
        PG_RETURN_FLOAT4(similarity_threshold);
 }