mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-04 00:02:52 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			250 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			MySQL
		
	
	
	
	
	
			
		
		
	
	
			250 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			MySQL
		
	
	
	
	
	
BEGIN TRANSACTION;
 | 
						|
 | 
						|
-- TXTIDX type
 | 
						|
 | 
						|
CREATE FUNCTION txtidx_in(opaque)
 | 
						|
RETURNS opaque
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
CREATE FUNCTION txtidx_out(opaque)
 | 
						|
RETURNS opaque
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
CREATE TYPE txtidx (
 | 
						|
internallength = -1,
 | 
						|
input = txtidx_in,
 | 
						|
output = txtidx_out,
 | 
						|
storage = extended
 | 
						|
);
 | 
						|
 | 
						|
CREATE FUNCTION txt2txtidx(text)
 | 
						|
RETURNS txtidx
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
CREATE FUNCTION txtidxsize(txtidx)
 | 
						|
RETURNS int4
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
--QUERYTYPES
 | 
						|
--without morphology
 | 
						|
CREATE FUNCTION qtxt_in(opaque)
 | 
						|
RETURNS opaque
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
CREATE FUNCTION qtxt_out(opaque)
 | 
						|
RETURNS opaque
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
CREATE TYPE query_txt (
 | 
						|
internallength = -1,
 | 
						|
input = qtxt_in,
 | 
						|
output = qtxt_out
 | 
						|
);
 | 
						|
 | 
						|
--with morphology
 | 
						|
CREATE FUNCTION mqtxt_in(opaque)
 | 
						|
RETURNS opaque
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
CREATE TYPE mquery_txt (
 | 
						|
internallength = -1,
 | 
						|
input = mqtxt_in,
 | 
						|
output = qtxt_out
 | 
						|
);
 | 
						|
 | 
						|
--only for debug
 | 
						|
CREATE FUNCTION querytree(query_txt)
 | 
						|
RETURNS text
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
CREATE FUNCTION querytree(mquery_txt)
 | 
						|
RETURNS text
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
--operations
 | 
						|
CREATE FUNCTION execqtxt(txtidx, query_txt) RETURNS bool
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
COMMENT ON FUNCTION execqtxt(txtidx, query_txt) IS 'boolean operation with text index';
 | 
						|
 | 
						|
CREATE FUNCTION execqtxt(txtidx, mquery_txt) RETURNS bool
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
COMMENT ON FUNCTION execqtxt(txtidx, mquery_txt) IS 'boolean operation with text index';
 | 
						|
 | 
						|
CREATE FUNCTION rexecqtxt(query_txt, txtidx) RETURNS bool
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
COMMENT ON FUNCTION rexecqtxt(query_txt, txtidx) IS 'boolean operation with text index';
 | 
						|
 | 
						|
CREATE FUNCTION rexecqtxt(mquery_txt, txtidx) RETURNS bool
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
COMMENT ON FUNCTION rexecqtxt(mquery_txt, txtidx) IS 'boolean operation with text index';
 | 
						|
 | 
						|
CREATE OPERATOR @@ (
 | 
						|
   LEFTARG = txtidx, RIGHTARG = query_txt, PROCEDURE = execqtxt,
 | 
						|
   COMMUTATOR = '~@', RESTRICT = contsel, JOIN = contjoinsel
 | 
						|
);
 | 
						|
 | 
						|
CREATE OPERATOR ~@ (
 | 
						|
   LEFTARG = query_txt, RIGHTARG = txtidx, PROCEDURE = rexecqtxt,
 | 
						|
   COMMUTATOR = '@@', RESTRICT = contsel, JOIN = contjoinsel
 | 
						|
);
 | 
						|
 | 
						|
CREATE OPERATOR ## (
 | 
						|
   LEFTARG = txtidx, RIGHTARG = mquery_txt, PROCEDURE = execqtxt,
 | 
						|
   COMMUTATOR = '~#', RESTRICT = contsel, JOIN = contjoinsel
 | 
						|
);
 | 
						|
 | 
						|
CREATE OPERATOR ~# (
 | 
						|
   LEFTARG = mquery_txt, RIGHTARG = txtidx, PROCEDURE = rexecqtxt,
 | 
						|
   COMMUTATOR = '##', RESTRICT = contsel, JOIN = contjoinsel
 | 
						|
);
 | 
						|
 | 
						|
--Trigger
 | 
						|
create function tsearch() returns opaque as
 | 
						|
        'MODULE_PATHNAME'
 | 
						|
        language 'C';
 | 
						|
 | 
						|
--GiST
 | 
						|
--GiST key type
 | 
						|
CREATE FUNCTION gtxtidx_in(opaque)
 | 
						|
RETURNS opaque
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
CREATE FUNCTION gtxtidx_out(opaque)
 | 
						|
RETURNS opaque
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
CREATE TYPE gtxtidx (
 | 
						|
internallength = -1,
 | 
						|
input = gtxtidx_in,
 | 
						|
output = gtxtidx_out
 | 
						|
);
 | 
						|
 | 
						|
CREATE FUNCTION gtxtidx_consistent(gtxtidx,opaque,int4) RETURNS bool
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c';
 | 
						|
 | 
						|
CREATE FUNCTION gtxtidx_compress(opaque) RETURNS opaque
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c';
 | 
						|
 | 
						|
CREATE FUNCTION gtxtidx_decompress(opaque) RETURNS opaque
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c';
 | 
						|
 | 
						|
CREATE FUNCTION gtxtidx_penalty(opaque,opaque,opaque) RETURNS opaque
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
 | 
						|
 | 
						|
CREATE FUNCTION gtxtidx_picksplit(opaque, opaque) RETURNS opaque
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c';
 | 
						|
 | 
						|
CREATE FUNCTION gtxtidx_union(bytea, opaque) RETURNS _int4
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c';
 | 
						|
 | 
						|
CREATE FUNCTION gtxtidx_same(gtxtidx, gtxtidx, opaque) RETURNS opaque
 | 
						|
        AS 'MODULE_PATHNAME' LANGUAGE 'c';
 | 
						|
 | 
						|
INSERT INTO pg_opclass (opcamid, opcname, opcintype, opcdefault, opckeytype)
 | 
						|
    VALUES (
 | 
						|
        (SELECT oid FROM pg_am WHERE amname = 'gist'),
 | 
						|
        'gist_txtidx_ops',
 | 
						|
        (SELECT oid FROM pg_type WHERE typname = 'txtidx'),
 | 
						|
        true,
 | 
						|
        (SELECT oid FROM pg_type WHERE typname = 'gtxtidx'));
 | 
						|
 | 
						|
SELECT o.oid AS opoid, o.oprname
 | 
						|
INTO TEMP TABLE txtidx_ops_tmp
 | 
						|
FROM pg_operator o, pg_type t, pg_type tq
 | 
						|
WHERE o.oprleft = t.oid and o.oprright=tq.oid
 | 
						|
   and t.typname = 'txtidx'
 | 
						|
   and ( tq.typname='query_txt' or tq.typname='mquery_txt' );
 | 
						|
 | 
						|
INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
 | 
						|
   SELECT opcl.oid, 1, false, c.opoid
 | 
						|
   FROM pg_opclass opcl, txtidx_ops_tmp c
 | 
						|
   WHERE
 | 
						|
      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
 | 
						|
      and opcname = 'gist_txtidx_ops'
 | 
						|
      and c.oprname = '@@';
 | 
						|
 | 
						|
INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
 | 
						|
   SELECT opcl.oid, 2, false, c.opoid
 | 
						|
   FROM pg_opclass opcl, txtidx_ops_tmp c
 | 
						|
   WHERE
 | 
						|
      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
 | 
						|
      and opcname = 'gist_txtidx_ops'
 | 
						|
      and c.oprname = '##';
 | 
						|
 | 
						|
DROP TABLE txtidx_ops_tmp;
 | 
						|
 | 
						|
INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
 | 
						|
   SELECT opcl.oid, 1, pro.oid
 | 
						|
   FROM pg_opclass opcl, pg_proc pro
 | 
						|
   WHERE
 | 
						|
      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
 | 
						|
      and opcname = 'gist_txtidx_ops'
 | 
						|
      and proname = 'gtxtidx_consistent';
 | 
						|
 | 
						|
INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
 | 
						|
   SELECT opcl.oid, 2, pro.oid
 | 
						|
   FROM pg_opclass opcl, pg_proc pro
 | 
						|
   WHERE
 | 
						|
      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
 | 
						|
      and opcname = 'gist_txtidx_ops'
 | 
						|
      and proname = 'gtxtidx_union';
 | 
						|
 | 
						|
INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
 | 
						|
   SELECT opcl.oid, 3, pro.oid
 | 
						|
   FROM pg_opclass opcl, pg_proc pro
 | 
						|
   WHERE
 | 
						|
      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
 | 
						|
      and opcname = 'gist_txtidx_ops'
 | 
						|
      and proname = 'gtxtidx_compress';
 | 
						|
 | 
						|
INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
 | 
						|
   SELECT opcl.oid, 4, pro.oid
 | 
						|
   FROM pg_opclass opcl, pg_proc pro
 | 
						|
   WHERE
 | 
						|
      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
 | 
						|
      and opcname = 'gist_txtidx_ops'
 | 
						|
      and proname = 'gtxtidx_decompress';
 | 
						|
 | 
						|
INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
 | 
						|
   SELECT opcl.oid, 5, pro.oid
 | 
						|
   FROM pg_opclass opcl, pg_proc pro
 | 
						|
   WHERE
 | 
						|
      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
 | 
						|
      and opcname = 'gist_txtidx_ops'
 | 
						|
      and proname = 'gtxtidx_penalty';
 | 
						|
 | 
						|
INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
 | 
						|
   SELECT opcl.oid, 6, pro.oid
 | 
						|
   FROM pg_opclass opcl, pg_proc pro
 | 
						|
   WHERE
 | 
						|
      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
 | 
						|
      and opcname = 'gist_txtidx_ops'
 | 
						|
      and proname = 'gtxtidx_picksplit';
 | 
						|
 | 
						|
INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
 | 
						|
   SELECT opcl.oid, 7, pro.oid
 | 
						|
   FROM pg_opclass opcl, pg_proc pro
 | 
						|
   WHERE
 | 
						|
      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
 | 
						|
      and opcname = 'gist_txtidx_ops'
 | 
						|
      and proname = 'gtxtidx_same';
 | 
						|
 | 
						|
 | 
						|
 | 
						|
END TRANSACTION;
 |