Skip to content

Commit

Permalink
MDEV-15328: MariaDB 10.2.13 Crashes upon CALL PROCEDURE PARAM LAST_IN…
Browse files Browse the repository at this point in the history
…SERT_ID ()

There is not current SELECT during assigning SP parameters, do not use it if current_select is empty.
  • Loading branch information
sanja-byelkin committed Mar 12, 2018
1 parent 3a93ec5 commit 5511e8e
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 13 deletions.
19 changes: 19 additions & 0 deletions mysql-test/r/query_cache.result
Original file line number Diff line number Diff line change
Expand Up @@ -2168,6 +2168,25 @@ show status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
drop table t1;
#
# MDEV-15328: MariaDB 10.2.13 Crashes upon CALL PROCEDURE PARAM
# LAST_INSERT_ID ()
# (part 2, part 1 is in sp.test)
#
create table t1 (a int);
insert into t1 values (1);
CREATE FUNCTION foo (i INT UNSIGNED ) RETURNS int deterministic RETURN 1;
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
SELECT foo( LAST_INSERT_ID() ) from t1;
foo( LAST_INSERT_ID() )
1
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
DROP FUNCTION foo;
drop table t1;
restore defaults
SET GLOBAL query_cache_type= default;
SET GLOBAL query_cache_size= default;
Expand Down
8 changes: 8 additions & 0 deletions mysql-test/r/sp.result
Original file line number Diff line number Diff line change
Expand Up @@ -8335,3 +8335,11 @@ ERROR 42S22: Unknown column 'name2' in 'field list'
drop procedure p1;
drop procedure p2;
drop procedure p3;
#
# MDEV-15328: MariaDB 10.2.13 Crashes upon CALL PROCEDURE PARAM
# LAST_INSERT_ID ()
# (part 1, part 2 is in query_cache.test)
#
CREATE PROCEDURE foo ( IN i INT UNSIGNED ) BEGIN END;
CALL foo( LAST_INSERT_ID() );
DROP PROCEDURE foo;
15 changes: 15 additions & 0 deletions mysql-test/t/query_cache.test
Original file line number Diff line number Diff line change
Expand Up @@ -1767,6 +1767,21 @@ show status like "Qcache_inserts";
show status like "Qcache_hits";
drop table t1;

--echo #
--echo # MDEV-15328: MariaDB 10.2.13 Crashes upon CALL PROCEDURE PARAM
--echo # LAST_INSERT_ID ()
--echo # (part 2, part 1 is in sp.test)
--echo #

create table t1 (a int);
insert into t1 values (1);
CREATE FUNCTION foo (i INT UNSIGNED ) RETURNS int deterministic RETURN 1;
show status like "Qcache_queries_in_cache";
SELECT foo( LAST_INSERT_ID() ) from t1;
show status like "Qcache_queries_in_cache";
DROP FUNCTION foo;
drop table t1;

--echo restore defaults
SET GLOBAL query_cache_type= default;
SET GLOBAL query_cache_size= default;
Expand Down
10 changes: 10 additions & 0 deletions mysql-test/t/sp.test
Original file line number Diff line number Diff line change
Expand Up @@ -9840,3 +9840,13 @@ call p3();
drop procedure p1;
drop procedure p2;
drop procedure p3;

--echo #
--echo # MDEV-15328: MariaDB 10.2.13 Crashes upon CALL PROCEDURE PARAM
--echo # LAST_INSERT_ID ()
--echo # (part 1, part 2 is in query_cache.test)
--echo #

CREATE PROCEDURE foo ( IN i INT UNSIGNED ) BEGIN END;
CALL foo( LAST_INSERT_ID() );
DROP PROCEDURE foo;
29 changes: 16 additions & 13 deletions sql/sql_lex.h
Original file line number Diff line number Diff line change
Expand Up @@ -2902,21 +2902,24 @@ struct LEX: public Query_tables_list
{
safe_to_cache_query= 0;

/*
There are no sense to mark select_lex and union fields of LEX,
but we should merk all subselects as uncacheable from current till
most upper
*/
SELECT_LEX *sl;
SELECT_LEX_UNIT *un;
for (sl= current_select, un= sl->master_unit();
un != &unit;
sl= sl->outer_select(), un= sl->master_unit())
if (current_select) // initialisation SP variables has no SELECT
{
sl->uncacheable|= cause;
un->uncacheable|= cause;
/*
There are no sense to mark select_lex and union fields of LEX,
but we should merk all subselects as uncacheable from current till
most upper
*/
SELECT_LEX *sl;
SELECT_LEX_UNIT *un;
for (sl= current_select, un= sl->master_unit();
un != &unit;
sl= sl->outer_select(), un= sl->master_unit())
{
sl->uncacheable|= cause;
un->uncacheable|= cause;
}
select_lex.uncacheable|= cause;
}
select_lex.uncacheable|= cause;
}
void set_trg_event_type_for_tables();

Expand Down

0 comments on commit 5511e8e

Please sign in to comment.