psql_describe.v3.patch
application/octet-stream
Filename: psql_describe.v3.patch
Type: application/octet-stream
Part: 0
Message:
Re: psql describe.c cleanup
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
new file mode 100644
index b2c54b5..682cf8a
*** a/src/bin/psql/describe.c
--- b/src/bin/psql/describe.c
*************** describeOneTableDetails(const char *sche
*** 1159,1165 ****
"c.relpersistence\n"
"FROM pg_catalog.pg_class c\n "
"LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid)\n"
! "WHERE c.oid = '%s'\n",
(verbose ?
"pg_catalog.array_to_string(c.reloptions || "
"array(select 'toast.' || x from pg_catalog.unnest(tc.reloptions) x), ', ')\n"
--- 1159,1165 ----
"c.relpersistence\n"
"FROM pg_catalog.pg_class c\n "
"LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid)\n"
! "WHERE c.oid = '%s';",
(verbose ?
"pg_catalog.array_to_string(c.reloptions || "
"array(select 'toast.' || x from pg_catalog.unnest(tc.reloptions) x), ', ')\n"
*************** describeOneTableDetails(const char *sche
*** 1175,1181 ****
"CASE WHEN c.reloftype = 0 THEN '' ELSE c.reloftype::pg_catalog.regtype::pg_catalog.text END\n"
"FROM pg_catalog.pg_class c\n "
"LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid)\n"
! "WHERE c.oid = '%s'\n",
(verbose ?
"pg_catalog.array_to_string(c.reloptions || "
"array(select 'toast.' || x from pg_catalog.unnest(tc.reloptions) x), ', ')\n"
--- 1175,1181 ----
"CASE WHEN c.reloftype = 0 THEN '' ELSE c.reloftype::pg_catalog.regtype::pg_catalog.text END\n"
"FROM pg_catalog.pg_class c\n "
"LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid)\n"
! "WHERE c.oid = '%s';",
(verbose ?
"pg_catalog.array_to_string(c.reloptions || "
"array(select 'toast.' || x from pg_catalog.unnest(tc.reloptions) x), ', ')\n"
*************** describeOneTableDetails(const char *sche
*** 1190,1196 ****
"%s, c.reltablespace\n"
"FROM pg_catalog.pg_class c\n "
"LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid)\n"
! "WHERE c.oid = '%s'\n",
(verbose ?
"pg_catalog.array_to_string(c.reloptions || "
"array(select 'toast.' || x from pg_catalog.unnest(tc.reloptions) x), ', ')\n"
--- 1190,1196 ----
"%s, c.reltablespace\n"
"FROM pg_catalog.pg_class c\n "
"LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid)\n"
! "WHERE c.oid = '%s';",
(verbose ?
"pg_catalog.array_to_string(c.reloptions || "
"array(select 'toast.' || x from pg_catalog.unnest(tc.reloptions) x), ', ')\n"
*************** describeOneTableDetails(const char *sche
*** 1203,1209 ****
"SELECT relchecks, relkind, relhasindex, relhasrules, "
"reltriggers <> 0, relhasoids, "
"%s, reltablespace\n"
! "FROM pg_catalog.pg_class WHERE oid = '%s'",
(verbose ?
"pg_catalog.array_to_string(reloptions, E', ')" : "''"),
oid);
--- 1203,1209 ----
"SELECT relchecks, relkind, relhasindex, relhasrules, "
"reltriggers <> 0, relhasoids, "
"%s, reltablespace\n"
! "FROM pg_catalog.pg_class WHERE oid = '%s';",
(verbose ?
"pg_catalog.array_to_string(reloptions, E', ')" : "''"),
oid);
*************** describeOneTableDetails(const char *sche
*** 1214,1220 ****
"SELECT relchecks, relkind, relhasindex, relhasrules, "
"reltriggers <> 0, relhasoids, "
"'', reltablespace\n"
! "FROM pg_catalog.pg_class WHERE oid = '%s'",
oid);
}
else
--- 1214,1220 ----
"SELECT relchecks, relkind, relhasindex, relhasrules, "
"reltriggers <> 0, relhasoids, "
"'', reltablespace\n"
! "FROM pg_catalog.pg_class WHERE oid = '%s';",
oid);
}
else
*************** describeOneTableDetails(const char *sche
*** 1223,1229 ****
"SELECT relchecks, relkind, relhasindex, relhasrules, "
"reltriggers <> 0, relhasoids, "
"'', ''\n"
! "FROM pg_catalog.pg_class WHERE oid = '%s'",
oid);
}
--- 1223,1229 ----
"SELECT relchecks, relkind, relhasindex, relhasrules, "
"reltriggers <> 0, relhasoids, "
"'', ''\n"
! "FROM pg_catalog.pg_class WHERE oid = '%s';",
oid);
}
*************** describeOneTableDetails(const char *sche
*** 1265,1271 ****
{
printfPQExpBuffer(&buf, "SELECT * FROM %s", fmtId(schemaname));
/* must be separate because fmtId isn't reentrant */
! appendPQExpBuffer(&buf, ".%s", fmtId(relationname));
res = PSQLexec(buf.data, false);
if (!res)
--- 1265,1271 ----
{
printfPQExpBuffer(&buf, "SELECT * FROM %s", fmtId(schemaname));
/* must be separate because fmtId isn't reentrant */
! appendPQExpBuffer(&buf, ".%s;", fmtId(relationname));
res = PSQLexec(buf.data, false);
if (!res)
*************** describeOneTableDetails(const char *sche
*** 1299,1305 ****
appendPQExpBuffer(&buf, ",\n a.attstorage, pg_catalog.col_description(a.attrelid, a.attnum)");
appendPQExpBuffer(&buf, "\nFROM pg_catalog.pg_attribute a");
appendPQExpBuffer(&buf, "\nWHERE a.attrelid = '%s' AND a.attnum > 0 AND NOT a.attisdropped", oid);
! appendPQExpBuffer(&buf, "\nORDER BY a.attnum");
res = PSQLexec(buf.data, false);
if (!res)
--- 1299,1305 ----
appendPQExpBuffer(&buf, ",\n a.attstorage, pg_catalog.col_description(a.attrelid, a.attnum)");
appendPQExpBuffer(&buf, "\nFROM pg_catalog.pg_attribute a");
appendPQExpBuffer(&buf, "\nWHERE a.attrelid = '%s' AND a.attnum > 0 AND NOT a.attisdropped", oid);
! appendPQExpBuffer(&buf, "\nORDER BY a.attnum;");
res = PSQLexec(buf.data, false);
if (!res)
*************** describeOneTableDetails(const char *sche
*** 1394,1400 ****
PGresult *result;
printfPQExpBuffer(&buf,
! "SELECT pg_catalog.pg_get_viewdef('%s'::pg_catalog.oid, true)",
oid);
result = PSQLexec(buf.data, false);
if (!result)
--- 1394,1400 ----
PGresult *result;
printfPQExpBuffer(&buf,
! "SELECT pg_catalog.pg_get_viewdef('%s'::pg_catalog.oid, true);",
oid);
result = PSQLexec(buf.data, false);
if (!result)
*************** describeOneTableDetails(const char *sche
*** 1509,1515 ****
"pg_catalog.pg_get_expr(i.indpred, i.indrelid, true)\n"
"FROM pg_catalog.pg_index i, pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_am a\n"
"WHERE i.indexrelid = c.oid AND c.oid = '%s' AND c.relam = a.oid\n"
! "AND i.indrelid = c2.oid",
oid);
result = PSQLexec(buf.data, false);
--- 1509,1515 ----
"pg_catalog.pg_get_expr(i.indpred, i.indrelid, true)\n"
"FROM pg_catalog.pg_index i, pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_am a\n"
"WHERE i.indexrelid = c.oid AND c.oid = '%s' AND c.relam = a.oid\n"
! "AND i.indrelid = c2.oid;",
oid);
result = PSQLexec(buf.data, false);
*************** describeOneTableDetails(const char *sche
*** 1580,1586 ****
printfPQExpBuffer(&buf,
"SELECT r.rulename, trim(trailing ';' from pg_catalog.pg_get_ruledef(r.oid, true))\n"
"FROM pg_catalog.pg_rewrite r\n"
! "WHERE r.ev_class = '%s' AND r.rulename != '_RETURN' ORDER BY 1",
oid);
result = PSQLexec(buf.data, false);
if (!result)
--- 1580,1586 ----
printfPQExpBuffer(&buf,
"SELECT r.rulename, trim(trailing ';' from pg_catalog.pg_get_ruledef(r.oid, true))\n"
"FROM pg_catalog.pg_rewrite r\n"
! "WHERE r.ev_class = '%s' AND r.rulename != '_RETURN' ORDER BY 1;",
oid);
result = PSQLexec(buf.data, false);
if (!result)
*************** describeOneTableDetails(const char *sche
*** 1637,1643 ****
" LEFT JOIN pg_catalog.pg_constraint con ON (conrelid = i.indrelid AND conindid = i.indexrelid AND contype IN ('p','u','x'))\n");
appendPQExpBuffer(&buf,
"WHERE c.oid = '%s' AND c.oid = i.indrelid AND i.indexrelid = c2.oid\n"
! "ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname",
oid);
result = PSQLexec(buf.data, false);
if (!result)
--- 1637,1643 ----
" LEFT JOIN pg_catalog.pg_constraint con ON (conrelid = i.indrelid AND conindid = i.indexrelid AND contype IN ('p','u','x'))\n");
appendPQExpBuffer(&buf,
"WHERE c.oid = '%s' AND c.oid = i.indrelid AND i.indexrelid = c2.oid\n"
! "ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname;",
oid);
result = PSQLexec(buf.data, false);
if (!result)
*************** describeOneTableDetails(const char *sche
*** 1717,1723 ****
"SELECT r.conname, "
"pg_catalog.pg_get_constraintdef(r.oid, true)\n"
"FROM pg_catalog.pg_constraint r\n"
! "WHERE r.conrelid = '%s' AND r.contype = 'c'\nORDER BY 1",
oid);
result = PSQLexec(buf.data, false);
if (!result)
--- 1717,1723 ----
"SELECT r.conname, "
"pg_catalog.pg_get_constraintdef(r.oid, true)\n"
"FROM pg_catalog.pg_constraint r\n"
! "WHERE r.conrelid = '%s' AND r.contype = 'c'\nORDER BY 1;",
oid);
result = PSQLexec(buf.data, false);
if (!result)
*************** describeOneTableDetails(const char *sche
*** 1748,1754 ****
"SELECT conname,\n"
" pg_catalog.pg_get_constraintdef(r.oid, true) as condef\n"
"FROM pg_catalog.pg_constraint r\n"
! "WHERE r.conrelid = '%s' AND r.contype = 'f' ORDER BY 1",
oid);
result = PSQLexec(buf.data, false);
if (!result)
--- 1748,1754 ----
"SELECT conname,\n"
" pg_catalog.pg_get_constraintdef(r.oid, true) as condef\n"
"FROM pg_catalog.pg_constraint r\n"
! "WHERE r.conrelid = '%s' AND r.contype = 'f' ORDER BY 1;",
oid);
result = PSQLexec(buf.data, false);
if (!result)
*************** describeOneTableDetails(const char *sche
*** 1779,1785 ****
"SELECT conname, conrelid::pg_catalog.regclass,\n"
" pg_catalog.pg_get_constraintdef(c.oid, true) as condef\n"
"FROM pg_catalog.pg_constraint c\n"
! "WHERE c.confrelid = '%s' AND c.contype = 'f' ORDER BY 1",
oid);
result = PSQLexec(buf.data, false);
if (!result)
--- 1779,1785 ----
"SELECT conname, conrelid::pg_catalog.regclass,\n"
" pg_catalog.pg_get_constraintdef(c.oid, true) as condef\n"
"FROM pg_catalog.pg_constraint c\n"
! "WHERE c.confrelid = '%s' AND c.contype = 'f' ORDER BY 1;",
oid);
result = PSQLexec(buf.data, false);
if (!result)
*************** describeOneTableDetails(const char *sche
*** 1812,1818 ****
"SELECT r.rulename, trim(trailing ';' from pg_catalog.pg_get_ruledef(r.oid, true)), "
"ev_enabled\n"
"FROM pg_catalog.pg_rewrite r\n"
! "WHERE r.ev_class = '%s' ORDER BY 1",
oid);
}
else
--- 1812,1818 ----
"SELECT r.rulename, trim(trailing ';' from pg_catalog.pg_get_ruledef(r.oid, true)), "
"ev_enabled\n"
"FROM pg_catalog.pg_rewrite r\n"
! "WHERE r.ev_class = '%s' ORDER BY 1;",
oid);
}
else
*************** describeOneTableDetails(const char *sche
*** 1821,1827 ****
"SELECT r.rulename, trim(trailing ';' from pg_catalog.pg_get_ruledef(r.oid, true)), "
"'O'::char AS ev_enabled\n"
"FROM pg_catalog.pg_rewrite r\n"
! "WHERE r.ev_class = '%s' ORDER BY 1",
oid);
}
result = PSQLexec(buf.data, false);
--- 1821,1827 ----
"SELECT r.rulename, trim(trailing ';' from pg_catalog.pg_get_ruledef(r.oid, true)), "
"'O'::char AS ev_enabled\n"
"FROM pg_catalog.pg_rewrite r\n"
! "WHERE r.ev_class = '%s' ORDER BY 1;",
oid);
}
result = PSQLexec(buf.data, false);
*************** describeOneTableDetails(const char *sche
*** 1927,1933 ****
" (SELECT 1 FROM pg_catalog.pg_depend d "
" JOIN pg_catalog.pg_constraint c ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) "
" WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f'))");
! appendPQExpBuffer(&buf, "\nORDER BY 1");
result = PSQLexec(buf.data, false);
if (!result)
--- 1927,1933 ----
" (SELECT 1 FROM pg_catalog.pg_depend d "
" JOIN pg_catalog.pg_constraint c ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) "
" WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f'))");
! appendPQExpBuffer(&buf, "\nORDER BY 1;");
result = PSQLexec(buf.data, false);
if (!result)
*************** describeOneTableDetails(const char *sche
*** 2035,2041 ****
"SELECT s.srvname\n"
"FROM pg_catalog.pg_foreign_table f,\n"
" pg_catalog.pg_foreign_server s\n"
! "WHERE f.ftrelid = %s AND s.oid = f.ftserver",
oid);
result = PSQLexec(buf.data, false);
if (!result)
--- 2035,2041 ----
"SELECT s.srvname\n"
"FROM pg_catalog.pg_foreign_table f,\n"
" pg_catalog.pg_foreign_server s\n"
! "WHERE f.ftrelid = %s AND s.oid = f.ftserver;",
oid);
result = PSQLexec(buf.data, false);
if (!result)
*************** describeOneTableDetails(const char *sche
*** 2053,2059 ****
}
/* print inherited tables */
! printfPQExpBuffer(&buf, "SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '%s' ORDER BY inhseqno", oid);
result = PSQLexec(buf.data, false);
if (!result)
--- 2053,2059 ----
}
/* print inherited tables */
! printfPQExpBuffer(&buf, "SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '%s' ORDER BY inhseqno;", oid);
result = PSQLexec(buf.data, false);
if (!result)
*************** add_tablespace_footer(printTableContent
*** 2215,2221 ****
initPQExpBuffer(&buf);
printfPQExpBuffer(&buf,
"SELECT spcname FROM pg_catalog.pg_tablespace\n"
! "WHERE oid = '%u'", tablespace);
result = PSQLexec(buf.data, false);
if (!result)
return;
--- 2215,2221 ----
initPQExpBuffer(&buf);
printfPQExpBuffer(&buf,
"SELECT spcname FROM pg_catalog.pg_tablespace\n"
! "WHERE oid = '%u';", tablespace);
result = PSQLexec(buf.data, false);
if (!result)
return;
*************** listDbRoleSettings(const char *pattern,
*** 2424,2430 ****
NULL, "pg_roles.rolname", NULL, NULL);
processSQLNamePattern(pset.db, &buf, pattern2, havewhere, false,
NULL, "pg_database.datname", NULL, NULL);
! appendPQExpBufferStr(&buf, "ORDER BY role, database");
}
else
{
--- 2424,2430 ----
NULL, "pg_roles.rolname", NULL, NULL);
processSQLNamePattern(pset.db, &buf, pattern2, havewhere, false,
NULL, "pg_database.datname", NULL, NULL);
! appendPQExpBufferStr(&buf, "ORDER BY role, database;");
}
else
{
*************** describeOneTSParser(const char *oid, con
*** 3170,3176 ****
" p.prslextype::pg_catalog.regproc, \n"
" pg_catalog.obj_description(p.prslextype, 'pg_proc') \n"
" FROM pg_catalog.pg_ts_parser p \n"
! " WHERE p.oid = '%s' \n",
gettext_noop("Start parse"),
gettext_noop("Method"),
gettext_noop("Function"),
--- 3170,3176 ----
" p.prslextype::pg_catalog.regproc, \n"
" pg_catalog.obj_description(p.prslextype, 'pg_proc') \n"
" FROM pg_catalog.pg_ts_parser p \n"
! " WHERE p.oid = '%s';",
gettext_noop("Start parse"),
gettext_noop("Method"),
gettext_noop("Function"),
*************** describeOneTSConfig(const char *oid, con
*** 3531,3537 ****
"FROM pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m \n"
"WHERE c.oid = '%s' AND m.mapcfg = c.oid \n"
"GROUP BY m.mapcfg, m.maptokentype, c.cfgparser \n"
! "ORDER BY 1",
gettext_noop("Token"),
gettext_noop("Dictionaries"),
oid);
--- 3531,3537 ----
"FROM pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m \n"
"WHERE c.oid = '%s' AND m.mapcfg = c.oid \n"
"GROUP BY m.mapcfg, m.maptokentype, c.cfgparser \n"
! "ORDER BY 1;",
gettext_noop("Token"),
gettext_noop("Dictionaries"),
oid);