From: Tom Lane Date: Wed, 25 Oct 2000 20:36:52 +0000 (+0000) Subject: Teach psql about new relkind for views. X-Git-Tag: REL7_1_BETA~348 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4ad9fe4ce5d598f8e78c75c4fe022d347e349c38;p=postgresql Teach psql about new relkind for views. --- diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 3db2eb95a6..0e2453086e 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -3,7 +3,7 @@ * * Copyright 2000 by PostgreSQL Global Development Group * - * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.25 2000/10/24 01:38:38 tgl Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.26 2000/10/25 20:36:52 tgl Exp $ */ #include "postgres.h" #include "describe.h" @@ -336,7 +336,7 @@ permissionsList(const char *name) strcat(descbuf, "SELECT relname as \"Relation\",\n" " relacl as \"Access permissions\"\n" "FROM pg_class\n" - "WHERE ( relkind = 'r' OR relkind = 'S') AND\n" + "WHERE relkind in ('r', 'v', 'S') AND\n" " relname !~ '^pg_'\n"); if (name) { @@ -570,7 +570,7 @@ describeTableDetails(const char *name, bool desc) headers[1] = "Type"; cols = 2; - if (tableinfo.relkind == 'r') + if (tableinfo.relkind == 'r' || tableinfo.relkind == 'v') { cols++; headers[cols - 1] = "Modifier"; @@ -634,7 +634,7 @@ describeTableDetails(const char *name, bool desc) /* Extra: not null and default */ /* (I'm cutting off the 'default' string at 128) */ - if (tableinfo.relkind == 'r') + if (tableinfo.relkind == 'r' || tableinfo.relkind == 'v') { cells[i * cols + 2] = xmalloc(128 + 128); cells[i * cols + 2][0] = '\0'; @@ -677,10 +677,10 @@ describeTableDetails(const char *name, bool desc) switch (tableinfo.relkind) { case 'r': - if (view_def) - sprintf(title, "View \"%s\"", name); - else - sprintf(title, "Table \"%s\"", name); + sprintf(title, "Table \"%s\"", name); + break; + case 'v': + sprintf(title, "View \"%s\"", name); break; case 'S': sprintf(title, "Sequence \"%s\"", name); @@ -692,7 +692,8 @@ describeTableDetails(const char *name, bool desc) sprintf(title, "Special relation \"%s\"", name); break; default: - sprintf(title, "?%c?", tableinfo.relkind); + sprintf(title, "?%c? \"%s\"", tableinfo.relkind, name); + break; } /* Make footers */ @@ -723,7 +724,7 @@ describeTableDetails(const char *name, bool desc) } } /* Information about the view */ - else if (tableinfo.relkind == 'r' && view_def) + else if (view_def) { footers = xmalloc(2 * sizeof(*footers)); footers[0] = xmalloc(20 + strlen(view_def)); @@ -874,7 +875,7 @@ describeTableDetails(const char *name, bool desc) for (i = 0; i < PQntuples(res); i++) { - if (tableinfo.relkind == 'r') + if (tableinfo.relkind == 'r' || tableinfo.relkind == 'v') free(cells[i * cols + 2]); } free(cells); @@ -933,8 +934,7 @@ listTables(const char *infotype, const char *name, bool desc) if (desc) strcat(buf, ", obj_description(c.oid) as \"Description\""); strcat(buf, "\nFROM pg_class c, pg_user u\n" - "WHERE c.relowner = u.usesysid AND c.relkind = 'r'\n" - " AND not exists (select 1 from pg_views where viewname = c.relname)\n"); + "WHERE c.relowner = u.usesysid AND c.relkind = 'r'\n"); strcat(buf, showSystem ? " AND c.relname ~ '^pg_'\n" : " AND c.relname !~ '^pg_'\n"); if (name) { @@ -949,7 +949,6 @@ listTables(const char *infotype, const char *name, bool desc) strcat(buf, ", obj_description(c.oid) as \"Description\""); strcat(buf, "\nFROM pg_class c\n" "WHERE c.relkind = 'r'\n" - " AND not exists (select 1 from pg_views where viewname = c.relname)\n" " AND not exists (select 1 from pg_user where usesysid = c.relowner)\n"); strcat(buf, showSystem ? " AND c.relname ~ '^pg_'\n" : " AND c.relname !~ '^pg_'\n"); if (name) @@ -970,8 +969,7 @@ listTables(const char *infotype, const char *name, bool desc) if (desc) strcat(buf, ", obj_description(c.oid) as \"Description\""); strcat(buf, "\nFROM pg_class c, pg_user u\n" - "WHERE c.relowner = u.usesysid AND c.relkind = 'r'\n" - " AND exists (select 1 from pg_views where viewname = c.relname)\n"); + "WHERE c.relowner = u.usesysid AND c.relkind = 'v'\n"); strcat(buf, showSystem ? " AND c.relname ~ '^pg_'\n" : " AND c.relname !~ '^pg_'\n"); if (name) { @@ -985,8 +983,7 @@ listTables(const char *infotype, const char *name, bool desc) if (desc) strcat(buf, ", obj_description(c.oid) as \"Description\""); strcat(buf, "\nFROM pg_class c\n" - "WHERE c.relkind = 'r'\n" - " AND exists (select 1 from pg_views where viewname = c.relname)\n" + "WHERE c.relkind = 'v'\n" " AND not exists (select 1 from pg_user where usesysid = c.relowner)\n"); strcat(buf, showSystem ? " AND c.relname ~ '^pg_'\n" : " AND c.relname !~ '^pg_'\n"); if (name) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index e7e329cfa8..c1a2fe5638 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -3,7 +3,7 @@ * * Copyright 2000 by PostgreSQL Global Development Group * - * $Header: /cvsroot/pgsql/src/bin/psql/tab-complete.c,v 1.21 2000/10/03 19:50:20 petere Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/tab-complete.c,v 1.22 2000/10/25 20:36:52 tgl Exp $ */ /*---------------------------------------------------------------------- @@ -519,7 +519,7 @@ psql_completion(char *text, int start, int end) */ else if ((strcasecmp(prev3_wd, "GRANT") == 0 || strcasecmp(prev3_wd, "REVOKE") == 0) && strcasecmp(prev_wd, "ON") == 0) - COMPLETE_WITH_QUERY("SELECT relname FROM pg_class WHERE relkind in ('r','i','s') and substr(relname,1,%d)='%s'"); + COMPLETE_WITH_QUERY("SELECT relname FROM pg_class WHERE relkind in ('r','i','S','v') and substr(relname,1,%d)='%s'"); /* Complete "GRANT * ON * " with "TO" */ else if (strcasecmp(prev4_wd, "GRANT") == 0 && strcasecmp(prev2_wd, "ON") == 0) COMPLETE_WITH_CONST("TO");