mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 05:52:27 +01:00
813fc4104e
cursor is interpreted latin1 character and Bug#9819 "Cursors: Mysql Server Crash while fetching from table with 5 million records." A fix for a possible memory leak when fetching into an SP cursor in a long loop. The patch uses a common implementation of cursors in the binary protocol and in stored procedures and implements materialized cursors. For implementation details, see comments in sql_cursor.cc include/my_sys.h: - declaration for multi_alloc_root libmysqld/Makefile.am: - drop protocol_cursor.cc, add sql_cursor.cc (replaces the old implementation of cursors with a new one) mysql-test/r/ctype_ujis.result: - test results fixed (a test case for Bug#6513) mysql-test/r/sp-big.result: - test results fixed (a test case for Bug#9819) mysql-test/t/ctype_ujis.test: Add a test case for Bug#6513 "Test Suite: Values inserted by using cursor is interpreted latin1 character" mysql-test/t/sp-big.test: Add a restricted test case for Bug#9819 "Cursors: Mysql Server Crash while fetching from table with 5 million records." mysys/my_alloc.c: - an implementation of multi_alloc_root; this is largely a copy-paste from mulalloc.c, but the function is small and there is no easy way to reuse the existing C function. sql/Makefile.am: - add sql_cursor.h, sql_cursor.cc (a new implementation of stored procedure cursors) and drop protocol_cursor.cc (the old one) sql/handler.cc: - now TABLE object has its mem_root always initialized. Adjust the implementation handler::ha_open sql/item_subselect.cc: - adjust to the changed declaration of st_select_lex_unit::prepare sql/protocol.h: - drop Protocol_cursor sql/sp_head.cc: - move juggling with Query_arena::free_list and Item::next to sp_eval_func_item, as this is needed in 3 places already. sql/sp_head.h: - declare a no-op implementation for cleanup_stmt in sp_instr_cpush. This method is needed for non-materializing cursors, which are yet not used in stored procedures. - declaration for sp_eval_func_item sql/sp_rcontext.cc: - reimplement sp_cursor using the new implementation of server side cursors. - use sp_eval_func_item to assign values of SP variables from the row fetched from a cursor. This should fix a possible memory leak in the old implementation of sp_cursor::fetch sql/sp_rcontext.h: - reimplement sp_cursor using the new implementation of server side cursors. sql/sql_class.cc: - disable the functionality that closes transient cursors at commit/rollback; transient cursors are not used in 5.0, instead we use materialized ones. To be enabled in a later version. sql/sql_class.h: - adjust to the rename Cursor -> Server_side_cursor - additional declarations of select_union used in materialized cursors sql/sql_derived.cc: - reuse bits of tmp table code in UNION, derived tables, and materialized cursors - cleanup comments sql/sql_lex.h: - declarations of auxiliary methods used by materialized cursors - a cleanup in st_select_lex_unit interface sql/sql_list.h: - add an array operator new[] to class Sql_alloc sql/sql_prepare.cc: - split the tight coupling of cursors and prepared statements to reuse the same implementation in stored procedures - cleanups of error processing in Prepared_statement::{prepare,execute} sql/sql_select.cc: - move the implementation of sensitive (non-materializing) cursors to sql_cursor.cc - make temporary tables self-contained: the table, its record and fields are allocated in TABLE::mem_root. This implementation is not clean and resets thd->mem_root several times because of the way create_tmp_table works (many additional things are done inside it). - adjust to the changed declaration of st_select_lex_unit::prepare sql/sql_select.h: - move the declaration of sensitive (non-materializing) cursors to sql_cursor.cc sql/sql_union.cc: - move pieces of st_select_unit::prepare to select_union and st_table methods to be able to reuse code in the implementation of materialized cursors sql/sql_view.cc: - adjust to the changed signature of st_select_lex_unit::prepare sql/table.cc: - implement auxiliary st_table methods for use with temporary tables sql/table.h: - add declarations for auxiliary methods of st_table used to work with temporary tables tests/mysql_client_test.c: - if cursors are materialized, a parallel update of the table used in the cursor may go through: update the test. sql/sql_cursor.cc: New BitKeeper file ``sql/sql_cursor.cc'' -- implementation of server side cursors sql/sql_cursor.h: New BitKeeper file ``sql/sql_cursor.h'' - declarations for server side cursors. |
||
---|---|---|
.. | ||
.cvsignore | ||
array.c | ||
ChangeLog | ||
charset-def.c | ||
charset.c | ||
checksum.c | ||
default.c | ||
default_modify.c | ||
errors.c | ||
hash.c | ||
list.c | ||
make-ccc | ||
make-conf.c | ||
Makefile.am | ||
md5.c | ||
mf_brkhant.c | ||
mf_cache.c | ||
mf_dirname.c | ||
mf_fn_ext.c | ||
mf_format.c | ||
mf_getdate.c | ||
mf_iocache.c | ||
mf_iocache2.c | ||
mf_keycache.c | ||
mf_keycaches.c | ||
mf_loadpath.c | ||
mf_pack.c | ||
mf_path.c | ||
mf_qsort.c | ||
mf_qsort2.c | ||
mf_radix.c | ||
mf_same.c | ||
mf_sort.c | ||
mf_soundex.c | ||
mf_strip.c | ||
mf_tempdir.c | ||
mf_tempfile.c | ||
mf_unixpath.c | ||
mf_util.c | ||
mf_wcomp.c | ||
mf_wfile.c | ||
mulalloc.c | ||
my_access.c | ||
my_aes.c | ||
my_alarm.c | ||
my_alloc.c | ||
my_append.c | ||
my_bit.c | ||
my_bitmap.c | ||
my_chsize.c | ||
my_clock.c | ||
my_compress.c | ||
my_copy.c | ||
my_crc32.c | ||
my_create.c | ||
my_delete.c | ||
my_div.c | ||
my_dup.c | ||
my_error.c | ||
my_file.c | ||
my_fopen.c | ||
my_fstream.c | ||
my_gethostbyname.c | ||
my_gethwaddr.c | ||
my_getopt.c | ||
my_getsystime.c | ||
my_getwd.c | ||
my_handler.c | ||
my_init.c | ||
my_largepage.c | ||
my_lib.c | ||
my_lock.c | ||
my_lockmem.c | ||
my_lread.c | ||
my_lwrite.c | ||
my_malloc.c | ||
my_messnc.c | ||
my_mkdir.c | ||
my_mmap.c | ||
my_net.c | ||
my_netware.c | ||
my_new.cc | ||
my_once.c | ||
my_open.c | ||
my_os2cond.c | ||
my_os2dirsrch.c | ||
my_os2dirsrch.h | ||
my_os2dlfcn.c | ||
my_os2dlfcn.h0 | ||
my_os2file64.c | ||
my_os2mutex.c | ||
my_os2thread.c | ||
my_os2tls.c | ||
my_port.c | ||
my_pread.c | ||
my_pthread.c | ||
my_quick.c | ||
my_read.c | ||
my_realloc.c | ||
my_redel.c | ||
my_rename.c | ||
my_seek.c | ||
my_semaphore.c | ||
my_sleep.c | ||
my_static.c | ||
my_static.h | ||
my_symlink.c | ||
my_symlink2.c | ||
my_sync.c | ||
my_thr_init.c | ||
my_wincond.c | ||
my_windac.c | ||
my_winsem.c | ||
my_winthread.c | ||
my_write.c | ||
mysys_priv.h | ||
ptr_cmp.c | ||
queues.c | ||
raid.cc | ||
raid2.c | ||
rijndael.c | ||
safemalloc.c | ||
sha1.c | ||
string.c | ||
test_charset.c | ||
test_dir.c | ||
test_fn.c | ||
test_xml.c | ||
testhash.c | ||
thr_alarm.c | ||
thr_lock.c | ||
thr_mutex.c | ||
thr_rwlock.c | ||
tree.c | ||
typelib.c |