summaryrefslogtreecommitdiff
path: root/sql/sp_head.h
diff options
context:
space:
mode:
authordlenev@mysql.com <>2005-07-09 22:04:18 +0400
committerdlenev@mysql.com <>2005-07-09 22:04:18 +0400
commit75b8d4fa08966baa22bf2e1126c1df8cb6618a80 (patch)
treea5f776a966cf0d153d69ffe3d90f3c7513a727c3 /sql/sp_head.h
parent94310faa2e549a480bba595fd6941b4b37f76bca (diff)
parent923fe817e0d7d4ae6ba8fa16d6c5381bd58ac4b9 (diff)
downloadmariadb-git-75b8d4fa08966baa22bf2e1126c1df8cb6618a80.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/dlenev/src/mysql-5.0-bg8406
Diffstat (limited to 'sql/sp_head.h')
-rw-r--r--sql/sp_head.h56
1 files changed, 42 insertions, 14 deletions
diff --git a/sql/sp_head.h b/sql/sp_head.h
index 39b0c1394fe..32dc4449174 100644
--- a/sql/sp_head.h
+++ b/sql/sp_head.h
@@ -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_ */