mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Code cleanup (and moved sp cache to separate file).
This commit is contained in:
parent
8070c06ae0
commit
f1c754efe9
7 changed files with 37 additions and 70 deletions
|
@ -56,7 +56,7 @@ sqlsources = convert.cc derror.cc field.cc field_conv.cc filesort.cc \
|
|||
sql_update.cc sql_yacc.cc table.cc thr_malloc.cc time.cc \
|
||||
unireg.cc uniques.cc stacktrace.c sql_union.cc hash_filo.cc \
|
||||
spatial.cc gstream.cc sql_help.cc \
|
||||
sp_head.cc sp_pcontext.cc sp.cc
|
||||
sp_head.cc sp_pcontext.cc sp.cc sp_cache.cc
|
||||
|
||||
EXTRA_DIST = lib_vio.c
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
|
|||
log_event.h mini_client.h sql_repl.h slave.h \
|
||||
stacktrace.h sql_sort.h sql_cache.h set_var.h \
|
||||
spatial.h gstream.h sp_head.h sp_pcontext.h \
|
||||
sp_rcontext.h sp.h
|
||||
sp_rcontext.h sp.h sp_cache.h
|
||||
mysqld_SOURCES = sql_lex.cc sql_handler.cc \
|
||||
item.cc item_sum.cc item_buff.cc item_func.cc \
|
||||
item_cmpfunc.cc item_strfunc.cc item_timefunc.cc \
|
||||
|
@ -87,7 +87,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc \
|
|||
mini_client.cc mini_client_errors.c pack.c\
|
||||
stacktrace.c repl_failsafe.h repl_failsafe.cc sql_olap.cc\
|
||||
gstream.cc spatial.cc sql_help.cc protocol_cursor.cc \
|
||||
sp_head.cc sp_pcontext.cc sp.cc
|
||||
sp_head.cc sp_pcontext.cc sp.cc sp_cache.cc
|
||||
gen_lex_hash_SOURCES = gen_lex_hash.cc
|
||||
gen_lex_hash_LDADD = $(LDADD) $(CXXLDFLAGS)
|
||||
|
||||
|
|
69
sql/sp.cc
69
sql/sp.cc
|
@ -18,12 +18,7 @@
|
|||
#include "mysql_priv.h"
|
||||
#include "sp.h"
|
||||
#include "sp_head.h"
|
||||
|
||||
static sp_head *
|
||||
sp_find_cached_function(THD *thd, char *name, uint namelen);
|
||||
|
||||
static sp_head *
|
||||
sp_find_cached_procedure(THD *thd, char *name, uint namelen);
|
||||
#include "sp_cache.h"
|
||||
|
||||
/*
|
||||
*
|
||||
|
@ -102,7 +97,7 @@ db_find_routine(THD *thd, int type, char *name, uint namelen, sp_head **sphp)
|
|||
char *ptr;
|
||||
uint length;
|
||||
char buff[65];
|
||||
String str(buff,sizeof(buff),&my_charset_bin);
|
||||
String str(buff, sizeof(buff), &my_charset_bin);
|
||||
|
||||
// QQ Set up our own mem_root here???
|
||||
ret= db_find_routine_aux(thd, type, name, namelen, TL_READ, &table, &opened);
|
||||
|
@ -132,10 +127,10 @@ db_find_routine(THD *thd, int type, char *name, uint namelen, sp_head **sphp)
|
|||
if (ptr[0] == 'N')
|
||||
suid= 0;
|
||||
|
||||
table->field[7]->val_str(&str,&str);
|
||||
table->field[7]->val_str(&str, &str);
|
||||
ptr= 0;
|
||||
if ((length= str.length()))
|
||||
ptr= strmake_root(&thd->mem_root, str.ptr(),length);
|
||||
ptr= strmake_root(&thd->mem_root, str.ptr(), length);
|
||||
|
||||
if (opened)
|
||||
{
|
||||
|
@ -166,7 +161,7 @@ db_find_routine(THD *thd, int type, char *name, uint namelen, sp_head **sphp)
|
|||
{
|
||||
*sphp= thd->lex->sphead;
|
||||
(*sphp)->sp_set_info((char *) creator, (uint) strlen(creator),
|
||||
created, modified, suid,
|
||||
created, modified, suid,
|
||||
ptr, length);
|
||||
}
|
||||
thd->lex->sql_command= oldcmd;
|
||||
|
@ -204,10 +199,10 @@ db_create_routine(THD *thd, int type,
|
|||
table->field[0]->store(name, namelen, system_charset_info);
|
||||
table->field[1]->store((longlong)type);
|
||||
table->field[2]->store(def, deflen, system_charset_info);
|
||||
table->field[3]->store(creator, (uint) strlen(creator), system_charset_info);
|
||||
((Field_timestamp*) table->field[5])->set_time();
|
||||
table->field[3]->store(creator, (uint)strlen(creator), system_charset_info);
|
||||
((Field_timestamp *)table->field[5])->set_time();
|
||||
if (suid)
|
||||
table->field[6]->store((longlong) suid);
|
||||
table->field[6]->store((longlong)suid);
|
||||
if (comment)
|
||||
table->field[7]->store(comment, commentlen, system_charset_info);
|
||||
|
||||
|
@ -257,15 +252,13 @@ sp_find_procedure(THD *thd, LEX_STRING *name)
|
|||
|
||||
DBUG_PRINT("enter", ("name: %*s", name->length, name->str));
|
||||
|
||||
sp= sp_find_cached_procedure(thd, name->str, name->length);
|
||||
sp= thd->sp_proc_cache->lookup(name->str, name->length);
|
||||
if (! sp)
|
||||
{
|
||||
if (db_find_routine(thd, TYPE_ENUM_PROCEDURE,
|
||||
name->str, name->length, &sp) == SP_OK)
|
||||
{
|
||||
HASH *phash= thd->sp_hash+TYPE_ENUM_PROCEDURE-1;
|
||||
|
||||
hash_insert(phash, (const byte*)sp);
|
||||
thd->sp_proc_cache->insert(sp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -294,12 +287,10 @@ sp_drop_procedure(THD *thd, char *name, uint namelen)
|
|||
sp_head *sp;
|
||||
int ret;
|
||||
|
||||
sp= sp_find_cached_procedure(thd, name, namelen);
|
||||
sp= thd->sp_proc_cache->lookup(name, namelen);
|
||||
if (sp)
|
||||
{
|
||||
HASH *phash= thd->sp_hash+TYPE_ENUM_PROCEDURE-1;
|
||||
|
||||
hash_delete(phash, (byte*)sp);
|
||||
thd->sp_proc_cache->remove(sp);
|
||||
delete sp;
|
||||
}
|
||||
ret= db_drop_routine(thd, TYPE_ENUM_PROCEDURE, name, namelen);
|
||||
|
@ -322,7 +313,7 @@ sp_find_function(THD *thd, LEX_STRING *name)
|
|||
|
||||
DBUG_PRINT("enter", ("name: %*s", name->length, name->str));
|
||||
|
||||
sp= sp_find_cached_function(thd, name->str, name->length);
|
||||
sp= thd->sp_func_cache->lookup(name->str, name->length);
|
||||
if (! sp)
|
||||
{
|
||||
if (db_find_routine(thd, TYPE_ENUM_FUNCTION,
|
||||
|
@ -354,12 +345,10 @@ sp_drop_function(THD *thd, char *name, uint namelen)
|
|||
sp_head *sp;
|
||||
int ret;
|
||||
|
||||
sp= sp_find_cached_function(thd, name, namelen);
|
||||
sp= thd->sp_func_cache->lookup(name, namelen);
|
||||
if (sp)
|
||||
{
|
||||
HASH *fhash= thd->sp_hash+TYPE_ENUM_FUNCTION-1;
|
||||
|
||||
hash_delete(fhash, (byte*)sp);
|
||||
thd->sp_func_cache->remove(sp);
|
||||
delete sp;
|
||||
}
|
||||
ret= db_drop_routine(thd, TYPE_ENUM_FUNCTION, name, namelen);
|
||||
|
@ -375,7 +364,7 @@ sp_function_exists(THD *thd, LEX_STRING *name)
|
|||
bool ret= FALSE;
|
||||
bool opened= FALSE;
|
||||
|
||||
if (sp_find_cached_function(thd, name->str, name->length) ||
|
||||
if (thd->sp_func_cache->lookup(name->str, name->length) ||
|
||||
db_find_routine_aux(thd, TYPE_ENUM_FUNCTION,
|
||||
name->str, name->length, TL_READ,
|
||||
&table, &opened) == SP_OK)
|
||||
|
@ -434,14 +423,13 @@ sp_cache_functions(THD *thd, LEX *lex)
|
|||
char *fn;
|
||||
enum_sql_command cmd= lex->sql_command;
|
||||
int ret= 0;
|
||||
HASH *fhash= thd->sp_hash+TYPE_ENUM_FUNCTION-1;
|
||||
|
||||
while ((fn= li++))
|
||||
{
|
||||
sp_head *sp;
|
||||
int len= strlen(fn);
|
||||
|
||||
if (hash_search(fhash,(const byte*)fn,len))
|
||||
if (thd->sp_func_cache->lookup(fn, len))
|
||||
continue;
|
||||
|
||||
if (db_find_routine(thd, TYPE_ENUM_FUNCTION, fn, len, &sp) == SP_OK)
|
||||
|
@ -449,7 +437,7 @@ sp_cache_functions(THD *thd, LEX *lex)
|
|||
ret= sp_cache_functions(thd, thd->lex);
|
||||
if (ret)
|
||||
break;
|
||||
hash_insert(fhash,(const byte*)sp);
|
||||
thd->sp_func_cache->insert(sp);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -460,24 +448,3 @@ sp_cache_functions(THD *thd, LEX *lex)
|
|||
lex->sql_command= cmd;
|
||||
return ret;
|
||||
}
|
||||
|
||||
byte *
|
||||
hash_get_key_for_sp_head(const byte *ptr, uint *plen,
|
||||
my_bool first)
|
||||
{
|
||||
return ((sp_head*)ptr)->name(plen);
|
||||
}
|
||||
|
||||
static sp_head *
|
||||
sp_find_cached_function(THD *thd, char *name, uint namelen)
|
||||
{
|
||||
return (sp_head*)hash_search(thd->sp_hash+TYPE_ENUM_FUNCTION-1,
|
||||
(const byte*)name,namelen);
|
||||
}
|
||||
|
||||
static sp_head *
|
||||
sp_find_cached_procedure(THD *thd, char *name, uint namelen)
|
||||
{
|
||||
return (sp_head*)hash_search(thd->sp_hash+TYPE_ENUM_PROCEDURE-1,
|
||||
(const byte*)name,namelen);
|
||||
}
|
||||
|
|
|
@ -387,7 +387,7 @@ sp_head::execute_procedure(THD *thd, List<Item> *args)
|
|||
octx->set_item(nctx->get_oindex(i), nctx->get_item(i));
|
||||
else
|
||||
{ // A global user variable
|
||||
#if 0
|
||||
#if NOT_USED_NOW
|
||||
// QQ This works if the parameter really is a user variable, but
|
||||
// for the moment we can't assure that, so it will crash if it's
|
||||
// something else. So for now, we just do nothing, to avoid a crash.
|
||||
|
|
|
@ -48,7 +48,7 @@ public:
|
|||
my_bool m_simple_case; // TRUE if parsing simple case, FALSE otherwise
|
||||
my_bool m_multi_query; // TRUE if a procedure with SELECT(s)
|
||||
uint m_old_cmq; // Old CLIENT_MULTI_QUERIES value
|
||||
#if 0
|
||||
#if NOT_USED_NOW
|
||||
// QQ We're not using this at the moment.
|
||||
List<char *> m_calls; // Called procedures.
|
||||
List<char *> m_tables; // Used tables.
|
||||
|
|
|
@ -37,8 +37,7 @@
|
|||
#include <mysys_err.h>
|
||||
|
||||
#include <sp_rcontext.h>
|
||||
|
||||
byte *hash_get_key_for_sp_head(const byte*,uint*,my_bool);
|
||||
#include <sp_cache.h>
|
||||
|
||||
/*
|
||||
The following is used to initialise Table_ident with a internal
|
||||
|
@ -157,11 +156,9 @@ THD::THD():user_time(0), is_fatal_error(0),
|
|||
hash_init(&user_vars, system_charset_info, USER_VARS_HASH_SIZE, 0, 0,
|
||||
(hash_get_key) get_var_key,
|
||||
(hash_free_key) free_user_var, 0);
|
||||
|
||||
hash_init(sp_hash,system_charset_info,0,0,0,
|
||||
hash_get_key_for_sp_head,0,0);
|
||||
hash_init(sp_hash+1,system_charset_info,0,0,0,
|
||||
hash_get_key_for_sp_head,0,0);
|
||||
|
||||
sp_proc_cache= new sp_cache();
|
||||
sp_func_cache= new sp_cache();
|
||||
|
||||
/* For user vars replication*/
|
||||
if (opt_bin_log)
|
||||
|
@ -265,10 +262,8 @@ void THD::change_user(void)
|
|||
hash_init(&user_vars, system_charset_info, USER_VARS_HASH_SIZE, 0, 0,
|
||||
(hash_get_key) get_var_key,
|
||||
(hash_free_key) free_user_var, 0);
|
||||
hash_init(sp_hash,system_charset_info,0,0,0,
|
||||
hash_get_key_for_sp_head,0,0);
|
||||
hash_init(sp_hash+1,system_charset_info,0,0,0,
|
||||
hash_get_key_for_sp_head,0,0);
|
||||
sp_proc_cache->init();
|
||||
sp_func_cache->init();
|
||||
}
|
||||
|
||||
|
||||
|
@ -292,8 +287,8 @@ void THD::cleanup(void)
|
|||
close_temporary_tables(this);
|
||||
delete_dynamic(&user_var_events);
|
||||
hash_free(&user_vars);
|
||||
hash_free(sp_hash);
|
||||
hash_free(sp_hash+1);
|
||||
sp_proc_cache->cleanup();
|
||||
sp_func_cache->cleanup();
|
||||
if (global_read_lock)
|
||||
unlock_global_read_lock(this);
|
||||
if (ull)
|
||||
|
@ -335,6 +330,9 @@ THD::~THD()
|
|||
}
|
||||
#endif
|
||||
|
||||
delete sp_proc_cache;
|
||||
delete sp_func_cache;
|
||||
|
||||
DBUG_PRINT("info", ("freeing host"));
|
||||
if (host != localhost) // If not pointer to constant
|
||||
safeFree(host);
|
||||
|
|
|
@ -27,6 +27,7 @@ class Query_log_event;
|
|||
class Load_log_event;
|
||||
class Slave_log_event;
|
||||
class sp_rcontext;
|
||||
class sp_cache;
|
||||
|
||||
enum enum_enable_or_disable { LEAVE_AS_IS, ENABLE, DISABLE };
|
||||
enum enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY };
|
||||
|
@ -551,7 +552,8 @@ public:
|
|||
bool prepare_command;
|
||||
bool tmp_table_used;
|
||||
sp_rcontext *spcont; // SP runtime context
|
||||
HASH sp_hash[2]; // hash for SP PROCEDURES and FUNCTIONS
|
||||
sp_cache *sp_proc_cache;
|
||||
sp_cache *sp_func_cache;
|
||||
|
||||
/*
|
||||
If we do a purge of binary logs, log index info of the threads
|
||||
|
|
Loading…
Add table
Reference in a new issue