From 2e2d56fea97f43cf8c40a87143bc10356e4ed4d4 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 9 Feb 2011 23:26:48 +0200 Subject: Information schema views for collation support Add the views character_sets, collations, and collation_character_set_applicability. --- src/backend/catalog/information_schema.sql | 43 +++++++++++++++++++++++++++--- src/include/catalog/catversion.h | 2 +- 2 files changed, 41 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/backend/catalog/information_schema.sql b/src/backend/catalog/information_schema.sql index 5b8b9417701..e81a3bb40df 100644 --- a/src/backend/catalog/information_schema.sql +++ b/src/backend/catalog/information_schema.sql @@ -354,7 +354,23 @@ GRANT SELECT ON attributes TO PUBLIC; * CHARACTER_SETS view */ --- feature not supported +CREATE VIEW character_sets AS + SELECT CAST(null AS sql_identifier) AS character_set_catalog, + CAST(null AS sql_identifier) AS character_set_schema, + CAST(getdatabaseencoding() AS sql_identifier) AS character_set_name, + CAST(CASE WHEN getdatabaseencoding() = 'UTF8' THEN 'UCS' ELSE getdatabaseencoding() END AS sql_identifier) AS character_repertoire, + CAST(getdatabaseencoding() AS sql_identifier) AS form_of_use, + CAST(current_database() AS sql_identifier) AS default_collate_catalog, + CAST(nc.nspname AS sql_identifier) AS default_collate_schema, + CAST(c.collname AS sql_identifier) AS default_collate_name + FROM pg_database d + LEFT JOIN (pg_collation c JOIN pg_namespace nc ON (c.collnamespace = nc.oid)) + ON (datcollate = collcollate AND datctype = collctype) + WHERE d.datname = current_database() + ORDER BY char_length(c.collname) DESC, c.collname ASC -- prefer full/canonical name + LIMIT 1; + +GRANT SELECT ON character_sets TO PUBLIC; /* @@ -425,14 +441,35 @@ GRANT SELECT ON check_constraints TO PUBLIC; * COLLATIONS view */ --- feature not supported +CREATE VIEW collations AS + SELECT CAST(current_database() AS sql_identifier) AS collation_catalog, + CAST(nc.nspname AS sql_identifier) AS collation_schema, + CAST(c.collname AS sql_identifier) AS collation_name, + CAST('NO PAD' AS character_data) AS pad_attribute + FROM pg_collation c, pg_namespace nc + WHERE c.collnamespace = nc.oid + AND collencoding = (SELECT encoding FROM pg_catalog.pg_database WHERE datname = pg_catalog.current_database()); + +GRANT SELECT ON collations TO PUBLIC; + /* * 5.16 * COLLATION_CHARACTER_SET_APPLICABILITY view */ --- feature not supported +CREATE VIEW collation_character_set_applicability AS + SELECT CAST(current_database() AS sql_identifier) AS collation_catalog, + CAST(nc.nspname AS sql_identifier) AS collation_schema, + CAST(c.collname AS sql_identifier) AS collation_name, + CAST(null AS sql_identifier) AS character_set_catalog, + CAST(null AS sql_identifier) AS character_set_schema, + CAST(getdatabaseencoding() AS sql_identifier) AS character_set_name + FROM pg_collation c, pg_namespace nc + WHERE c.collnamespace = nc.oid + AND collencoding = (SELECT encoding FROM pg_catalog.pg_database WHERE datname = pg_catalog.current_database()); + +GRANT SELECT ON collation_character_set_applicability TO PUBLIC; /* diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 019cd8fab5a..18739adb391 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 201102084 +#define CATALOG_VERSION_NO 201102091 #endif -- cgit v1.2.3