mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-30 19:00:29 +08:00
1db943b3ca
regression tests for the GiST changes ... this should be integrated into the regular regression tests similar to Vadim's SPI contrib stuff ...
212 lines
6.3 KiB
MySQL
212 lines
6.3 KiB
MySQL
-- Create the user-defined type for the 1-D frloating point indervals (_int4)
|
|
--
|
|
BEGIN TRANSACTION;
|
|
|
|
--
|
|
-- External C-functions for R-tree methods
|
|
--
|
|
|
|
-- Comparison methods
|
|
|
|
CREATE FUNCTION _int_contains(_int4, _int4) RETURNS bool
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
INSERT INTO pg_description (objoid, description)
|
|
SELECT oid, 'contains'::text
|
|
FROM pg_proc
|
|
WHERE proname = '_int_contains'::name;
|
|
|
|
CREATE FUNCTION _int_contained(_int4, _int4) RETURNS bool
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
INSERT INTO pg_description (objoid, description)
|
|
SELECT oid, 'contained in'::text
|
|
FROM pg_proc
|
|
WHERE proname = '_int_contained'::name;
|
|
|
|
CREATE FUNCTION _int_overlap(_int4, _int4) RETURNS bool
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
INSERT INTO pg_description (objoid, description)
|
|
SELECT oid, 'overlaps'::text
|
|
FROM pg_proc
|
|
WHERE proname = '_int_overlap'::name;
|
|
|
|
CREATE FUNCTION _int_same(_int4, _int4) RETURNS bool
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
INSERT INTO pg_description (objoid, description)
|
|
SELECT oid, 'same as'::text
|
|
FROM pg_proc
|
|
WHERE proname = '_int_same'::name;
|
|
|
|
CREATE FUNCTION _int_different(_int4, _int4) RETURNS bool
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
INSERT INTO pg_description (objoid, description)
|
|
SELECT oid, 'different'::text
|
|
FROM pg_proc
|
|
WHERE proname = '_int_different'::name;
|
|
|
|
-- support routines for indexing
|
|
|
|
CREATE FUNCTION _int_union(_int4, _int4) RETURNS _int4
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
CREATE FUNCTION _int_inter(_int4, _int4) RETURNS _int4
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
--
|
|
-- OPERATORS
|
|
--
|
|
|
|
CREATE OPERATOR && (
|
|
LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_overlap,
|
|
COMMUTATOR = '&&',
|
|
RESTRICT = contsel, JOIN = contjoinsel
|
|
);
|
|
|
|
--CREATE OPERATOR = (
|
|
-- LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_same,
|
|
-- COMMUTATOR = '=', NEGATOR = '<>',
|
|
-- RESTRICT = eqsel, JOIN = eqjoinsel,
|
|
-- SORT1 = '<', SORT2 = '<'
|
|
--);
|
|
|
|
CREATE OPERATOR <> (
|
|
LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_different,
|
|
COMMUTATOR = '<>', NEGATOR = '=',
|
|
RESTRICT = neqsel, JOIN = neqjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR @ (
|
|
LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_contains,
|
|
COMMUTATOR = '~', RESTRICT = contsel, JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR ~ (
|
|
LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_contained,
|
|
COMMUTATOR = '@', RESTRICT = contsel, JOIN = contjoinsel
|
|
);
|
|
|
|
|
|
-- define the GiST support methods
|
|
CREATE FUNCTION g_int_consistent(opaque,_int4,int4) RETURNS bool
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
CREATE FUNCTION g_int_compress(opaque) RETURNS opaque
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
CREATE FUNCTION g_int_decompress(opaque) RETURNS opaque
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
CREATE FUNCTION g_int_penalty(opaque,opaque,opaque) RETURNS opaque
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
CREATE FUNCTION g_int_picksplit(opaque, opaque) RETURNS opaque
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
CREATE FUNCTION g_int_union(bytea, opaque) RETURNS _int4
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
CREATE FUNCTION g_int_same(_int4, _int4, opaque) RETURNS opaque
|
|
AS 'MODULE_PATHNAME' LANGUAGE 'c';
|
|
|
|
|
|
-- register the default opclass for indexing
|
|
INSERT INTO pg_opclass (opcname, opcdeftype)
|
|
SELECT 'gist__int_ops', oid
|
|
FROM pg_type
|
|
WHERE typname = '_int4';
|
|
|
|
|
|
-- get the comparators for _intments and store them in a tmp table
|
|
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';
|
|
|
|
-- make sure we have the right operators
|
|
-- SELECT * from _int_ops_tmp;
|
|
|
|
-- using the tmp table, generate the amop entries
|
|
|
|
-- _int_overlap
|
|
INSERT INTO pg_amop (amopid, amopclaid, amopopr, amopstrategy)
|
|
SELECT am.oid, opcl.oid, c.opoid, 3
|
|
FROM pg_am am, pg_opclass opcl, _int_ops_tmp c
|
|
WHERE amname = 'gist' and opcname = 'gist__int_ops'
|
|
and c.oprname = '&&';
|
|
|
|
-- _int_same
|
|
INSERT INTO pg_amop (amopid, amopclaid, amopopr, amopstrategy)
|
|
SELECT am.oid, opcl.oid, c.opoid, 6
|
|
FROM pg_am am, pg_opclass opcl, _int_ops_tmp c
|
|
WHERE amname = 'gist' and opcname = 'gist__int_ops'
|
|
and c.oprname = '=';
|
|
|
|
-- _int_contains
|
|
INSERT INTO pg_amop (amopid, amopclaid, amopopr, amopstrategy)
|
|
SELECT am.oid, opcl.oid, c.opoid, 7
|
|
FROM pg_am am, pg_opclass opcl, _int_ops_tmp c
|
|
WHERE amname = 'gist' and opcname = 'gist__int_ops'
|
|
and c.oprname = '@';
|
|
|
|
-- _int_contained
|
|
INSERT INTO pg_amop (amopid, amopclaid, amopopr, amopstrategy)
|
|
SELECT am.oid, opcl.oid, c.opoid, 8
|
|
FROM pg_am am, pg_opclass opcl, _int_ops_tmp c
|
|
WHERE amname = 'gist' and opcname = 'gist__int_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 (amid, amopclaid, amproc, amprocnum)
|
|
SELECT am.oid, opcl.oid, pro.oid, 1
|
|
FROM pg_am am, pg_opclass opcl, pg_proc pro
|
|
WHERE amname = 'gist' and opcname = 'gist__int_ops'
|
|
and proname = 'g_int_consistent';
|
|
|
|
INSERT INTO pg_amproc (amid, amopclaid, amproc, amprocnum)
|
|
SELECT am.oid, opcl.oid, pro.oid, 2
|
|
FROM pg_am am, pg_opclass opcl, pg_proc pro
|
|
WHERE amname = 'gist' and opcname = 'gist__int_ops'
|
|
and proname = 'g_int_union';
|
|
|
|
INSERT INTO pg_amproc (amid, amopclaid, amproc, amprocnum)
|
|
SELECT am.oid, opcl.oid, pro.oid, 3
|
|
FROM pg_am am, pg_opclass opcl, pg_proc pro
|
|
WHERE amname = 'gist' and opcname = 'gist__int_ops'
|
|
and proname = 'g_int_compress';
|
|
|
|
INSERT INTO pg_amproc (amid, amopclaid, amproc, amprocnum)
|
|
SELECT am.oid, opcl.oid, pro.oid, 4
|
|
FROM pg_am am, pg_opclass opcl, pg_proc pro
|
|
WHERE amname = 'gist' and opcname = 'gist__int_ops'
|
|
and proname = 'g_int_decompress';
|
|
|
|
INSERT INTO pg_amproc (amid, amopclaid, amproc, amprocnum)
|
|
SELECT am.oid, opcl.oid, pro.oid, 5
|
|
FROM pg_am am, pg_opclass opcl, pg_proc pro
|
|
WHERE amname = 'gist' and opcname = 'gist__int_ops'
|
|
and proname = 'g_int_penalty';
|
|
|
|
INSERT INTO pg_amproc (amid, amopclaid, amproc, amprocnum)
|
|
SELECT am.oid, opcl.oid, pro.oid, 6
|
|
FROM pg_am am, pg_opclass opcl, pg_proc pro
|
|
WHERE amname = 'gist' and opcname = 'gist__int_ops'
|
|
and proname = 'g_int_picksplit';
|
|
|
|
INSERT INTO pg_amproc (amid, amopclaid, amproc, amprocnum)
|
|
SELECT am.oid, opcl.oid, pro.oid, 7
|
|
FROM pg_am am, pg_opclass opcl, pg_proc pro
|
|
WHERE amname = 'gist' and opcname = 'gist__int_ops'
|
|
and proname = 'g_int_same';
|
|
|
|
END TRANSACTION;
|