summaryrefslogtreecommitdiff
path: root/sql/sp_head.h
diff options
context:
space:
mode:
authorKonstantin Osipov <kostja@sun.com>2009-12-09 19:11:26 +0300
committerKonstantin Osipov <kostja@sun.com>2009-12-09 19:11:26 +0300
commit634a81094288b9e47649ceed749d59af18a97e26 (patch)
treec76b279ab7dbe6cccd4dc8c504cb62672e9bf097 /sql/sp_head.h
parentb9d2f55a9d98c2a8fe4d67de51e7e7b84d2b7440 (diff)
downloadmariadb-git-634a81094288b9e47649ceed749d59af18a97e26.tar.gz
Backport of:
------------------------------------------------------------ revno: 2617.68.24 committer: Dmitry Lenev <dlenev@mysql.com> branch nick: mysql-next-bg-pre2-2 timestamp: Wed 2009-09-16 17:25:29 +0400 message: Pre-requisite patch for fixing bug #30977 "Concurrent statement using stored function and DROP FUNCTION breaks SBR". Added MDL_request for stored routine as member to Sroutine_hash_entry in order to be able perform metadata locking for stored routines in future (Sroutine_hash_entry is an equivalent of TABLE_LIST class for stored routines). (WL#4284, follow up fixes). sql/mdl.cc: Introduced version of MDL_request::init() method which initializes lock request using pre-built MDL key. MDL_key::table_name/table_name_length() getters were renamed to reflect the fact that MDL_key objects are now created not only for tables. sql/mdl.h: Extended enum_mdl_namespace enum with values which correspond to namespaces for stored functions and triggers. Renamed MDL_key::table_name/table_name_length() getters to MDL_key::name() and name_length() correspondingly to reflect the fact that MDL_key objects are now created not only for tables. Added MDL_key::mdl_namespace() getter. Also added version of MDL_request::init() method which initializes lock request using pre-built MDL key. sql/sp.cc: Added MDL_request for stored routine as member to Sroutine_hash_entry. Changed code to use MDL_key from this request as a key for LEX::sroutines set. Removed separate "key" member from Sroutine_hash_entry as it became unnecessary. sql/sp.h: Added MDL_request for stored routine as member to Sroutine_hash_entry in order to be able perform metadata locking for stored routines in future (Sroutine_hash_entry is an equivalent of TABLE_LIST class for stored routines). Removed Sroutine_hash_entry::key member as now we can use MDL_key from this request as a key for LEX::sroutines set. sql/sp_head.cc: Removed sp_name::m_sroutines_key member and set_routine_type() method. Since key for routine in LEX::sroutines set has no longer sp_name::m_qname as suffix we won't save anything by creating it at sp_name construction time. Adjusted sp_name constructor used for creating temporary objects for lookups in SP-cache to accept MDL_key as parameter and to avoid any memory allocation. Finally, removed sp_head::m_soutines_key member for reasons similar to why sp_name::m_sroutines_key was removed sql/sp_head.h: Removed sp_name::m_sroutines_key member and set_routine_type() method. Since key for routine in LEX::sroutines set has no longer sp_name::m_qname as suffix we won't save anything by creating it at sp_name construction time. Adjusted sp_name constructor used for creating temporary objects for lookups in SP-cache to accept MDL_key as parameter and to avoid any memory allocation. Finally, removed sp_head::m_soutines_key member for reasons similar to why sp_name::m_sroutines_key was removed. sql/sql_base.cc: Adjusted code to the fact that we now use MDL_key from Sroutine_hash_entry::mdl_request as a key for LEX::sroutines set. MDL_key::table_name/table_name_length() getters were renamed to reflect the fact that MDL_key objects are now created not only for tables. sql/sql_trigger.cc: sp_add_used_routine() now takes MDL_key as parameter as now we use instance of this class as a key for LEX::sroutines set.
Diffstat (limited to 'sql/sp_head.h')
-rw-r--r--sql/sp_head.h29
1 files changed, 4 insertions, 25 deletions
diff --git a/sql/sp_head.h b/sql/sp_head.h
index 5610ecd2a72..74fcd03180e 100644
--- a/sql/sp_head.h
+++ b/sql/sp_head.h
@@ -109,36 +109,21 @@ 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;
bool m_explicit_name; /**< Prepend the db name? */
sp_name(LEX_STRING db, LEX_STRING name, bool use_explicit_name)
: m_db(db), m_name(name), m_explicit_name(use_explicit_name)
{
- m_qname.str= m_sroutines_key.str= 0;
- m_qname.length= m_sroutines_key.length= 0;
+ m_qname.str= 0;
+ m_qname.length= 0;
}
- /**
- Creates temporary sp_name object from key, used mainly
- for SP-cache lookups.
- */
- sp_name(THD *thd, char *key, uint key_len);
+ /** Create temporary sp_name object from MDL key. */
+ sp_name(const MDL_key *key, char *qname_buff);
// 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()
{}
};
@@ -181,12 +166,6 @@ public:
ulong m_sql_mode; ///< For SHOW CREATE and execution
LEX_STRING m_qname; ///< db.name
bool m_explicit_name; ///< Prepend the db name? */
- /**
- Key representing routine in the set of stored routines used by statement.
- [routine_type]db.name
- @sa sp_name::m_sroutines_key
- */
- LEX_STRING m_sroutines_key;
LEX_STRING m_db;
LEX_STRING m_name;
LEX_STRING m_params;