Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit a00431b

Browse files
committed
"Information_schema" changes
- Add domain check constraints to "check_constraints" view - Create "domains" view - Create "domain_constraints" view -- Rod Taylor <rbt@rbt.ca>
1 parent 54ca7a7 commit a00431b

File tree

1 file changed

+132
-4
lines changed

1 file changed

+132
-4
lines changed

src/backend/catalog/information_schema.sql

Lines changed: 132 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*
55
* Copyright 2002, PostgreSQL Global Development Group
66
*
7-
* $Id: information_schema.sql,v 1.3 2003/01/15 23:37:27 petere Exp $
7+
* $Id: information_schema.sql,v 1.4 2003/03/20 05:06:55 momjian Exp $
88
*/
99

1010

@@ -76,9 +76,13 @@ CREATE VIEW check_constraints AS
7676
CAST(rs.nspname AS sql_identifier) AS constraint_schema,
7777
CAST(con.conname AS sql_identifier) AS constraint_name,
7878
CAST(con.consrc AS character_data) AS check_clause
79-
FROM pg_namespace rs, pg_class c, pg_constraint con, pg_user u
80-
WHERE rs.oid = c.relnamespace AND c.oid = con.conrelid
81-
AND c.relowner = u.usesysid AND u.usename = current_user
79+
FROM pg_namespace rs, pg_constraint con
80+
left outer join pg_class c on (c.oid = con.conrelid)
81+
left outer join pg_type t on (t.oid = con.contypid),
82+
pg_user u
83+
WHERE rs.oid = con.connamespace
84+
AND u.usesysid IN (c.relowner, t.typowner)
85+
AND u.usename = current_user
8286
AND con.contype = 'c';
8387

8488
GRANT SELECT ON check_constraints TO PUBLIC;
@@ -236,6 +240,130 @@ CREATE VIEW columns AS
236240
GRANT SELECT ON columns TO PUBLIC;
237241

238242

243+
/*
244+
* 20.24
245+
* DOMAIN_CONSTRAINTS view
246+
*/
247+
248+
CREATE VIEW domain_constraints AS
249+
SELECT CAST(current_database() AS sql_identifier) AS constraint_catalog,
250+
CAST(rs.nspname AS sql_identifier) AS constraint_schema,
251+
CAST(con.conname AS sql_identifier) AS constraint_name,
252+
CAST(current_database() AS sql_identifier) AS domain_catalog,
253+
CAST(n.nspname AS sql_identifier) AS domain_schema,
254+
CAST(t.typname AS sql_identifier) AS domain_name,
255+
CAST(CASE WHEN condeferrable THEN 'YES' ELSE 'NO' END
256+
AS character_data) AS is_deferrable,
257+
CAST(CASE WHEN condeferred THEN 'YES' ELSE 'NO' END
258+
AS character_data) AS initially_deferred
259+
FROM pg_namespace rs, pg_namespace n, pg_constraint con, pg_type t, pg_user u
260+
WHERE rs.oid = con.connamespace
261+
AND n.oid = t.typnamespace
262+
AND u.usesysid = t.typowner
263+
AND u.usename = current_user
264+
AND t.oid = con.contypid;
265+
266+
GRANT SELECT ON domain_constraints TO PUBLIC;
267+
268+
269+
/*
270+
* 20.26
271+
* DOMAINS view
272+
*/
273+
274+
CREATE VIEW domains AS
275+
SELECT CAST(current_database() AS sql_identifier) AS domain_catalog,
276+
CAST(rs.nspname AS sql_identifier) AS domain_schema,
277+
CAST(t.typname AS sql_identifier) AS domain_name,
278+
CAST(format_type(t.typbasetype, null) AS character_data)
279+
AS data_type,
280+
281+
CAST(
282+
CASE WHEN t.typbasetype IN (25, 1042, 1043, 1560, 1562) AND t.typtypmod <> -1
283+
THEN t.typtypmod - 4
284+
ELSE null END
285+
AS cardinal_number)
286+
AS character_maximum_length,
287+
288+
CAST(
289+
CASE WHEN t.typbasetype IN (25, 1042, 1043) THEN 2^30 ELSE null END
290+
AS cardinal_number)
291+
AS character_octet_length,
292+
CAST(null AS sql_identifier) AS character_set_catalog,
293+
CAST(null AS sql_identifier) AS character_set_schema,
294+
CAST(null AS sql_identifier) AS character_set_name,
295+
296+
CAST(null AS sql_identifier) AS collation_catalog,
297+
CAST(null AS sql_identifier) AS collation_schema,
298+
CAST(null AS sql_identifier) AS collation_name,
299+
300+
CAST(
301+
CASE WHEN t.typbasetype IN (1700) THEN ((t.typtypmod - 4) >> 16) & 65535 ELSE null END
302+
AS cardinal_number)
303+
AS numeric_precision,
304+
305+
CAST(
306+
CASE WHEN t.typbasetype IN (1700) THEN 10 ELSE null END
307+
AS cardinal_number)
308+
AS numeric_precision_radix,
309+
310+
CAST(
311+
CASE WHEN t.typbasetype IN (1700) THEN (t.typtypmod - 4) & 65535 ELSE null END
312+
AS cardinal_number)
313+
AS numeric_scale,
314+
315+
CAST(
316+
CASE WHEN t.typbasetype IN (1083, 1114, 1184, 1266)
317+
THEN (CASE WHEN t.typtypmod <> -1 THEN t.typtypmod ELSE null END)
318+
WHEN t.typbasetype IN (1186)
319+
THEN (CASE WHEN t.typtypmod <> -1 THEN t.typtypmod & 65535 ELSE null END)
320+
ELSE null END
321+
AS cardinal_number)
322+
AS datetime_precision,
323+
324+
CAST(null AS character_data) AS interval_type, -- XXX
325+
CAST(null AS character_data) AS interval_precision, -- XXX
326+
327+
CAST(typdefault AS character_data) AS domain_default,
328+
329+
CAST(CASE WHEN t.typbasetype = 0 THEN current_database() ELSE null END
330+
AS sql_identifier) AS udt_catalog,
331+
CAST(CASE WHEN t.typbasetype = 0 THEN rs.nspname ELSE null END
332+
AS sql_identifier) AS udt_schema,
333+
CAST(CASE WHEN t.typbasetype = 0 THEN t.typname ELSE null END
334+
AS sql_identifier) AS udt_name,
335+
336+
CAST(null AS sql_identifier) AS scope_catalog,
337+
CAST(null AS sql_identifier) AS scope_schema,
338+
CAST(null AS sql_identifier) AS scope_name,
339+
340+
CAST(null AS cardinal_number) AS maximum_cardinality,
341+
CAST(null AS sql_identifier) AS dtd_identifier
342+
343+
FROM pg_namespace rs,
344+
pg_type t,
345+
pg_user u
346+
347+
WHERE rs.oid = t.typnamespace
348+
AND t.typtype = 'd'
349+
AND t.typowner = u.usesysid
350+
AND (u.usename = CURRENT_USER
351+
OR EXISTS (SELECT 1
352+
FROM pg_user AS u2
353+
WHERE rs.nspowner = u2.usesysid
354+
AND u2.usename = CURRENT_USER)
355+
OR EXISTS (SELECT 1
356+
FROM pg_user AS u3,
357+
pg_attribute AS a3,
358+
pg_class AS c3
359+
WHERE u3.usesysid = c3.relowner
360+
AND a3.attrelid = c3.oid
361+
AND a3.atttypid = t.oid));
362+
363+
364+
GRANT SELECT ON domains TO PUBLIC;
365+
366+
239367
/*
240368
* 20.35
241369
* REFERENTIAL_CONSTRAINTS view

0 commit comments

Comments
 (0)