diff options
Diffstat (limited to 'src/bin/psql/describe.c')
-rw-r--r-- | src/bin/psql/describe.c | 102 |
1 files changed, 53 insertions, 49 deletions
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index f4ac7f1bcd3..1d544837546 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -31,11 +31,11 @@ * takes an optional regexp to match specific aggregates by name */ bool -describeAggregates(const char *name, PsqlSettings *pset) +describeAggregates(const char *name) { char buf[384 + 2 * REGEXP_CUTOFF]; PGresult *res; - printQueryOpt myopt = pset->popt; + printQueryOpt myopt = pset.popt; /* * There are two kinds of aggregates: ones that work on particular @@ -72,14 +72,14 @@ describeAggregates(const char *name, PsqlSettings *pset) strcat(buf, "ORDER BY \"Name\", \"Type\""); - res = PSQLexec(pset, buf); + res = PSQLexec(buf); if (!res) return false; myopt.nullPrint = NULL; myopt.title = "List of aggregates"; - printQuery(res, &myopt, pset->queryFout); + printQuery(res, &myopt, pset.queryFout); PQclear(res); return true; @@ -90,11 +90,11 @@ describeAggregates(const char *name, PsqlSettings *pset) * Takes an optional regexp to narrow down the function name */ bool -describeFunctions(const char *name, PsqlSettings *pset, bool verbose) +describeFunctions(const char *name, bool verbose) { char buf[384 + REGEXP_CUTOFF]; PGresult *res; - printQueryOpt myopt = pset->popt; + printQueryOpt myopt = pset.popt; /* * we skip in/out funcs by excluding functions that take some @@ -125,14 +125,14 @@ describeFunctions(const char *name, PsqlSettings *pset, bool verbose) } strcat(buf, "ORDER BY \"Function\", \"Result\", \"Arguments\""); - res = PSQLexec(pset, buf); + res = PSQLexec(buf); if (!res) return false; myopt.nullPrint = NULL; myopt.title = "List of functions"; - printQuery(res, &myopt, pset->queryFout); + printQuery(res, &myopt, pset.queryFout); PQclear(res); return true; @@ -145,11 +145,11 @@ describeFunctions(const char *name, PsqlSettings *pset, bool verbose) * describe types */ bool -describeTypes(const char *name, PsqlSettings *pset, bool verbose) +describeTypes(const char *name, bool verbose) { char buf[256 + REGEXP_CUTOFF]; PGresult *res; - printQueryOpt myopt = pset->popt; + printQueryOpt myopt = pset.popt; strcpy(buf, "SELECT t.typname AS \"Type\""); if (verbose) @@ -169,14 +169,14 @@ describeTypes(const char *name, PsqlSettings *pset, bool verbose) } strcat(buf, "ORDER BY t.typname;"); - res = PSQLexec(pset, buf); + res = PSQLexec(buf); if (!res) return false; myopt.nullPrint = NULL; myopt.title = "List of types"; - printQuery(res, &myopt, pset->queryFout); + printQuery(res, &myopt, pset.queryFout); PQclear(res); return true; @@ -187,11 +187,11 @@ describeTypes(const char *name, PsqlSettings *pset, bool verbose) /* \do */ bool -describeOperators(const char *name, PsqlSettings *pset) +describeOperators(const char *name) { char buf[1536 + 3 * REGEXP_CUTOFF]; PGresult *res; - printQueryOpt myopt = pset->popt; + printQueryOpt myopt = pset.popt; strcpy(buf, "SELECT o.oprname AS \"Op\",\n" @@ -251,14 +251,14 @@ describeOperators(const char *name, PsqlSettings *pset) } strcat(buf, "\nORDER BY \"Op\", \"Left arg\", \"Right arg\", \"Result\""); - res = PSQLexec(pset, buf); + res = PSQLexec(buf); if (!res) return false; myopt.nullPrint = NULL; myopt.title = "List of operators"; - printQuery(res, &myopt, pset->queryFout); + printQuery(res, &myopt, pset.queryFout); PQclear(res); return true; @@ -271,11 +271,11 @@ describeOperators(const char *name, PsqlSettings *pset) * for \l, \list, and -l switch */ bool -listAllDbs(PsqlSettings *pset, bool desc) +listAllDbs(bool desc) { PGresult *res; char buf[512]; - printQueryOpt myopt = pset->popt; + printQueryOpt myopt = pset.popt; strcpy(buf, "SELECT pg_database.datname as \"Database\",\n" @@ -306,14 +306,14 @@ listAllDbs(PsqlSettings *pset, bool desc) strcat(buf, "ORDER BY \"Database\""); - res = PSQLexec(pset, buf); + res = PSQLexec(buf); if (!res) return false; myopt.nullPrint = NULL; myopt.title = "List of databases"; - printQuery(res, &myopt, pset->queryFout); + printQuery(res, &myopt, pset.queryFout); PQclear(res); return true; @@ -325,11 +325,11 @@ listAllDbs(PsqlSettings *pset, bool desc) * */ bool -permissionsList(const char *name, PsqlSettings *pset) +permissionsList(const char *name) { char descbuf[256 + REGEXP_CUTOFF]; PGresult *res; - printQueryOpt myopt = pset->popt; + printQueryOpt myopt = pset.popt; descbuf[0] = '\0'; /* Currently, we ignore indexes since they have no meaningful rights */ @@ -346,15 +346,15 @@ permissionsList(const char *name, PsqlSettings *pset) } strcat(descbuf, "ORDER BY relname"); - res = PSQLexec(pset, descbuf); + res = PSQLexec(descbuf); if (!res) return false; myopt.nullPrint = NULL; - sprintf(descbuf, "Access permissions for database \"%s\"", PQdb(pset->db)); + sprintf(descbuf, "Access permissions for database \"%s\"", PQdb(pset.db)); myopt.title = descbuf; - printQuery(res, &myopt, pset->queryFout); + printQuery(res, &myopt, pset.queryFout); PQclear(res); return true; @@ -371,11 +371,11 @@ permissionsList(const char *name, PsqlSettings *pset) * lists of things, there are other \d? commands. */ bool -objectDescription(const char *object, PsqlSettings *pset) +objectDescription(const char *object) { char descbuf[2048 + 7 * REGEXP_CUTOFF]; PGresult *res; - printQueryOpt myopt = pset->popt; + printQueryOpt myopt = pset.popt; descbuf[0] = '\0'; @@ -466,7 +466,7 @@ objectDescription(const char *object, PsqlSettings *pset) strcat(descbuf, "\nORDER BY \"Name\""); - res = PSQLexec(pset, descbuf); + res = PSQLexec(descbuf); if (!res) return false; @@ -474,7 +474,7 @@ objectDescription(const char *object, PsqlSettings *pset) myopt.nullPrint = NULL; myopt.title = "Object descriptions"; - printQuery(res, &myopt, pset->queryFout); + printQuery(res, &myopt, pset.queryFout); PQclear(res); return true; @@ -507,11 +507,11 @@ xmalloc(size_t size) bool -describeTableDetails(const char *name, PsqlSettings *pset, bool desc) +describeTableDetails(const char *name, bool desc) { char buf[512 + INDEX_MAX_KEYS * NAMEDATALEN]; PGresult *res = NULL; - printTableOpt myopt = pset->popt.topt; + printTableOpt myopt = pset.popt.topt; int i; const char *view_def = NULL; const char *headers[5]; @@ -536,14 +536,14 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) "SELECT relhasindex, relkind, relchecks, reltriggers, relhasrules\n" "FROM pg_class WHERE relname='%s'", name); - res = PSQLexec(pset, buf); + res = PSQLexec(buf); if (!res) return false; /* Did we get anything? */ if (PQntuples(res) == 0) { - if (!GetVariableBool(pset->vars, "quiet")) + if (!QUIET()) fprintf(stderr, "Did not find any relation named \"%s\".\n", name); PQclear(res); return false; @@ -587,7 +587,7 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) strcat(buf, "'\n AND a.attnum > 0 AND a.attrelid = c.oid AND a.atttypid = t.oid\n" "ORDER BY a.attnum"); - res = PSQLexec(pset, buf); + res = PSQLexec(buf); if (!res) return false; @@ -595,7 +595,7 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) if (tableinfo.hasrules) { PGresult *result; sprintf(buf, "SELECT definition FROM pg_views WHERE viewname = '%s'", name); - result = PSQLexec(pset, buf); + result = PSQLexec(buf); if (!result) { PQclear(res); @@ -655,7 +655,7 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) "WHERE c.relname = '%s' AND c.oid = d.adrelid AND d.adnum = %s", name, PQgetvalue(res, i, 6)); - result = PSQLexec(pset, buf); + result = PSQLexec(buf); if (!result) error = true; else @@ -710,7 +710,7 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) "WHERE i.indexrelid = c.oid AND c.relname = '%s' AND c.relam = a.oid", name); - result = PSQLexec(pset, buf); + result = PSQLexec(buf); if (!result) error = true; else @@ -750,7 +750,7 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) "WHERE c.relname = '%s' AND c.oid = i.indrelid AND i.indexrelid = c2.oid\n" "ORDER BY c2.relname", name); - result1 = PSQLexec(pset, buf); + result1 = PSQLexec(buf); if (!result1) error = true; else @@ -764,7 +764,7 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) "FROM pg_relcheck r, pg_class c\n" "WHERE c.relname='%s' AND c.oid = r.rcrelid", name); - result2 = PSQLexec(pset, buf); + result2 = PSQLexec(buf); if (!result2) error = true; else @@ -779,7 +779,7 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) "FROM pg_rewrite r, pg_class c\n" "WHERE c.relname='%s' AND c.oid = r.ev_class", name); - result3 = PSQLexec(pset, buf); + result3 = PSQLexec(buf); if (!result3) error = true; else @@ -794,7 +794,7 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) "FROM pg_trigger t, pg_class c\n" "WHERE c.relname='%s' AND c.oid = t.tgrelid", name); - result4 = PSQLexec(pset, buf); + result4 = PSQLexec(buf); if (!result4) error = true; else @@ -863,7 +863,7 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) if (!error) { myopt.tuples_only = false; - printTable(title, headers, (const char**)cells, (const char**)footers, "llll", &myopt, pset->queryFout); + printTable(title, headers, (const char**)cells, (const char**)footers, "llll", &myopt, pset.queryFout); } /* clean up */ @@ -906,7 +906,7 @@ describeTableDetails(const char *name, PsqlSettings *pset, bool desc) * tries to fix this the painful way, hopefully outer joins will be done sometime. */ bool -listTables(const char *infotype, const char *name, PsqlSettings *pset, bool desc) +listTables(const char *infotype, const char *name, bool desc) { bool showTables = strchr(infotype, 't') != NULL; bool showIndices = strchr(infotype, 'i') != NULL; @@ -916,7 +916,7 @@ listTables(const char *infotype, const char *name, PsqlSettings *pset, bool desc char buf[3072 + 8 * REGEXP_CUTOFF]; PGresult *res; - printQueryOpt myopt = pset->popt; + printQueryOpt myopt = pset.popt; buf[0] = '\0'; @@ -1093,20 +1093,24 @@ listTables(const char *infotype, const char *name, PsqlSettings *pset, bool desc strcat(buf, "\nORDER BY \"Name\""); - res = PSQLexec(pset, buf); + res = PSQLexec(buf); if (!res) return false; - if (PQntuples(res) == 0) - fprintf(pset->queryFout, "No matching relations found.\n"); - + if (PQntuples(res) == 0 && !QUIET()) + { + if (name) + fprintf(pset.queryFout, "No matching relations found.\n"); + else + fprintf(pset.queryFout, "No relations found.\n"); + } else { myopt.topt.tuples_only = false; myopt.nullPrint = NULL; myopt.title = "List of relations"; - printQuery(res, &myopt, pset->queryFout); + printQuery(res, &myopt, pset.queryFout); } PQclear(res); |