4
4
*
5
5
* Copyright (c) 2003-2005, PostgreSQL Global Development Group
6
6
*
7
- * $PostgreSQL: pgsql/src/backend/catalog/information_schema.sql,v 1.27 2005/03/29 00:16:56 tgl Exp $
7
+ * $PostgreSQL: pgsql/src/backend/catalog/information_schema.sql,v 1.28 2005/05/31 03:36:24 tgl Exp $
8
8
*/
9
9
10
10
/*
@@ -30,22 +30,14 @@ SET search_path TO information_schema, public;
30
30
* A few supporting functions first ...
31
31
*/
32
32
33
- /* Expand an oidvector or smallint[] into a set with integers 1..N*/
34
- CREATE TYPE _pg_expandoidvector_type AS (ooid , nint );
35
-
36
- CREATE FUNCTION _pg_expandoidvector (oidvector)
37
- RETURNS SETOF _pg_expandoidvector_type
33
+ /* Expand any 1-D array into a set with integers 1..N*/
34
+ CREATE FUNCTION _pg_expandarray (IN anyarray, OUT x anyelement, OUT nint )
35
+ RETURNS SETOF RECORD
38
36
LANGUAGE sql STRICT IMMUTABLE
39
- AS ' select $1[s], s+1
40
- from generate_series(0,array_upper($1,1),1) as g(s)' ;
41
-
42
- CREATE TYPE _pg_expandsmallint_type AS (ismallint , nint );
43
-
44
- CREATE FUNCTION _pg_expandsmallint (smallint [])
45
- RETURNS SETOF _pg_expandsmallint_type
46
- LANGUAGE sql STRICT IMMUTABLE
47
- AS ' select $1[s], s
48
- from generate_series(1,array_upper($1,1),1) as g(s)' ;
37
+ AS ' select $1[s], s - pg_catalog.array_lower($1,1) + 1
38
+ from pg_catalog.generate_series(pg_catalog.array_lower($1,1),
39
+ pg_catalog.array_upper($1,1),
40
+ 1) as g(s)' ;
49
41
50
42
CREATE FUNCTION _pg_keyissubset (smallint [],smallint []) RETURNSboolean
51
43
LANGUAGE sql
@@ -727,7 +719,7 @@ CREATE VIEW key_column_usage AS
727
719
FROM pg_attribute a,
728
720
(SELECT r .oid ,nc .nspname AS nc_nspname,c .conname ,
729
721
nr .nspname AS nr_nspname,r .relname ,
730
- _pg_expandsmallint (c .conkey )AS x
722
+ _pg_expandarray (c .conkey )AS x
731
723
FROM pg_namespace nr, pg_class r, pg_namespace nc,
732
724
pg_constraint c, pg_user u
733
725
WHERE nr .oid = r .relnamespace
@@ -738,7 +730,7 @@ CREATE VIEW key_column_usage AS
738
730
AND r .relowner = u .usesysid
739
731
AND u .usename = current_user )AS ss
740
732
WHERE ss .oid = a .attrelid
741
- AND a .attnum = (ss .x ).i
733
+ AND a .attnum = (ss .x ).x
742
734
AND NOTa .attisdropped ;
743
735
744
736
GRANT SELECT ON key_column_usage TO PUBLIC;
@@ -754,7 +746,12 @@ CREATE VIEW parameters AS
754
746
CAST(n_nspnameAS sql_identifier)AS specific_schema,
755
747
CAST(proname|| ' _' || CAST(p_oidAS text )AS sql_identifier)AS specific_name,
756
748
CAST((ss .x ).nAS cardinal_number)AS ordinal_position,
757
- CAST(' IN' AS character_data)AS parameter_mode,
749
+ CAST(
750
+ CASE WHEN proargmodes ISNULL THEN' IN'
751
+ WHEN proargmodes[(ss .x ).n]= ' i' THEN' IN'
752
+ WHEN proargmodes[(ss .x ).n]= ' o' THEN' OUT'
753
+ WHEN proargmodes[(ss .x ).n]= ' b' THEN' INOUT'
754
+ ENDAS character_data)AS parameter_mode,
758
755
CAST(' NO' AS character_data)AS is_result,
759
756
CAST(' NO' AS character_data)AS as_locator,
760
757
CAST(NULLIF(proargnames[(ss .x ).n],' ' )AS sql_identifier)AS parameter_name,
@@ -788,13 +785,14 @@ CREATE VIEW parameters AS
788
785
789
786
FROM pg_type t, pg_namespace nt,
790
787
(SELECT n .nspname AS n_nspname,p .proname ,p .oid AS p_oid,
791
- p .proargnames , _pg_expandoidvector(p .proargtypes )AS x
788
+ p .proargnames ,p .proargmodes ,
789
+ _pg_expandarray(coalesce(p .proallargtypes ,p .proargtypes ::oid []))AS x
792
790
FROM pg_namespace n, pg_proc p, pg_user u
793
791
WHERE n .oid = p .pronamespace
794
792
AND p .proowner = u .usesysid
795
793
AND (u .usename = current_user OR
796
794
has_function_privilege(p .oid ,' EXECUTE' )))AS ss
797
- WHERE t .oid = (ss .x ).o AND t .typnamespace = nt .oid ;
795
+ WHERE t .oid = (ss .x ).x AND t .typnamespace = nt .oid ;
798
796
799
797
GRANT SELECT ON parameters TO PUBLIC;
800
798
@@ -1718,9 +1716,9 @@ CREATE VIEW element_types AS
1718
1716
1719
1717
/* parameters*/
1720
1718
SELECT pronamespace, CAST(proname|| ' _' || CAST(oid AS text )AS sql_identifier),
1721
- ' ROUTINE' ::text , (ss .x ).n, (ss .x ).o
1719
+ ' ROUTINE' ::text , (ss .x ).n, (ss .x ).x
1722
1720
FROM (SELECT p .pronamespace ,p .proname ,p .oid ,
1723
- _pg_expandoidvector( p . proargtypes )AS x
1721
+ _pg_expandarray(coalesce( p . proallargtypes , p . proargtypes :: oid []) )AS x
1724
1722
FROM pg_proc p)AS ss
1725
1723
1726
1724
UNION ALL