summaryrefslogtreecommitdiff
path: root/sql/sp_rcontext.cc
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2005-06-05 17:01:20 +0300
committerunknown <monty@mysql.com>2005-06-05 17:01:20 +0300
commitb08b3a1555c296e4e396fd968a268b7b3dd58397 (patch)
tree9e3ba3064a7442c6cf9812a9f784e111bd244e0e /sql/sp_rcontext.cc
parent906b210a4a51a91416d553cb744bc9c22d0bd942 (diff)
downloadmariadb-git-b08b3a1555c296e4e396fd968a268b7b3dd58397.tar.gz
Cleanup during review
Simple optimization for 2 argument usage to function of variable arguments Fix stack overrun when using 1+1+1+1+1+1+1+.... Update crash-me results for 5.0 Don't call post_open if pre_open() fails (optimization) sql-bench/limits/mysql-4.1.cfg: Rename: sql-bench/limits/mysql.cfg -> sql-bench/limits/mysql-4.1.cfg libmysql/libmysql.c: More portable define mysql-test/mysql-test-run.sh: Write also InnoDB warnings to warnings.log mysql-test/t/type_newdecimal.test: Don't get errors if innodb is not defined mysys/my_alloc.c: Cleanup comments mysys/thr_lock.c: Cleanup comments sql/item.h: Remove not needed initializer sql/item_func.cc: Simple optimization for 2 argument usage to function of variable arguments sql/mysql_priv.h: We use more stackspace with the introduction of int_op() etc. This change ensures we don't run out of stack when doing 1+1+1+1... (Tested on x86, 32 bit) sql/sp_head.cc: Don't call post_open if pre_open() fails sql/sp_rcontext.cc: More comments Change so that post_open() doesn't have to be called if pre_open() fails sql/sql_parse.cc: Fold long lines sql/sql_select.cc: Simple reorganization to reduce number of if's Ensure that table_map is updated for where clause (fixed warning from valgrind)
Diffstat (limited to 'sql/sp_rcontext.cc')
-rw-r--r--sql/sp_rcontext.cc37
1 files changed, 25 insertions, 12 deletions
diff --git a/sql/sp_rcontext.cc b/sql/sp_rcontext.cc
index 2e79a1e2533..0e8210301c1 100644
--- a/sql/sp_rcontext.cc
+++ b/sql/sp_rcontext.cc
@@ -168,8 +168,22 @@ sp_rcontext::pop_cursors(uint count)
*
*/
-// We have split this in two to make it easy for sp_instr_copen
-// to reuse the sp_instr::exec_stmt() code.
+/*
+ pre_open cursor
+
+ SYNOPSIS
+ pre_open()
+ THD Thread handler
+
+ NOTES
+ We have to open cursor in two steps to make it easy for sp_instr_copen
+ to reuse the sp_instr::exec_stmt() code.
+ If this function returns 0, post_open should not be called
+
+ RETURN
+ 0 ERROR
+*/
+
sp_lex_keeper*
sp_cursor::pre_open(THD *thd)
{
@@ -179,32 +193,31 @@ sp_cursor::pre_open(THD *thd)
MYF(0));
return NULL;
}
-
- bzero((char *)&m_mem_root, sizeof(m_mem_root));
init_alloc_root(&m_mem_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC);
if ((m_prot= new Protocol_cursor(thd, &m_mem_root)) == NULL)
return NULL;
- m_oprot= thd->protocol; // Save the original protocol
- thd->protocol= m_prot;
-
+ /* Save for execution. Will be restored in post_open */
+ m_oprot= thd->protocol;
m_nseof= thd->net.no_send_eof;
+
+ /* Change protocol for execution */
+ thd->protocol= m_prot;
thd->net.no_send_eof= TRUE;
return m_lex_keeper;
}
+
void
sp_cursor::post_open(THD *thd, my_bool was_opened)
{
thd->net.no_send_eof= m_nseof; // Restore the originals
thd->protocol= m_oprot;
- if (was_opened)
- {
- m_isopen= was_opened;
+ if ((m_isopen= was_opened))
m_current_row= m_prot->data;
- }
}
+
int
sp_cursor::close(THD *thd)
{
@@ -217,6 +230,7 @@ sp_cursor::close(THD *thd)
return 0;
}
+
void
sp_cursor::destroy()
{
@@ -225,7 +239,6 @@ sp_cursor::destroy()
delete m_prot;
m_prot= NULL;
free_root(&m_mem_root, MYF(0));
- bzero((char *)&m_mem_root, sizeof(m_mem_root));
}
m_isopen= FALSE;
}