Added new group of read-only GUC variables to allow simple access
authorJoe Conway <mail@joeconway.com>
Wed, 3 Dec 2003 18:52:00 +0000 (18:52 +0000)
committerJoe Conway <mail@joeconway.com>
Wed, 3 Dec 2003 18:52:00 +0000 (18:52 +0000)
to certain compile-time options (FUNC_MAX_ARGS, INDEX_MAX_KEYS,
NAMEDATALEN, BLCKSZ, HAVE_INT64_TIMESTAMP). Also added "category",
"short_desc", and "extra_desc" to the pg_settings view. Per recent
discussion here:
http://archives.postgresql.org/pgsql-patches/2003-11/msg00363.php

src/backend/catalog/system_views.sql
src/backend/utils/misc/guc.c
src/include/utils/guc_tables.h
src/test/regress/expected/rules.out

index 0149fed03d60b95db2974d9f4c65542bb57de3d9..21f986ebfaa6a96e3f30877f661a1f7dfd20bd6d 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright 1996-2003, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/backend/catalog/system_views.sql,v 1.3 2003/11/29 22:39:40 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/catalog/system_views.sql,v 1.4 2003/12/03 18:52:00 joe Exp $
  */
 
 CREATE VIEW pg_user AS 
@@ -260,8 +260,8 @@ CREATE VIEW pg_locks AS
 CREATE VIEW pg_settings AS 
     SELECT * 
     FROM pg_show_all_settings() AS A 
-    (name text, setting text, context text, vartype text, 
-     source text, min_val text, max_val text);
+    (name text, setting text, category text, short_desc text, extra_desc text,
+     context text, vartype text, source text, min_val text, max_val text);
 
 CREATE RULE pg_settings_u AS 
     ON UPDATE TO pg_settings 
index 18cd7e147e7ca4aa2562624d1488aeb971303fb6..705dd166e4a0ceb830e4d76a73fec7c228beaf24 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.174 2003/12/01 22:08:00 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.175 2003/12/03 18:52:00 joe Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -158,7 +158,11 @@ static char *server_version_string;
 static char *session_authorization_string;
 static char *timezone_string;
 static char *XactIsoLevel_string;
-
+static int     max_function_args;
+static int     max_index_keys;
+static int     max_identifier_length;
+static int     block_size;
+static bool integer_datetimes;
 
 /* Macros for freeing malloc'd pointers only if appropriate to do so */
 /* Some of these tests are probably redundant, but be safe ... */
@@ -304,6 +308,8 @@ const char *const config_group_names[] =
        gettext_noop("Version and Platform Compatibility / Other Platforms and Clients"),
        /* DEVELOPER_OPTIONS */
        gettext_noop("Developer Options"),
+       /* COMPILE_OPTIONS */
+       gettext_noop("Compiled-in Options"),
        /* help_config wants this array to be null-terminated */
        NULL
 };
@@ -842,6 +848,20 @@ static struct config_bool ConfigureNamesBool[] =
                true, NULL, NULL
        },
 
+       {
+               {"integer_datetimes", PGC_INTERNAL, COMPILE_OPTIONS,
+                       gettext_noop("Datetimes are integer based"),
+                       NULL,
+                       GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+               },
+               &integer_datetimes,
+#ifdef HAVE_INT64_TIMESTAMP
+               true, NULL, NULL
+#else
+               false, NULL, NULL
+#endif
+       },
+
        /* End-of-list marker */
        {
                {NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL
@@ -1238,6 +1258,46 @@ static struct config_int ConfigureNamesInt[] =
                100, 1, 1000, NULL, NULL
        },
 
+       {
+               {"max_function_args", PGC_INTERNAL, COMPILE_OPTIONS,
+                       gettext_noop("Shows the maximum number of function arguments"),
+                       NULL,
+                       GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+               },
+               &max_function_args,
+               FUNC_MAX_ARGS, FUNC_MAX_ARGS, FUNC_MAX_ARGS, NULL, NULL
+       },
+
+       {
+               {"max_index_keys", PGC_INTERNAL, COMPILE_OPTIONS,
+                       gettext_noop("Shows the maximum number of index keys"),
+                       NULL,
+                       GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+               },
+               &max_index_keys,
+               INDEX_MAX_KEYS, INDEX_MAX_KEYS, INDEX_MAX_KEYS, NULL, NULL
+       },
+
+       {
+               {"max_identifier_length", PGC_INTERNAL, COMPILE_OPTIONS,
+                       gettext_noop("Shows the maximum identifier length"),
+                       NULL,
+                       GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+               },
+               &max_identifier_length,
+               NAMEDATALEN - 1, NAMEDATALEN - 1, NAMEDATALEN - 1, NULL, NULL
+       },
+
+       {
+               {"block_size", PGC_INTERNAL, COMPILE_OPTIONS,
+                       gettext_noop("Shows size of a disk block"),
+                       NULL,
+                       GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+               },
+               &block_size,
+               BLCKSZ, BLCKSZ, BLCKSZ, NULL, NULL
+       },
+
        /* End-of-list marker */
        {
                {NULL, 0, 0, NULL, NULL}, NULL, 0, 0, 0, NULL, NULL
@@ -3478,14 +3538,23 @@ GetConfigOptionByNum(int varnum, const char **values, bool *noshow)
        /* setting : use _ShowOption in order to avoid duplicating the logic */
        values[1] = _ShowOption(conf);
 
+       /* group */
+       values[2] = config_group_names[conf->group];
+
+       /* short_desc */
+       values[3] = conf->short_desc;
+
+       /* extra_desc */
+       values[4] = conf->long_desc;
+
        /* context */
-       values[2] = GucContext_Names[conf->context];
+       values[5] = GucContext_Names[conf->context];
 
        /* vartype */
-       values[3] = config_type_names[conf->vartype];
+       values[6] = config_type_names[conf->vartype];
 
        /* source */
-       values[4] = GucSource_Names[conf->source];
+       values[7] = GucSource_Names[conf->source];
 
        /* now get the type specifc attributes */
        switch (conf->vartype)
@@ -3493,10 +3562,10 @@ GetConfigOptionByNum(int varnum, const char **values, bool *noshow)
                case PGC_BOOL:
                        {
                                /* min_val */
-                               values[5] = NULL;
+                               values[8] = NULL;
 
                                /* max_val */
-                               values[6] = NULL;
+                               values[9] = NULL;
                        }
                        break;
 
@@ -3506,11 +3575,11 @@ GetConfigOptionByNum(int varnum, const char **values, bool *noshow)
 
                                /* min_val */
                                snprintf(buffer, sizeof(buffer), "%d", lconf->min);
-                               values[5] = pstrdup(buffer);
+                               values[8] = pstrdup(buffer);
 
                                /* max_val */
                                snprintf(buffer, sizeof(buffer), "%d", lconf->max);
-                               values[6] = pstrdup(buffer);
+                               values[9] = pstrdup(buffer);
                        }
                        break;
 
@@ -3520,21 +3589,21 @@ GetConfigOptionByNum(int varnum, const char **values, bool *noshow)
 
                                /* min_val */
                                snprintf(buffer, sizeof(buffer), "%g", lconf->min);
-                               values[5] = pstrdup(buffer);
+                               values[8] = pstrdup(buffer);
 
                                /* max_val */
                                snprintf(buffer, sizeof(buffer), "%g", lconf->max);
-                               values[6] = pstrdup(buffer);
+                               values[9] = pstrdup(buffer);
                        }
                        break;
 
                case PGC_STRING:
                        {
                                /* min_val */
-                               values[5] = NULL;
+                               values[8] = NULL;
 
                                /* max_val */
-                               values[6] = NULL;
+                               values[9] = NULL;
                        }
                        break;
 
@@ -3546,10 +3615,10 @@ GetConfigOptionByNum(int varnum, const char **values, bool *noshow)
                                 */
 
                                /* min_val */
-                               values[5] = NULL;
+                               values[8] = NULL;
 
                                /* max_val */
-                               values[6] = NULL;
+                               values[9] = NULL;
                        }
                        break;
        }
@@ -3592,7 +3661,7 @@ show_config_by_name(PG_FUNCTION_ARGS)
  * show_all_settings - equiv to SHOW ALL command but implemented as
  * a Table Function.
  */
-#define NUM_PG_SETTINGS_ATTS   7
+#define NUM_PG_SETTINGS_ATTS   10
 
 Datum
 show_all_settings(PG_FUNCTION_ARGS)
@@ -3626,15 +3695,21 @@ show_all_settings(PG_FUNCTION_ARGS)
                                                   TEXTOID, -1, 0, false);
                TupleDescInitEntry(tupdesc, (AttrNumber) 2, "setting",
                                                   TEXTOID, -1, 0, false);
-               TupleDescInitEntry(tupdesc, (AttrNumber) 3, "context",
+               TupleDescInitEntry(tupdesc, (AttrNumber) 3, "category",
+                                                  TEXTOID, -1, 0, false);
+               TupleDescInitEntry(tupdesc, (AttrNumber) 4, "short_desc",
+                                                  TEXTOID, -1, 0, false);
+               TupleDescInitEntry(tupdesc, (AttrNumber) 5, "extra_desc",
+                                                  TEXTOID, -1, 0, false);
+               TupleDescInitEntry(tupdesc, (AttrNumber) 6, "context",
                                                   TEXTOID, -1, 0, false);
-               TupleDescInitEntry(tupdesc, (AttrNumber) 4, "vartype",
+               TupleDescInitEntry(tupdesc, (AttrNumber) 7, "vartype",
                                                   TEXTOID, -1, 0, false);
-               TupleDescInitEntry(tupdesc, (AttrNumber) 5, "source",
+               TupleDescInitEntry(tupdesc, (AttrNumber) 8, "source",
                                                   TEXTOID, -1, 0, false);
-               TupleDescInitEntry(tupdesc, (AttrNumber) 6, "min_val",
+               TupleDescInitEntry(tupdesc, (AttrNumber) 9, "min_val",
                                                   TEXTOID, -1, 0, false);
-               TupleDescInitEntry(tupdesc, (AttrNumber) 7, "max_val",
+               TupleDescInitEntry(tupdesc, (AttrNumber) 10, "max_val",
                                                   TEXTOID, -1, 0, false);
 
                /* allocate a slot for a tuple with this tupdesc */
index e0fad72b68f38b41955ce47c086a0e91ffa87aff..c596e964eba403c2f1369aad458b1964fb4fe6d4 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  *
- *       $PostgreSQL: pgsql/src/include/utils/guc_tables.h,v 1.7 2003/11/29 22:41:15 pgsql Exp $
+ *       $PostgreSQL: pgsql/src/include/utils/guc_tables.h,v 1.8 2003/12/03 18:52:00 joe Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -50,7 +50,8 @@ enum config_group
        COMPAT_OPTIONS,
        COMPAT_OPTIONS_PREVIOUS,
        COMPAT_OPTIONS_CLIENT,
-       DEVELOPER_OPTIONS
+       DEVELOPER_OPTIONS,
+       COMPILE_OPTIONS
 };
 
 /*
index ae7d0feea6343e2caa4fef4d5f39600b625c5fa5..f6a98527fda1ccd3ab38d795fe9f8546749fe3a7 100644 (file)
@@ -1278,7 +1278,7 @@ SELECT viewname, definition FROM pg_views WHERE schemaname <> 'information_schem
  pg_indexes               | SELECT n.nspname AS schemaname, c.relname AS tablename, i.relname AS indexname, pg_get_indexdef(i.oid) AS indexdef FROM (((pg_index x JOIN pg_class c ON ((c.oid = x.indrelid))) JOIN pg_class i ON ((i.oid = x.indexrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE ((c.relkind = 'r'::"char") AND (i.relkind = 'i'::"char"));
  pg_locks                 | SELECT l.relation, l."database", l."transaction", l.pid, l."mode", l.granted FROM pg_lock_status() l(relation oid, "database" oid, "transaction" xid, pid integer, "mode" text, granted boolean);
  pg_rules                 | SELECT n.nspname AS schemaname, c.relname AS tablename, r.rulename, pg_get_ruledef(r.oid) AS definition FROM ((pg_rewrite r JOIN pg_class c ON ((c.oid = r.ev_class))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (r.rulename <> '_RETURN'::name);
- pg_settings              | SELECT a.name, a.setting, a.context, a.vartype, a.source, a.min_val, a.max_val FROM pg_show_all_settings() a(name text, setting text, context text, vartype text, source text, min_val text, max_val text);
+ pg_settings              | SELECT a.name, a.setting, a.category, a.short_desc, a.extra_desc, a.context, a.vartype, a.source, a.min_val, a.max_val FROM pg_show_all_settings() a(name text, setting text, category text, short_desc text, extra_desc text, context text, vartype text, source text, min_val text, max_val text);
  pg_stat_activity         | SELECT d.oid AS datid, d.datname, pg_stat_get_backend_pid(s.backendid) AS procpid, pg_stat_get_backend_userid(s.backendid) AS usesysid, u.usename, pg_stat_get_backend_activity(s.backendid) AS current_query, pg_stat_get_backend_activity_start(s.backendid) AS query_start FROM pg_database d, (SELECT pg_stat_get_backend_idset() AS backendid) s, pg_shadow u WHERE ((pg_stat_get_backend_dbid(s.backendid) = d.oid) AND (pg_stat_get_backend_userid(s.backendid) = u.usesysid));
  pg_stat_all_indexes      | SELECT c.oid AS relid, i.oid AS indexrelid, n.nspname AS schemaname, c.relname, i.relname AS indexrelname, pg_stat_get_numscans(i.oid) AS idx_scan, pg_stat_get_tuples_returned(i.oid) AS idx_tup_read, pg_stat_get_tuples_fetched(i.oid) AS idx_tup_fetch FROM (((pg_class c JOIN pg_index x ON ((c.oid = x.indrelid))) JOIN pg_class i ON ((i.oid = x.indexrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = 'r'::"char");
  pg_stat_all_tables       | SELECT c.oid AS relid, n.nspname AS schemaname, c.relname, pg_stat_get_numscans(c.oid) AS seq_scan, pg_stat_get_tuples_returned(c.oid) AS seq_tup_read, sum(pg_stat_get_numscans(i.indexrelid)) AS idx_scan, sum(pg_stat_get_tuples_fetched(i.indexrelid)) AS idx_tup_fetch, pg_stat_get_tuples_inserted(c.oid) AS n_tup_ins, pg_stat_get_tuples_updated(c.oid) AS n_tup_upd, pg_stat_get_tuples_deleted(c.oid) AS n_tup_del FROM ((pg_class c LEFT JOIN pg_index i ON ((c.oid = i.indrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = 'r'::"char") GROUP BY c.oid, n.nspname, c.relname;