mirror of
https://github.com/MariaDB/server.git
synced 2026-05-09 16:44:29 +02:00
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/dlenev/src/mysql-5.0-bg8406 mysql-test/r/sp.result: Auto merged mysql-test/r/trigger.result: Auto merged mysql-test/t/sp.test: Auto merged mysql-test/t/trigger.test: Auto merged sql/item_func.cc: Auto merged sql/sp.cc: Auto merged sql/sp_head.h: Auto merged sql/sql_base.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_parse.cc: Auto merged sql/sql_trigger.cc: Auto merged mysql-test/r/sp-error.result: Manual merge. mysql-test/t/sp-error.test: Manual merge. sql/sp_head.cc: Manual merge. sql/sql_yacc.yy: Manual merge.
This commit is contained in:
commit
eef5f17bde
18 changed files with 666 additions and 252 deletions
|
|
@ -48,24 +48,50 @@ public:
|
|||
LEX_STRING m_db;
|
||||
LEX_STRING m_name;
|
||||
LEX_STRING m_qname;
|
||||
/*
|
||||
Key representing routine in the set of stored routines used by statement.
|
||||
Consists of 1-byte routine type and m_qname (which usually refences to
|
||||
same buffer). Note that one must complete initialization of the key by
|
||||
calling set_routine_type().
|
||||
*/
|
||||
LEX_STRING m_sroutines_key;
|
||||
|
||||
sp_name(LEX_STRING name)
|
||||
: m_name(name)
|
||||
{
|
||||
m_db.str= m_qname.str= 0;
|
||||
m_db.length= m_qname.length= 0;
|
||||
m_db.str= m_qname.str= m_sroutines_key.str= 0;
|
||||
m_db.length= m_qname.length= m_sroutines_key.length= 0;
|
||||
}
|
||||
|
||||
sp_name(LEX_STRING db, LEX_STRING name)
|
||||
: m_db(db), m_name(name)
|
||||
{
|
||||
m_qname.str= 0;
|
||||
m_qname.length= 0;
|
||||
m_qname.str= m_sroutines_key.str= 0;
|
||||
m_qname.length= m_sroutines_key.length= 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Creates temporary sp_name object from key, used mainly
|
||||
for SP-cache lookups.
|
||||
*/
|
||||
sp_name(char *key, uint key_len)
|
||||
{
|
||||
m_sroutines_key.str= key;
|
||||
m_sroutines_key.length= key_len;
|
||||
m_name.str= m_qname.str= key + 1;
|
||||
m_name.length= m_qname.length= key_len - 1;
|
||||
m_db.str= 0;
|
||||
m_db.length= 0;
|
||||
}
|
||||
|
||||
// Init. the qualified name from the db and name.
|
||||
void init_qname(THD *thd); // thd for memroot allocation
|
||||
|
||||
void set_routine_type(char type)
|
||||
{
|
||||
m_sroutines_key.str[0]= type;
|
||||
}
|
||||
|
||||
~sp_name()
|
||||
{}
|
||||
};
|
||||
|
|
@ -107,13 +133,13 @@ public:
|
|||
longlong m_created;
|
||||
longlong m_modified;
|
||||
/*
|
||||
Sets containing names of SP and SF used by this routine.
|
||||
|
||||
TODO Probably we should combine these two hashes in one. It will
|
||||
decrease memory overhead ans simplify algorithms using them. The
|
||||
same applies to similar hashes in LEX.
|
||||
Set containing names of stored routines used by this routine.
|
||||
Note that unlike elements of similar set for statement elements of this
|
||||
set are not linked in one list. Because of this we are able save memory
|
||||
by using for this set same objects that are used in 'sroutines' sets
|
||||
for statements of which this stored routine consists.
|
||||
*/
|
||||
HASH m_spfuns, m_spprocs;
|
||||
HASH m_sroutines;
|
||||
// Pointers set during parsing
|
||||
uchar *m_param_begin, *m_param_end, *m_body_begin;
|
||||
|
||||
|
|
@ -474,10 +500,11 @@ class sp_instr_set_trigger_field : public sp_instr
|
|||
public:
|
||||
|
||||
sp_instr_set_trigger_field(uint ip, sp_pcontext *ctx,
|
||||
Item_trigger_field *trg_fld, Item *val)
|
||||
Item_trigger_field *trg_fld,
|
||||
Item *val, LEX *lex)
|
||||
: sp_instr(ip, ctx),
|
||||
trigger_field(trg_fld),
|
||||
value(val)
|
||||
value(val), m_lex_keeper(lex, TRUE)
|
||||
{}
|
||||
|
||||
virtual ~sp_instr_set_trigger_field()
|
||||
|
|
@ -485,11 +512,14 @@ public:
|
|||
|
||||
virtual int execute(THD *thd, uint *nextp);
|
||||
|
||||
virtual int exec_core(THD *thd, uint *nextp);
|
||||
|
||||
virtual void print(String *str);
|
||||
|
||||
private:
|
||||
Item_trigger_field *trigger_field;
|
||||
Item *value;
|
||||
sp_lex_keeper m_lex_keeper;
|
||||
}; // class sp_instr_trigger_field : public sp_instr
|
||||
|
||||
|
||||
|
|
@ -954,7 +984,5 @@ TABLE_LIST *
|
|||
sp_add_to_query_tables(THD *thd, LEX *lex,
|
||||
const char *db, const char *name,
|
||||
thr_lock_type locktype);
|
||||
bool
|
||||
sp_add_sp_tables_to_table_list(THD *thd, LEX *lex, LEX *func_lex);
|
||||
|
||||
#endif /* _SP_HEAD_H_ */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue