mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-13415 Wrap the code in sp.cc into a class Sp_handler
This commit is contained in:
@ -5880,7 +5880,7 @@ bool store_schema_params(THD *thd, TABLE *table, TABLE *proc_table,
|
||||
LEX_CSTRING db, name;
|
||||
char path[FN_REFLEN];
|
||||
sp_head *sp;
|
||||
stored_procedure_type routine_type;
|
||||
const Sp_handler *sph;
|
||||
bool free_sp_head;
|
||||
bool error= 0;
|
||||
DBUG_ENTER("store_schema_params");
|
||||
@ -5892,32 +5892,32 @@ bool store_schema_params(THD *thd, TABLE *table, TABLE *proc_table,
|
||||
proc_table->field[MYSQL_PROC_FIELD_DB]->val_str_nopad(thd->mem_root, &db);
|
||||
proc_table->field[MYSQL_PROC_FIELD_NAME]->val_str_nopad(thd->mem_root, &name);
|
||||
proc_table->field[MYSQL_PROC_FIELD_DEFINER]->val_str_nopad(thd->mem_root, &definer);
|
||||
routine_type= (stored_procedure_type) proc_table->field[MYSQL_PROC_MYSQL_TYPE]->val_int();
|
||||
sph= Sp_handler::handler((stored_procedure_type) proc_table->field[MYSQL_PROC_MYSQL_TYPE]->val_int());
|
||||
if (!sph)
|
||||
sph= &sp_handler_procedure;
|
||||
|
||||
if (!full_access)
|
||||
full_access= !strcmp(sp_user, definer.str);
|
||||
if (!full_access &&
|
||||
check_some_routine_access(thd, db.str, name.str,
|
||||
routine_type == TYPE_ENUM_PROCEDURE))
|
||||
check_some_routine_access(thd, db.str, name.str, sph))
|
||||
DBUG_RETURN(0);
|
||||
|
||||
proc_table->field[MYSQL_PROC_FIELD_PARAM_LIST]->val_str_nopad(thd->mem_root,
|
||||
¶ms);
|
||||
if (routine_type == TYPE_ENUM_FUNCTION)
|
||||
if (sph->type() == TYPE_ENUM_FUNCTION)
|
||||
proc_table->field[MYSQL_PROC_FIELD_RETURNS]->val_str_nopad(thd->mem_root,
|
||||
&returns);
|
||||
|
||||
sp= sp_load_for_information_schema(thd, proc_table, routine_type, db, name,
|
||||
params, returns,
|
||||
(ulong) proc_table->
|
||||
field[MYSQL_PROC_FIELD_SQL_MODE]->val_int(),
|
||||
&free_sp_head);
|
||||
|
||||
sp= sph->sp_load_for_information_schema(thd, proc_table, db, name,
|
||||
params, returns,
|
||||
(ulong) proc_table->
|
||||
field[MYSQL_PROC_FIELD_SQL_MODE]->
|
||||
val_int(),
|
||||
&free_sp_head);
|
||||
if (sp)
|
||||
{
|
||||
Field *field;
|
||||
LEX_CSTRING tmp_string;
|
||||
if (routine_type == TYPE_ENUM_FUNCTION)
|
||||
if (sph->type() == TYPE_ENUM_FUNCTION)
|
||||
{
|
||||
restore_record(table, s->default_values);
|
||||
table->field[0]->store(STRING_WITH_LEN("def"), cs);
|
||||
@ -6000,26 +6000,27 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table,
|
||||
MYSQL_TIME time;
|
||||
LEX *lex= thd->lex;
|
||||
CHARSET_INFO *cs= system_charset_info;
|
||||
const Sp_handler *sph;
|
||||
LEX_CSTRING db, name, definer, returns= empty_clex_str;
|
||||
|
||||
proc_table->field[MYSQL_PROC_FIELD_DB]->val_str_nopad(thd->mem_root, &db);
|
||||
proc_table->field[MYSQL_PROC_FIELD_NAME]->val_str_nopad(thd->mem_root, &name);
|
||||
proc_table->field[MYSQL_PROC_FIELD_DEFINER]->val_str_nopad(thd->mem_root, &definer);
|
||||
sph= Sp_handler::handler((stored_procedure_type)
|
||||
proc_table->field[MYSQL_PROC_MYSQL_TYPE]->val_int());
|
||||
if (!sph)
|
||||
sph= &sp_handler_procedure;
|
||||
|
||||
if (!full_access)
|
||||
full_access= !strcmp(sp_user, definer.str);
|
||||
if (!full_access &&
|
||||
check_some_routine_access(thd, db.str, name.str,
|
||||
proc_table->field[MYSQL_PROC_MYSQL_TYPE]->
|
||||
val_int() == TYPE_ENUM_PROCEDURE))
|
||||
check_some_routine_access(thd, db.str, name.str, sph))
|
||||
return 0;
|
||||
|
||||
if ((lex->sql_command == SQLCOM_SHOW_STATUS_PROC &&
|
||||
proc_table->field[MYSQL_PROC_MYSQL_TYPE]->val_int() ==
|
||||
TYPE_ENUM_PROCEDURE) ||
|
||||
sph->type() == TYPE_ENUM_PROCEDURE) ||
|
||||
(lex->sql_command == SQLCOM_SHOW_STATUS_FUNC &&
|
||||
proc_table->field[MYSQL_PROC_MYSQL_TYPE]->val_int() ==
|
||||
TYPE_ENUM_FUNCTION) ||
|
||||
sph->type() == TYPE_ENUM_FUNCTION) ||
|
||||
(sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND) == 0)
|
||||
{
|
||||
restore_record(table, s->default_values);
|
||||
@ -6036,22 +6037,20 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table,
|
||||
copy_field_as_string(table->field[4],
|
||||
proc_table->field[MYSQL_PROC_MYSQL_TYPE]);
|
||||
|
||||
if (proc_table->field[MYSQL_PROC_MYSQL_TYPE]->val_int() ==
|
||||
TYPE_ENUM_FUNCTION)
|
||||
if (sph->type() == TYPE_ENUM_FUNCTION)
|
||||
{
|
||||
sp_head *sp;
|
||||
bool free_sp_head;
|
||||
proc_table->field[MYSQL_PROC_FIELD_RETURNS]->val_str_nopad(thd->mem_root,
|
||||
&returns);
|
||||
sp= sp_load_for_information_schema(thd, proc_table,
|
||||
TYPE_ENUM_FUNCTION, db, name,
|
||||
empty_clex_str /*params*/,
|
||||
returns,
|
||||
(ulong) proc_table->
|
||||
field[MYSQL_PROC_FIELD_SQL_MODE]->
|
||||
val_int(),
|
||||
&free_sp_head);
|
||||
|
||||
sp= sph->sp_load_for_information_schema(thd, proc_table,
|
||||
db, name,
|
||||
empty_clex_str /*params*/,
|
||||
returns,
|
||||
(ulong) proc_table->
|
||||
field[MYSQL_PROC_FIELD_SQL_MODE]->
|
||||
val_int(),
|
||||
&free_sp_head);
|
||||
if (sp)
|
||||
{
|
||||
char path[FN_REFLEN];
|
||||
|
Reference in New Issue
Block a user