1/* contrib/pg_trgm/pg_trgm--unpackaged--1.0.sql */
2
3-- complain if script is sourced in psql, rather than via CREATE EXTENSION
4\echo Use "CREATE EXTENSION pg_trgm FROM unpackaged" to load this file. \quit
5
6ALTER EXTENSION pg_trgm ADD function set_limit(real);
7ALTER EXTENSION pg_trgm ADD function show_limit();
8ALTER EXTENSION pg_trgm ADD function show_trgm(text);
9ALTER EXTENSION pg_trgm ADD function similarity(text,text);
10ALTER EXTENSION pg_trgm ADD function similarity_op(text,text);
11ALTER EXTENSION pg_trgm ADD operator %(text,text);
12ALTER EXTENSION pg_trgm ADD type gtrgm;
13ALTER EXTENSION pg_trgm ADD function gtrgm_in(cstring);
14ALTER EXTENSION pg_trgm ADD function gtrgm_out(gtrgm);
15ALTER EXTENSION pg_trgm ADD function gtrgm_consistent(internal,text,integer,oid,internal);
16ALTER EXTENSION pg_trgm ADD function gtrgm_compress(internal);
17ALTER EXTENSION pg_trgm ADD function gtrgm_decompress(internal);
18ALTER EXTENSION pg_trgm ADD function gtrgm_penalty(internal,internal,internal);
19ALTER EXTENSION pg_trgm ADD function gtrgm_picksplit(internal,internal);
20ALTER EXTENSION pg_trgm ADD function gtrgm_union(bytea,internal);
21ALTER EXTENSION pg_trgm ADD function gtrgm_same(gtrgm,gtrgm,internal);
22ALTER EXTENSION pg_trgm ADD operator family gist_trgm_ops using gist;
23ALTER EXTENSION pg_trgm ADD operator class gist_trgm_ops using gist;
24ALTER EXTENSION pg_trgm ADD operator family gin_trgm_ops using gin;
25ALTER EXTENSION pg_trgm ADD operator class gin_trgm_ops using gin;
26
27-- These functions had different names/signatures in 9.0.  We can't just
28-- drop and recreate them because they are linked into the GIN opclass,
29-- so we need some ugly hacks.
30
31-- First, absorb them into the extension under their old names.
32
33ALTER EXTENSION pg_trgm ADD function gin_extract_trgm(text, internal);
34ALTER EXTENSION pg_trgm ADD function gin_extract_trgm(text, internal, int2, internal, internal);
35ALTER EXTENSION pg_trgm ADD function gin_trgm_consistent(internal,smallint,text,integer,internal,internal);
36
37-- Fix the names, and then do CREATE OR REPLACE to adjust the function
38-- bodies to be correct (ie, reference the correct C symbol).
39
40ALTER FUNCTION gin_extract_trgm(text, internal)
41  RENAME TO gin_extract_value_trgm;
42CREATE OR REPLACE FUNCTION gin_extract_value_trgm(text, internal)
43RETURNS internal
44AS 'MODULE_PATHNAME'
45LANGUAGE C IMMUTABLE STRICT;
46
47ALTER FUNCTION gin_extract_trgm(text, internal, int2, internal, internal)
48  RENAME TO gin_extract_query_trgm;
49CREATE OR REPLACE FUNCTION gin_extract_query_trgm(text, internal, int2, internal, internal)
50RETURNS internal
51AS 'MODULE_PATHNAME'
52LANGUAGE C IMMUTABLE STRICT;
53
54-- gin_trgm_consistent didn't change name.
55
56-- Last, fix the parameter lists by means of direct UPDATE on the pg_proc
57-- entries.  This is ugly as can be, but there's no other way to do it
58-- while preserving the identities (OIDs) of the functions.
59
60DO LANGUAGE plpgsql
61$$
62DECLARE
63  my_schema pg_catalog.text := pg_catalog.quote_ident(pg_catalog.current_schema());
64  old_path pg_catalog.text := pg_catalog.current_setting('search_path');
65BEGIN
66-- for safety, transiently set search_path to just pg_catalog+pg_temp
67PERFORM pg_catalog.set_config('search_path', 'pg_catalog, pg_temp', true);
68
69UPDATE pg_catalog.pg_proc
70SET pronargs = 7, proargtypes = '25 2281 21 2281 2281 2281 2281'
71WHERE oid = (my_schema || '.gin_extract_query_trgm(text,internal,int2,internal,internal)')::pg_catalog.regprocedure;
72
73UPDATE pg_catalog.pg_proc
74SET pronargs = 8, proargtypes = '2281 21 25 23 2281 2281 2281 2281'
75WHERE oid = (my_schema || '.gin_trgm_consistent(internal,smallint,text,integer,internal,internal)')::pg_catalog.regprocedure;
76
77PERFORM pg_catalog.set_config('search_path', old_path, true);
78END
79$$;
80
81
82-- These were not in 9.0:
83
84CREATE FUNCTION similarity_dist(text,text)
85RETURNS float4
86AS 'MODULE_PATHNAME'
87LANGUAGE C STRICT IMMUTABLE;
88
89CREATE OPERATOR <-> (
90        LEFTARG = text,
91        RIGHTARG = text,
92        PROCEDURE = similarity_dist,
93        COMMUTATOR = '<->'
94);
95
96CREATE FUNCTION gtrgm_distance(internal,text,int,oid)
97RETURNS float8
98AS 'MODULE_PATHNAME'
99LANGUAGE C IMMUTABLE STRICT;
100
101-- Add new stuff to the operator classes.  See comment in pg_trgm--1.0.sql.
102
103ALTER OPERATOR FAMILY gist_trgm_ops USING gist ADD
104        OPERATOR        2       <-> (text, text) FOR ORDER BY pg_catalog.float_ops,
105        OPERATOR        3       pg_catalog.~~ (text, text),
106        OPERATOR        4       pg_catalog.~~* (text, text),
107        FUNCTION        8 (text, text)  gtrgm_distance (internal, text, int, oid);
108
109ALTER OPERATOR FAMILY gin_trgm_ops USING gin ADD
110        OPERATOR        3       pg_catalog.~~ (text, text),
111        OPERATOR        4       pg_catalog.~~* (text, text);
112