增加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 UNBOUNDED UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN UNLIMITED UNLISTEN UNLOCK UNLOGGED
UNTIL UNUSABLE UPDATE USER USING 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 VERBOSE VERIFY VERSION_P VIEW VOLATILE
WHEN WHERE WHITESPACE_P WINDOW WITH WITHIN WITHOUT WORK WORKLOAD WRAPPER WRITE WHEN WHERE WHITESPACE_P WINDOW WITH WITHIN WITHOUT WORK WORKLOAD WRAPPER WRITE
@ -2073,6 +2073,13 @@ VariableShowStmt:
n->name = "session_authorization"; n->name = "session_authorization";
$$ = (Node *) n; $$ = (Node *) n;
} }
| SHOW VARIABLES LIKE var_name
{
VariableShowStmt *n = makeNode(VariableShowStmt);
n->name = "all";
n->likename = $4;
$$ =(Node *) n;
}
| SHOW ALL | SHOW ALL
{ {
VariableShowStmt *n = makeNode(VariableShowStmt); 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, static void reapply_stacked_values(struct config_generic* variable, struct config_string* holder, GucStack* stack,
const char* curvalue, GucContext curscontext, GucSource cursource); const char* curvalue, GucContext curscontext, GucSource cursource);
static void show_guc_config_option(const char* name, DestReceiver* dest); 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 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 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); 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 * 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) { if (guc_name_compare(name, "all") == 0) {
show_all_guc_config(dest); show_all_guc_config(likename, dest);
} else { } else {
show_guc_config_option(name, dest); show_guc_config_option(name, dest);
} }
@ -16960,7 +16960,7 @@ static void show_guc_config_option(const char* name, DestReceiver* dest)
/* /*
* SHOW ALL command * 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); bool am_superuser = (GetUserId() == BOOTSTRAP_SUPERUSERID);
int i; int i;
@ -16968,6 +16968,7 @@ static void show_all_guc_config(DestReceiver* dest)
TupleDesc tupdesc; TupleDesc tupdesc;
Datum values[3]; Datum values[3];
bool isnull[3] = {false, false, false}; bool isnull[3] = {false, false, false};
char* ptr;
/* need a tuple descriptor representing three TEXT columns */ /* need a tuple descriptor representing three TEXT columns */
tupdesc = CreateTemplateTupleDesc(3, false); tupdesc = CreateTemplateTupleDesc(3, false);
@ -16986,6 +16987,13 @@ static void show_all_guc_config(DestReceiver* dest)
continue; continue;
} }
if(NULL != likename) {
ptr = strstr((char*)conf->name, likename);
if (NULL == ptr) {
continue;
}
}
/* assign to the values array */ /* assign to the values array */
values[0] = PointerGetDatum(cstring_to_text(conf->name)); 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: { case T_VariableShowStmt: {
VariableShowStmt* n = (VariableShowStmt*)parse_tree; VariableShowStmt* n = (VariableShowStmt*)parse_tree;
GetPGVariable(n->name, dest); GetPGVariable(n->name, n->likename, dest);
} break; } break;
case T_ShutdownStmt: { case T_ShutdownStmt: {
ShutdownStmt* n = (ShutdownStmt*)parse_tree; ShutdownStmt* n = (ShutdownStmt*)parse_tree;

View File

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

View File

@ -547,6 +547,7 @@ PG_KEYWORD("value", VALUE_P, UNRESERVED_KEYWORD)
PG_KEYWORD("values", VALUES, COL_NAME_KEYWORD) PG_KEYWORD("values", VALUES, COL_NAME_KEYWORD)
PG_KEYWORD("varchar", VARCHAR, COL_NAME_KEYWORD) PG_KEYWORD("varchar", VARCHAR, COL_NAME_KEYWORD)
PG_KEYWORD("varchar2", VARCHAR2, COL_NAME_KEYWORD) PG_KEYWORD("varchar2", VARCHAR2, COL_NAME_KEYWORD)
PG_KEYWORD("variables", VARIABLES, UNRESERVED_KEYWORD)
PG_KEYWORD("variadic", VARIADIC, RESERVED_KEYWORD) PG_KEYWORD("variadic", VARIADIC, RESERVED_KEYWORD)
PG_KEYWORD("varying", VARYING, UNRESERVED_KEYWORD) PG_KEYWORD("varying", VARYING, UNRESERVED_KEYWORD)
PG_KEYWORD("vcgroup", VCGROUP, 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 int GetNumConfigOptions(void);
extern void SetPGVariable(const char* name, List* args, bool is_local); 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); extern TupleDesc GetPGVariableResultDesc(const char* name);
#ifdef PGXC #ifdef PGXC