mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	. replace CREATE OR REPLACE AGGREGATE with a separate DROP and CREATE . add DROP for all CREATE OPERATORs . use IMMUTABLE and STRICT instead of WITH (isStrict) . add IMMUTABLE and STRICT to int_array_aggregate's accumulator function Gregory Stark
		
			
				
	
	
		
			385 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			MySQL
		
	
	
	
	
	
			
		
		
	
	
			385 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			MySQL
		
	
	
	
	
	
-- SQL code to define the new array iterator functions and operators
 | 
						|
 | 
						|
-- define the array operators *=, **=, *~ and **~ for type _text
 | 
						|
--
 | 
						|
 | 
						|
-- Adjust this setting to control where the objects get created.
 | 
						|
SET search_path = public;
 | 
						|
 | 
						|
SET autocommit TO 'on';
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_texteq(_text, text)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_texteq(_text, text)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_textregexeq(_text, text)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_textregexeq(_text, text)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
DROP OPERATOR *=(_text,text);
 | 
						|
CREATE OPERATOR *= (
 | 
						|
	LEFTARG=_text, 
 | 
						|
	RIGHTARG=text, 
 | 
						|
	PROCEDURE=array_texteq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **=(_text,text);
 | 
						|
CREATE OPERATOR **= (
 | 
						|
	LEFTARG=_text,
 | 
						|
	RIGHTARG=text,
 | 
						|
	PROCEDURE=array_all_texteq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR *~(_text,text);
 | 
						|
CREATE OPERATOR *~ (
 | 
						|
	LEFTARG=_text,
 | 
						|
	RIGHTARG=text,
 | 
						|
	PROCEDURE=array_textregexeq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **~(_text,text);
 | 
						|
CREATE OPERATOR **~ (
 | 
						|
	LEFTARG=_text,
 | 
						|
	RIGHTARG=text,
 | 
						|
	PROCEDURE=array_all_textregexeq
 | 
						|
);
 | 
						|
 | 
						|
 | 
						|
-- define the array operators *=, **=, *~ and **~ for type _varchar
 | 
						|
--
 | 
						|
-- NOTE: "varchar" is also a reserved word and must be quoted.
 | 
						|
--
 | 
						|
CREATE OR REPLACE FUNCTION array_varchareq(_varchar, varchar)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_varchareq(_varchar, varchar)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_varcharregexeq(_varchar, varchar)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_varcharregexeq(_varchar, varchar)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
DROP OPERATOR *=(_varchar,"varchar");
 | 
						|
CREATE OPERATOR *= (
 | 
						|
	LEFTARG=_varchar, 
 | 
						|
	RIGHTARG="varchar", 
 | 
						|
	PROCEDURE=array_varchareq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **=(_varchar,"varchar");
 | 
						|
CREATE OPERATOR **= (
 | 
						|
	LEFTARG=_varchar,
 | 
						|
	RIGHTARG="varchar",
 | 
						|
	PROCEDURE=array_all_varchareq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR *~(_varchar,"varchar");
 | 
						|
CREATE OPERATOR *~ (
 | 
						|
	LEFTARG=_varchar,
 | 
						|
	RIGHTARG="varchar",
 | 
						|
	PROCEDURE=array_varcharregexeq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **~(_varchar,"varchar");
 | 
						|
CREATE OPERATOR **~ (
 | 
						|
	LEFTARG=_varchar,
 | 
						|
	RIGHTARG="varchar",
 | 
						|
	PROCEDURE=array_all_varcharregexeq
 | 
						|
);
 | 
						|
 | 
						|
 | 
						|
-- define the array operators *=, **=, *~ and **~ for type _bpchar
 | 
						|
--
 | 
						|
CREATE OR REPLACE FUNCTION array_bpchareq(_bpchar, bpchar)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_bpchareq(_bpchar, bpchar)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_bpcharregexeq(_bpchar, bpchar)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_bpcharregexeq(_bpchar, bpchar)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
DROP OPERATOR *=(_bpchar,bpchar);
 | 
						|
CREATE OPERATOR *= (
 | 
						|
	LEFTARG=_bpchar, 
 | 
						|
	RIGHTARG=bpchar, 
 | 
						|
	PROCEDURE=array_bpchareq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **=(_bpchar,bpchar);
 | 
						|
CREATE OPERATOR **= (
 | 
						|
	LEFTARG=_bpchar,
 | 
						|
	RIGHTARG=bpchar,
 | 
						|
	PROCEDURE=array_all_bpchareq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR *~(_bpchar,bpchar);
 | 
						|
CREATE OPERATOR *~ (
 | 
						|
	LEFTARG=_bpchar,
 | 
						|
	RIGHTARG=bpchar,
 | 
						|
	PROCEDURE=array_bpcharregexeq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **~(_bpchar,bpchar);
 | 
						|
CREATE OPERATOR **~ (
 | 
						|
	LEFTARG=_bpchar,
 | 
						|
	RIGHTARG=bpchar,
 | 
						|
	PROCEDURE=array_all_bpcharregexeq
 | 
						|
);
 | 
						|
 | 
						|
 | 
						|
-- define the array operators *=, **=, *> and **> for type _int4
 | 
						|
--
 | 
						|
CREATE OR REPLACE FUNCTION array_int4eq(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_int4eq(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_int4ne(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_int4ne(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_int4gt(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_int4gt(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_int4ge(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_int4ge(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_int4lt(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_int4lt(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_int4le(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_int4le(_int4, int4)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
DROP OPERATOR *=(_int4,int4);
 | 
						|
CREATE OPERATOR *= (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_int4eq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **=(_int4,int4);
 | 
						|
CREATE OPERATOR **= (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_all_int4eq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR *<>(_int4,int4);
 | 
						|
CREATE OPERATOR *<> (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_int4ne
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **<>(_int4,int4);
 | 
						|
CREATE OPERATOR **<> (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_all_int4ne
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR *>(_int4,int4);
 | 
						|
CREATE OPERATOR *> (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_int4gt
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **>(_int4,int4);
 | 
						|
CREATE OPERATOR **> (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_all_int4gt
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR *>=(_int4,int4);
 | 
						|
CREATE OPERATOR *>= (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_int4ge
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **>=(_int4,int4);
 | 
						|
CREATE OPERATOR **>= (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_all_int4ge
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR *<(_int4,int4);
 | 
						|
CREATE OPERATOR *< (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_int4lt
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **<(_int4,int4);
 | 
						|
CREATE OPERATOR **< (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_all_int4lt
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR *<=(_int4,int4);
 | 
						|
CREATE OPERATOR *<= (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_int4le
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **<=(_int4,int4);
 | 
						|
CREATE OPERATOR **<= (
 | 
						|
	LEFTARG=_int4,
 | 
						|
	RIGHTARG=int4,
 | 
						|
	PROCEDURE=array_all_int4le
 | 
						|
);
 | 
						|
 | 
						|
-- define the array operators *=, **<>  for type _oid  (added tobias 1. 1999)
 | 
						|
--
 | 
						|
CREATE OR REPLACE FUNCTION array_oideq(_oid, oid)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_oidne(_oid, oid)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME' 
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
DROP OPERATOR *=(_oid,oid);
 | 
						|
CREATE OPERATOR *= (
 | 
						|
	LEFTARG=_oid, 
 | 
						|
	RIGHTARG=oid, 
 | 
						|
	PROCEDURE=array_oideq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **<>(_oid,oid);
 | 
						|
CREATE OPERATOR **<> (
 | 
						|
	LEFTARG=_oid,
 | 
						|
	RIGHTARG=oid,
 | 
						|
	PROCEDURE=array_all_oidne
 | 
						|
);
 | 
						|
 | 
						|
-- define the array operators *=, **=, *<>, **<> for type _inet
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_ineteq(_inet, inet)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_ineteq(_inet, inet)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_inetne(_inet, inet)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
CREATE OR REPLACE FUNCTION array_all_inetne(_inet, inet)
 | 
						|
RETURNS bool
 | 
						|
AS 'MODULE_PATHNAME'
 | 
						|
LANGUAGE 'C' IMMUTABLE STRICT;
 | 
						|
 | 
						|
DROP OPERATOR *=(_inet,inet);
 | 
						|
CREATE OPERATOR *= (
 | 
						|
	LEFTARG=_inet,
 | 
						|
	RIGHTARG=inet,
 | 
						|
	PROCEDURE=array_ineteq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **=(_inet,inet);
 | 
						|
CREATE OPERATOR **= (
 | 
						|
	LEFTARG=_inet,
 | 
						|
	RIGHTARG=inet,
 | 
						|
	PROCEDURE=array_all_ineteq
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR *<>(_inet,inet);
 | 
						|
CREATE OPERATOR *<> (
 | 
						|
	LEFTARG=_inet,
 | 
						|
	RIGHTARG=inet,
 | 
						|
	PROCEDURE=array_inetne
 | 
						|
);
 | 
						|
 | 
						|
DROP OPERATOR **<>(_inet,inet);
 | 
						|
CREATE OPERATOR **<> (
 | 
						|
	LEFTARG=_inet,
 | 
						|
	RIGHTARG=inet,
 | 
						|
	PROCEDURE=array_all_inetne
 | 
						|
);
 |