FOR TYPE text USING gist
AS
OPERATOR 1 % (text, text),
- OPERATOR 2 <-> (text, text) FOR ORDER BY pg_catalog.float_ops,
- OPERATOR 3 pg_catalog.~~ (text, text),
- OPERATOR 4 pg_catalog.~~* (text, text),
FUNCTION 1 gtrgm_consistent (internal, text, int, oid, internal),
FUNCTION 2 gtrgm_union (bytea, internal),
FUNCTION 3 gtrgm_compress (internal),
FUNCTION 5 gtrgm_penalty (internal, internal, internal),
FUNCTION 6 gtrgm_picksplit (internal, internal),
FUNCTION 7 gtrgm_same (gtrgm, gtrgm, internal),
- FUNCTION 8 gtrgm_distance (internal, text, int, oid),
STORAGE gtrgm;
+-- Add operators and support functions that are new in 9.1. We do it like
+-- this, leaving them "loose" in the operator family rather than bound into
+-- the gist_trgm_ops opclass, because that's the only state that can be
+-- reproduced during an upgrade from 9.0 (see pg_trgm--unpackaged--1.0.sql).
+
+ALTER OPERATOR FAMILY gist_trgm_ops USING gist ADD
+ OPERATOR 2 <-> (text, text) FOR ORDER BY pg_catalog.float_ops,
+ OPERATOR 3 pg_catalog.~~ (text, text),
+ OPERATOR 4 pg_catalog.~~* (text, text),
+ FUNCTION 8 (text, text) gtrgm_distance (internal, text, int, oid);
+
-- support functions for gin
CREATE FUNCTION gin_extract_value_trgm(text, internal)
RETURNS internal
FOR TYPE text USING gin
AS
OPERATOR 1 % (text, text),
- OPERATOR 3 pg_catalog.~~ (text, text),
- OPERATOR 4 pg_catalog.~~* (text, text),
FUNCTION 1 btint4cmp (int4, int4),
FUNCTION 2 gin_extract_value_trgm (text, internal),
FUNCTION 3 gin_extract_query_trgm (text, internal, int2, internal, internal, internal, internal),
FUNCTION 4 gin_trgm_consistent (internal, int2, text, int4, internal, internal, internal, internal),
STORAGE int4;
+
+-- Add operators that are new in 9.1.
+
+ALTER OPERATOR FAMILY gin_trgm_ops USING gin ADD
+ OPERATOR 3 pg_catalog.~~ (text, text),
+ OPERATOR 4 pg_catalog.~~* (text, text);
ALTER EXTENSION pg_trgm ADD function gtrgm_in(cstring);
ALTER EXTENSION pg_trgm ADD function gtrgm_out(gtrgm);
ALTER EXTENSION pg_trgm ADD function gtrgm_consistent(internal,text,integer,oid,internal);
-ALTER EXTENSION pg_trgm ADD function gtrgm_distance(internal,text,integer,oid);
ALTER EXTENSION pg_trgm ADD function gtrgm_compress(internal);
ALTER EXTENSION pg_trgm ADD function gtrgm_decompress(internal);
ALTER EXTENSION pg_trgm ADD function gtrgm_penalty(internal,internal,internal);
ALTER EXTENSION pg_trgm ADD function gtrgm_same(gtrgm,gtrgm,internal);
ALTER EXTENSION pg_trgm ADD operator family gist_trgm_ops using gist;
ALTER EXTENSION pg_trgm ADD operator class gist_trgm_ops using gist;
-ALTER EXTENSION pg_trgm ADD function gin_extract_value_trgm(text,internal);
-ALTER EXTENSION pg_trgm ADD function gin_extract_query_trgm(text,internal,smallint,internal,internal,internal,internal);
-ALTER EXTENSION pg_trgm ADD function gin_trgm_consistent(internal,smallint,text,integer,internal,internal,internal,internal);
ALTER EXTENSION pg_trgm ADD operator family gin_trgm_ops using gin;
ALTER EXTENSION pg_trgm ADD operator class gin_trgm_ops using gin;
--- these were not in 9.0:
+-- These functions had different names/signatures in 9.0. We can't just
+-- drop and recreate them because they are linked into the GIN opclass,
+-- so we need some ugly hacks.
+
+-- First, absorb them into the extension under their old names.
+
+ALTER EXTENSION pg_trgm ADD function gin_extract_trgm(text, internal);
+ALTER EXTENSION pg_trgm ADD function gin_extract_trgm(text, internal, int2, internal, internal);
+ALTER EXTENSION pg_trgm ADD function gin_trgm_consistent(internal,smallint,text,integer,internal,internal);
+
+-- Fix the names, and then do CREATE OR REPLACE to adjust the function
+-- bodies to be correct (ie, reference the correct C symbol).
+
+ALTER FUNCTION gin_extract_trgm(text, internal)
+ RENAME TO gin_extract_value_trgm;
+CREATE OR REPLACE FUNCTION gin_extract_value_trgm(text, internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+ALTER FUNCTION gin_extract_trgm(text, internal, int2, internal, internal)
+ RENAME TO gin_extract_query_trgm;
+CREATE OR REPLACE FUNCTION gin_extract_query_trgm(text, internal, int2, internal, internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+-- gin_trgm_consistent didn't change name.
+
+-- Last, fix the parameter lists by means of direct UPDATE on the pg_proc
+-- entries. This is ugly as can be, but there's no other way to do it
+-- while preserving the identities (OIDs) of the functions.
+
+UPDATE pg_catalog.pg_proc
+SET pronargs = 7, proargtypes = '25 2281 21 2281 2281 2281 2281'
+WHERE oid = 'gin_extract_query_trgm(text,internal,int2,internal,internal)'::pg_catalog.regprocedure;
+
+UPDATE pg_catalog.pg_proc
+SET pronargs = 8, proargtypes = '2281 21 25 23 2281 2281 2281 2281'
+WHERE oid = 'gin_trgm_consistent(internal,smallint,text,integer,internal,internal)'::pg_catalog.regprocedure;
+
+
+-- These were not in 9.0:
CREATE FUNCTION similarity_dist(text,text)
RETURNS float4
PROCEDURE = similarity_dist,
COMMUTATOR = '<->'
);
+
+CREATE FUNCTION gtrgm_distance(internal,text,int,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+-- Add new stuff to the operator classes. See comment in pg_trgm--1.0.sql.
+
+ALTER OPERATOR FAMILY gist_trgm_ops USING gist ADD
+ OPERATOR 2 <-> (text, text) FOR ORDER BY pg_catalog.float_ops,
+ OPERATOR 3 pg_catalog.~~ (text, text),
+ OPERATOR 4 pg_catalog.~~* (text, text),
+ FUNCTION 8 (text, text) gtrgm_distance (internal, text, int, oid);
+
+ALTER OPERATOR FAMILY gin_trgm_ops USING gin ADD
+ OPERATOR 3 pg_catalog.~~ (text, text),
+ OPERATOR 4 pg_catalog.~~* (text, text);