mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
Add \gdesc psql command.
This command acts somewhat like \g, but instead of executing the query buffer, it merely prints a description of the columns that the query result would have. (Of course, this still requires parsing the query; if parse analysis fails, you get an error anyway.) We accomplish this using an unnamed prepared statement, which should be invisible to psql users. Pavel Stehule, reviewed by Fabien Coelho Discussion: https://postgr.es/m/CAFj8pRBhYVvO34FU=EKb=nAF5t3b++krKt1FneCmR0kuF5m-QA@mail.gmail.com
This commit is contained in:
@ -88,6 +88,7 @@ static backslashResult exec_command_errverbose(PsqlScanState scan_state, bool ac
|
||||
static backslashResult exec_command_f(PsqlScanState scan_state, bool active_branch);
|
||||
static backslashResult exec_command_g(PsqlScanState scan_state, bool active_branch,
|
||||
const char *cmd);
|
||||
static backslashResult exec_command_gdesc(PsqlScanState scan_state, bool active_branch);
|
||||
static backslashResult exec_command_gexec(PsqlScanState scan_state, bool active_branch);
|
||||
static backslashResult exec_command_gset(PsqlScanState scan_state, bool active_branch);
|
||||
static backslashResult exec_command_help(PsqlScanState scan_state, bool active_branch);
|
||||
@ -337,6 +338,8 @@ exec_command(const char *cmd,
|
||||
status = exec_command_f(scan_state, active_branch);
|
||||
else if (strcmp(cmd, "g") == 0 || strcmp(cmd, "gx") == 0)
|
||||
status = exec_command_g(scan_state, active_branch, cmd);
|
||||
else if (strcmp(cmd, "gdesc") == 0)
|
||||
status = exec_command_gdesc(scan_state, active_branch);
|
||||
else if (strcmp(cmd, "gexec") == 0)
|
||||
status = exec_command_gexec(scan_state, active_branch);
|
||||
else if (strcmp(cmd, "gset") == 0)
|
||||
@ -1330,6 +1333,23 @@ exec_command_g(PsqlScanState scan_state, bool active_branch, const char *cmd)
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* \gdesc -- describe query result
|
||||
*/
|
||||
static backslashResult
|
||||
exec_command_gdesc(PsqlScanState scan_state, bool active_branch)
|
||||
{
|
||||
backslashResult status = PSQL_CMD_SKIP_LINE;
|
||||
|
||||
if (active_branch)
|
||||
{
|
||||
pset.gdesc_flag = true;
|
||||
status = PSQL_CMD_SEND;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* \gexec -- send query and execute each field of result
|
||||
*/
|
||||
|
Reference in New Issue
Block a user