增加show variables like var_string语法,方便用户查询参数时,记不清变量名称时使用

This commit is contained in:
hui.lv 2020-12-16 11:41:47 +08:00
parent 3e5ed92b95
commit eb4162cf4a
6 changed files with 24 additions and 7 deletions

View File

@ -697,7 +697,7 @@ static void ParseUpdateMultiSet(List *set_target_list, SelectStmt *stmt, core_yy
UNBOUNDED UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN UNLIMITED UNLISTEN UNLOCK UNLOGGED
UNTIL UNUSABLE UPDATE USER USING
VACUUM VALID VALIDATE VALIDATION VALIDATOR VALUE_P VALUES VARCHAR VARCHAR2 VARIADIC VARRAY VARYING VCGROUP
VACUUM VALID VALIDATE VALIDATION VALIDATOR VALUE_P VALUES VARCHAR VARCHAR2 VARIABLES VARIADIC VARRAY VARYING VCGROUP
VERBOSE VERIFY VERSION_P VIEW VOLATILE
WHEN WHERE WHITESPACE_P WINDOW WITH WITHIN WITHOUT WORK WORKLOAD WRAPPER WRITE
@ -2073,6 +2073,13 @@ VariableShowStmt:
n->name = "session_authorization";
$$ = (Node *) n;
}
| SHOW VARIABLES LIKE var_name
{
VariableShowStmt *n = makeNode(VariableShowStmt);
n->name = "all";
n->likename = $4;
$$ =(Node *) n;
}
| SHOW ALL
{
VariableShowStmt *n = makeNode(VariableShowStmt);

View File

@ -12278,7 +12278,7 @@ static void report_guc_option(struct config_generic* record);
static void reapply_stacked_values(struct config_generic* variable, struct config_string* holder, GucStack* stack,
const char* curvalue, GucContext curscontext, GucSource cursource);
static void show_guc_config_option(const char* name, DestReceiver* dest);
static void show_all_guc_config(DestReceiver* dest);
static void show_all_guc_config(const char* likename, DestReceiver* dest);
static char* _show_option(struct config_generic* record, bool use_units);
static bool validate_option_array_item(const char* name, const char* value, bool skip_if_no_permissions);
static void replace_config_value(char** optlines, char* name, char* value, config_type vartype);
@ -16898,10 +16898,10 @@ void EmitWarningsOnPlaceholders(const char* className)
/*
* SHOW command
*/
void GetPGVariable(const char* name, DestReceiver* dest)
void GetPGVariable(const char* name, const char* likename, DestReceiver* dest)
{
if (guc_name_compare(name, "all") == 0) {
show_all_guc_config(dest);
show_all_guc_config(likename, dest);
} else {
show_guc_config_option(name, dest);
}
@ -16960,7 +16960,7 @@ static void show_guc_config_option(const char* name, DestReceiver* dest)
/*
* SHOW ALL command
*/
static void show_all_guc_config(DestReceiver* dest)
static void show_all_guc_config(const char* likename, DestReceiver* dest)
{
bool am_superuser = (GetUserId() == BOOTSTRAP_SUPERUSERID);
int i;
@ -16968,6 +16968,7 @@ static void show_all_guc_config(DestReceiver* dest)
TupleDesc tupdesc;
Datum values[3];
bool isnull[3] = {false, false, false};
char* ptr;
/* need a tuple descriptor representing three TEXT columns */
tupdesc = CreateTemplateTupleDesc(3, false);
@ -16986,6 +16987,13 @@ static void show_all_guc_config(DestReceiver* dest)
continue;
}
if(NULL != likename) {
ptr = strstr((char*)conf->name, likename);
if (NULL == ptr) {
continue;
}
}
/* assign to the values array */
values[0] = PointerGetDatum(cstring_to_text(conf->name));

View File

@ -4892,7 +4892,7 @@ void standard_ProcessUtility(Node* parse_tree, const char* query_string, ParamLi
case T_VariableShowStmt: {
VariableShowStmt* n = (VariableShowStmt*)parse_tree;
GetPGVariable(n->name, dest);
GetPGVariable(n->name, n->likename, dest);
} break;
case T_ShutdownStmt: {
ShutdownStmt* n = (ShutdownStmt*)parse_tree;

View File

@ -1783,6 +1783,7 @@ typedef struct VariableSetStmt {
typedef struct VariableShowStmt {
NodeTag type;
char* name;
char* likename;
} VariableShowStmt;
/* ----------------------

View File

@ -547,6 +547,7 @@ PG_KEYWORD("value", VALUE_P, UNRESERVED_KEYWORD)
PG_KEYWORD("values", VALUES, COL_NAME_KEYWORD)
PG_KEYWORD("varchar", VARCHAR, COL_NAME_KEYWORD)
PG_KEYWORD("varchar2", VARCHAR2, COL_NAME_KEYWORD)
PG_KEYWORD("variables", VARIABLES, UNRESERVED_KEYWORD)
PG_KEYWORD("variadic", VARIADIC, RESERVED_KEYWORD)
PG_KEYWORD("varying", VARYING, UNRESERVED_KEYWORD)
PG_KEYWORD("vcgroup", VCGROUP, UNRESERVED_KEYWORD)

View File

@ -251,7 +251,7 @@ extern void GetConfigOptionByNum(int varnum, const char** values, bool* noshow);
extern int GetNumConfigOptions(void);
extern void SetPGVariable(const char* name, List* args, bool is_local);
extern void GetPGVariable(const char* name, DestReceiver* dest);
extern void GetPGVariable(const char* name, const char* likename, DestReceiver* dest);
extern TupleDesc GetPGVariableResultDesc(const char* name);
#ifdef PGXC