mariadb/storage/innobase/row
Annamalai Gurusami db78f29b31 Bug #19306524 FAILING ASSERTION WITH TEMP TABLE FOR A PROCEDURE CALLED
FROM A FUNCTION

Scenario:

In a stored procedure, CREATE TABLE statement is not allowed.  But an
exception is provided for CREATE TEMPORARY TABLE.  We can create a temporary
table in a stored procedure.

Let there be two stored functions f1 and f2 and two stored procedures p1 and
p2.  Their properties are as follows:

. stored function f1() calls stored procedure p1().
. stored function f2() calls stored procedure p2().
. stored procedure p1() creates temporary table t1.
. stored procedure p2() does DML on t1.

Consider the following situation:

1.  Autocommit mode is on. 
2.  select f1()
3.  select f2()

Step 2:  In this step, t1 would be created via p1().  A table level transaction
lock would have been taken.  The ::external_lock() would not have been called
on this table.  At the end of step 2, because of autocommit mode on, this table
level lock will be released.

Step 3:  When we execute DML on table t1 via p2() we have two problems:

Problem 1:

The function ha_innobase::external_lock() would have been called but since
it is a select query no table level locks would have been taken.  Hence the
following assert will fail:

ut_ad(lock_table_has(thr_get_trx(thr), index->table, LOCK_IX));

Solution:

The solution would be to identify this situation and take a table level lock
and use the proper lock type prebuilt->select_lock_type = LOCK_X for DML
operations.

Problem 2:

Another problem is that in step 3, ha_innobase::open() is never called on
the table t1.  

Solution:

The solution would be to identify this situation and call re-init the handler
of table t1.

rb#6429 approved by Krunal.
2014-09-18 15:17:39 +05:30
..
row0ext.c Fixing the bug 16919882 - WRONG FSF ADDRESS IN LICENSES HEADERS 2013-06-10 22:29:41 +02:00
row0ins.c Bug #19140907 DUPLICATES IN UNIQUE SECONDARY INDEX BECAUSE OF FIX OF BUG#68021 2014-07-03 10:13:29 +05:30
row0merge.c Bug 16876388 - PLEASE BACKPORT BUG#16208542 TO 5.5 2013-06-25 09:42:54 +08:00
row0mysql.c Bug #19306524 FAILING ASSERTION WITH TEMP TABLE FOR A PROCEDURE CALLED 2014-09-18 15:17:39 +05:30
row0purge.c Merge mysql-5.1 to mysql-5.5. 2011-09-26 10:08:42 +03:00
row0row.c Merge mysql-5.1 to mysql-5.5. 2012-02-27 23:24:36 +02:00
row0sel.c post-push fix for bug#17565888/bug#14621190 2013-10-28 17:08:31 +01:00
row0uins.c Merge mysql-5.1 to mysql-5.5. 2013-08-14 10:24:36 +03:00
row0umod.c Merge mysql-5.1 to mysql-5.5. 2013-08-15 15:34:12 +03:00
row0undo.c Fixing the bug 16919882 - WRONG FSF ADDRESS IN LICENSES HEADERS 2013-06-10 22:29:41 +02:00
row0upd.c Bug#18185930 UPD_NODE_INSERT_BLOB CAUSES BTR_EXTERN_OWNER_FLAG ASSERTION 2014-02-11 16:44:37 +05:30
row0vers.c Fixing the bug 16919882 - WRONG FSF ADDRESS IN LICENSES HEADERS 2013-06-10 22:29:41 +02:00