prohibit opening Query cache for SP cursors (BUG#9715)

This commit is contained in:
bell@sanja.is.com.ua 2005-06-14 22:45:48 +03:00
parent f183b1be31
commit a78cc26947
5 changed files with 77 additions and 5 deletions

File diff suppressed because one or more lines are too long

View file

@ -756,4 +756,36 @@ flush query cache;
drop table t1, t2;
#
# SP cursors and selects with query cache (BUG#9715)
#
create table t1 (a int);
insert into t1 values (1),(2);
delimiter //;
CREATE PROCEDURE `p1`()
begin
Declare c1 cursor for select a from t1;
open c1;
select * from t1;
end//
call p1()//
drop procedure p1;
create function f1() returns int
begin
Declare var1 int;
select max(a) from t1 into var1;
return var1;
end//
create procedure `p1`()
begin
select a, f1() from t1;
end//
call p1()//
drop procedure p1//
drop table t1//
delimiter ;//
set GLOBAL query_cache_size=0;

View file

@ -377,6 +377,10 @@ public:
return (uint)m_lex->sql_command;
}
void disable_query_cache()
{
m_lex->safe_to_cache_query= 0;
}
private:
LEX *m_lex;

View file

@ -169,6 +169,17 @@ sp_rcontext::pop_cursors(uint count)
*
*/
sp_cursor::sp_cursor(sp_lex_keeper *lex_keeper)
:m_lex_keeper(lex_keeper), m_prot(NULL), m_isopen(0), m_current_row(NULL)
{
/*
currsor can't be stored in QC, so we should prevent opening QC for
try to write results which are absent.
*/
lex_keeper->disable_query_cache();
}
/*
pre_open cursor

View file

@ -203,11 +203,7 @@ class sp_cursor : public Sql_alloc
{
public:
sp_cursor(sp_lex_keeper *lex_keeper)
: m_lex_keeper(lex_keeper), m_prot(NULL), m_isopen(0), m_current_row(NULL)
{
/* Empty */
}
sp_cursor(sp_lex_keeper *lex_keeper);
virtual ~sp_cursor()
{