-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use"CREATE EXTENSION citext"toload this file. \quit
-- -- PostgreSQL code for CITEXT. -- -- Most I/O functions, and a few others, piggyback on the "text" type -- functions via the implicit cast to text. --
-- -- Shell type to keep things a bit quieter. --
CREATE TYPE citext;
-- -- Input and output functions. -- CREATE FUNCTION citextin(cstring)
RETURNS citext AS'textin'
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION citextout(citext)
RETURNS cstring AS'textout'
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION citextrecv(internal)
RETURNS citext AS'textrecv'
LANGUAGE internal STABLE STRICT PARALLEL SAFE;
CREATE FUNCTION citextsend(citext)
RETURNS bytea AS'textsend'
LANGUAGE internal STABLE STRICT PARALLEL SAFE;
-- -- The type itself. --
CREATE TYPE citext (
INPUT = citextin,
OUTPUT = citextout,
RECEIVE = citextrecv,
SEND = citextsend,
INTERNALLENGTH = VARIABLE,
STORAGE = extended, -- make it a non-preferred member of string type category
CATEGORY = 'S',
PREFERRED = false,
COLLATABLE = true
);
-- -- Type casting functions for those situations where the I/O casts don't -- automatically kick in. --
CREATE FUNCTION citext(bpchar)
RETURNS citext AS'rtrim1'
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION citext(boolean)
RETURNS citext AS'booltext'
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION citext(inet)
RETURNS citext AS'network_show'
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
-- -- Implicit and assignment type casts. --
CREATE CAST (citext AS text) WITHOUT FUNCTION AS IMPLICIT; CREATE CAST (citext ASvarchar) WITHOUT FUNCTION AS IMPLICIT; CREATE CAST (citext AS bpchar) WITHOUT FUNCTION AS ASSIGNMENT; CREATE CAST (text AS citext) WITHOUT FUNCTION AS ASSIGNMENT; CREATE CAST (varcharAS citext) WITHOUT FUNCTION AS ASSIGNMENT; CREATE CAST (bpchar AS citext) WITH FUNCTION citext(bpchar) AS ASSIGNMENT; CREATE CAST (boolean AS citext) WITH FUNCTION citext(boolean) AS ASSIGNMENT; CREATE CAST (inet AS citext) WITH FUNCTION citext(inet) AS ASSIGNMENT;
-- -- Operator Functions. --
CREATE FUNCTION citext_eq( citext, citext )
RETURNS bool AS'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION citext_ne( citext, citext )
RETURNS bool AS'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION citext_lt( citext, citext )
RETURNS bool AS'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION citext_le( citext, citext )
RETURNS bool AS'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION citext_gt( citext, citext )
RETURNS bool AS'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION citext_ge( citext, citext )
RETURNS bool AS'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
-- -- Matching citext in string comparison functions. -- XXX TODO Ideally these would be implemented in C. --
CREATE FUNCTION regexp_match( citext, citext ) RETURNS TEXT[] AS $$ SELECT pg_catalog.regexp_match( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION regexp_match( citext, citext, text ) RETURNS TEXT[] AS $$ SELECT pg_catalog.regexp_match( $1::pg_catalog.text, $2::pg_catalog.text, CASEWHEN pg_catalog.strpos($3, 'c') = 0THEN $3 || 'i'ELSE $3 END );
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION regexp_matches( citext, citext ) RETURNS SETOF TEXT[] AS $$ SELECT pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE ROWS 1;
CREATE FUNCTION regexp_matches( citext, citext, text ) RETURNS SETOF TEXT[] AS $$ SELECT pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, CASEWHENpg_catalog.strpos($3, 'c') = 0THEN $3 || 'i'ELSE $3 END );
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE ROWS 10;
CREATE FUNCTION regexp_replace( citext, citext, text ) returns TEXT AS $$ SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, $2::pg_catalog.text, $3, 'i');
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION regexp_replace( citext, citext, text, text ) returns TEXT AS $$ SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, $2::pg_catalog.text, $3, CASEWHEN pg_catalog.strpos($4, 'c') = 0THEN $4 || 'i'ELSE $4 END);
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION regexp_split_to_array( citext, citext ) RETURNS TEXT[] AS $$ SELECT pg_catalog.regexp_split_to_array( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION regexp_split_to_array( citext, citext, text ) RETURNS TEXT[] AS $$ SELECT pg_catalog.regexp_split_to_array( $1::pg_catalog.text, $2::pg_catalog.text, CASEWHEN pg_catalog.strpos($3, 'c') = 0THEN $3 || 'i'ELSE $3 END );
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION regexp_split_to_table( citext, citext ) RETURNS SETOF TEXT AS $$ SELECT pg_catalog.regexp_split_to_table( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
CREATE FUNCTION regexp_split_to_table( citext, citext, text ) RETURNS SETOF TEXT AS $$ SELECT pg_catalog.regexp_split_to_table( $1::pg_catalog.text, $2::pg_catalog.text, CASEWHEN pg_catalog.strpos($3, 'c') = 0THEN $3 || 'i'ELSE $3 END );
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.