aboutsummaryrefslogtreecommitdiff
path: root/contrib/btree_gist/btree_gist.sql.in
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-08-22 18:27:54 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-08-22 18:27:54 +0000
commita9289708af0bff1c45deae79a7c8f6db75d8ca16 (patch)
tree1d9f62f2266b322379d797d73b9af640012e0699 /contrib/btree_gist/btree_gist.sql.in
parenta54075a6d6df36f4c676486b4711ccfc650bf5e2 (diff)
downloadpostgresql-a9289708af0bff1c45deae79a7c8f6db75d8ca16.tar.gz
postgresql-a9289708af0bff1c45deae79a7c8f6db75d8ca16.zip
New contrib module for BTREE emulation in GiST.
From Oleg Bartunov and Teodor Sigaev.
Diffstat (limited to 'contrib/btree_gist/btree_gist.sql.in')
-rw-r--r--contrib/btree_gist/btree_gist.sql.in263
1 files changed, 263 insertions, 0 deletions
diff --git a/contrib/btree_gist/btree_gist.sql.in b/contrib/btree_gist/btree_gist.sql.in
new file mode 100644
index 00000000000..7089f1d3b56
--- /dev/null
+++ b/contrib/btree_gist/btree_gist.sql.in
@@ -0,0 +1,263 @@
+begin transaction;
+-- create type of int4 key
+
+CREATE FUNCTION int4key_in(opaque)
+RETURNS opaque
+AS 'MODULE_PATHNAME'
+LANGUAGE 'c' with (isstrict);
+
+CREATE FUNCTION int4key_out(opaque)
+RETURNS opaque
+AS 'MODULE_PATHNAME'
+LANGUAGE 'c' with (isstrict);
+
+CREATE TYPE int4key (
+internallength = 8,
+input = int4key_in,
+output = int4key_out
+);
+
+
+--
+--
+--
+-- int4 ops
+--
+--
+--
+-- define the GiST support methods
+create function gint4_consistent(opaque,int4,int2) returns bool as 'MODULE_PATHNAME' language 'C';
+
+create function gint4_compress(opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
+
+create function btree_decompress(opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
+
+create function gint4_penalty(opaque,opaque,opaque) returns opaque as 'MODULE_PATHNAME' language 'C' with(isstrict);
+
+create function gint4_picksplit(opaque, opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
+
+create function gint4_union(bytea, opaque) returns int4 as 'MODULE_PATHNAME' language 'C';
+
+create function gint4_same(opaque, opaque, opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
+
+-- add a new opclass
+INSERT INTO pg_opclass (opcamid, opcname, opcintype, opckeytype, opcdefault)
+ SELECT pg_am.oid, 'gist_int4_ops', pg_type.oid, pg_key.oid, true
+ FROM pg_type, pg_am, pg_type pg_key
+ WHERE pg_type.typname = 'int4' and
+ pg_key.typname = 'int4key' and
+ pg_am.amname='gist';
+
+
+SELECT o.oid AS opoid, o.oprname
+INTO TABLE int_ops_tmp
+FROM pg_operator o, pg_type t
+WHERE o.oprleft = t.oid and o.oprright = t.oid
+ and t.typname = 'int4';
+
+-- get the comparators for int4es and store them in a tmp table
+INSERT INTO pg_amop (amopclaid, amopopr, amopstrategy, amopreqcheck)
+ SELECT opcl.oid, c.opoid, 1, 'f'
+ FROM pg_opclass opcl, int_ops_tmp c
+ WHERE opcname = 'gist_int4_ops'
+ and c.oprname = '<';
+
+INSERT INTO pg_amop (amopclaid, amopopr, amopstrategy, amopreqcheck)
+ SELECT opcl.oid, c.opoid, 2, 'f'
+ FROM pg_opclass opcl, int_ops_tmp c
+ WHERE opcname = 'gist_int4_ops'
+ and c.oprname = '<=';
+
+INSERT INTO pg_amop (amopclaid, amopopr, amopstrategy, amopreqcheck)
+ SELECT opcl.oid, c.opoid, 3, 'f'
+ FROM pg_opclass opcl, int_ops_tmp c
+ WHERE opcname = 'gist_int4_ops'
+ and c.oprname = '=';
+
+INSERT INTO pg_amop (amopclaid, amopopr, amopstrategy, amopreqcheck)
+ SELECT opcl.oid, c.opoid, 4, 'f'
+ FROM pg_opclass opcl, int_ops_tmp c
+ WHERE opcname = 'gist_int4_ops'
+ and c.oprname = '>=';
+
+INSERT INTO pg_amop (amopclaid, amopopr, amopstrategy, amopreqcheck)
+ SELECT opcl.oid, c.opoid, 5, 'f'
+ FROM pg_opclass opcl, int_ops_tmp c
+ WHERE opcname = 'gist_int4_ops'
+ and c.oprname = '>';
+
+
+DROP table int_ops_tmp;
+
+-- add the entries to amproc for the support methods
+-- note the amprocnum numbers associated with each are specific!
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 1
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_int4_ops'
+ and proname = 'gint4_consistent';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 2
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_int4_ops'
+ and proname = 'gint4_union';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 3
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_int4_ops'
+ and proname = 'gint4_compress';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 4
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_int4_ops'
+ and proname = 'btree_decompress';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 5
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_int4_ops'
+ and proname = 'gint4_penalty';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 6
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_int4_ops'
+ and proname = 'gint4_picksplit';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 7
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_int4_ops'
+ and proname = 'gint4_same';
+
+--
+--
+--
+-- timestamp ops
+--
+--
+--
+-- create type of timestamp key
+
+CREATE FUNCTION tskey_in(opaque)
+RETURNS opaque
+AS 'MODULE_PATHNAME'
+LANGUAGE 'c' with (isstrict);
+
+CREATE FUNCTION tskey_out(opaque)
+RETURNS opaque
+AS 'MODULE_PATHNAME'
+LANGUAGE 'c' with (isstrict);
+
+CREATE TYPE tskey (
+internallength = 16,
+input = tskey_in,
+output = tskey_out
+);
+
+create function gts_consistent(opaque,timestamp,int2) returns bool as 'MODULE_PATHNAME' language 'C';
+
+create function gts_compress(opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
+
+create function gts_penalty(opaque,opaque,opaque) returns opaque as 'MODULE_PATHNAME' language 'C' with(isstrict);
+
+create function gts_picksplit(opaque, opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
+
+create function gts_union(bytea, opaque) returns int4 as 'MODULE_PATHNAME' language 'C';
+
+create function gts_same(opaque, opaque, opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
+
+INSERT INTO pg_opclass (opcamid, opcname, opcintype, opckeytype, opcdefault)
+ SELECT pg_am.oid, 'gist_timestamp_ops', pg_type.oid, pg_key.oid, true
+ FROM pg_type, pg_am, pg_type pg_key
+ WHERE pg_type.typname = 'timestamp' and
+ pg_key.typname = 'tskey' and
+ pg_am.amname='gist';
+
+SELECT o.oid AS opoid, o.oprname
+INTO TABLE timestamp_ops_tmp
+FROM pg_operator o, pg_type t
+WHERE o.oprleft = t.oid and o.oprright = t.oid
+ and t.typname = 'timestamp';
+
+INSERT INTO pg_amop (amopclaid, amopopr, amopstrategy, amopreqcheck)
+ SELECT opcl.oid, c.opoid, 1, 'f'
+ FROM pg_opclass opcl, timestamp_ops_tmp c
+ WHERE opcname = 'gist_timestamp_ops'
+ and c.oprname = '<';
+
+INSERT INTO pg_amop (amopclaid, amopopr, amopstrategy, amopreqcheck)
+ SELECT opcl.oid, c.opoid, 2, 'f'
+ FROM pg_opclass opcl, timestamp_ops_tmp c
+ WHERE opcname = 'gist_timestamp_ops'
+ and c.oprname = '<=';
+
+INSERT INTO pg_amop (amopclaid, amopopr, amopstrategy, amopreqcheck)
+ SELECT opcl.oid, c.opoid, 3, 'f'
+ FROM pg_opclass opcl, timestamp_ops_tmp c
+ WHERE opcname = 'gist_timestamp_ops'
+ and c.oprname = '=';
+
+INSERT INTO pg_amop (amopclaid, amopopr, amopstrategy, amopreqcheck)
+ SELECT opcl.oid, c.opoid, 4, 'f'
+ FROM pg_opclass opcl, timestamp_ops_tmp c
+ WHERE opcname = 'gist_timestamp_ops'
+ and c.oprname = '>=';
+
+INSERT INTO pg_amop (amopclaid, amopopr, amopstrategy, amopreqcheck)
+ SELECT opcl.oid, c.opoid, 5, 'f'
+ FROM pg_opclass opcl, timestamp_ops_tmp c
+ WHERE opcname = 'gist_timestamp_ops'
+ and c.oprname = '>';
+
+DROP table timestamp_ops_tmp;
+
+-- add the entries to amproc for the support methods
+-- note the amprocnum numbers associated with each are specific!
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 1
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_timestamp_ops'
+ and proname = 'gts_consistent';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 2
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_timestamp_ops'
+ and proname = 'gts_union';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 3
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_timestamp_ops'
+ and proname = 'gts_compress';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 4
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_timestamp_ops'
+ and proname = 'btree_decompress';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 5
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_timestamp_ops'
+ and proname = 'gts_penalty';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 6
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_timestamp_ops'
+ and proname = 'gts_picksplit';
+
+INSERT INTO pg_amproc (amopclaid, amproc, amprocnum)
+ SELECT opcl.oid, pro.oid, 7
+ FROM pg_opclass opcl, pg_proc pro
+ WHERE opcname = 'gist_timestamp_ops'
+ and proname = 'gts_same';
+
+end transaction;
+