summaryrefslogtreecommitdiff
path: root/src/bin/psql/describe.c
diff options
context:
space:
mode:
authorKevin Grittner2011-08-09 14:06:50 +0000
committerKevin Grittner2011-08-09 14:06:50 +0000
commit4ab003fa8692a7c88300435ccc864efd1cf5e896 (patch)
tree508aecca2f196e92970dc96225d10bac4d735947 /src/bin/psql/describe.c
parentcfa9d7f040ae1a9d1fe8fbf32b6a003d251a59f0 (diff)
parent77949a2913b3cbaa7b2e2a73f014d541e251f18b (diff)
Merge branch 'master' into bug6123bug6123
Diffstat (limited to 'src/bin/psql/describe.c')
-rw-r--r--src/bin/psql/describe.c129
1 files changed, 93 insertions, 36 deletions
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index a8d5ddc96c..f08f917501 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -2665,10 +2665,8 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
gettext_noop("Owner"));
appendPQExpBuffer(&buf,
- " l.lanpltrusted AS \"%s\",\n"
- " d.description AS \"%s\"",
- gettext_noop("Trusted"),
- gettext_noop("Description"));
+ " l.lanpltrusted AS \"%s\"",
+ gettext_noop("Trusted"));
if (verbose)
{
@@ -2686,10 +2684,12 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
}
appendPQExpBuffer(&buf,
+ ",\n d.description AS \"%s\""
"\nFROM pg_catalog.pg_language l\n"
"LEFT JOIN pg_catalog.pg_description d\n"
" ON d.classoid = l.tableoid AND d.objoid = l.oid\n"
- " AND d.objsubid = 0\n");
+ " AND d.objsubid = 0\n",
+ gettext_noop("Description"));
if (pattern)
processSQLNamePattern(pset.db, &buf, pattern, false, false,
@@ -2723,7 +2723,7 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
* Describes domains.
*/
bool
-listDomains(const char *pattern, bool showSystem)
+listDomains(const char *pattern, bool verbose, bool showSystem)
{
PQExpBufferData buf;
PGresult *res;
@@ -2746,17 +2746,30 @@ listDomains(const char *pattern, bool showSystem)
appendPQExpBuffer(&buf,
" CASE WHEN t.typnotnull THEN ' not null' ELSE '' END ||\n"
" CASE WHEN t.typdefault IS NOT NULL THEN ' default ' || t.typdefault ELSE '' END\n"
- " ) as \"%s\",\n",
- gettext_noop("Modifier"));
- appendPQExpBuffer(&buf,
+ " ) as \"%s\",\n"
" pg_catalog.array_to_string(ARRAY(\n"
" SELECT pg_catalog.pg_get_constraintdef(r.oid, true) FROM pg_catalog.pg_constraint r WHERE t.oid = r.contypid\n"
- " ), ' ') as \"%s\"\n"
- "FROM pg_catalog.pg_type t\n"
- " LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace\n"
- "WHERE t.typtype = 'd'\n",
+ " ), ' ') as \"%s\"",
+ gettext_noop("Modifier"),
gettext_noop("Check"));
+ if (verbose)
+ appendPQExpBuffer(&buf,
+ ",\n d.description as \"%s\"",
+ gettext_noop("Description"));
+
+ appendPQExpBuffer(&buf,
+ "\nFROM pg_catalog.pg_type t\n"
+ " LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace\n");
+
+ if (verbose)
+ appendPQExpBuffer(&buf,
+ " LEFT JOIN pg_catalog.pg_description d "
+ "ON d.classoid = t.tableoid AND d.objoid = t.oid "
+ "AND d.objsubid = 0\n");
+
+ appendPQExpBuffer(&buf, "WHERE t.typtype = 'd'\n");
+
if (!showSystem && !pattern)
appendPQExpBuffer(&buf, " AND n.nspname <> 'pg_catalog'\n"
" AND n.nspname <> 'information_schema'\n");
@@ -2788,7 +2801,7 @@ listDomains(const char *pattern, bool showSystem)
* Describes conversions.
*/
bool
-listConversions(const char *pattern, bool showSystem)
+listConversions(const char *pattern, bool verbose, bool showSystem)
{
PQExpBufferData buf;
PGresult *res;
@@ -2803,9 +2816,7 @@ listConversions(const char *pattern, bool showSystem)
" pg_catalog.pg_encoding_to_char(c.conforencoding) AS \"%s\",\n"
" pg_catalog.pg_encoding_to_char(c.contoencoding) AS \"%s\",\n"
" CASE WHEN c.condefault THEN '%s'\n"
- " ELSE '%s' END AS \"%s\"\n"
- "FROM pg_catalog.pg_conversion c, pg_catalog.pg_namespace n\n"
- "WHERE n.oid = c.connamespace\n",
+ " ELSE '%s' END AS \"%s\"",
gettext_noop("Schema"),
gettext_noop("Name"),
gettext_noop("Source"),
@@ -2813,9 +2824,28 @@ listConversions(const char *pattern, bool showSystem)
gettext_noop("yes"), gettext_noop("no"),
gettext_noop("Default?"));
+ if (verbose)
+ appendPQExpBuffer(&buf,
+ ",\n d.description AS \"%s\"",
+ gettext_noop("Description"));
+
+ appendPQExpBuffer(&buf,
+ "\nFROM pg_catalog.pg_conversion c\n"
+ " JOIN pg_catalog.pg_namespace n "
+ "ON n.oid = c.connamespace\n");
+
+ if (verbose)
+ appendPQExpBuffer(&buf,
+ "LEFT JOIN pg_catalog.pg_description d "
+ "ON d.classoid = c.tableoid\n"
+ " AND d.objoid = c.oid "
+ "AND d.objsubid = 0\n");
+
+ appendPQExpBuffer(&buf, "WHERE true\n");
+
if (!showSystem && !pattern)
- appendPQExpBuffer(&buf, " AND n.nspname <> 'pg_catalog'\n"
- " AND n.nspname <> 'information_schema'\n");
+ appendPQExpBuffer(&buf, " AND n.nspname <> 'pg_catalog'\n"
+ " AND n.nspname <> 'information_schema'\n");
processSQLNamePattern(pset.db, &buf, pattern, true, false,
"n.nspname", "c.conname", NULL,
@@ -3650,16 +3680,16 @@ listForeignDataWrappers(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
printfPQExpBuffer(&buf,
- "SELECT fdwname AS \"%s\",\n"
- " pg_catalog.pg_get_userbyid(fdwowner) AS \"%s\",\n",
+ "SELECT fdw.fdwname AS \"%s\",\n"
+ " pg_catalog.pg_get_userbyid(fdw.fdwowner) AS \"%s\",\n",
gettext_noop("Name"),
gettext_noop("Owner"));
if (pset.sversion >= 90100)
appendPQExpBuffer(&buf,
- " fdwhandler::pg_catalog.regproc AS \"%s\",\n",
+ " fdw.fdwhandler::pg_catalog.regproc AS \"%s\",\n",
gettext_noop("Handler"));
appendPQExpBuffer(&buf,
- " fdwvalidator::pg_catalog.regproc AS \"%s\"",
+ " fdw.fdwvalidator::pg_catalog.regproc AS \"%s\"",
gettext_noop("Validator"));
if (verbose)
@@ -3669,9 +3699,20 @@ listForeignDataWrappers(const char *pattern, bool verbose)
appendPQExpBuffer(&buf,
",\n fdwoptions AS \"%s\"",
gettext_noop("Options"));
+
+ if (pset.sversion >= 90100)
+ appendPQExpBuffer(&buf,
+ ",\n d.description AS \"%s\" ",
+ gettext_noop("Description"));
}
- appendPQExpBuffer(&buf, "\nFROM pg_catalog.pg_foreign_data_wrapper\n");
+ appendPQExpBuffer(&buf, "\nFROM pg_catalog.pg_foreign_data_wrapper fdw\n");
+
+ if (verbose && pset.sversion >= 90100)
+ appendPQExpBuffer(&buf,
+ "LEFT JOIN pg_catalog.pg_description d\n"
+ " ON d.classoid = fdw.tableoid "
+ "AND d.objoid = fdw.oid AND d.objsubid = 0\n");
processSQLNamePattern(pset.db, &buf, pattern, false, false,
NULL, "fdwname", NULL, NULL);
@@ -3729,16 +3770,24 @@ listForeignServers(const char *pattern, bool verbose)
",\n"
" s.srvtype AS \"%s\",\n"
" s.srvversion AS \"%s\",\n"
- " s.srvoptions AS \"%s\"",
+ " s.srvoptions AS \"%s\",\n"
+ " d.description AS \"%s\"",
gettext_noop("Type"),
gettext_noop("Version"),
- gettext_noop("Options"));
+ gettext_noop("Options"),
+ gettext_noop("Description"));
}
appendPQExpBuffer(&buf,
"\nFROM pg_catalog.pg_foreign_server s\n"
" JOIN pg_catalog.pg_foreign_data_wrapper f ON f.oid=s.srvfdw\n");
+ if (verbose)
+ appendPQExpBuffer(&buf,
+ "LEFT JOIN pg_description d\n "
+ "ON d.classoid = s.tableoid AND d.objoid = s.oid "
+ "AND d.objsubid = 0\n");
+
processSQLNamePattern(pset.db, &buf, pattern, false, false,
NULL, "s.srvname", NULL, NULL);
@@ -3842,18 +3891,26 @@ listForeignTables(const char *pattern, bool verbose)
if (verbose)
appendPQExpBuffer(&buf,
- ",\n ft.ftoptions AS \"%s\"",
- gettext_noop("Options"));
+ ",\n ft.ftoptions AS \"%s\",\n"
+ " d.description AS \"%s\"",
+ gettext_noop("Options"),
+ gettext_noop("Description"));
- appendPQExpBuffer(&buf, "\nFROM pg_catalog.pg_foreign_table ft,");
- appendPQExpBuffer(&buf, "\n pg_catalog.pg_class c,");
- appendPQExpBuffer(&buf, "\n pg_catalog.pg_namespace n,");
- appendPQExpBuffer(&buf, "\n pg_catalog.pg_foreign_server s\n");
- appendPQExpBuffer(&buf, "\nWHERE c.oid = ft.ftrelid");
- appendPQExpBuffer(&buf, "\nAND s.oid = ft.ftserver\n");
- appendPQExpBuffer(&buf, "\nAND n.oid = c.relnamespace\n");
+ appendPQExpBuffer(&buf,
+ "\nFROM pg_catalog.pg_foreign_table ft\n"
+ " INNER JOIN pg_catalog.pg_class c"
+ " ON c.oid = ft.ftrelid\n"
+ " INNER JOIN pg_catalog.pg_namespace n"
+ " ON n.oid = c.relnamespace\n"
+ " INNER JOIN pg_catalog.pg_foreign_server s"
+ " ON s.oid = ft.ftserver\n");
+ if (verbose)
+ appendPQExpBuffer(&buf,
+ " LEFT JOIN pg_catalog.pg_description d\n"
+ " ON d.classoid = c.tableoid AND "
+ "d.objoid = c.oid AND d.objsubid = 0\n");
- processSQLNamePattern(pset.db, &buf, pattern, true, false,
+ processSQLNamePattern(pset.db, &buf, pattern, false, false,
NULL, "n.nspname", "c.relname", NULL);
appendPQExpBuffer(&buf, "ORDER BY 1, 2;");