mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	array header, and to compute sizing and alignment of array elements the same way normal tuple access operations do --- viz, using the tupmacs.h macros att_addlength and att_align. This makes the world safe for arrays of cstrings or intervals, and should make it much easier to write array-type-polymorphic functions; as examples see the cleanups of array_out and contrib/array_iterator. By Joe Conway and Tom Lane.
		
			
				
	
	
		
			289 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			MySQL
		
	
	
	
	
	
			
		
		
	
	
			289 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			MySQL
		
	
	
	
	
	
| -- SQL code to define the new array iterator functions and operators
 | |
| 
 | |
| -- define the array operators *=, **=, *~ and **~ for type _text
 | |
| --
 | |
| create or replace function array_texteq(_text, text) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_all_texteq(_text, text) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_textregexeq(_text, text) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_all_textregexeq(_text, text) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create operator *= (
 | |
|   leftarg=_text, 
 | |
|   rightarg=text, 
 | |
|   procedure=array_texteq);
 | |
| 
 | |
| create operator **= (
 | |
|   leftarg=_text,
 | |
|   rightarg=text,
 | |
|   procedure=array_all_texteq);
 | |
| 
 | |
| create operator *~ (
 | |
|   leftarg=_text,
 | |
|   rightarg=text,
 | |
|   procedure=array_textregexeq);
 | |
| 
 | |
| 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 with (isStrict);
 | |
| 
 | |
| create or replace function array_all_varchareq(_varchar, varchar) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_varcharregexeq(_varchar, varchar) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_all_varcharregexeq(_varchar, varchar) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create operator *= (
 | |
|   leftarg=_varchar, 
 | |
|   rightarg="varchar", 
 | |
|   procedure=array_varchareq);
 | |
| 
 | |
| create operator **= (
 | |
|   leftarg=_varchar,
 | |
|   rightarg="varchar",
 | |
|   procedure=array_all_varchareq);
 | |
| 
 | |
| create operator *~ (
 | |
|   leftarg=_varchar,
 | |
|   rightarg="varchar",
 | |
|   procedure=array_varcharregexeq);
 | |
| 
 | |
| 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 with (isStrict);
 | |
| 
 | |
| create or replace function array_all_bpchareq(_bpchar, bpchar) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_bpcharregexeq(_bpchar, bpchar) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_all_bpcharregexeq(_bpchar, bpchar) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create operator *= (
 | |
|   leftarg=_bpchar, 
 | |
|   rightarg=bpchar, 
 | |
|   procedure=array_bpchareq);
 | |
| 
 | |
| create operator **= (
 | |
|   leftarg=_bpchar,
 | |
|   rightarg=bpchar,
 | |
|   procedure=array_all_bpchareq);
 | |
| 
 | |
| create operator *~ (
 | |
|   leftarg=_bpchar,
 | |
|   rightarg=bpchar,
 | |
|   procedure=array_bpcharregexeq);
 | |
| 
 | |
| 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 with (isStrict);
 | |
| 
 | |
| create or replace function array_all_int4eq(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_int4ne(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_all_int4ne(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_int4gt(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_all_int4gt(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_int4ge(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_all_int4ge(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_int4lt(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_all_int4lt(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_int4le(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_all_int4le(_int4, int4) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create operator *= (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_int4eq);
 | |
| 
 | |
| create operator **= (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_all_int4eq);
 | |
| 
 | |
| create operator *<> (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_int4ne);
 | |
| 
 | |
| create operator **<> (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_all_int4ne);
 | |
| 
 | |
| create operator *> (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_int4gt);
 | |
| 
 | |
| create operator **> (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_all_int4gt);
 | |
| 
 | |
| create operator *>= (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_int4ge);
 | |
| 
 | |
| create operator **>= (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_all_int4ge);
 | |
| 
 | |
| create operator *< (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_int4lt);
 | |
| 
 | |
| create operator **< (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_all_int4lt);
 | |
| 
 | |
| create operator *<= (
 | |
|   leftarg=_int4,
 | |
|   rightarg=int4,
 | |
|   procedure=array_int4le);
 | |
| 
 | |
| 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 with (isStrict);
 | |
| 
 | |
| create or replace function array_all_oidne(_oid, oid) returns bool
 | |
|   as 'MODULE_PATHNAME' 
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create operator *= (
 | |
|   leftarg=_oid, 
 | |
|   rightarg=oid, 
 | |
|   procedure=array_oideq);
 | |
| 
 | |
| 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 with (isStrict);
 | |
| 
 | |
| create or replace function array_all_ineteq(_inet, inet) returns bool
 | |
|   as 'MODULE_PATHNAME'
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_inetne(_inet, inet) returns bool
 | |
|   as 'MODULE_PATHNAME'
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create or replace function array_all_inetne(_inet, inet) returns bool
 | |
|   as 'MODULE_PATHNAME'
 | |
|   language C with (isStrict);
 | |
| 
 | |
| create operator *= (
 | |
|   leftarg=_inet,
 | |
|   rightarg=inet,
 | |
|   procedure=array_ineteq);
 | |
| 
 | |
| create operator **= (
 | |
|   leftarg=_inet,
 | |
|   rightarg=inet,
 | |
|   procedure=array_all_ineteq);
 | |
| 
 | |
| create operator *<> (
 | |
|   leftarg=_inet,
 | |
|   rightarg=inet,
 | |
|   procedure=array_inetne);
 | |
| 
 | |
| create operator **<> (
 | |
|   leftarg=_inet,
 | |
|   rightarg=inet,
 | |
|   procedure=array_all_inetne);
 |