mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Add new psql command \dL to list languages.
Original patch by Fernando Ike, revived by Josh Kuperschmidt, reviewed by Andreas Karlsson, and in earlier versions by Tom Lane and Peter Eisentraut.
This commit is contained in:
@ -416,6 +416,9 @@ exec_command(const char *cmd,
|
||||
case 'l':
|
||||
success = do_lo_list();
|
||||
break;
|
||||
case 'L':
|
||||
success = listLanguages(pattern, show_verbose, show_system);
|
||||
break;
|
||||
case 'n':
|
||||
success = listSchemas(pattern, show_verbose, show_system);
|
||||
break;
|
||||
|
@ -2566,6 +2566,74 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* \dL
|
||||
*
|
||||
* Describes languages.
|
||||
*/
|
||||
bool
|
||||
listLanguages(const char *pattern, bool verbose, bool showSystem)
|
||||
{
|
||||
PQExpBufferData buf;
|
||||
PGresult *res;
|
||||
printQueryOpt myopt = pset.popt;
|
||||
|
||||
initPQExpBuffer(&buf);
|
||||
|
||||
printfPQExpBuffer(&buf,
|
||||
"SELECT l.lanname AS \"%s\",\n",
|
||||
gettext_noop("Name"));
|
||||
if (pset.sversion >= 80300)
|
||||
appendPQExpBuffer(&buf,
|
||||
" pg_catalog.pg_get_userbyid(l.lanowner) as \"%s\",\n",
|
||||
gettext_noop("Owner"));
|
||||
|
||||
appendPQExpBuffer(&buf,
|
||||
" l.lanpltrusted AS \"%s\"",
|
||||
gettext_noop("Trusted"));
|
||||
|
||||
if (verbose)
|
||||
{
|
||||
appendPQExpBuffer(&buf,
|
||||
",\n NOT l.lanispl AS \"%s\",\n"
|
||||
" l.lanplcallfoid::regprocedure AS \"%s\",\n"
|
||||
" l.lanvalidator::regprocedure AS \"%s\",\n ",
|
||||
gettext_noop("Internal Language"),
|
||||
gettext_noop("Call Handler"),
|
||||
gettext_noop("Validator"));
|
||||
if (pset.sversion >= 90000)
|
||||
appendPQExpBuffer(&buf, "l.laninline::regprocedure AS \"%s\",\n ",
|
||||
gettext_noop("Inline Handler"));
|
||||
printACLColumn(&buf, "l.lanacl");
|
||||
}
|
||||
|
||||
appendPQExpBuffer(&buf,
|
||||
"\nFROM pg_catalog.pg_language l\n");
|
||||
|
||||
processSQLNamePattern(pset.db, &buf, pattern, false, false,
|
||||
NULL, "l.lanname", NULL, NULL);
|
||||
|
||||
if (!showSystem && !pattern)
|
||||
appendPQExpBuffer(&buf, "WHERE lanplcallfoid != 0\n");
|
||||
|
||||
appendPQExpBuffer(&buf, "ORDER BY 1;");
|
||||
|
||||
res = PSQLexec(buf.data, false);
|
||||
termPQExpBuffer(&buf);
|
||||
if (!res)
|
||||
return false;
|
||||
|
||||
myopt.nullPrint = NULL;
|
||||
myopt.title = _("List of languages");
|
||||
myopt.translate_header = true;
|
||||
|
||||
printQuery(res, &myopt, pset.queryFout, pset.logfile);
|
||||
|
||||
PQclear(res);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* \dD
|
||||
*
|
||||
|
@ -84,5 +84,7 @@ extern bool listUserMappings(const char *pattern, bool verbose);
|
||||
/* \det */
|
||||
extern bool listForeignTables(const char *pattern, bool verbose);
|
||||
|
||||
/* \dL */
|
||||
extern bool listLanguages(const char *pattern, bool verbose, bool showSystem);
|
||||
|
||||
#endif /* DESCRIBE_H */
|
||||
|
@ -211,6 +211,7 @@ slashUsage(unsigned short int pager)
|
||||
fprintf(output, _(" \\dg[+] [PATTERN] list roles\n"));
|
||||
fprintf(output, _(" \\di[S+] [PATTERN] list indexes\n"));
|
||||
fprintf(output, _(" \\dl list large objects, same as \\lo_list\n"));
|
||||
fprintf(output, _(" \\dL[S+] [PATTERN] list procedural languages\n"));
|
||||
fprintf(output, _(" \\dn[+] [PATTERN] list schemas\n"));
|
||||
fprintf(output, _(" \\do[S] [PATTERN] list operators\n"));
|
||||
fprintf(output, _(" \\dp [PATTERN] list table, view, and sequence access privileges\n"));
|
||||
|
@ -713,7 +713,7 @@ psql_completion(char *text, int start, int end)
|
||||
static const char *const backslash_commands[] = {
|
||||
"\\a", "\\connect", "\\conninfo", "\\C", "\\cd", "\\copy", "\\copyright",
|
||||
"\\d", "\\da", "\\db", "\\dc", "\\dC", "\\dd", "\\dD", "\\des", "\\det", "\\deu", "\\dew", "\\df",
|
||||
"\\dF", "\\dFd", "\\dFp", "\\dFt", "\\dg", "\\di", "\\dl",
|
||||
"\\dF", "\\dFd", "\\dFp", "\\dFt", "\\dg", "\\di", "\\dl", "\\dL",
|
||||
"\\dn", "\\do", "\\dp", "\\drds", "\\ds", "\\dS", "\\dt", "\\dT", "\\dv", "\\du",
|
||||
"\\e", "\\echo", "\\ef", "\\encoding",
|
||||
"\\f", "\\g", "\\h", "\\help", "\\H", "\\i", "\\l",
|
||||
@ -2680,6 +2680,8 @@ psql_completion(char *text, int start, int end)
|
||||
|
||||
else if (strncmp(prev_wd, "\\di", strlen("\\di")) == 0)
|
||||
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes, NULL);
|
||||
else if (strncmp(prev_wd, "\\dL", strlen("\\dL")) == 0)
|
||||
COMPLETE_WITH_QUERY(Query_for_list_of_languages);
|
||||
else if (strncmp(prev_wd, "\\dn", strlen("\\dn")) == 0)
|
||||
COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
|
||||
else if (strncmp(prev_wd, "\\dp", strlen("\\dp")) == 0
|
||||
|
Reference in New Issue
Block a user