summaryrefslogtreecommitdiff
path: root/sql/sp_head.cc
diff options
context:
space:
mode:
authorunknown <dlenev@mysql.com>2004-09-09 19:52:10 +0400
committerunknown <dlenev@mysql.com>2004-09-09 19:52:10 +0400
commiteb75a9fd8dc7d22b2e7f3de5abbdecb25a464f9f (patch)
treeb2916e292af539d345d86ad24396d1654c22552b /sql/sp_head.cc
parent12ce293a7fc18fdc2c6f8d7ec951d816d3661cf8 (diff)
parentbc787254247cb66a5e1adc0af6834c10737ecc6e (diff)
downloadmariadb-git-eb75a9fd8dc7d22b2e7f3de5abbdecb25a464f9f.tar.gz
Yet another manual merge with main tree for patch for WL#1218 "Triggers"
sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/lex.h: Auto merged sql/sql_base.cc: Auto merged sql/sql_delete.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_parse.cc: Auto merged sql/sql_table.cc: Auto merged sql/share/czech/errmsg.txt: Auto merged sql/share/danish/errmsg.txt: Auto merged sql/share/dutch/errmsg.txt: Auto merged sql/share/english/errmsg.txt: Auto merged sql/share/estonian/errmsg.txt: Auto merged sql/share/french/errmsg.txt: Auto merged sql/share/german/errmsg.txt: Auto merged sql/share/greek/errmsg.txt: Auto merged sql/share/hungarian/errmsg.txt: Auto merged sql/share/italian/errmsg.txt: Auto merged sql/share/japanese/errmsg.txt: Auto merged sql/share/korean/errmsg.txt: Auto merged sql/share/norwegian-ny/errmsg.txt: Auto merged sql/share/norwegian/errmsg.txt: Auto merged sql/share/polish/errmsg.txt: Auto merged sql/share/portuguese/errmsg.txt: Auto merged sql/share/romanian/errmsg.txt: Auto merged sql/share/russian/errmsg.txt: Auto merged sql/share/serbian/errmsg.txt: Auto merged sql/share/slovak/errmsg.txt: Auto merged sql/share/spanish/errmsg.txt: Auto merged sql/share/swedish/errmsg.txt: Auto merged sql/share/ukrainian/errmsg.txt: Auto merged include/mysqld_error.h: Manual merge. sql/Makefile.am: Manual merge. sql/mysql_priv.h: Manual merge. sql/sp_head.cc: Manual merge. sql/sql_lex.cc: Manual merge. sql/sql_yacc.yy: Manual merge.
Diffstat (limited to 'sql/sp_head.cc')
-rw-r--r--sql/sp_head.cc34
1 files changed, 15 insertions, 19 deletions
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index 176a612d33d..8028ac8ba4f 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -262,6 +262,7 @@ sp_head::sp_head()
{
DBUG_ENTER("sp_head::sp_head");
+ state= INITIALIZED;
m_backpatch.empty();
m_lex.empty();
DBUG_VOID_RETURN;
@@ -295,20 +296,11 @@ sp_head::init_strings(THD *thd, LEX *lex, sp_name *name)
/* We have to copy strings to get them into the right memroot */
if (name)
{
- DBUG_PRINT("info", ("name: %*.s%*s",
- name->m_db.length, name->m_db.str,
- name->m_name.length, name->m_name.str));
-
+ m_db.length= name->m_db.length;
if (name->m_db.length == 0)
- {
- m_db.length= (thd->db ? strlen(thd->db) : 0);
- m_db.str= strmake_root(root, (thd->db ? thd->db : ""), m_db.length);
- }
+ m_db.str= NULL;
else
- {
- m_db.length= name->m_db.length;
m_db.str= strmake_root(root, name->m_db.str, name->m_db.length);
- }
m_name.length= name->m_name.length;
m_name.str= strmake_root(root, name->m_name.str, name->m_name.length);
@@ -317,18 +309,20 @@ sp_head::init_strings(THD *thd, LEX *lex, sp_name *name)
m_qname.length= name->m_qname.length;
m_qname.str= strmake_root(root, name->m_qname.str, m_qname.length);
}
- else
+ else if (thd->db)
{
- m_db.length= (thd->db ? strlen(thd->db) : 0);
- m_db.str= strmake_root(root, (thd->db ? thd->db : ""), m_db.length);
+ m_db.length= thd->db_length
+ m_db.str= strmake_root(root, thd->db, m_db.length);
+
}
-
+
if (m_param_begin && m_param_end)
{
m_params.length= m_param_end - m_param_begin;
m_params.str= strmake_root(root,
(char *)m_param_begin, m_params.length);
}
+
if (m_returns_begin && m_returns_end)
{
/* QQ KLUDGE: We can't seem to cut out just the type in the parser
@@ -465,7 +459,8 @@ sp_head::execute(THD *thd)
#endif
dbchanged= FALSE;
- if ((ret= sp_use_new_db(thd, m_db.str, olddb, sizeof(olddb), 0, &dbchanged)))
+ if (m_db.length &&
+ (ret= sp_use_new_db(thd, m_db.str, olddb, sizeof(olddb), 0, &dbchanged)))
goto done;
if ((ctx= thd->spcont))
@@ -510,8 +505,7 @@ sp_head::execute(THD *thd)
}
} while (ret == 0 && !thd->killed && !thd->query_error);
- if (thd->current_arena)
- cleanup_items(thd->current_arena->free_list);
+ cleanup_items(thd->current_arena->free_list);
thd->current_arena= old_arena;
done:
@@ -962,7 +956,9 @@ sp_head::restore_thd_mem_root(THD *thd)
{
DBUG_ENTER("sp_head::restore_thd_mem_root");
Item *flist= free_list; // The old list
- set_item_arena(thd); // Get new fre_list and mem_root
+ set_item_arena(thd); // Get new free_list and mem_root
+ state= INITIALIZED;
+
DBUG_PRINT("info", ("mem_root 0x%lx returned from thd mem root 0x%lx",
(ulong) &mem_root, (ulong) &thd->mem_root));
thd->free_list= flist; // Restore the old one