diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/catalog/information_schema.sql | 48 | ||||
-rw-r--r-- | src/backend/catalog/system_functions.sql | 350 |
2 files changed, 338 insertions, 60 deletions
diff --git a/src/backend/catalog/information_schema.sql b/src/backend/catalog/information_schema.sql index 941a9f664c9..0f2c1833e9f 100644 --- a/src/backend/catalog/information_schema.sql +++ b/src/backend/catalog/information_schema.sql @@ -43,7 +43,8 @@ SET search_path TO information_schema; CREATE FUNCTION _pg_expandarray(IN anyarray, OUT x anyelement, OUT n int) RETURNS SETOF RECORD LANGUAGE sql STRICT IMMUTABLE PARALLEL SAFE - AS 'select $1[s], s - pg_catalog.array_lower($1,1) + 1 + AS 'select $1[s], + s operator(pg_catalog.-) pg_catalog.array_lower($1,1) operator(pg_catalog.+) 1 from pg_catalog.generate_series(pg_catalog.array_lower($1,1), pg_catalog.array_upper($1,1), 1) as g(s)'; @@ -52,28 +53,26 @@ CREATE FUNCTION _pg_expandarray(IN anyarray, OUT x anyelement, OUT n int) * column's position in the index (NULL if not there) */ CREATE FUNCTION _pg_index_position(oid, smallint) RETURNS int LANGUAGE sql STRICT STABLE - AS $$ +BEGIN ATOMIC SELECT (ss.a).n FROM (SELECT information_schema._pg_expandarray(indkey) AS a FROM pg_catalog.pg_index WHERE indexrelid = $1) ss WHERE (ss.a).x = $2; -$$; +END; CREATE FUNCTION _pg_truetypid(pg_attribute, pg_type) RETURNS oid LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT CASE WHEN $2.typtype = 'd' THEN $2.typbasetype ELSE $1.atttypid END$$; +RETURN CASE WHEN $2.typtype = 'd' THEN $2.typbasetype ELSE $1.atttypid END; CREATE FUNCTION _pg_truetypmod(pg_attribute, pg_type) RETURNS int4 LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT CASE WHEN $2.typtype = 'd' THEN $2.typtypmod ELSE $1.atttypmod END$$; +RETURN CASE WHEN $2.typtype = 'd' THEN $2.typtypmod ELSE $1.atttypmod END; -- these functions encapsulate knowledge about the encoding of typmod: @@ -82,8 +81,7 @@ CREATE FUNCTION _pg_char_max_length(typid oid, typmod int4) RETURNS integer IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $2 = -1 /* default typmod */ THEN null WHEN $1 IN (1042, 1043) /* char, varchar */ @@ -91,15 +89,14 @@ $$SELECT WHEN $1 IN (1560, 1562) /* bit, varbit */ THEN $2 ELSE null - END$$; + END; CREATE FUNCTION _pg_char_octet_length(typid oid, typmod int4) RETURNS integer LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $1 IN (25, 1042, 1043) /* text, char, varchar */ THEN CASE WHEN $2 = -1 /* default typmod */ THEN CAST(2^30 AS integer) @@ -107,15 +104,14 @@ $$SELECT pg_catalog.pg_encoding_max_length((SELECT encoding FROM pg_catalog.pg_database WHERE datname = pg_catalog.current_database())) END ELSE null - END$$; + END; CREATE FUNCTION _pg_numeric_precision(typid oid, typmod int4) RETURNS integer LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE $1 WHEN 21 /*int2*/ THEN 16 WHEN 23 /*int4*/ THEN 32 @@ -128,27 +124,25 @@ $$SELECT WHEN 700 /*float4*/ THEN 24 /*FLT_MANT_DIG*/ WHEN 701 /*float8*/ THEN 53 /*DBL_MANT_DIG*/ ELSE null - END$$; + END; CREATE FUNCTION _pg_numeric_precision_radix(typid oid, typmod int4) RETURNS integer LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $1 IN (21, 23, 20, 700, 701) THEN 2 WHEN $1 IN (1700) THEN 10 ELSE null - END$$; + END; CREATE FUNCTION _pg_numeric_scale(typid oid, typmod int4) RETURNS integer LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $1 IN (21, 23, 20) THEN 0 WHEN $1 IN (1700) THEN CASE WHEN $2 = -1 @@ -156,15 +150,14 @@ $$SELECT ELSE ($2 - 4) & 65535 END ELSE null - END$$; + END; CREATE FUNCTION _pg_datetime_precision(typid oid, typmod int4) RETURNS integer LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $1 IN (1082) /* date */ THEN 0 WHEN $1 IN (1083, 1114, 1184, 1266) /* time, timestamp, same + tz */ @@ -172,19 +165,18 @@ $$SELECT WHEN $1 IN (1186) /* interval */ THEN CASE WHEN $2 < 0 OR $2 & 65535 = 65535 THEN 6 ELSE $2 & 65535 END ELSE null - END$$; + END; CREATE FUNCTION _pg_interval_type(typid oid, mod int4) RETURNS text LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $1 IN (1186) /* interval */ THEN pg_catalog.upper(substring(pg_catalog.format_type($1, $2) similar 'interval[()0-9]* #"%#"' escape '#')) ELSE null - END$$; + END; -- 5.2 INFORMATION_SCHEMA_CATALOG_NAME view appears later. diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql index d7ac7a926e4..1b2b37c1bf0 100644 --- a/src/backend/catalog/system_functions.sql +++ b/src/backend/catalog/system_functions.sql @@ -30,65 +30,351 @@ */ -CREATE FUNCTION ts_debug(IN config regconfig, IN document text, +CREATE OR REPLACE FUNCTION lpad(text, integer) + RETURNS text + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN lpad($1, $2, ' '); + +CREATE OR REPLACE FUNCTION rpad(text, integer) + RETURNS text + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN rpad($1, $2, ' '); + +CREATE OR REPLACE FUNCTION "substring"(text, text, text) + RETURNS text + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN substring($1, similar_to_escape($2, $3)); + +CREATE OR REPLACE FUNCTION bit_length(bit) + RETURNS integer + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN length($1); + +CREATE OR REPLACE FUNCTION bit_length(bytea) + RETURNS integer + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN octet_length($1) * 8; + +CREATE OR REPLACE FUNCTION bit_length(text) + RETURNS integer + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN octet_length($1) * 8; + +CREATE OR REPLACE FUNCTION log(numeric) + RETURNS numeric + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN log(10, $1); + +CREATE OR REPLACE FUNCTION log10(numeric) + RETURNS numeric + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN log(10, $1); + +CREATE OR REPLACE FUNCTION round(numeric) + RETURNS numeric + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN round($1, 0); + +CREATE OR REPLACE FUNCTION trunc(numeric) + RETURNS numeric + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN trunc($1, 0); + +CREATE OR REPLACE FUNCTION numeric_pl_pg_lsn(numeric, pg_lsn) + RETURNS pg_lsn + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION path_contain_pt(path, point) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN on_ppath($2, $1); + +CREATE OR REPLACE FUNCTION polygon(circle) + RETURNS polygon + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN polygon(12, $1); + +CREATE OR REPLACE FUNCTION age(timestamptz) + RETURNS interval + LANGUAGE sql + STABLE PARALLEL SAFE STRICT COST 1 +RETURN age(cast(current_date as timestamptz), $1); + +CREATE OR REPLACE FUNCTION age(timestamp) + RETURNS interval + LANGUAGE sql + STABLE PARALLEL SAFE STRICT COST 1 +RETURN age(cast(current_date as timestamp), $1); + +CREATE OR REPLACE FUNCTION date_part(text, date) + RETURNS double precision + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN date_part($1, cast($2 as timestamp)); + +CREATE OR REPLACE FUNCTION timestamptz(date, time) + RETURNS timestamptz + LANGUAGE sql + STABLE PARALLEL SAFE STRICT COST 1 +RETURN cast(($1 + $2) as timestamptz); + +CREATE OR REPLACE FUNCTION timedate_pl(time, date) + RETURNS timestamp + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION timetzdate_pl(timetz, date) + RETURNS timestamptz + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION interval_pl_time(interval, time) + RETURNS time + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION interval_pl_date(interval, date) + RETURNS timestamp + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION interval_pl_timetz(interval, timetz) + RETURNS timetz + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION interval_pl_timestamp(interval, timestamp) + RETURNS timestamp + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION interval_pl_timestamptz(interval, timestamptz) + RETURNS timestamptz + LANGUAGE sql + STABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION integer_pl_date(integer, date) + RETURNS date + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, timestamptz, + timestamptz, interval) + RETURNS boolean + LANGUAGE sql + STABLE PARALLEL SAFE COST 1 +RETURN ($1, $2) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, interval, + timestamptz, interval) + RETURNS boolean + LANGUAGE sql + STABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, interval, + timestamptz, timestamptz) + RETURNS boolean + LANGUAGE sql + STABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, $4); + +CREATE OR REPLACE FUNCTION "overlaps"(timestamp, timestamp, + timestamp, interval) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, $2) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(timestamp, interval, + timestamp, timestamp) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, $4); + +CREATE OR REPLACE FUNCTION "overlaps"(timestamp, interval, + timestamp, interval) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(time, interval, + time, interval) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(time, time, + time, interval) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, $2) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(time, interval, + time, time) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, $4); + +CREATE OR REPLACE FUNCTION int8pl_inet(bigint, inet) + RETURNS inet + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION xpath(text, xml) + RETURNS xml[] + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN xpath($1, $2, '{}'::text[]); + +CREATE OR REPLACE FUNCTION xpath_exists(text, xml) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN xpath_exists($1, $2, '{}'::text[]); + +CREATE OR REPLACE FUNCTION pg_sleep_for(interval) + RETURNS void + LANGUAGE sql + PARALLEL SAFE STRICT COST 1 +RETURN pg_sleep(extract(epoch from clock_timestamp() + $1) - + extract(epoch from clock_timestamp())); + +CREATE OR REPLACE FUNCTION pg_sleep_until(timestamptz) + RETURNS void + LANGUAGE sql + PARALLEL SAFE STRICT COST 1 +RETURN pg_sleep(extract(epoch from $1) - + extract(epoch from clock_timestamp())); + +CREATE OR REPLACE FUNCTION pg_relation_size(regclass) + RETURNS bigint + LANGUAGE sql + PARALLEL SAFE STRICT COST 1 +RETURN pg_relation_size($1, 'main'); + +CREATE OR REPLACE FUNCTION obj_description(oid, name) + RETURNS text + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC +select description from pg_description + where objoid = $1 and + classoid = (select oid from pg_class where relname = $2 and + relnamespace = 'pg_catalog'::regnamespace) and + objsubid = 0; +END; + +CREATE OR REPLACE FUNCTION shobj_description(oid, name) + RETURNS text + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC +select description from pg_shdescription + where objoid = $1 and + classoid = (select oid from pg_class where relname = $2 and + relnamespace = 'pg_catalog'::regnamespace); +END; + +CREATE OR REPLACE FUNCTION obj_description(oid) + RETURNS text + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC +select description from pg_description where objoid = $1 and objsubid = 0; +END; + +CREATE OR REPLACE FUNCTION col_description(oid, integer) + RETURNS text + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC +select description from pg_description + where objoid = $1 and classoid = 'pg_class'::regclass and objsubid = $2; +END; + +CREATE OR REPLACE FUNCTION ts_debug(config regconfig, document text, OUT alias text, OUT description text, OUT token text, OUT dictionaries regdictionary[], OUT dictionary regdictionary, OUT lexemes text[]) -RETURNS SETOF record AS -$$ -SELECT + RETURNS SETOF record + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC +select tt.alias AS alias, tt.description AS description, parse.token AS token, - ARRAY ( SELECT m.mapdict::pg_catalog.regdictionary - FROM pg_catalog.pg_ts_config_map AS m + ARRAY ( SELECT m.mapdict::regdictionary + FROM pg_ts_config_map AS m WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid ORDER BY m.mapseqno ) AS dictionaries, - ( SELECT mapdict::pg_catalog.regdictionary - FROM pg_catalog.pg_ts_config_map AS m + ( SELECT mapdict::regdictionary + FROM pg_ts_config_map AS m WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid - ORDER BY pg_catalog.ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno + ORDER BY ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno LIMIT 1 ) AS dictionary, - ( SELECT pg_catalog.ts_lexize(mapdict, parse.token) - FROM pg_catalog.pg_ts_config_map AS m + ( SELECT ts_lexize(mapdict, parse.token) + FROM pg_ts_config_map AS m WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid - ORDER BY pg_catalog.ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno + ORDER BY ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno LIMIT 1 ) AS lexemes -FROM pg_catalog.ts_parse( - (SELECT cfgparser FROM pg_catalog.pg_ts_config WHERE oid = $1 ), $2 +FROM ts_parse( + (SELECT cfgparser FROM pg_ts_config WHERE oid = $1 ), $2 ) AS parse, - pg_catalog.ts_token_type( - (SELECT cfgparser FROM pg_catalog.pg_ts_config WHERE oid = $1 ) + ts_token_type( + (SELECT cfgparser FROM pg_ts_config WHERE oid = $1 ) ) AS tt -WHERE tt.tokid = parse.tokid -$$ -LANGUAGE SQL STRICT STABLE PARALLEL SAFE; +WHERE tt.tokid = parse.tokid; +END; -COMMENT ON FUNCTION ts_debug(regconfig,text) IS - 'debug function for text search configuration'; - -CREATE FUNCTION ts_debug(IN document text, +CREATE OR REPLACE FUNCTION ts_debug(document text, OUT alias text, OUT description text, OUT token text, OUT dictionaries regdictionary[], OUT dictionary regdictionary, OUT lexemes text[]) -RETURNS SETOF record AS -$$ - SELECT * FROM pg_catalog.ts_debug( pg_catalog.get_current_ts_config(), $1); -$$ -LANGUAGE SQL STRICT STABLE PARALLEL SAFE; - -COMMENT ON FUNCTION ts_debug(text) IS - 'debug function for current text search configuration'; - + RETURNS SETOF record + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC + SELECT * FROM ts_debug(get_current_ts_config(), $1); +END; CREATE OR REPLACE FUNCTION pg_start_backup(label text, fast boolean DEFAULT false, exclusive boolean DEFAULT true) |