"Stored procedures: crash with function calling itself".
Disallow recursive stored routines until we either make Item's and LEX
reentrant safe or will use spearate sp_head instances (and thus separate
LEX objects and Item trees) for each routine invocation.
mysql-test/r/sp-error.result:
Added tests for bug #11394 "Recursion in SP crash server" and
bug #11600 "Stored procedures: crash with function calling itself".
(We simply disallow recursion for stored routines).
mysql-test/r/sp.result:
Disabled test cases containing recursive stored routines until we will
support for them.
mysql-test/t/sp-error.test:
Added tests for bug #11394 "Recursion in SP crash server" and
bug #11600 "Stored procedures: crash with function calling itself".
(We simply disallow recursion for stored routines).
mysql-test/t/sp.test:
Disabled test cases containing recursive stored routines until we will
support for them.
sql/share/errmsg.txt:
Added error message saying that recursive stored routines are disallowed.
sql/sp_head.cc:
sp_head::execute():
Since many Item's and LEX members can't be used in reentrant fashion
we have to disable recursion for stored routines. So let us track
routine invocations using sp_head::m_is_invoked member and raise
error when one attempts to call routine recursively.
sql/sp_head.h:
sp_head:
Added m_is_invoked member for tracking of routine invocations and
preventing recursion.
(The bug itself was fixed earlier by the patch that fixed bug #5860
"Multi-table UPDATE does not activate update triggers" and several
other bugs).
mysql-test/r/trigger.result:
Added test for bug #5893 "Triggers with dropped functions cause crashes"
mysql-test/t/trigger.test:
Added test for bug #5893 "Triggers with dropped functions cause crashes"
CURSOR_TYPE_READ_ONLY select within select".
The bug was caused by the reset of thd->mem_root to thd->main_mem_root in
Item_subselect::exec, which in turn triggered too early free_root() for
data which was needed on subsequent fetches from a cursor.
This reset also caused a memory leak in stored procedures, as
subsequent executions of instructions containing a subselect
were allocating memory in thd->main_mem_root, which is not freed
until the end of the entire SP, instead of the per-call mem_root,
which is freed in the end of execution of the instruction.
sql/item_subselect.cc:
Don't try to protect subqueries from the code that assumes that
it can reset thd->mem_root and get away with it: it's responsibility
of the caller to ensure that no assumption about the life span
of the allocated memory made by the called code is broken.
Besides, this didn't work well with cursors and stored procedures,
where the runtime memory root is not the same as &thd->main_mem_root.
sql/opt_range.cc:
In get_mm_leaf restore the original mem_root of the thd which has
been temporarily reset with the quick select mem_root earlier: if
thd->mem_root points to the QUICK...::mem_root, the memory allocated
in JOIN::exec during evaluation of a subquery gets freed too early.
tests/mysql_client_test.c:
A test case for Bug#10736 "mysql_stmt_attr_set CURSOR_TYPE_READ_ONLY
select within select"
Added a test case for bug #10031.
opt_range.cc:
Fixed bug #10031: range condition was not used with
views. Range analyzer did not take into account that
view columns were always referred through Item_ref.
sql/opt_range.cc:
Fixed bug #10031: range condition was not used with
views. Range analyzer did not take into account that
view columns were always referred through Item_ref.
mysql-test/t/range.test:
Added a test case for bug #10031.
mysql-test/r/range.result:
Added a test case for bug #10031.
Remove compiler warnings on Windows - Bug #11580
innobase/btr/btr0btr.c:
Remove compiler warnings on Windows - Bug #11580
innobase/btr/btr0cur.c:
Remove compiler warnings on Windows - Bug #11580
innobase/fil/fil0fil.c:
Remove compiler warnings on Windows - Bug #11580
innobase/ibuf/ibuf0ibuf.c:
Remove compiler warnings on Windows - Bug #11580
innobase/log/log0recv.c:
Remove compiler warnings on Windows - Bug #11580
innobase/os/os0file.c:
Remove compiler warnings on Windows - Bug #11580
innobase/page/page0page.c:
Remove compiler warnings on Windows - Bug #11580
innobase/row/row0upd.c:
Remove compiler warnings on Windows - Bug #11580
up CREATE TABLE in innodb_file_per_table=1 mode.
innobase/fil/fil0fil.c:
fil_extend_space_to_desired_size(): Do not allocate or initialize
more memory than is necessary. Write at most one megabyte at a time.
innobase/include/os0file.h:
os_file_set_size(): Corrected the synopsis
innobase/os/os0file.c:
os_file_set_size(): Corrected the synopsis and some comments.
s/offset/current_size; s/low/desired_size/;
Do not allocate or initialize more memory than is necessary.
Write at most one megabyte at a time.
into neptunus.(none):/home/msvensson/mysql/bug10466
mysql-test/r/alias.result:
Auto merged
mysql-test/r/func_str.result:
Auto merged
mysql-test/r/func_time.result:
Auto merged
mysql-test/r/group_by.result:
Auto merged
mysql-test/r/innodb.result:
Auto merged
mysql-test/r/ps.result:
Auto merged
mysql-test/r/ps_2myisam.result:
Auto merged
mysql-test/r/ps_3innodb.result:
Auto merged
mysql-test/r/ps_4heap.result:
Auto merged
mysql-test/r/ps_5merge.result:
Auto merged
mysql-test/r/ps_6bdb.result:
Auto merged
mysql-test/r/ps_7ndb.result:
Auto merged
mysql-test/r/select.result:
Auto merged
mysql-test/t/alias.test:
Auto merged
mysql-test/t/func_str.test:
Auto merged
mysql-test/t/func_time.test:
Auto merged
mysql-test/t/group_by.test:
Auto merged
mysql-test/t/innodb.test:
Auto merged
mysql-test/t/ps.test:
Auto merged
mysql-test/t/select.test:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/share/errmsg.txt:
Auto merged
sql/sql_select.cc:
According to the conclusion made in the previous patch, we can widen
the range of cases when JOINs are fully freed early, and include
subqueries to it.
sql/sql_select.cc:
This assert is not relevant because:
- the correct assert is DBUG_ASSERT(! (full && sl->uncacheable))
(prevents freeing of uncacheable JOINs), it breaks view.test
- it seems we can free internal JOINs, even if they are uncacheable:
if the top level join is evaluated, we're not going to need the
internal joins any more
The reason it happened was that both, JOIN::cleanup() and JOIN::join_free(),
went over all nested joins and called cleanup/join_free for them.
For that:
- split recursive and non-recursive parts of JOIN::cleanup() and
JOIN::join_free()
- rename JOIN::cleanup to JOIN::destroy, as it actually destroys its
argument
- move the recursive part of JOIN::cleanup to st_select_lex::cleanup
- move the non-recursive part of JOIN::join_free to the introduced
method JOIN::cleanup().
sql/sql_lex.h:
Add st_select_lex::cleanup, a counterpart of st_select_lex_unit::cleanup()
sql/sql_select.cc:
- remove two unused arguments from return_zero_rows
- split JOIN::join_free and JOIN::cleanup to recursive and non-recursive
parts.
- note, the assert in JOIN::join_free _does_ fail in having.test.
We have two options: a) propagate `full' flag to the nested joins.
We did it before, and this patch didn't change it. If so, we
can end up cleaning up an uncacheable JOIN (that is, the join that
we might need again).
b) evaluate own 'full' flag on every level. In this case, we might
end up with tables freed in mysql_unlock_read_tables, but not
cleaned up properly, and this may be even worse. The test suite
passes with both approaches, but not with the assert.
sql/sql_select.h:
- declarations for JOIN::cleanup() and JOIN::join_free()
sql/sql_union.cc:
Add st_select_lex::cleanup, a counterpart of st_select_lex_unit::cleanup():
move the recursive part of JOIN::cleanup to it.
Bug#10568 - Function 'LAST_DAY(date)' does not return NULL for invalid argument.
Manual merge.
include/my_global.h:
Auto merged
mysql-test/t/heap_hash.test:
Auto merged
sql/ha_heap.h:
Auto merged
sql/item_timefunc.cc:
Auto merged
mysql-test/r/func_time.result:
Manual merge.
Used local for the backported fix for Bug#10568.
mysql-test/r/heap_hash.result:
Bug#10178 - failure to find a row in heap table by concurrent UPDATEs
Manual merge.
mysql-test/t/func_time.test:
Manual merge.
Used local for the backported fix for Bug#10568.
sql/ha_heap.cc:
Bug#10178 - failure to find a row in heap table by concurrent UPDATEs
Manual merge.
Added 64-bit extensions, comments, extended statistics
and trace prints.
include/my_base.h:
Bug#8321 - myisampack bug in compression algorithm
Added a comment.
myisam/mi_packrec.c:
Bug#8321 - myisampack bug in compression algorithm
Fixed a function comment.
myisam/myisampack.c:
Bug#8321 - myisampack bug in compression algorithm
Enlarged the variables which hold Huffman codes to
ulonglong and adjusted the functions accordingly.
Added test code for long Huffman codes.
Enlarged the distinct column values buffer (tree_buff)
and added checks to stay in its range.
Added statistics and trace prints.
Added a lot of comments.
mysys/tree.c:
Bug#8321 - myisampack bug in compression algorithm
Added a check against overflow of the tree element count.
The tree element count is only 31 bits, but sometimes
used for big numbers. There is however no application yet,
which relies on exact tree element counts.
Wrong comparing method were choosen which results in false comparison.
Make Item_bool_func2::fix_length_and_dec() to get type and field from
real_item() to make REF_ITEM pass the check.
sql/item_cmpfunc.cc:
Fix bug#11325 Wrong date comparison in views
mysql-test/t/view.test:
Test case for bug#11325 Wrong date comparison in views.
mysql-test/r/view.result:
Test case for bug#11325 Wrong date comparison in views.
Moved the key statistics update to info().
The table is not locked in open(). This made wrong stats possible.
No test case for the test suite.
This happens only with heavy concurrency.
A test script is added to the bug report.
mysql-test/r/heap_hash.result:
Bug#10178 - failure to find a row in heap table by concurrent UPDATEs
Updated test results to reflect the new statistics behaviour.
mysql-test/t/heap_hash.test:
Bug#10178 - failure to find a row in heap table by concurrent UPDATEs
Added a FLUSH TABLES to avoid statistics differences between normal
and ps-protocol tests.
sql/ha_heap.cc:
Bug#10178 - failure to find a row in heap table by concurrent UPDATEs
Moved the key statistics update to info().
The table is not locked in open(). This made wrong stats possible.
sql/ha_heap.h:
Bug#10178 - failure to find a row in heap table by concurrent UPDATEs
Added an element to track the validity of the key statistics.