[packages/mysql/MYSQL_5_1] up to 5.1.70, using percona tarball 5.1.70-rel14.8
glen
glen at pld-linux.org
Fri Aug 9 02:21:20 CEST 2013
commit 9f8d0edd0c0ae213101ec789f9d69a7c6ca48856
Author: Elan Ruusamäe <glen at delfi.ee>
Date: Fri Aug 9 03:20:01 2013 +0300
up to 5.1.70, using percona tarball 5.1.70-rel14.8
bug45702.patch | 725 ---
bug53761.patch | 472 --
bug813587.patch | 29 -
bug860910.patch | 92 -
...e_query_cache_28249_test_sporadic_failure.patch | 8 -
innodb_bug47167_test_fix.patch | 44 -
innodb_fake_changes.patch | 768 ----
innodb_kill_idle_transaction.patch | 402 --
mysql-acc-pslist.patch | 80 -
mysql-bug-34192.patch | 58 -
mysql-bug580324.patch | 102 -
mysql-bug677407.patch | 138 -
mysql-bugfix48929.patch | 162 -
mysql-control_online_alter_index.patch | 107 -
mysql-error_pad.patch | 266 --
mysql-fix-bug671764.patch | 27 -
mysql-i_s_innodb_buffer_pool_pages.patch | 791 ----
mysql-info.patch | 15 -
mysql-innodb_adjust_defaults.patch | 47 -
mysql-innodb_admin_command_base.patch | 192 -
mysql-innodb_buffer_pool_shm.patch | 101 -
mysql-innodb_bug60788.patch | 123 -
mysql-innodb_deadlock_count.patch | 163 -
mysql-innodb_dict_size_limit.patch | 485 --
mysql-innodb_expand_fast_index_creation.patch | 1434 ------
mysql-innodb_expand_import.patch | 1072 -----
mysql-innodb_expand_undo_slots.patch | 144 -
mysql-innodb_extend_slow.patch | 976 ----
mysql-innodb_extra_rseg.patch | 384 --
mysql-innodb_fast_checksum.patch | 287 --
mysql-innodb_fast_shutdown.patch | 235 -
mysql-innodb_files_extend.patch | 576 ---
mysql-innodb_fix_misc.patch | 859 ----
mysql-innodb_io_patches.patch | 1764 -------
mysql-innodb_lru_dump_restore.patch | 754 ---
mysql-innodb_opt_lru_count.patch | 305 --
mysql-innodb_overwrite_relay_log_info.patch | 493 --
mysql-innodb_pass_corrupt_table.patch | 1345 ------
mysql-innodb_purge_thread.patch | 514 ---
mysql-innodb_recovery_patches.patch | 513 ---
mysql-innodb_rw_lock.patch | 1309 ------
mysql-innodb_separate_doublewrite.patch | 1096 -----
mysql-innodb_show_enhancements.patch | 259 --
mysql-innodb_show_lock_name.patch | 371 --
mysql-innodb_show_status.patch | 446 --
mysql-innodb_show_sys_tables.patch | 736 ---
mysql-innodb_split_buf_pool_mutex.patch | 3951 ----------------
mysql-innodb_stats.patch | 1830 --------
mysql-innodb_swap_builtin_plugin.patch | 211 -
mysql-innodb_thread_concurrency_timer_based.patch | 197 -
mysql-libs.patch | 16 -
mysql-log_connection_error.patch | 161 -
mysql-microsec_process.patch | 50 -
mysql-microslow.patch | 699 ---
mysql-mysql-syslog.patch | 133 -
mysql-mysql_dump_ignore_ct.patch | 62 -
mysql-mysql_remove_eol_carret.patch | 74 -
mysql-optimizer_fix.patch | 168 -
mysql-profiling_slow.patch | 405 --
mysql-query_cache_enhance.patch | 3481 --------------
mysql-remove_fcntl_excessive_calls.patch | 71 -
mysql-response-time-distribution.patch | 888 ----
mysql-show_patches.patch | 263 --
mysql-show_slave_status_nolock.patch | 369 --
mysql-show_temp_51.patch | 622 ---
mysql-slow_extended.patch | 3090 -------------
...plit_buf_pool_mutex_fixed_optimistic_safe.patch | 1281 ------
mysql-sql_no_fcache.patch | 434 --
mysql-suppress_log_warning_1592.patch | 154 -
mysql-system-users.patch | 22 +-
mysql-userstat.patch | 3453 --------------
mysql-userstats.patch | 1466 ------
mysql.spec | 182 +-
response_time_distribution.patch | 4842 --------------------
slave_timeout_fix.patch | 11 -
subunit.patch | 199 -
utf8_general50_ci.patch | 440 --
warning_fixes.patch | 24 -
xtradb_bug317074.patch | 57 -
79 files changed, 33 insertions(+), 50542 deletions(-)
---
diff --git a/mysql.spec b/mysql.spec
index 0580524..c9e54a3 100644
--- a/mysql.spec
+++ b/mysql.spec
@@ -8,6 +8,10 @@
# - segfaults on select from non-mysql user (caused by builder environment):
# https://bugs.launchpad.net/pld-linux/+bug/381904
# (profiling disabled temporaily to workaround this)
+# - add avoid-version for:
+# /usr/lib64/mysql/plugin/mypluglib.so
+# /usr/lib64/mysql/plugin/mypluglib.so.0
+# /usr/lib64/mysql/plugin/mypluglib.so.0.0.0
#
# Conditional build:
%bcond_with autodeps # BR packages needed only for resolving deps
@@ -21,6 +25,8 @@
%bcond_with tests # FIXME: don't run correctly
%bcond_with ndb # NDB is now a separate product, this here is broken, so disable it
+%define rel 1
+%define percona_rel 14.8
%include /usr/lib/rpm/macros.perl
Summary: MySQL: a very fast and reliable SQL database engine
Summary(de.UTF-8): MySQL: ist eine SQL-Datenbank
@@ -31,13 +37,13 @@ Summary(ru.UTF-8): MySQL - быстрый SQL-сервер
Summary(uk.UTF-8): MySQL - швидкий SQL-сервер
Summary(zh_CN.UTF-8): MySQL数据库服务器
Name: mysql
-Version: 5.1.63
-Release: 0.1
+Version: 5.1.70
+Release: %{percona_rel}.%{rel}
License: GPL + MySQL FLOSS Exception
Group: Applications/Databases
-#Source0Download: http://dev.mysql.com/downloads/mysql/5.1.html#source
-Source0: http://vesta.informatik.rwth-aachen.de/mysql/Downloads/MySQL-5.1/%{name}-%{version}.tar.gz
-# Source0-md5: 672167c3f03f969febae66c43859d76d
+# Source0Download: http://www.percona.com/downloads/Percona-Server-5.1/LATEST/source/
+Source0: http://www.percona.com/downloads/Percona-Server-5.1/LATEST/source/Percona-Server-%{version}-rel%{percona_rel}.tar.gz
+# Source0-md5: 164230ac7b449eb69f0918fc5b8b09f2
Source100: http://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz
# Source100-md5: 7b9b618cb9b378f949bb1b91ddcc4f54
Source1: %{name}.init
@@ -53,15 +59,12 @@ Source11: %{name}-ndb-cpc.init
Source12: %{name}-ndb-cpc.sysconfig
Source13: %{name}-client.conf
Source14: my.cnf
-Source15: percona.sh
Patch0: %{name}-libs.patch
Patch1: %{name}-libwrap.patch
Patch2: %{name}-c++.patch
-Patch3: %{name}-info.patch
Patch4: %{name}-sql-cxx-pic.patch
Patch5: %{name}-noproc.patch
Patch6: %{name}-system-users.patch
-Patch7: %{name}-bug-34192.patch
Patch8: %{name}-client-config.patch
Patch9: %{name}-build.patch
Patch10: %{name}-alpha.patch
@@ -72,75 +75,6 @@ Patch14: %{name}-bug-43594.patch
Patch15: plugin-avoid-version.patch
Patch16: %{name}-fix-dummy-thread-race-condition.patch
Patch18: %{name}-sphinx.patch
-# <percona patches, http://www.percona.com/percona-lab.html>
-Patch100: %{name}-innodb_swap_builtin_plugin.patch
-Patch101: %{name}-show_patches.patch
-Patch102: %{name}-slow_extended.patch
-Patch103: %{name}-profiling_slow.patch
-Patch104: %{name}-microsec_process.patch
-Patch105: %{name}-userstat.patch
-Patch106: %{name}-optimizer_fix.patch
-Patch107: %{name}-show_temp_51.patch
-Patch108: %{name}-suppress_log_warning_1592.patch
-Patch109: %{name}-innodb_show_enhancements.patch
-Patch110: %{name}-innodb_show_status.patch
-Patch111: %{name}-innodb_io_patches.patch
-Patch112: %{name}-innodb_opt_lru_count.patch
-Patch113: %{name}-i_s_innodb_buffer_pool_pages.patch
-Patch114: %{name}-innodb_expand_undo_slots.patch
-Patch115: %{name}-innodb_extra_rseg.patch
-Patch116: %{name}-innodb_overwrite_relay_log_info.patch
-Patch117: %{name}-innodb_thread_concurrency_timer_based.patch
-Patch118: %{name}-innodb_dict_size_limit.patch
-Patch119: %{name}-innodb_split_buf_pool_mutex.patch
-Patch120: %{name}-innodb_expand_import.patch
-Patch121: %{name}-innodb_recovery_patches.patch
-Patch122: %{name}-innodb_purge_thread.patch
-Patch123: %{name}-innodb_admin_command_base.patch
-Patch124: %{name}-innodb_show_lock_name.patch
-Patch125: %{name}-innodb_extend_slow.patch
-Patch126: %{name}-innodb_lru_dump_restore.patch
-Patch127: %{name}-innodb_separate_doublewrite.patch
-Patch128: %{name}-innodb_pass_corrupt_table.patch
-Patch129: %{name}-innodb_stats.patch
-Patch130: %{name}-innodb_fast_checksum.patch
-Patch131: %{name}-innodb_files_extend.patch
-Patch132: %{name}-innodb_show_sys_tables.patch
-Patch133: %{name}-innodb_fix_misc.patch
-Patch134: %{name}-innodb_adjust_defaults.patch
-Patch135: innodb_kill_idle_transaction.patch
-Patch136: innodb_fake_changes.patch
-Patch137: %{name}-innodb_deadlock_count.patch
-Patch138: %{name}-bug580324.patch
-Patch139: %{name}-bugfix48929.patch
-Patch140: %{name}-query_cache_enhance.patch
-Patch141: %{name}-control_online_alter_index.patch
-Patch142: %{name}-log_connection_error.patch
-Patch143: %{name}-mysql-syslog.patch
-Patch144: %{name}-innodb_buffer_pool_shm.patch
-Patch145: %{name}-error_pad.patch
-Patch146: response_time_distribution.patch
-Patch147: %{name}-remove_fcntl_excessive_calls.patch
-Patch148: %{name}-sql_no_fcache.patch
-Patch149: %{name}-show_slave_status_nolock.patch
-Patch150: %{name}-innodb_fast_shutdown.patch
-Patch151: %{name}-bug677407.patch
-Patch152: %{name}-fix-bug671764.patch
-Patch153: %{name}-mysql_remove_eol_carret.patch
-Patch154: %{name}-innodb_expand_fast_index_creation.patch
-Patch155: %{name}-innodb_bug60788.patch
-Patch156: slave_timeout_fix.patch
-Patch157: utf8_general50_ci.patch
-Patch158: bug813587.patch
-Patch159: innodb_bug47167_test_fix.patch
-Patch160: disable_query_cache_28249_test_sporadic_failure.patch
-Patch161: bug53761.patch
-Patch162: xtradb_bug317074.patch
-Patch163: subunit.patch
-Patch164: warning_fixes.patch
-Patch165: bug860910.patch
-Patch166: bug45702.patch
-# </percona>
URL: http://www.mysql.com/products/community/
BuildRequires: autoconf
BuildRequires: automake
@@ -556,7 +490,7 @@ This package contains the standard MySQL NDB CPC Daemon.
Ten pakiet zawiera standardowego demona MySQL NDB CPC.
%prep
-%setup -q %{?with_sphinx:-a100}
+%setup -q -n Percona-Server-%{version}-rel%{percona_rel} %{?with_sphinx:-a100}
%if %{with sphinx}
# http://www.sphinxsearch.com/docs/manual-0.9.9.html#sphinxse-mysql51
mv sphinx-*/mysqlse storage/sphinx
@@ -564,8 +498,7 @@ mv sphinx-*/mysqlse storage/sphinx
%endif
%patch0 -p1
#%{?with_tcpd:%patch1 -p1} # WHATS PURPOSE OF THIS PATCH?
-#%patch2 -p1 # NEEDS CHECK, which exact program needs -lc++
-%patch3 -p1
+#patch2 -p1 # NEEDS CHECK, which exact program needs -lc++
%ifarch alpha
# this is strange: mysqld functions for UDF modules are not explicitly defined,
# so -rdynamic is used; in such case gcc3+ld on alpha doesn't like C++ vtables
@@ -576,7 +509,6 @@ mv sphinx-*/mysqlse storage/sphinx
%endif
%patch5 -p1
%patch6 -p1
-%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch11 -p1
@@ -587,75 +519,6 @@ mv sphinx-*/mysqlse storage/sphinx
%patch14 -p0
%patch15 -p1
%patch16 -p1
-# <percona %patches>
-%patch100 -p1
-%patch101 -p1
-%patch102 -p1
-%patch103 -p1
-%patch104 -p1
-%patch105 -p1
-%patch106 -p1
-%patch107 -p1
-%patch108 -p1
-%patch109 -p1
-%patch110 -p1
-%patch111 -p1
-%patch112 -p1
-%patch113 -p1
-%patch114 -p1
-%patch115 -p1
-%patch116 -p1
-%patch117 -p1
-%patch118 -p1
-%patch119 -p1
-%patch120 -p1
-%patch121 -p1
-%patch122 -p1
-%patch123 -p1
-%patch124 -p1
-%patch125 -p1
-%patch126 -p1
-%patch127 -p1
-%patch128 -p1
-%patch129 -p1
-%patch130 -p1
-%patch131 -p1
-%patch132 -p1
-%patch133 -p1
-%patch134 -p1
-%patch135 -p1
-%patch136 -p1
-%patch137 -p1
-%patch138 -p1
-%patch139 -p1
-%patch140 -p1
-%patch141 -p1
-%patch142 -p1
-%patch143 -p1
-%patch144 -p1
-%patch145 -p1
-%patch146 -p1
-%patch147 -p1
-%patch148 -p1
-%patch149 -p1
-%patch150 -p1
-%patch151 -p1
-%patch152 -p1
-%patch153 -p1
-%patch154 -p1
-%patch155 -p1
-%patch156 -p1
-%patch157 -p1
-%patch158 -p1
-%patch159 -p1
-%patch160 -p1
-%patch161 -p1
-%patch162 -p1
-%patch163 -p1
-%patch164 -p1
-%patch165 -p1
-%patch166 -p1
-# </percona>
%build
%if "%{pld_release}" == "ac"
@@ -725,15 +588,13 @@ echo -e "all:\ninstall:\nclean:\nlink_sources:\n" > libmysqld/examples/Makefile
%{__make} \
benchdir=$RPM_BUILD_ROOT%{_datadir}/sql-bench
-%{__make} -C Docs mysql.info
-
%{?with_tests:%{__make} test}
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT/etc/{logrotate.d,rc.d/init.d,sysconfig,mysql,skel} \
$RPM_BUILD_ROOT/var/{log/{archive,}/mysql,lib/mysql} \
- $RPM_BUILD_ROOT{%{_infodir},%{_mysqlhome}}
+ $RPM_BUILD_ROOT%{_mysqlhome}
# Make install
%{__make} install \
@@ -742,8 +603,6 @@ install -d $RPM_BUILD_ROOT/etc/{logrotate.d,rc.d/init.d,sysconfig,mysql,skel} \
libsdir=/tmp
# libsdir is to avoid installing innodb static libs in $RPM_BUILD_ROOT../libs
-install Docs/mysql.info $RPM_BUILD_ROOT%{_infodir}
-
install %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/mysql
install %{SOURCE2} $RPM_BUILD_ROOT/etc/sysconfig/mysql
install %{SOURCE3} $RPM_BUILD_ROOT/etc/logrotate.d/mysql
@@ -827,7 +686,9 @@ rm $RPM_BUILD_ROOT%{_mandir}/man1/mysqlman.1*
rm $RPM_BUILD_ROOT%{_bindir}/resolveip
rm $RPM_BUILD_ROOT%{_mandir}/man1/resolveip.1*
rm $RPM_BUILD_ROOT%{_mandir}/man1/comp_err.1*
-rm $RPM_BUILD_ROOT%{_datadir}/mysql/ChangeLog
+# not an .info file
+%{__rm} $RPM_BUILD_ROOT/usr/share/info/mysql.info
+
# we don't package those (we have no -test or -testsuite pkg) and some of them just segfault
rm $RPM_BUILD_ROOT%{_bindir}/mysql_client_test
@@ -846,6 +707,8 @@ rm $RPM_BUILD_ROOT%{_datadir}/%{name}/*.{ini,cnf}
rm -f $RPM_BUILD_ROOT%{_libdir}/mysql/plugin/ha_*.{a,la}
rm -f $RPM_BUILD_ROOT%{_libdir}/mysql/plugin/ha_example.*
rm -f $RPM_BUILD_ROOT%{_libdir}/mysql/plugin/sphinx.{a,la}
+%{__rm} $RPM_BUILD_ROOT%{_libdir}/%{name}/plugin/mypluglib.{a,la}
+%{__rm} $RPM_BUILD_ROOT%{_libdir}/%{name}/plugin/libdaemon_example.*
%clean
rm -rf $RPM_BUILD_ROOT
@@ -855,7 +718,6 @@ rm -rf $RPM_BUILD_ROOT
%useradd -u 89 -d %{_mysqlhome} -s /bin/sh -g mysql -c "MySQL Server" mysql
%post
-[ ! -x /usr/sbin/fix-info-dir ] || /usr/sbin/fix-info-dir -c %{_infodir} >/dev/null 2>&1
/sbin/chkconfig --add mysql
%service mysql restart
@@ -866,8 +728,6 @@ if [ "$1" = "0" ]; then
fi
%postun
-[ ! -x /usr/sbin/fix-info-dir ] || /usr/sbin/fix-info-dir -c %{_infodir} >/dev/null 2>&1
-
if [ "$1" = "0" ]; then
%userremove mysql
%groupremove mysql
@@ -999,7 +859,7 @@ done
%files
%defattr(644,root,root,755)
-%doc support-files/*.cnf support-files/*.ini ChangeLog
+%doc support-files/*.cnf support-files/*.ini
%attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/logrotate.d/mysql
%attr(754,root,root) /etc/rc.d/init.d/mysql
%attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/mysql
@@ -1017,6 +877,7 @@ done
%dir %{_libdir}/mysql
%dir %{_libdir}/mysql/plugin
%attr(755,root,root) %{_libdir}/mysql/plugin/ha_innodb.so
+%attr(755,root,root) %{_libdir}/mysql/plugin/mypluglib.*
%if %{with sphinx}
%attr(755,root,root) %{_libdir}/mysql/plugin/sphinx.so
%endif
@@ -1044,7 +905,6 @@ done
%attr(750,mysql,mysql) %dir /var/log/archive/mysql
%attr(640,mysql,mysql) %ghost /var/log/mysql/*
-%{_infodir}/mysql.info*
# This is template for configuration file which is created after 'service mysql init'
%{_datadir}/mysql/mysqld.conf
%{_datadir}/mysql/mysql_system_tables.sql
diff --git a/bug45702.patch b/bug45702.patch
deleted file mode 100644
index 9100a73..0000000
--- a/bug45702.patch
+++ /dev/null
@@ -1,725 +0,0 @@
---- a/include/my_sys.h
-+++ b/include/my_sys.h
-@@ -346,8 +346,8 @@
- typedef struct st_dynamic_array
- {
- uchar *buffer;
-- uint elements,max_element;
-- uint alloc_increment;
-+ ulong elements, max_element;
-+ ulong alloc_increment;
- uint size_of_element;
- } DYNAMIC_ARRAY;
-
-@@ -809,23 +809,23 @@
- #define my_init_dynamic_array2(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E CALLER_INFO)
- #define my_init_dynamic_array2_ci(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E ORIG_CALLER_INFO)
- extern my_bool init_dynamic_array2(DYNAMIC_ARRAY *array,uint element_size,
-- void *init_buffer, uint init_alloc,
-- uint alloc_increment
-+ void *init_buffer, ulong init_alloc,
-+ ulong alloc_increment
- CALLER_INFO_PROTO);
- /* init_dynamic_array() function is deprecated */
- extern my_bool init_dynamic_array(DYNAMIC_ARRAY *array,uint element_size,
-- uint init_alloc,uint alloc_increment
-+ ulong init_alloc, ulong alloc_increment
- CALLER_INFO_PROTO);
- extern my_bool insert_dynamic(DYNAMIC_ARRAY *array,uchar * element);
- extern uchar *alloc_dynamic(DYNAMIC_ARRAY *array);
- extern uchar *pop_dynamic(DYNAMIC_ARRAY*);
--extern my_bool set_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index);
--extern my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements);
--extern void get_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index);
-+extern my_bool set_dynamic(DYNAMIC_ARRAY *array, uchar * element, ulong array_index);
-+extern my_bool allocate_dynamic(DYNAMIC_ARRAY *array, ulong max_elements);
-+extern void get_dynamic(DYNAMIC_ARRAY *array, uchar * element, ulong array_index);
- extern void delete_dynamic(DYNAMIC_ARRAY *array);
--extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint array_index);
-+extern void delete_dynamic_element(DYNAMIC_ARRAY *array, ulong array_index);
- extern void freeze_size(DYNAMIC_ARRAY *array);
--extern int get_index_dynamic(DYNAMIC_ARRAY *array, uchar * element);
-+extern long get_index_dynamic(DYNAMIC_ARRAY *array, uchar * element);
- #define dynamic_array_ptr(array,array_index) ((array)->buffer+(array_index)*(array)->size_of_element)
- #define dynamic_element(array,array_index,type) ((type)((array)->buffer) +(array_index))
- #define push_dynamic(A,B) insert_dynamic((A),(B))
---- a/mysys/array.c
-+++ b/mysys/array.c
-@@ -44,8 +44,8 @@
- */
-
- my_bool init_dynamic_array2(DYNAMIC_ARRAY *array, uint element_size,
-- void *init_buffer, uint init_alloc,
-- uint alloc_increment CALLER_INFO_PROTO)
-+ void *init_buffer, ulong init_alloc,
-+ ulong alloc_increment CALLER_INFO_PROTO)
- {
- DBUG_ENTER("init_dynamic_array");
- if (!alloc_increment)
-@@ -76,8 +76,8 @@
- }
-
- my_bool init_dynamic_array(DYNAMIC_ARRAY *array, uint element_size,
-- uint init_alloc,
-- uint alloc_increment CALLER_INFO_PROTO)
-+ ulong init_alloc,
-+ ulong alloc_increment CALLER_INFO_PROTO)
- {
- /* placeholder to preserve ABI */
- return my_init_dynamic_array_ci(array, element_size, init_alloc,
-@@ -200,7 +200,7 @@
- FALSE Ok
- */
-
--my_bool set_dynamic(DYNAMIC_ARRAY *array, uchar* element, uint idx)
-+my_bool set_dynamic(DYNAMIC_ARRAY *array, uchar* element, ulong idx)
- {
- if (idx >= array->elements)
- {
-@@ -232,11 +232,11 @@
- TRUE Allocation of new memory failed
- */
-
--my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements)
-+my_bool allocate_dynamic(DYNAMIC_ARRAY *array, ulong max_elements)
- {
- if (max_elements >= array->max_element)
- {
-- uint size;
-+ ulong size;
- uchar *new_ptr;
- size= (max_elements + array->alloc_increment)/array->alloc_increment;
- size*= array->alloc_increment;
-@@ -277,11 +277,11 @@
- idx Index of element wanted.
- */
-
--void get_dynamic(DYNAMIC_ARRAY *array, uchar* element, uint idx)
-+void get_dynamic(DYNAMIC_ARRAY *array, uchar* element, ulong idx)
- {
- if (idx >= array->elements)
- {
-- DBUG_PRINT("warning",("To big array idx: %d, array size is %d",
-+ DBUG_PRINT("warning",("To big array idx: %lu, array size is %lu",
- idx,array->elements));
- bzero(element,array->size_of_element);
- return;
-@@ -324,7 +324,7 @@
- idx Index of element to be deleted
- */
-
--void delete_dynamic_element(DYNAMIC_ARRAY *array, uint idx)
-+void delete_dynamic_element(DYNAMIC_ARRAY *array, ulong idx)
- {
- char *ptr= (char*) array->buffer+array->size_of_element*idx;
- array->elements--;
-@@ -344,7 +344,7 @@
-
- void freeze_size(DYNAMIC_ARRAY *array)
- {
-- uint elements=max(array->elements,1);
-+ ulong elements= max(array->elements, 1);
-
- /*
- Do nothing if we are using a static buffer
-@@ -372,7 +372,7 @@
-
- */
-
--int get_index_dynamic(DYNAMIC_ARRAY *array, uchar* element)
-+long get_index_dynamic(DYNAMIC_ARRAY *array, uchar* element)
- {
- size_t ret;
- if (array->buffer > element)
---- a/storage/myisam/mi_check.c
-+++ b/storage/myisam/mi_check.c
-@@ -2435,7 +2435,7 @@
-
- if (_create_index_by_sort(&sort_param,
- (my_bool) (!(param->testflag & T_VERBOSE)),
-- (uint) param->sort_buffer_length))
-+ param->sort_buffer_length))
- {
- param->retry_repair=1;
- goto err;
---- a/storage/myisam/myisamdef.h
-+++ b/storage/myisam/myisamdef.h
-@@ -347,10 +347,10 @@
- int (*key_write)(struct st_mi_sort_param *, const void *);
- void (*lock_in_memory)(MI_CHECK *);
- NEAR int (*write_keys)(struct st_mi_sort_param *, register uchar **,
-- uint , struct st_buffpek *, IO_CACHE *);
-- NEAR uint (*read_to_buffer)(IO_CACHE *,struct st_buffpek *, uint);
-+ ulong, struct st_buffpek *, IO_CACHE *);
-+ NEAR ulong (*read_to_buffer)(IO_CACHE *,struct st_buffpek *, uint);
- NEAR int (*write_key)(struct st_mi_sort_param *, IO_CACHE *,uchar *,
-- uint, uint);
-+ uint, ulong);
- } MI_SORT_PARAM;
-
- /* Some defines used by isam-funktions */
---- a/storage/myisam/sort.c
-+++ b/storage/myisam/sort.c
-@@ -47,42 +47,42 @@
-
- /* Functions defined in this file */
-
--static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info,uint keys,
-+static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info, ulong keys,
- uchar **sort_keys,
-- DYNAMIC_ARRAY *buffpek,int *maxbuffer,
-+ DYNAMIC_ARRAY *buffpek, long *maxbuffer,
- IO_CACHE *tempfile,
- IO_CACHE *tempfile_for_exceptions);
- static int NEAR_F write_keys(MI_SORT_PARAM *info,uchar **sort_keys,
-- uint count, BUFFPEK *buffpek,IO_CACHE *tempfile);
-+ ulong count, BUFFPEK *buffpek,IO_CACHE *tempfile);
- static int NEAR_F write_key(MI_SORT_PARAM *info, uchar *key,
- IO_CACHE *tempfile);
- static int NEAR_F write_index(MI_SORT_PARAM *info,uchar * *sort_keys,
-- uint count);
--static int NEAR_F merge_many_buff(MI_SORT_PARAM *info,uint keys,
-+ ulong count);
-+static int NEAR_F merge_many_buff(MI_SORT_PARAM *info, ulong keys,
- uchar * *sort_keys,
-- BUFFPEK *buffpek,int *maxbuffer,
-+ BUFFPEK *buffpek, long *maxbuffer,
- IO_CACHE *t_file);
--static uint NEAR_F read_to_buffer(IO_CACHE *fromfile,BUFFPEK *buffpek,
-- uint sort_length);
--static int NEAR_F merge_buffers(MI_SORT_PARAM *info,uint keys,
-+static ulong NEAR_F read_to_buffer(IO_CACHE *fromfile,BUFFPEK *buffpek,
-+ uint sort_length);
-+static int NEAR_F merge_buffers(MI_SORT_PARAM *info, ulong keys,
- IO_CACHE *from_file, IO_CACHE *to_file,
- uchar * *sort_keys, BUFFPEK *lastbuff,
- BUFFPEK *Fb, BUFFPEK *Tb);
--static int NEAR_F merge_index(MI_SORT_PARAM *,uint,uchar **,BUFFPEK *, int,
-+static int NEAR_F merge_index(MI_SORT_PARAM *, ulong, uchar **, BUFFPEK *, long,
- IO_CACHE *);
- static int flush_ft_buf(MI_SORT_PARAM *info);
-
- static int NEAR_F write_keys_varlen(MI_SORT_PARAM *info,uchar **sort_keys,
-- uint count, BUFFPEK *buffpek,
-+ ulong count, BUFFPEK *buffpek,
- IO_CACHE *tempfile);
--static uint NEAR_F read_to_buffer_varlen(IO_CACHE *fromfile,BUFFPEK *buffpek,
-+static ulong NEAR_F read_to_buffer_varlen(IO_CACHE *fromfile,BUFFPEK *buffpek,
- uint sort_length);
- static int NEAR_F write_merge_key(MI_SORT_PARAM *info, IO_CACHE *to_file,
-- uchar *key, uint sort_length, uint count);
-+ uchar *key, uint sort_length, ulong count);
- static int NEAR_F write_merge_key_varlen(MI_SORT_PARAM *info,
- IO_CACHE *to_file,
- uchar* key, uint sort_length,
-- uint count);
-+ ulong count);
- static inline int
- my_var_write(MI_SORT_PARAM *info, IO_CACHE *to_file, uchar *bufs);
-
-@@ -103,8 +103,9 @@
- int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
- ulong sortbuff_size)
- {
-- int error,maxbuffer,skr;
-- uint memavl,old_memavl,keys,sort_length;
-+ int error;
-+ long maxbuffer, skr;
-+ ulong memavl, old_memavl, keys, sort_length;
- DYNAMIC_ARRAY buffpek;
- ha_rows records;
- uchar **sort_keys;
-@@ -138,25 +139,25 @@
-
- while (memavl >= MIN_SORT_BUFFER)
- {
-- if ((records < UINT_MAX32) &&
-+ if ((records < ULONG_MAX) &&
- ((my_off_t) (records + 1) *
- (sort_length + sizeof(char*)) <= (my_off_t) memavl))
-- keys= (uint)records+1;
-+ keys= (ulong) records + 1;
- else
- do
- {
- skr=maxbuffer;
-- if (memavl < sizeof(BUFFPEK)*(uint) maxbuffer ||
-- (keys=(memavl-sizeof(BUFFPEK)*(uint) maxbuffer)/
-+ if (memavl < sizeof(BUFFPEK) * (ulong) maxbuffer ||
-+ (keys = (memavl - sizeof(BUFFPEK) * (ulong) maxbuffer) /
- (sort_length+sizeof(char*))) <= 1 ||
-- keys < (uint) maxbuffer)
-+ keys < (ulong) maxbuffer)
- {
- mi_check_print_error(info->sort_info->param,
- "myisam_sort_buffer_size is too small");
- goto err;
- }
- }
-- while ((maxbuffer= (int) (records/(keys-1)+1)) != skr);
-+ while ((maxbuffer= (long) (records / (keys - 1) + 1)) != skr);
-
- if ((sort_keys=(uchar **)my_malloc(keys*(sort_length+sizeof(char*))+
- HA_FT_MAXBYTELEN, MYF(0))))
-@@ -182,7 +183,7 @@
- (*info->lock_in_memory)(info->sort_info->param);/* Everything is allocated */
-
- if (!no_messages)
-- printf(" - Searching for keys, allocating buffer for %d keys\n",keys);
-+ printf(" - Searching for keys, allocating buffer for %lu keys\n", keys);
-
- if ((records=find_all_keys(info,keys,sort_keys,&buffpek,&maxbuffer,
- &tempfile,&tempfile_for_exceptions))
-@@ -192,7 +193,7 @@
- {
- if (!no_messages)
- printf(" - Dumping %lu keys\n", (ulong) records);
-- if (write_index(info,sort_keys, (uint) records))
-+ if (write_index(info,sort_keys, (ulong) records))
- goto err; /* purecov: inspected */
- }
- else
-@@ -256,13 +257,13 @@
-
- /* Search after all keys and place them in a temp. file */
-
--static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info, uint keys,
-+static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info, ulong keys,
- uchar **sort_keys, DYNAMIC_ARRAY *buffpek,
-- int *maxbuffer, IO_CACHE *tempfile,
-+ long *maxbuffer, IO_CACHE *tempfile,
- IO_CACHE *tempfile_for_exceptions)
- {
- int error;
-- uint idx;
-+ ulong idx;
- DBUG_ENTER("find_all_keys");
-
- idx=error=0;
-@@ -312,8 +313,8 @@
- {
- MI_SORT_PARAM *sort_param= (MI_SORT_PARAM*) arg;
- int error;
-- uint memavl,old_memavl,keys,sort_length;
-- uint idx, maxbuffer;
-+ ulong memavl,old_memavl,keys,sort_length;
-+ ulong idx, maxbuffer;
- uchar **sort_keys=0;
-
- LINT_INIT(keys);
-@@ -349,7 +350,7 @@
- sort_keys= (uchar **) NULL;
-
- memavl= max(sort_param->sortbuff_size, MIN_SORT_BUFFER);
-- idx= (uint)sort_param->sort_info->max_records;
-+ idx= (ulong) sort_param->sort_info->max_records;
- sort_length= sort_param->key_length;
- maxbuffer= 1;
-
-@@ -360,21 +361,21 @@
- keys= idx+1;
- else
- {
-- uint skr;
-+ ulong skr;
- do
- {
- skr= maxbuffer;
- if (memavl < sizeof(BUFFPEK)*maxbuffer ||
- (keys=(memavl-sizeof(BUFFPEK)*maxbuffer)/
- (sort_length+sizeof(char*))) <= 1 ||
-- keys < (uint) maxbuffer)
-+ keys < maxbuffer)
- {
- mi_check_print_error(sort_param->sort_info->param,
- "myisam_sort_buffer_size is too small");
- goto err;
- }
- }
-- while ((maxbuffer= (int) (idx/(keys-1)+1)) != skr);
-+ while ((maxbuffer= (idx/(keys-1)+1)) != skr);
- }
- if ((sort_keys= (uchar**)
- my_malloc(keys*(sort_length+sizeof(char*))+
-@@ -403,7 +404,7 @@
- }
-
- if (sort_param->sort_info->param->testflag & T_VERBOSE)
-- printf("Key %d - Allocating buffer for %d keys\n",
-+ printf("Key %d - Allocating buffer for %lu keys\n",
- sort_param->key + 1, keys);
- sort_param->sort_keys= sort_keys;
-
-@@ -560,7 +561,7 @@
- }
- if (sinfo->buffpek.elements)
- {
-- uint maxbuffer=sinfo->buffpek.elements-1;
-+ ulong maxbuffer=sinfo->buffpek.elements-1;
- if (!mergebuf)
- {
- length=param->sort_buffer_length;
-@@ -583,7 +584,7 @@
- printf("Key %d - Merging %u keys\n",sinfo->key+1, sinfo->keys);
- if (merge_many_buff(sinfo, keys, (uchar **)mergebuf,
- dynamic_element(&sinfo->buffpek, 0, BUFFPEK *),
-- (int*) &maxbuffer, &sinfo->tempfile))
-+ (long *) &maxbuffer, &sinfo->tempfile))
- {
- got_error=1;
- continue;
-@@ -648,7 +649,7 @@
- /* Write all keys in memory to file for later merge */
-
- static int NEAR_F write_keys(MI_SORT_PARAM *info, register uchar **sort_keys,
-- uint count, BUFFPEK *buffpek, IO_CACHE *tempfile)
-+ ulong count, BUFFPEK *buffpek, IO_CACHE *tempfile)
- {
- uchar **end;
- uint sort_length=info->key_length;
-@@ -690,7 +691,7 @@
-
- static int NEAR_F write_keys_varlen(MI_SORT_PARAM *info,
- register uchar **sort_keys,
-- uint count, BUFFPEK *buffpek,
-+ ulong count, BUFFPEK *buffpek,
- IO_CACHE *tempfile)
- {
- uchar **end;
-@@ -736,7 +737,7 @@
- /* Write index */
-
- static int NEAR_F write_index(MI_SORT_PARAM *info, register uchar **sort_keys,
-- register uint count)
-+ register ulong count)
- {
- DBUG_ENTER("write_index");
-
-@@ -753,11 +754,11 @@
-
- /* Merge buffers to make < MERGEBUFF2 buffers */
-
--static int NEAR_F merge_many_buff(MI_SORT_PARAM *info, uint keys,
-+static int NEAR_F merge_many_buff(MI_SORT_PARAM *info, ulong keys,
- uchar **sort_keys, BUFFPEK *buffpek,
-- int *maxbuffer, IO_CACHE *t_file)
-+ long *maxbuffer, IO_CACHE *t_file)
- {
-- register int i;
-+ register long i;
- IO_CACHE t_file2, *from_file, *to_file, *temp;
- BUFFPEK *lastbuff;
- DBUG_ENTER("merge_many_buff");
-@@ -787,7 +788,7 @@
- if (flush_io_cache(to_file))
- break; /* purecov: inspected */
- temp=from_file; from_file=to_file; to_file=temp;
-- *maxbuffer= (int) (lastbuff-buffpek)-1;
-+ *maxbuffer= (long) (lastbuff-buffpek)-1;
- }
- cleanup:
- close_cached_file(to_file); /* This holds old result */
-@@ -816,17 +817,17 @@
- -1 Error
- */
-
--static uint NEAR_F read_to_buffer(IO_CACHE *fromfile, BUFFPEK *buffpek,
-- uint sort_length)
-+static ulong NEAR_F read_to_buffer(IO_CACHE *fromfile, BUFFPEK *buffpek,
-+ uint sort_length)
- {
-- register uint count;
-- uint length;
-+ register ulong count;
-+ ulong length;
-
-- if ((count=(uint) min((ha_rows) buffpek->max_keys,buffpek->count)))
-+ if ((count=(ulong) min((ha_rows) buffpek->max_keys,buffpek->count)))
- {
- if (my_pread(fromfile->file,(uchar*) buffpek->base,
- (length= sort_length*count),buffpek->file_pos,MYF_RW))
-- return((uint) -1); /* purecov: inspected */
-+ return((ulong) -1); /* purecov: inspected */
- buffpek->key=buffpek->base;
- buffpek->file_pos+= length; /* New filepos */
- buffpek->count-= count;
-@@ -835,15 +836,15 @@
- return (count*sort_length);
- } /* read_to_buffer */
-
--static uint NEAR_F read_to_buffer_varlen(IO_CACHE *fromfile, BUFFPEK *buffpek,
-- uint sort_length)
-+static ulong NEAR_F read_to_buffer_varlen(IO_CACHE *fromfile, BUFFPEK *buffpek,
-+ uint sort_length)
- {
-- register uint count;
-+ register ulong count;
- uint16 length_of_key = 0;
-- uint idx;
-+ ulong idx;
- uchar *buffp;
-
-- if ((count=(uint) min((ha_rows) buffpek->max_keys,buffpek->count)))
-+ if ((count= (ulong) min((ha_rows) buffpek->max_keys,buffpek->count)))
- {
- buffp = buffpek->base;
-
-@@ -851,11 +852,11 @@
- {
- if (my_pread(fromfile->file,(uchar*)&length_of_key,sizeof(length_of_key),
- buffpek->file_pos,MYF_RW))
-- return((uint) -1);
-+ return((ulong) -1);
- buffpek->file_pos+=sizeof(length_of_key);
- if (my_pread(fromfile->file,(uchar*) buffp,length_of_key,
- buffpek->file_pos,MYF_RW))
-- return((uint) -1);
-+ return((ulong) -1);
- buffpek->file_pos+=length_of_key;
- buffp = buffp + sort_length;
- }
-@@ -869,9 +870,9 @@
-
- static int NEAR_F write_merge_key_varlen(MI_SORT_PARAM *info,
- IO_CACHE *to_file, uchar* key,
-- uint sort_length, uint count)
-+ uint sort_length, ulong count)
- {
-- uint idx;
-+ ulong idx;
- uchar *bufs = key;
-
- for (idx=1;idx<=count;idx++)
-@@ -887,7 +888,7 @@
-
- static int NEAR_F write_merge_key(MI_SORT_PARAM *info __attribute__((unused)),
- IO_CACHE *to_file, uchar *key,
-- uint sort_length, uint count)
-+ uint sort_length, ulong count)
- {
- return my_b_write(to_file, key, (size_t) sort_length*count);
- }
-@@ -898,12 +899,13 @@
- */
-
- static int NEAR_F
--merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
-+merge_buffers(MI_SORT_PARAM *info, ulong keys, IO_CACHE *from_file,
- IO_CACHE *to_file, uchar **sort_keys, BUFFPEK *lastbuff,
- BUFFPEK *Fb, BUFFPEK *Tb)
- {
-- int error;
-- uint sort_length,maxcount;
-+ ulong error;
-+ uint sort_length;
-+ ulong maxcount;
- ha_rows count;
- my_off_t UNINIT_VAR(to_start_filepos);
- uchar *strpos;
-@@ -913,7 +915,7 @@
- DBUG_ENTER("merge_buffers");
-
- count=error=0;
-- maxcount=keys/((uint) (Tb-Fb) +1);
-+ maxcount= keys / ((ulong) (Tb-Fb) + 1);
- DBUG_ASSERT(maxcount > 0);
- LINT_INIT(to_start_filepos);
- if (to_file)
-@@ -921,7 +923,7 @@
- strpos=(uchar*) sort_keys;
- sort_length=info->key_length;
-
-- if (init_queue(&queue,(uint) (Tb-Fb)+1,offsetof(BUFFPEK,key),0,
-+ if (init_queue(&queue, (uint) (Tb-Fb)+1, offsetof(BUFFPEK,key), 0,
- (int (*)(void*, uchar *,uchar*)) info->key_cmp,
- (void*) info))
- DBUG_RETURN(1); /* purecov: inspected */
-@@ -931,9 +933,8 @@
- count+= buffpek->count;
- buffpek->base= strpos;
- buffpek->max_keys=maxcount;
-- strpos+= (uint) (error=(int) info->read_to_buffer(from_file,buffpek,
-- sort_length));
-- if (error == -1)
-+ strpos+= (error= info->read_to_buffer(from_file,buffpek, sort_length));
-+ if (error == (ulong) -1)
- goto err; /* purecov: inspected */
- queue_insert(&queue,(uchar*) buffpek);
- }
-@@ -965,10 +966,10 @@
- buffpek->key+=sort_length;
- if (! --buffpek->mem_count)
- {
-- if (!(error=(int) info->read_to_buffer(from_file,buffpek,sort_length)))
-+ if (!(error= info->read_to_buffer(from_file,buffpek,sort_length)))
- {
- uchar *base=buffpek->base;
-- uint max_keys=buffpek->max_keys;
-+ ulong max_keys=buffpek->max_keys;
-
- VOID(queue_remove(&queue,0));
-
-@@ -993,7 +994,7 @@
- break; /* One buffer have been removed */
- }
- }
-- else if (error == -1)
-+ else if (error == (ulong) -1)
- goto err; /* purecov: inspected */
- queue_replaced(&queue); /* Top element has been replaced */
- }
-@@ -1026,23 +1027,23 @@
- }
- }
- }
-- while ((error=(int) info->read_to_buffer(from_file,buffpek,sort_length)) != -1 &&
-- error != 0);
-+ while ((error= info->read_to_buffer(from_file, buffpek, sort_length)) !=
-+ (ulong) -1 && error != 0);
-
- lastbuff->count=count;
- if (to_file)
- lastbuff->file_pos=to_start_filepos;
- err:
- delete_queue(&queue);
-- DBUG_RETURN(error);
-+ DBUG_RETURN(error != 0);
- } /* merge_buffers */
-
-
- /* Do a merge to output-file (save only positions) */
-
- static int NEAR_F
--merge_index(MI_SORT_PARAM *info, uint keys, uchar **sort_keys,
-- BUFFPEK *buffpek, int maxbuffer, IO_CACHE *tempfile)
-+merge_index(MI_SORT_PARAM *info, ulong keys, uchar **sort_keys,
-+ BUFFPEK *buffpek, long maxbuffer, IO_CACHE *tempfile)
- {
- DBUG_ENTER("merge_index");
- if (merge_buffers(info,keys,tempfile,(IO_CACHE*) 0,sort_keys,buffpek,buffpek,
---- /dev/null
-+++ b/mysql-test/r/percona_bug45702.result
-@@ -0,0 +1,21 @@
-+CREATE TABLE t1 (a BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=MyISAM;
-+INSERT INTO t1 VALUES (), (), (), (), (), (), (), ();
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+SET @old_myisam_sort_buffer_size = @@myisam_sort_buffer_size;
-+SET @@myisam_sort_buffer_size = 4 * 1024 * 1024 * 1024;
-+REPAIR TABLE t1;
-+Table Op Msg_type Msg_text
-+test.t1 repair status OK
-+- recovering (with sort) MyISAM-table 'MYSQLD_DATADIR/test/t1'
-+Data records: 4096
-+- Fixing index 1
-+SET @@myisam_sort_buffer_size = @old_myisam_sort_buffer_size;
-+DROP TABLE t1;
---- /dev/null
-+++ b/mysql-test/t/percona_bug45702.test
-@@ -0,0 +1,34 @@
-+###############################################################################
-+# Bug #45702: Impossible to specify myisam_sort_buffer > 4GB on 64 bit machines
-+###############################################################################
-+
-+--source include/have_64bit.inc
-+
-+# Check that having data larger than MIN_SORT_BUFFER bytes can be handled by
-+# _create_index_by_sort() with myisam_sort_buffer_size = 4 GB without errors.
-+# The full test with large data volumes can not be a part of the test suite.
-+
-+CREATE TABLE t1 (a BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=MyISAM;
-+INSERT INTO t1 VALUES (), (), (), (), (), (), (), ();
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+INSERT INTO t1 SELECT NULL FROM t1;
-+
-+SET @old_myisam_sort_buffer_size = @@myisam_sort_buffer_size;
-+SET @@myisam_sort_buffer_size = 4 * 1024 * 1024 * 1024;
-+
-+REPAIR TABLE t1;
-+
-+--let $MYSQLD_DATADIR= `select @@datadir`
-+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
-+--exec $MYISAMCHK -r --sort_buffer_size=4G $MYSQLD_DATADIR/test/t1
-+
-+SET @@myisam_sort_buffer_size = @old_myisam_sort_buffer_size;
-+
-+DROP TABLE t1;
---- a/sql/opt_range.cc
-+++ b/sql/opt_range.cc
-@@ -11524,7 +11524,7 @@
- }
- if (min_max_ranges.elements > 0)
- {
-- fprintf(DBUG_FILE, "%*susing %d quick_ranges for MIN/MAX:\n",
-+ fprintf(DBUG_FILE, "%*susing %lu quick_ranges for MIN/MAX:\n",
- indent, "", min_max_ranges.elements);
- }
- }
---- a/mysys/my_pread.c
-+++ b/mysys/my_pread.c
-@@ -48,6 +48,7 @@
- myf MyFlags)
- {
- size_t readbytes;
-+ size_t total_readbytes= 0;
- int error= 0;
- DBUG_ENTER("my_pread");
- DBUG_PRINT("my",("Fd: %d Seek: %lu Buffer: 0x%lx Count: %u MyFlags: %d",
-@@ -68,6 +69,9 @@
- if ((error= ((readbytes= pread(Filedes, Buffer, Count, offset)) != Count)))
- my_errno= errno ? errno : -1;
- #endif
-+ if (readbytes > 0)
-+ total_readbytes+= readbytes;
-+
- if (error || readbytes != Count)
- {
- DBUG_PRINT("warning",("Read only %d bytes off %u from %d, errno: %d",
-@@ -80,6 +84,24 @@
- continue; /* Interrupted */
- }
- #endif
-+ if (readbytes > 0 && readbytes < Count && errno == 0)
-+ {
-+ /*
-+ pread() may return less bytes than requested even if enough bytes are
-+ available according to the Linux man page.
-+ This makes determining the end-of-file condition a bit harder.
-+ We just do another pread() call to see if more bytes can be read,
-+ since all my_pread() users expect it to always return all available
-+ bytes. For end-of-file 0 bytes is returned. This can never be the case
-+ for a partial read, since according to the man page, -1 is returned
-+ with errno set to EINTR if no data has been read.
-+ */
-+ Buffer+= readbytes;
-+ offset+= readbytes;
-+ Count-= readbytes;
-+
-+ continue;
-+ }
- if (MyFlags & (MY_WME | MY_FAE | MY_FNABP))
- {
- if (readbytes == (size_t) -1)
-@@ -94,7 +116,7 @@
- }
- if (MyFlags & (MY_NABP | MY_FNABP))
- DBUG_RETURN(0); /* Read went ok; Return 0 */
-- DBUG_RETURN(readbytes); /* purecov: inspected */
-+ DBUG_RETURN(total_readbytes); /* purecov: inspected */
- }
- } /* my_pread */
-
diff --git a/bug53761.patch b/bug53761.patch
deleted file mode 100644
index 5c2e7c9..0000000
--- a/bug53761.patch
+++ /dev/null
@@ -1,472 +0,0 @@
-# name : bug53761.patch
-# maintainer : Alexey
-#
-# Backport of the fix for MySQL bug #53761 to 5.1
-#
---- a/storage/innodb_plugin/btr/btr0cur.c
-+++ b/storage/innodb_plugin/btr/btr0cur.c
-@@ -3238,6 +3238,7 @@
- {
- btr_path_t* slot;
- rec_t* rec;
-+ page_t* page;
-
- ut_a(cursor->path_arr);
-
-@@ -3260,8 +3261,155 @@
-
- slot = cursor->path_arr + (root_height - height);
-
-+ page = page_align(rec);
-+
- slot->nth_rec = page_rec_get_n_recs_before(rec);
-- slot->n_recs = page_get_n_recs(page_align(rec));
-+ slot->n_recs = page_get_n_recs(page);
-+ slot->page_no = page_get_page_no(page);
-+ slot->page_level = btr_page_get_level_low(page);
-+}
-+
-+/*******************************************************************//**
-+Estimate the number of rows between slot1 and slot2 for any level on a
-+B-tree. This function starts from slot1->page and reads a few pages to
-+the right, counting their records. If we reach slot2->page quickly then
-+we know exactly how many records there are between slot1 and slot2 and
-+we set is_n_rows_exact to TRUE. If we cannot reach slot2->page quickly
-+then we calculate the average number of records in the pages scanned
-+so far and assume that all pages that we did not scan up to slot2->page
-+contain the same number of records, then we multiply that average to
-+the number of pages between slot1->page and slot2->page (which is
-+n_rows_on_prev_level). In this case we set is_n_rows_exact to FALSE.
-+ at return number of rows (exact or estimated) */
-+static
-+ib_int64_t
-+btr_estimate_n_rows_in_range_on_level(
-+/*==================================*/
-+ dict_index_t* index, /*!< in: index */
-+ btr_path_t* slot1, /*!< in: left border */
-+ btr_path_t* slot2, /*!< in: right border */
-+ ib_int64_t n_rows_on_prev_level, /*!< in: number of rows
-+ on the previous level for the
-+ same descend paths; used to
-+ determine the numbe of pages
-+ on this level */
-+ ibool* is_n_rows_exact) /*!< out: TRUE if the returned
-+ value is exact i.e. not an
-+ estimation */
-+{
-+ ulint space;
-+ ib_int64_t n_rows;
-+ ulint n_pages_read;
-+ ulint page_no;
-+ ulint zip_size;
-+ ulint level;
-+
-+ space = dict_index_get_space(index);
-+
-+ n_rows = 0;
-+ n_pages_read = 0;
-+
-+ /* Assume by default that we will scan all pages between
-+ slot1->page_no and slot2->page_no */
-+ *is_n_rows_exact = TRUE;
-+
-+ /* add records from slot1->page_no which are to the right of
-+ the record which serves as a left border of the range, if any */
-+ if (slot1->nth_rec < slot1->n_recs) {
-+ n_rows += slot1->n_recs - slot1->nth_rec;
-+ }
-+
-+ /* add records from slot2->page_no which are to the left of
-+ the record which servers as a right border of the range, if any */
-+ if (slot2->nth_rec > 1) {
-+ n_rows += slot2->nth_rec - 1;
-+ }
-+
-+ /* count the records in the pages between slot1->page_no and
-+ slot2->page_no (non inclusive), if any */
-+
-+ zip_size = fil_space_get_zip_size(space);
-+
-+ /* Do not read more than this number of pages in order not to hurt
-+ performance with this code which is just an estimation. If we read
-+ this many pages before reaching slot2->page_no then we estimate the
-+ average from the pages scanned so far */
-+ #define N_PAGES_READ_LIMIT 10
-+
-+ page_no = slot1->page_no;
-+ level = slot1->page_level;
-+
-+ do {
-+ mtr_t mtr;
-+ page_t* page;
-+ buf_block_t* block;
-+
-+ mtr_start(&mtr);
-+
-+ /* fetch the page */
-+ block = buf_page_get(space, zip_size, page_no, RW_S_LATCH,
-+ &mtr);
-+
-+ page = buf_block_get_frame(block);
-+
-+ /* It is possible that the tree has been reorganized in the
-+ meantime and this is a different page. If this happens the
-+ calculated estimate will be bogus, which is not fatal as
-+ this is only an estimate. We are sure that a page with
-+ page_no exists because InnoDB never frees pages, only
-+ reuses them. */
-+ if (fil_page_get_type(page) != FIL_PAGE_INDEX
-+ || ut_dulint_cmp(btr_page_get_index_id(page), index->id)
-+ || btr_page_get_level_low(page) != level) {
-+
-+ /* The page got reused for something else */
-+ goto inexact;
-+ }
-+
-+ n_pages_read++;
-+
-+ if (page_no != slot1->page_no) {
-+ /* Do not count the records on slot1->page_no,
-+ we already counted them before this loop. */
-+ n_rows += page_get_n_recs(page);
-+ }
-+
-+ page_no = btr_page_get_next(page, &mtr);
-+
-+ mtr_commit(&mtr);
-+
-+ if (n_pages_read == N_PAGES_READ_LIMIT
-+ || page_no == FIL_NULL) {
-+ /* Either we read too many pages or
-+ we reached the end of the level without passing
-+ through slot2->page_no, the tree must have changed
-+ in the meantime */
-+ goto inexact;
-+ }
-+
-+ } while (page_no != slot2->page_no);
-+
-+ return(n_rows);
-+
-+inexact:
-+
-+ *is_n_rows_exact = FALSE;
-+
-+ /* We did interrupt before reaching slot2->page */
-+
-+ if (n_pages_read > 0) {
-+ /* The number of pages on this level is
-+ n_rows_on_prev_level, multiply it by the
-+ average number of recs per page so far */
-+ n_rows = n_rows_on_prev_level
-+ * n_rows / n_pages_read;
-+ } else {
-+ /* The tree changed before we could even
-+ start with slot1->page_no */
-+ n_rows = 10;
-+ }
-+
-+ return(n_rows);
- }
-
- /*******************************************************************//**
-@@ -3286,6 +3434,7 @@
- ibool diverged_lot;
- ulint divergence_level;
- ib_int64_t n_rows;
-+ ibool is_n_rows_exact;
- ulint i;
- mtr_t mtr;
-
-@@ -3328,6 +3477,7 @@
- /* We have the path information for the range in path1 and path2 */
-
- n_rows = 1;
-+ is_n_rows_exact = TRUE;
- diverged = FALSE; /* This becomes true when the path is not
- the same any more */
- diverged_lot = FALSE; /* This becomes true when the paths are
-@@ -3343,7 +3493,7 @@
- if (slot1->nth_rec == ULINT_UNDEFINED
- || slot2->nth_rec == ULINT_UNDEFINED) {
-
-- if (i > divergence_level + 1) {
-+ if (i > divergence_level + 1 && !is_n_rows_exact) {
- /* In trees whose height is > 1 our algorithm
- tends to underestimate: multiply the estimate
- by 2: */
-@@ -3355,7 +3505,9 @@
- to over 1 / 2 of the estimated rows in the whole
- table */
-
-- if (n_rows > index->table->stat_n_rows / 2) {
-+ if (n_rows > index->table->stat_n_rows / 2
-+ && !is_n_rows_exact) {
-+
- n_rows = index->table->stat_n_rows / 2;
-
- /* If there are just 0 or 1 rows in the table,
-@@ -3381,10 +3533,15 @@
- divergence_level = i;
- }
- } else {
-- /* Maybe the tree has changed between
-- searches */
--
-- return(10);
-+ /* It is possible that
-+ slot1->nth_rec >= slot2->nth_rec
-+ if, for example, we have a single page
-+ tree which contains (inf, 5, 6, supr)
-+ and we select where x > 20 and x < 30;
-+ in this case slot1->nth_rec will point
-+ to the supr record and slot2->nth_rec
-+ will point to 6 */
-+ n_rows = 0;
- }
-
- } else if (diverged && !diverged_lot) {
-@@ -3408,8 +3565,9 @@
- }
- } else if (diverged_lot) {
-
-- n_rows = (n_rows * (slot1->n_recs + slot2->n_recs))
-- / 2;
-+ n_rows = btr_estimate_n_rows_in_range_on_level(
-+ index, slot1, slot2, n_rows,
-+ &is_n_rows_exact);
- }
- }
- }
---- a/storage/innodb_plugin/include/btr0cur.h
-+++ b/storage/innodb_plugin/include/btr0cur.h
-@@ -670,6 +670,11 @@
- order); value ULINT_UNDEFINED
- denotes array end */
- ulint n_recs; /*!< number of records on the page */
-+ ulint page_no; /*!< no of the page containing the record */
-+ ulint page_level; /*!< level of the page, if later we fetch
-+ the page under page_no and it is no different
-+ level then we know that the tree has been
-+ reorganized */
- };
-
- #define BTR_PATH_ARRAY_N_SLOTS 250 /*!< size of path array (in slots) */
---- a/mysql-test/suite/innodb_plugin/r/innodb_gis.result
-+++ b/mysql-test/suite/innodb_plugin/r/innodb_gis.result
-@@ -572,7 +572,7 @@
- EXPLAIN
- SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
- id select_type table type possible_keys key key_len ref rows Extra
--1 SIMPLE t2 ref p p 28 const 1 Using where
-+1 SIMPLE t2 ref p p 28 const 2 Using where
- SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
- COUNT(*)
- 2
---- a/mysql-test/suite/innodb_plugin/r/innodb_mysql.result
-+++ b/mysql-test/suite/innodb_plugin/r/innodb_mysql.result
-@@ -889,13 +889,13 @@
- id 1
- select_type SIMPLE
- table t1
--type range
-+type index
- possible_keys bkey
--key bkey
--key_len 5
-+key PRIMARY
-+key_len 4
- ref NULL
--rows 16
--Extra Using where; Using index; Using filesort
-+rows 32
-+Extra Using where
- SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a;
- a b
- 1 2
-@@ -934,12 +934,12 @@
- id 1
- select_type SIMPLE
- table t1
--type range
-+type index
- possible_keys bkey
- key bkey
- key_len 5
- ref NULL
--rows 16
-+rows 32
- Extra Using where; Using index
- SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY b,a;
- a b
-@@ -989,7 +989,7 @@
- key bkey
- key_len 5
- ref const
--rows 8
-+rows 16
- Extra Using where; Using index; Using filesort
- SELECT * FROM t2 WHERE b=1 ORDER BY a;
- a b c
-@@ -1018,7 +1018,7 @@
- key bkey
- key_len 10
- ref const,const
--rows 8
-+rows 16
- Extra Using where; Using index
- SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY a;
- a b c
-@@ -1047,7 +1047,7 @@
- key bkey
- key_len 10
- ref const,const
--rows 8
-+rows 16
- Extra Using where; Using index
- SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY b,c,a;
- a b c
-@@ -1076,7 +1076,7 @@
- key bkey
- key_len 10
- ref const,const
--rows 8
-+rows 16
- Extra Using where; Using index
- SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY c,a;
- a b c
-@@ -1211,7 +1211,7 @@
- key b
- key_len 5
- ref const
--rows 1
-+rows 2
- Extra Using where; Using index
- SELECT * FROM t1 WHERE b=2 ORDER BY a ASC;
- a b
-@@ -1226,7 +1226,7 @@
- key b
- key_len 5
- ref const
--rows 1
-+rows 2
- Extra Using where; Using index
- SELECT * FROM t1 WHERE b=2 ORDER BY a DESC;
- a b
-@@ -1370,7 +1370,7 @@
- INSERT INTO t1 (a,b,c) SELECT a+4,b,c FROM t1;
- EXPLAIN SELECT a, b, c FROM t1 WHERE b = 1 ORDER BY a DESC LIMIT 5;
- id select_type table type possible_keys key key_len ref rows Extra
--1 SIMPLE t1 index t1_b PRIMARY 4 NULL 8 Using where
-+1 SIMPLE t1 range t1_b t1_b 5 NULL 8 Using where
- SELECT a, b, c FROM t1 WHERE b = 1 ORDER BY a DESC LIMIT 5;
- a b c
- 8 1 1
-@@ -1729,7 +1729,7 @@
- FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
- id select_type table type possible_keys key key_len ref rows Extra
- 1 PRIMARY <derived2> system NULL NULL NULL NULL 1
--2 DERIVED t1 index c3,c2 c2 10 NULL 5
-+2 DERIVED t1 ALL c3,c2 c3 5 5 Using filesort
- DROP TABLE t1;
- CREATE TABLE t1 (c1 REAL, c2 REAL, c3 REAL, KEY (c3), KEY (c2, c3))
- ENGINE=InnoDB;
-@@ -1743,7 +1743,7 @@
- FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
- id select_type table type possible_keys key key_len ref rows Extra
- 1 PRIMARY <derived2> system NULL NULL NULL NULL 1
--2 DERIVED t1 index c3,c2 c2 18 NULL 5
-+2 DERIVED t1 ALL c3,c2 c3 9 5 Using filesort
- DROP TABLE t1;
- CREATE TABLE t1 (c1 DECIMAL(12,2), c2 DECIMAL(12,2), c3 DECIMAL(12,2),
- KEY (c3), KEY (c2, c3))
-@@ -1758,7 +1758,7 @@
- FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
- id select_type table type possible_keys key key_len ref rows Extra
- 1 PRIMARY <derived2> system NULL NULL NULL NULL 1
--2 DERIVED t1 index c3,c2 c2 14 NULL 5
-+2 DERIVED t1 ALL c3,c2 c3 7 5 Using filesort
- DROP TABLE t1;
- End of 5.1 tests
- drop table if exists t1, t2, t3;
-@@ -1834,7 +1834,7 @@
- key b
- key_len 5
- ref NULL
--rows 3
-+rows 5
- Extra Using where; Using index
- EXPLAIN SELECT c FROM bar WHERE c>2;;
- id 1
-@@ -2430,7 +2430,7 @@
- WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t;
- id select_type table type possible_keys key key_len ref rows Extra
- 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
--2 DERIVED t1 index_merge PRIMARY,idx idx,PRIMARY 5,4 NULL 3537 Using sort_union(idx,PRIMARY); Using where
-+2 DERIVED t1 index_merge PRIMARY,idx idx,PRIMARY 5,4 NULL 1536 Using sort_union(idx,PRIMARY); Using where
- SELECT COUNT(*) FROM
- (SELECT * FROM t1 FORCE INDEX (idx,PRIMARY)
- WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t;
---- a/mysql-test/r/index_merge_innodb.result
-+++ b/mysql-test/r/index_merge_innodb.result
-@@ -346,7 +346,7 @@
- FROM t1
- WHERE c = 1 AND b = 1 AND d = 1;
- id select_type table type possible_keys key key_len ref rows Extra
--1 SIMPLE t1 index_merge c,bd c,bd 5,10 NULL 1 Using intersect(c,bd); Using where; Using index
-+1 SIMPLE t1 ref c,bd bd 10 const,const 2 Using where
- CREATE TABLE t2 ( a INT )
- SELECT a
- FROM t1
---- a/mysql-test/r/rowid_order_innodb.result
-+++ b/mysql-test/r/rowid_order_innodb.result
-@@ -15,7 +15,7 @@
- (10, 1, 1);
- explain select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
- id select_type table type possible_keys key key_len ref rows Extra
--1 SIMPLE t1 index_merge key1,key2 key1,key2 5,5 NULL 4 Using sort_union(key1,key2); Using where
-+1 SIMPLE t1 index_merge key1,key2 key1,key2 5,5 NULL 5 Using sort_union(key1,key2); Using where
- select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
- pk1 key1 key2
- -100 1 1
---- a/mysql-test/r/type_bit_innodb.result
-+++ b/mysql-test/r/type_bit_innodb.result
-@@ -233,7 +233,7 @@
- 127 403
- explain select a+0, b+0 from t1 where a > 40 and b > 200 order by 1;
- id select_type table type possible_keys key key_len ref rows Extra
--1 SIMPLE t1 range a a 2 NULL 19 Using where; Using index; Using filesort
-+1 SIMPLE t1 range a a 2 NULL 27 Using where; Using index; Using filesort
- select a+0, b+0 from t1 where a > 40 and b > 200 order by 1;
- a+0 b+0
- 44 307
---- a/mysql-test/r/endspace.result
-+++ b/mysql-test/r/endspace.result
-@@ -201,12 +201,12 @@
- text1
- teststring
- teststring
--select text1, length(text1) from t1 where text1='teststring' or text1 like 'teststring_%';
-+select text1, length(text1) from t1 where text1='teststring' or text1 like 'teststring_%' order by 1, 2;
- text1 length(text1)
- teststring 11
- teststring 10
- teststring 11
--select text1, length(text1) from t1 where text1='teststring' or text1 >= 'teststring\t';
-+select text1, length(text1) from t1 where text1='teststring' or text1 >= 'teststring\t' order by 1, 2;
- text1 length(text1)
- teststring 11
- teststring 10
---- a/mysql-test/t/endspace.test
-+++ b/mysql-test/t/endspace.test
-@@ -93,8 +93,8 @@
- select * from t1 where text1 like 'teststring_%';
-
- # The following gives wrong result in InnoDB
--select text1, length(text1) from t1 where text1='teststring' or text1 like 'teststring_%';
--select text1, length(text1) from t1 where text1='teststring' or text1 >= 'teststring\t';
-+select text1, length(text1) from t1 where text1='teststring' or text1 like 'teststring_%' order by 1, 2;
-+select text1, length(text1) from t1 where text1='teststring' or text1 >= 'teststring\t' order by 1, 2;
- select concat('|', text1, '|') from t1 order by text1;
- drop table t1;
-
diff --git a/bug813587.patch b/bug813587.patch
deleted file mode 100644
index a33a67b..0000000
--- a/bug813587.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-# name : bug813587.patch
-# maintainer : Alexey
-#
-# Fix for LP bug #813587 / MySQL bug #51196 / MySQL bug #61790
-#
-# Clear MySQL connection errors in ha_federated::close(), since they
-# can affect queries on other tables due to table cache eviction.
-#
---- a/storage/federated/ha_federated.cc
-+++ b/storage/federated/ha_federated.cc
-@@ -1641,6 +1641,7 @@
-
- int ha_federated::close(void)
- {
-+ THD *thd= current_thd;
- DBUG_ENTER("ha_federated::close");
-
- free_result();
-@@ -1651,6 +1652,10 @@
- mysql_close(mysql);
- mysql= NULL;
-
-+ /* Clear possible errors from mysql_close(), see LP bug #813587. */
-+ if (thd)
-+ thd->clear_error();
-+
- DBUG_RETURN(free_share(share));
- }
-
diff --git a/bug860910.patch b/bug860910.patch
deleted file mode 100644
index 2590b62..0000000
--- a/bug860910.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-# name : bug860910.patch
-# maintainer : Alexey
-#
-# Fixes LP bug #860910 / MySQL bug #62557
-#
---- /dev/null
-+++ b/mysql-test/suite/rpl/r/percona_bug860910.result
-@@ -0,0 +1,17 @@
-+*** Set up master (server_1) <-> master (server_2) replication ***
-+include/rpl_init.inc [topology=1->2->1]
-+
-+SELECT @@global.log_slave_updates;
-+@@global.log_slave_updates
-+1
-+SELECT @@global.log_slave_updates;
-+@@global.log_slave_updates
-+1
-+CREATE TABLE t1(a INT);
-+SET @var:=0;
-+INSERT INTO t1 VALUES (@var);
-+INSERT INTO t1 VALUES (1);
-+DROP TABLE t1;
-+include/rpl_sync.inc
-+include/check_slave_param.inc [Exec_Master_Log_Pos]
-+include/rpl_end.inc
---- /dev/null
-+++ b/mysql-test/suite/rpl/t/percona_bug860910.cnf
-@@ -0,0 +1,8 @@
-+!include ../my.cnf
-+
-+[mysqld.1]
-+log-slave-updates
-+
-+[mysqld.2]
-+log-slave-updates
-+
---- /dev/null
-+++ b/mysql-test/suite/rpl/t/percona_bug860910.test
-@@ -0,0 +1,38 @@
-+########################################################################
-+# Bug #860910: SHOW SLAVE STATUS gives wrong output with master-master
-+# and using SET uservars
-+########################################################################
-+
-+--echo *** Set up master (server_1) <-> master (server_2) replication ***
-+--let $rpl_topology= 1->2->1
-+--source include/rpl_init.inc
-+--echo
-+
-+--connection server_1
-+SELECT @@global.log_slave_updates;
-+
-+--connection server_2
-+SELECT @@global.log_slave_updates;
-+
-+--connection server_1
-+CREATE TABLE t1(a INT);
-+SET @var:=0;
-+INSERT INTO t1 VALUES (@var);
-+INSERT INTO t1 VALUES (1);
-+
-+DROP TABLE t1;
-+
-+# The following would hang with the bug not fixed due to incorrect
-+# Exec_Master_Log_Pos
-+--source include/rpl_sync.inc
-+
-+--connection server_2
-+--let $master_log_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
-+
-+--connection server_1
-+--let $slave_param= Exec_Master_Log_Pos
-+--let $slave_param_value= $master_log_pos
-+--source include/check_slave_param.inc
-+
-+# Cleanup
-+--source include/rpl_end.inc
---- a/sql/log.cc
-+++ b/sql/log.cc
-@@ -4629,6 +4629,12 @@
- user_var_event->length,
- user_var_event->type,
- user_var_event->charset_number);
-+ /*
-+ These User_var_log_events must be logged with event_info's
-+ server_id, rather than the current one.
-+ */
-+ e.server_id= event_info->server_id;
-+
- if (e.write(file))
- goto err;
- if (file == &log_file)
diff --git a/disable_query_cache_28249_test_sporadic_failure.patch b/disable_query_cache_28249_test_sporadic_failure.patch
deleted file mode 100644
index e1598a2..0000000
--- a/disable_query_cache_28249_test_sporadic_failure.patch
+++ /dev/null
@@ -1,8 +0,0 @@
---- a/mysql-test/t/disabled.def
-+++ b/mysql-test/t/disabled.def
-@@ -12,4 +12,4 @@
- kill : Bug#11748945 2008-12-03 HHunger need some changes to be robust enough for pushbuild.
- read_many_rows_innodb : Bug#11748886 2010-11-15 mattiasj report already exists
- main.log_tables-big : Bug#11756699 2010-11-15 mattiasj report already exists
--
-+main.query_cache_28249 : http://bugs.mysql.com/bug.php?id=41098
diff --git a/innodb_bug47167_test_fix.patch b/innodb_bug47167_test_fix.patch
deleted file mode 100644
index 8a6671e..0000000
--- a/innodb_bug47167_test_fix.patch
+++ /dev/null
@@ -1,44 +0,0 @@
---- a/mysql-test/suite/innodb_plugin/r/innodb_bug47167.result
-+++ b/mysql-test/suite/innodb_plugin/r/innodb_bug47167.result
-@@ -1,7 +1,4 @@
- set @old_innodb_file_format_check=@@innodb_file_format_check;
--select @old_innodb_file_format_check;
-- at old_innodb_file_format_check
--Antelope
- set global innodb_file_format_check = Barracuda;
- select @@innodb_file_format_check;
- @@innodb_file_format_check
-@@ -11,9 +8,9 @@
- @@innodb_file_format_check
- Barracuda
- set global innodb_file_format_check = @old_innodb_file_format_check;
--select @@innodb_file_format_check;
--@@innodb_file_format_check
--Antelope
-+select @@innodb_file_format_check = @old_innodb_file_format_check;
-+@@innodb_file_format_check = @old_innodb_file_format_check
-+1
- set global innodb_file_format_check = cheetah;
- ERROR HY000: Incorrect arguments to SET
- set global innodb_file_format_check = Bear;
---- a/mysql-test/suite/innodb_plugin/t/innodb_bug47167.test
-+++ b/mysql-test/suite/innodb_plugin/t/innodb_bug47167.test
-@@ -9,9 +9,6 @@
- # 'old_innodb_file_format_check'
- set @old_innodb_file_format_check=@@innodb_file_format_check;
-
--# @old_innodb_file_format_check shall have the value of 'Antelope'
--select @old_innodb_file_format_check;
--
- # Reset the value in 'innodb_file_format_check' to 'Barracuda'
- set global innodb_file_format_check = Barracuda;
-
-@@ -27,7 +24,7 @@
- set global innodb_file_format_check = @old_innodb_file_format_check;
-
- # Check whether 'innodb_file_format_check' get its original value.
--select @@innodb_file_format_check;
-+select @@innodb_file_format_check = @old_innodb_file_format_check;
-
- # Following are negative tests, all should fail.
- --disable_warnings
diff --git a/innodb_fake_changes.patch b/innodb_fake_changes.patch
deleted file mode 100644
index 14b33fd..0000000
--- a/innodb_fake_changes.patch
+++ /dev/null
@@ -1,768 +0,0 @@
-# name : innodb_fake_changes.patch
-# introduced : 5.1.58
-# maintainer : Yasufumi
-#
-#!!! notice !!!
-# Any small change to this file in the main branch
-# should be done or reviewed by the maintainer!
---- a/storage/innodb_plugin/btr/btr0cur.c
-+++ b/storage/innodb_plugin/btr/btr0cur.c
-@@ -1046,6 +1046,11 @@
- rec_t* rec;
- roll_ptr_t roll_ptr;
-
-+ if (thr && thr_get_trx(thr)->fake_changes) {
-+ /* skip LOCK, UNDO */
-+ return(DB_SUCCESS);
-+ }
-+
- /* Check if we have to wait for a lock: enqueue an explicit lock
- request if yes */
-
-@@ -1177,7 +1182,7 @@
- }
- #endif /* UNIV_DEBUG */
-
-- ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
-+ ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
- max_size = page_get_max_insert_size_after_reorganize(page, 1);
- leaf = page_is_leaf(page);
-
-@@ -1272,6 +1277,12 @@
- goto fail_err;
- }
-
-+ if (thr && thr_get_trx(thr)->fake_changes) {
-+ /* skip CHANGE, LOG */
-+ *big_rec = big_rec_vec;
-+ return(err); /* == DB_SUCCESS */
-+ }
-+
- page_cursor = btr_cur_get_page_cur(cursor);
-
- /* Now, try the insert */
-@@ -1414,10 +1425,10 @@
-
- *big_rec = NULL;
-
-- ut_ad(mtr_memo_contains(mtr,
-+ ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr,
- dict_index_get_lock(btr_cur_get_index(cursor)),
- MTR_MEMO_X_LOCK));
-- ut_ad(mtr_memo_contains(mtr, btr_cur_get_block(cursor),
-+ ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr, btr_cur_get_block(cursor),
- MTR_MEMO_PAGE_X_FIX));
-
- /* Try first an optimistic insert; reset the cursor flag: we do not
-@@ -1483,6 +1494,16 @@
- }
- }
-
-+ if (thr && thr_get_trx(thr)->fake_changes) {
-+ /* skip CHANGE, LOG */
-+ if (n_extents > 0) {
-+ fil_space_release_free_extents(index->space,
-+ n_reserved);
-+ }
-+ *big_rec = big_rec_vec;
-+ return(DB_SUCCESS);
-+ }
-+
- if (dict_index_get_page(index)
- == buf_block_get_page_no(btr_cur_get_block(cursor))) {
-
-@@ -1539,6 +1560,11 @@
-
- ut_ad(cursor && update && thr && roll_ptr);
-
-+ if (thr && thr_get_trx(thr)->fake_changes) {
-+ /* skip LOCK, UNDO */
-+ return(DB_SUCCESS);
-+ }
-+
- rec = btr_cur_get_rec(cursor);
- index = cursor->index;
-
-@@ -1837,6 +1863,14 @@
- return(err);
- }
-
-+ if (trx->fake_changes) {
-+ /* skip CHANGE, LOG */
-+ if (UNIV_LIKELY_NULL(heap)) {
-+ mem_heap_free(heap);
-+ }
-+ return(err); /* == DB_SUCCESS */
-+ }
-+
- if (block->is_hashed) {
- /* The function row_upd_changes_ord_field_binary works only
- if the update vector was built for a clustered index, we must
-@@ -1939,7 +1973,7 @@
- rec = btr_cur_get_rec(cursor);
- index = cursor->index;
- ut_ad(!!page_rec_is_comp(rec) == dict_table_is_comp(index->table));
-- ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
-+ ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
- /* The insert buffer tree should never be updated in place. */
- ut_ad(!dict_index_is_ibuf(index));
-
-@@ -2053,6 +2087,11 @@
- goto err_exit;
- }
-
-+ if (thr && thr_get_trx(thr)->fake_changes) {
-+ /* skip CHANGE, LOG */
-+ goto err_exit; /* == DB_SUCCESS */
-+ }
-+
- /* Ok, we may do the replacement. Store on the page infimum the
- explicit locks on rec, before deleting rec (see the comment in
- btr_cur_pessimistic_update). */
-@@ -2203,9 +2242,9 @@
- rec = btr_cur_get_rec(cursor);
- index = cursor->index;
-
-- ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index),
-+ ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr, dict_index_get_lock(index),
- MTR_MEMO_X_LOCK));
-- ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
-+ ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
- #ifdef UNIV_ZIP_DEBUG
- ut_a(!page_zip || page_zip_validate(page_zip, page));
- #endif /* UNIV_ZIP_DEBUG */
-@@ -2293,6 +2332,9 @@
-
- ut_ad(big_rec_vec == NULL);
-
-+ /* fake_changes should not cause undo. so never reaches here */
-+ ut_ad(!(trx->fake_changes));
-+
- btr_rec_free_updated_extern_fields(
- index, rec, page_zip, offsets, update,
- trx_is_recv(trx) ? RB_RECOVERY : RB_NORMAL, mtr);
-@@ -2331,6 +2373,12 @@
- ut_ad(flags & BTR_KEEP_POS_FLAG);
- }
-
-+ if (trx->fake_changes) {
-+ /* skip CHANGE, LOG */
-+ err = DB_SUCCESS;
-+ goto return_after_reservations;
-+ }
-+
- /* Store state of explicit locks on rec on the page infimum record,
- before deleting rec. The page infimum acts as a dummy carrier of the
- locks, taking care also of lock releases, before we can move the locks
-@@ -2686,6 +2734,11 @@
- ut_ad(dict_index_is_clust(index));
- ut_ad(!rec_get_deleted_flag(rec, rec_offs_comp(offsets)));
-
-+ if (thr && thr_get_trx(thr)->fake_changes) {
-+ /* skip LOCK, UNDO, CHANGE, LOG */
-+ return(DB_SUCCESS);
-+ }
-+
- err = lock_clust_rec_modify_check_and_lock(flags, block,
- rec, index, offsets, thr);
-
-@@ -2823,6 +2876,11 @@
- rec_t* rec;
- ulint err;
-
-+ if (thr && thr_get_trx(thr)->fake_changes) {
-+ /* skip LOCK, CHANGE, LOG */
-+ return(DB_SUCCESS);
-+ }
-+
- block = btr_cur_get_block(cursor);
- rec = btr_cur_get_rec(cursor);
-
---- a/storage/innodb_plugin/handler/ha_innodb.cc
-+++ b/storage/innodb_plugin/handler/ha_innodb.cc
-@@ -369,6 +369,12 @@
- "The value 3 regards innodb_flush_log_at_trx_commit (default).",
- NULL, NULL, 3, 0, 3, 0);
-
-+static MYSQL_THDVAR_BOOL(fake_changes, PLUGIN_VAR_OPCMDARG,
-+ "In the transaction after enabled, UPDATE, INSERT and DELETE only move the cursor to the records "
-+ "and do nothing other operations (no changes, no ibuf, no undo, no transaction log) in the transaction. "
-+ "This is to cause replication prefetch IO. ATTENTION: the transaction started after enabled is affected.",
-+ NULL, NULL, FALSE);
-+
-
- static handler *innobase_create_handler(handlerton *hton,
- TABLE_SHARE *table,
-@@ -1400,6 +1406,8 @@
- trx->check_unique_secondary = !thd_test_options(
- thd, OPTION_RELAXED_UNIQUE_CHECKS);
-
-+ trx->fake_changes = THDVAR(thd, fake_changes);
-+
- #ifdef EXTENDED_SLOWLOG
- if (thd_log_slow_verbosity(thd) & SLOG_V_INNODB) {
- trx->take_stats = TRUE;
-@@ -2816,6 +2824,11 @@
- trx_search_latch_release_if_reserved(trx);
- }
-
-+ if (trx->fake_changes && (all || (!thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))) {
-+ innobase_rollback(hton, thd, all); /* rollback implicitly */
-+ thd->main_da.reset_diagnostics_area(); /* because debug assertion code complains, if something left */
-+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
-+ }
- /* The flag trx->active_trans is set to 1 in
-
- 1. ::external_lock(),
-@@ -7141,6 +7154,12 @@
-
- trx = innobase_trx_allocate(thd);
-
-+ if (trx->fake_changes) {
-+ innobase_commit_low(trx);
-+ trx_free_for_mysql(trx);
-+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
-+ }
-+
- /* Latch the InnoDB data dictionary exclusively so that no deadlocks
- or lock waits can happen in it during a table create operation.
- Drop table etc. do this latching in row0mysql.c. */
-@@ -7346,6 +7365,10 @@
- DBUG_RETURN(HA_ERR_CRASHED);
- }
-
-+ if (prebuilt->trx->fake_changes) {
-+ goto fallback;
-+ }
-+
- /* Truncate the table in InnoDB */
-
- error = row_truncate_table_for_mysql(prebuilt->table, prebuilt->trx);
-@@ -7406,6 +7429,12 @@
-
- trx = innobase_trx_allocate(thd);
-
-+ if (trx->fake_changes) {
-+ innobase_commit_low(trx);
-+ trx_free_for_mysql(trx);
-+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
-+ }
-+
- name_len = strlen(name);
-
- ut_a(name_len < 1000);
-@@ -7494,6 +7523,12 @@
- trx->mysql_thd = NULL;
- #else
- trx = innobase_trx_allocate(thd);
-+ if (trx->fake_changes) {
-+ my_free(namebuf, MYF(0));
-+ innobase_commit_low(trx);
-+ trx_free_for_mysql(trx);
-+ return; /* ignore */
-+ }
- #endif
- row_drop_database_for_mysql(namebuf, trx);
- my_free(namebuf, MYF(0));
-@@ -7601,6 +7636,11 @@
- trx_search_latch_release_if_reserved(parent_trx);
-
- trx = innobase_trx_allocate(thd);
-+ if (trx->fake_changes) {
-+ innobase_commit_low(trx);
-+ trx_free_for_mysql(trx);
-+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
-+ }
-
- error = innobase_rename_table(trx, from, to, TRUE);
-
-@@ -10373,6 +10413,10 @@
- return(0);
- }
-
-+ if (trx->fake_changes) {
-+ return(0);
-+ }
-+
- thd_get_xid(thd, (MYSQL_XID*) &trx->xid);
-
- /* Release a possible FIFO ticket and search latch. Since we will
-@@ -11905,6 +11949,7 @@
- MYSQL_SYSVAR(use_purge_thread),
- MYSQL_SYSVAR(pass_corrupt_table),
- MYSQL_SYSVAR(lazy_drop_table),
-+ MYSQL_SYSVAR(fake_changes),
- NULL
- };
-
---- a/storage/innodb_plugin/handler/handler0alter.cc
-+++ b/storage/innodb_plugin/handler/handler0alter.cc
-@@ -652,6 +652,9 @@
- /* In case MySQL calls this in the middle of a SELECT query, release
- possible adaptive hash latch to avoid deadlocks of threads. */
- trx_search_latch_release_if_reserved(prebuilt->trx);
-+ if (prebuilt->trx->fake_changes) {
-+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
-+ }
-
- /* Check if the index name is reserved. */
- if (innobase_index_name_is_reserved(user_thd, key_info, num_of_keys)) {
-@@ -678,6 +681,13 @@
- /* Create a background transaction for the operations on
- the data dictionary tables. */
- trx = innobase_trx_allocate(user_thd);
-+ if (trx->fake_changes) {
-+ mem_heap_free(heap);
-+ trx_general_rollback_for_mysql(trx, NULL);
-+ trx_free_for_mysql(trx);
-+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
-+ }
-+
- trx_start_if_not_started(trx);
-
- /* Create table containing all indexes to be built in this
-@@ -964,6 +974,10 @@
- trx_search_latch_release_if_reserved(prebuilt->trx);
- trx = prebuilt->trx;
-
-+ if (trx->fake_changes) {
-+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
-+ }
-+
- /* Test and mark all the indexes to be dropped */
-
- row_mysql_lock_data_dictionary(trx);
-@@ -1168,6 +1182,12 @@
- /* Create a background transaction for the operations on
- the data dictionary tables. */
- trx = innobase_trx_allocate(user_thd);
-+ if (trx->fake_changes) {
-+ trx_general_rollback_for_mysql(trx, NULL);
-+ trx_free_for_mysql(trx);
-+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
-+ }
-+
- trx_start_if_not_started(trx);
-
- /* Flag this transaction as a dictionary operation, so that
---- a/storage/innodb_plugin/ibuf/ibuf0ibuf.c
-+++ b/storage/innodb_plugin/ibuf/ibuf0ibuf.c
-@@ -2613,6 +2613,8 @@
-
- ut_a(trx_sys_multiple_tablespace_format);
-
-+ ut_ad(!(thr_get_trx(thr)->fake_changes));
-+
- do_merge = FALSE;
-
- mutex_enter(&ibuf_mutex);
---- a/storage/innodb_plugin/include/trx0trx.h
-+++ b/storage/innodb_plugin/include/trx0trx.h
-@@ -509,6 +509,7 @@
- 150 bytes in the undo log size as then
- we skip XA steps */
- ulint flush_log_at_trx_commit_session;
-+ ulint fake_changes;
- ulint flush_log_later;/* In 2PC, we hold the
- prepare_commit mutex across
- both phases. In that case, we
---- a/storage/innodb_plugin/lock/lock0lock.c
-+++ b/storage/innodb_plugin/lock/lock0lock.c
-@@ -3907,6 +3907,10 @@
-
- trx = thr_get_trx(thr);
-
-+ if (trx->fake_changes && mode == LOCK_IX) {
-+ mode = LOCK_IS;
-+ }
-+
- lock_mutex_enter_kernel();
-
- /* Look for stronger locks the same trx already has on the table */
-@@ -5108,6 +5112,11 @@
- }
-
- trx = thr_get_trx(thr);
-+
-+ if (trx->fake_changes) {
-+ return(DB_SUCCESS);
-+ }
-+
- next_rec = page_rec_get_next_const(rec);
- next_rec_heap_no = page_rec_get_heap_no(next_rec);
-
-@@ -5276,6 +5285,10 @@
- return(DB_SUCCESS);
- }
-
-+ if (thr && thr_get_trx(thr)->fake_changes) {
-+ return(DB_SUCCESS);
-+ }
-+
- heap_no = rec_offs_comp(offsets)
- ? rec_get_heap_no_new(rec)
- : rec_get_heap_no_old(rec);
-@@ -5334,6 +5347,10 @@
- return(DB_SUCCESS);
- }
-
-+ if (thr && thr_get_trx(thr)->fake_changes) {
-+ return(DB_SUCCESS);
-+ }
-+
- heap_no = page_rec_get_heap_no(rec);
-
- /* Another transaction cannot have an implicit lock on the record,
-@@ -5421,6 +5438,10 @@
- return(DB_SUCCESS);
- }
-
-+ if (thr && thr_get_trx(thr)->fake_changes && mode == LOCK_X) {
-+ mode = LOCK_S;
-+ }
-+
- heap_no = page_rec_get_heap_no(rec);
-
- lock_mutex_enter_kernel();
-@@ -5498,6 +5519,10 @@
- return(DB_SUCCESS);
- }
-
-+ if (thr && thr_get_trx(thr)->fake_changes && mode == LOCK_X) {
-+ mode = LOCK_S;
-+ }
-+
- heap_no = page_rec_get_heap_no(rec);
-
- lock_mutex_enter_kernel();
---- a/storage/innodb_plugin/que/que0que.c
-+++ b/storage/innodb_plugin/que/que0que.c
-@@ -1418,6 +1418,12 @@
-
- ut_a(trx->error_state == DB_SUCCESS);
-
-+ if (trx->fake_changes) {
-+ /* fake_changes should not access to system tables */
-+ fprintf(stderr, "InnoDB: ERROR: innodb_fake_changes tried to access to system tables.\n");
-+ return(DB_ERROR);
-+ }
-+
- if (reserve_dict_mutex) {
- mutex_enter(&dict_sys->mutex);
- }
---- a/storage/innodb_plugin/row/row0ins.c
-+++ b/storage/innodb_plugin/row/row0ins.c
-@@ -1512,6 +1512,11 @@
- if (UNIV_LIKELY_NULL(heap)) {
- mem_heap_free(heap);
- }
-+
-+ if (trx->fake_changes) {
-+ err = DB_SUCCESS;
-+ }
-+
- return(err);
- }
-
-@@ -2014,7 +2019,7 @@
- }
-
- btr_cur_search_to_nth_level(index, 0, entry, PAGE_CUR_LE,
-- mode | BTR_INSERT | ignore_sec_unique,
-+ thr_get_trx(thr)->fake_changes ? BTR_SEARCH_LEAF : (mode | BTR_INSERT | ignore_sec_unique),
- &cursor, 0, __FILE__, __LINE__, &mtr);
-
- if (cursor.flag == BTR_CUR_INSERT_TO_IBUF) {
-@@ -2074,7 +2079,7 @@
-
- btr_cur_search_to_nth_level(index, 0, entry,
- PAGE_CUR_LE,
-- mode | BTR_INSERT,
-+ thr_get_trx(thr)->fake_changes ? BTR_SEARCH_LEAF : (mode | BTR_INSERT),
- &cursor, 0,
- __FILE__, __LINE__, &mtr);
- }
-@@ -2162,6 +2167,22 @@
- mtr_commit(&mtr);
-
- if (UNIV_LIKELY_NULL(big_rec)) {
-+
-+ if (thr_get_trx(thr)->fake_changes) {
-+ /* skip store extern */
-+ if (modify) {
-+ dtuple_big_rec_free(big_rec);
-+ } else {
-+ dtuple_convert_back_big_rec(index, entry, big_rec);
-+ }
-+
-+ if (UNIV_LIKELY_NULL(heap)) {
-+ mem_heap_free(heap);
-+ }
-+
-+ return(err);
-+ }
-+
- mtr_start(&mtr);
-
- btr_cur_search_to_nth_level(index, 0, entry, PAGE_CUR_LE,
---- a/storage/innodb_plugin/row/row0mysql.c
-+++ b/storage/innodb_plugin/row/row0mysql.c
-@@ -1189,6 +1189,7 @@
- prebuilt->table->stat_n_rows--;
- }
-
-+ if (!(trx->fake_changes))
- row_update_statistics_if_needed(prebuilt->table);
- trx->op_info = "";
-
-@@ -1449,6 +1450,7 @@
- that changes indexed columns, UPDATEs that change only non-indexed
- columns would not affect statistics. */
- if (node->is_delete || !(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) {
-+ if (!(trx->fake_changes))
- row_update_statistics_if_needed(prebuilt->table);
- }
-
-@@ -1667,6 +1669,7 @@
- srv_n_rows_updated++;
- }
-
-+ if (!(trx->fake_changes))
- row_update_statistics_if_needed(table);
-
- return(err);
---- a/storage/innodb_plugin/row/row0upd.c
-+++ b/storage/innodb_plugin/row/row0upd.c
-@@ -1591,8 +1591,9 @@
-
- mtr_start(&mtr);
-
-- found = row_search_index_entry(index, entry, BTR_MODIFY_LEAF, &pcur,
-- &mtr);
-+ found = row_search_index_entry(index, entry,
-+ trx->fake_changes ? BTR_SEARCH_LEAF : BTR_MODIFY_LEAF,
-+ &pcur, &mtr);
- btr_cur = btr_pcur_get_btr_cur(&pcur);
-
- rec = btr_cur_get_rec(btr_cur);
-@@ -1822,9 +1823,11 @@
- the previous invocation of this function. Mark the
- off-page columns in the entry inherited. */
-
-+ if (!(trx->fake_changes)) {
- change_ownership = row_upd_clust_rec_by_insert_inherit(
- NULL, NULL, entry, node->update);
- ut_a(change_ownership);
-+ }
- /* fall through */
- case UPD_NODE_INSERT_CLUSTERED:
- /* A lock wait occurred in row_ins_index_entry() in
-@@ -1854,7 +1857,7 @@
- delete-marked old record, mark them disowned by the
- old record and owned by the new entry. */
-
-- if (rec_offs_any_extern(offsets)) {
-+ if (rec_offs_any_extern(offsets) && !(trx->fake_changes)) {
- change_ownership = row_upd_clust_rec_by_insert_inherit(
- rec, offsets, entry, node->update);
-
-@@ -1982,7 +1985,8 @@
- the same transaction do not modify the record in the meantime.
- Therefore we can assert that the restoration of the cursor succeeds. */
-
-- ut_a(btr_pcur_restore_position(BTR_MODIFY_TREE, pcur, mtr));
-+ ut_a(btr_pcur_restore_position(thr_get_trx(thr)->fake_changes ? BTR_SEARCH_LEAF : BTR_MODIFY_TREE,
-+ pcur, mtr));
-
- ut_ad(!rec_get_deleted_flag(btr_pcur_get_rec(pcur),
- dict_table_is_comp(index->table)));
-@@ -1990,7 +1994,8 @@
- err = btr_cur_pessimistic_update(
- BTR_NO_LOCKING_FLAG | BTR_KEEP_POS_FLAG, btr_cur,
- &heap, &big_rec, node->update, node->cmpl_info, thr, mtr);
-- if (big_rec) {
-+ /* skip store extern for fake_changes */
-+ if (big_rec && !(thr_get_trx(thr)->fake_changes)) {
- ulint offsets_[REC_OFFS_NORMAL_SIZE];
- rec_t* rec;
- rec_offs_init(offsets_);
-@@ -2132,7 +2137,8 @@
-
- ut_a(pcur->rel_pos == BTR_PCUR_ON);
-
-- success = btr_pcur_restore_position(BTR_MODIFY_LEAF, pcur, mtr);
-+ success = btr_pcur_restore_position(thr_get_trx(thr)->fake_changes ? BTR_SEARCH_LEAF : BTR_MODIFY_LEAF,
-+ pcur, mtr);
-
- if (!success) {
- err = DB_RECORD_NOT_FOUND;
---- a/storage/innodb_plugin/trx/trx0trx.c
-+++ b/storage/innodb_plugin/trx/trx0trx.c
-@@ -114,6 +114,8 @@
-
- trx->flush_log_at_trx_commit_session = 3; /* means to use innodb_flush_log_at_trx_commit value */
-
-+ trx->fake_changes = FALSE;
-+
- trx->check_foreigns = TRUE;
- trx->check_unique_secondary = TRUE;
-
---- /dev/null
-+++ b/mysql-test/r/percona_innodb_fake_changes.result
-@@ -0,0 +1,55 @@
-+DROP TABLE IF EXISTS t1;
-+# Checking variables
-+SHOW VARIABLES LIKE 'innodb_fake_changes';
-+Variable_name Value
-+innodb_fake_changes OFF
-+SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
-+VARIABLE_VALUE
-+OFF
-+SET innodb_fake_changes=1;
-+SHOW VARIABLES LIKE 'innodb_fake_changes';
-+Variable_name Value
-+innodb_fake_changes ON
-+SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
-+VARIABLE_VALUE
-+ON
-+SET innodb_fake_changes=default;
-+SHOW VARIABLES LIKE 'innodb_fake_changes';
-+Variable_name Value
-+innodb_fake_changes OFF
-+SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
-+VARIABLE_VALUE
-+OFF
-+# Explicit COMMIT should fail when innodb_fake_changes is enabled
-+# DML should be fine
-+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
-+INSERT INTO t1 VALUES (1);
-+SET autocommit=0;
-+SET innodb_fake_changes=1;
-+BEGIN;
-+INSERT INTO t1 VALUES (2);
-+UPDATE t1 SET a=0;
-+DELETE FROM t1 LIMIT 1;
-+SELECT * FROM t1;
-+a
-+1
-+COMMIT;
-+ERROR HY000: Got error 131 during COMMIT
-+SET innodb_fake_changes=default;
-+DROP TABLE t1;
-+# DDL must result in error
-+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
-+SET autocommit=0;
-+SET innodb_fake_changes=1;
-+BEGIN;
-+CREATE TABLE t2 (a INT) ENGINE=InnoDB;
-+ERROR HY000: Can't create table 'test.t2' (errno: 131)
-+DROP TABLE t1;
-+ERROR 42S02: Unknown table 't1'
-+TRUNCATE TABLE t1;
-+ERROR HY000: Got error 131 during COMMIT
-+ALTER TABLE t1 ENGINE=MyISAM;
-+ERROR HY000: Got error 131 during COMMIT
-+ROLLBACK;
-+SET innodb_fake_changes=default;
-+DROP TABLE t1;
---- /dev/null
-+++ b/mysql-test/r/percona_innodb_fake_changes_locks.result
-@@ -0,0 +1,19 @@
-+DROP TABLE IF EXISTS t1;
-+# Verifying that X_LOCK not acquired
-+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
-+INSERT INTO t1 VALUES (1);
-+SET autocommit=0;
-+SET innodb_fake_changes=1;
-+BEGIN;
-+SELECT * FROM t1 FOR UPDATE;
-+a
-+1
-+SET innodb_lock_wait_timeout=3;
-+UPDATE t1 SET a=2;
-+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
-+SELECT * FROM t1 LOCK IN SHARE MODE;
-+a
-+1
-+ROLLBACK;
-+SET innodb_fake_changes=default;
-+DROP TABLE t1;
---- /dev/null
-+++ b/mysql-test/t/percona_innodb_fake_changes.test
-@@ -0,0 +1,49 @@
-+--source include/have_innodb_plugin.inc
-+
-+--disable_warnings
-+DROP TABLE IF EXISTS t1;
-+--enable_warnings
-+
-+
-+--echo # Checking variables
-+SHOW VARIABLES LIKE 'innodb_fake_changes';
-+SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
-+SET innodb_fake_changes=1;
-+SHOW VARIABLES LIKE 'innodb_fake_changes';
-+SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
-+SET innodb_fake_changes=default;
-+SHOW VARIABLES LIKE 'innodb_fake_changes';
-+SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
-+
-+--echo # Explicit COMMIT should fail when innodb_fake_changes is enabled
-+--echo # DML should be fine
-+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
-+INSERT INTO t1 VALUES (1);
-+SET autocommit=0;
-+SET innodb_fake_changes=1;
-+BEGIN;
-+INSERT INTO t1 VALUES (2);
-+UPDATE t1 SET a=0;
-+DELETE FROM t1 LIMIT 1;
-+SELECT * FROM t1;
-+--error 1180
-+COMMIT;
-+SET innodb_fake_changes=default;
-+DROP TABLE t1;
-+
-+--echo # DDL must result in error
-+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
-+SET autocommit=0;
-+SET innodb_fake_changes=1;
-+BEGIN;
-+--error 1005
-+CREATE TABLE t2 (a INT) ENGINE=InnoDB;
-+--error 1051
-+DROP TABLE t1;
-+--error 1180
-+TRUNCATE TABLE t1;
-+--error 1180
-+ALTER TABLE t1 ENGINE=MyISAM;
-+ROLLBACK;
-+SET innodb_fake_changes=default;
-+DROP TABLE t1;
---- /dev/null
-+++ b/mysql-test/t/percona_innodb_fake_changes_locks.test
-@@ -0,0 +1,24 @@
-+--source include/have_innodb_plugin.inc
-+
-+--disable_warnings
-+DROP TABLE IF EXISTS t1;
-+--enable_warnings
-+
-+--echo # Verifying that X_LOCK not acquired
-+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
-+INSERT INTO t1 VALUES (1);
-+--connect (conn1,localhost,root,,)
-+--connection conn1
-+SET autocommit=0;
-+SET innodb_fake_changes=1;
-+BEGIN;
-+SELECT * FROM t1 FOR UPDATE;
-+--connection default
-+SET innodb_lock_wait_timeout=3;
-+--error 1205
-+UPDATE t1 SET a=2;
-+SELECT * FROM t1 LOCK IN SHARE MODE;
-+--connection conn1
-+ROLLBACK;
-+SET innodb_fake_changes=default;
-+DROP TABLE t1;
diff --git a/innodb_kill_idle_transaction.patch b/innodb_kill_idle_transaction.patch
deleted file mode 100644
index 9f7251c..0000000
--- a/innodb_kill_idle_transaction.patch
+++ /dev/null
@@ -1,402 +0,0 @@
-# name : innodb_kill_idle_transaction.patch
-# introduced : 5.1.58
-# maintainer : Yasufumi
-#
-#!!! notice !!!
-# Any small change to this file in the main branch
-# should be done or reviewed by the maintainer!
---- a/include/mysql/plugin.h
-+++ b/include/mysql/plugin.h
-@@ -847,6 +847,12 @@
- */
- void thd_set_ha_data(MYSQL_THD thd, const struct handlerton *hton,
- const void *ha_data);
-+
-+int thd_command(const MYSQL_THD thd);
-+long long thd_start_time(const MYSQL_THD thd);
-+void thd_kill(MYSQL_THD thd);
-+#define EXTENDED_FOR_KILLIDLE
-+
- #ifdef __cplusplus
- }
- #endif
---- a/include/mysql/plugin.h.pp
-+++ b/include/mysql/plugin.h.pp
-@@ -150,3 +150,6 @@
- void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
- void thd_set_ha_data(void* thd, const struct handlerton *hton,
- const void *ha_data);
-+int thd_command(const void* thd);
-+long long thd_start_time(const void* thd);
-+void thd_kill(void* thd);
---- a/sql/sql_class.cc
-+++ b/sql/sql_class.cc
-@@ -470,6 +470,26 @@
- return buffer;
- }
-
-+/* extend for kill session of idle transaction from engine */
-+extern "C"
-+int thd_command(const THD* thd)
-+{
-+ return (int) thd->command;
-+}
-+
-+extern "C"
-+long long thd_start_time(const THD* thd)
-+{
-+ return (long long) thd->start_time;
-+}
-+
-+extern "C"
-+void thd_kill(THD* thd)
-+{
-+ pthread_mutex_lock(&thd->LOCK_thd_data);
-+ thd->awake(THD::KILL_CONNECTION);
-+ pthread_mutex_unlock(&thd->LOCK_thd_data);
-+}
-
- /**
- Implementation of Drop_table_error_handler::handle_error().
---- a/storage/innodb_plugin/handler/ha_innodb.cc
-+++ b/storage/innodb_plugin/handler/ha_innodb.cc
-@@ -2517,6 +2517,10 @@
-
- innobase_commit_concurrency_init_default();
-
-+#ifndef EXTENDED_FOR_KILLIDLE
-+ srv_kill_idle_transaction = 0;
-+#endif
-+
- /* Since we in this module access directly the fields of a trx
- struct, and due to different headers and flags it might happen that
- mutex_t has a different size in this module and in InnoDB
-@@ -11231,6 +11235,48 @@
- return(false);
- }
-
-+/***********************************************************************
-+functions for kill session of idle transaction */
-+extern "C"
-+ibool
-+innobase_thd_is_idle(
-+/*=================*/
-+ const void* thd) /*!< in: thread handle (THD*) */
-+{
-+#ifdef EXTENDED_FOR_KILLIDLE
-+ return(thd_command((const THD*) thd) == COM_SLEEP);
-+#else
-+ return(FALSE);
-+#endif
-+}
-+
-+extern "C"
-+ib_int64_t
-+innobase_thd_get_start_time(
-+/*========================*/
-+ const void* thd) /*!< in: thread handle (THD*) */
-+{
-+#ifdef EXTENDED_FOR_KILLIDLE
-+ return((ib_int64_t)thd_start_time((const THD*) thd));
-+#else
-+ return(0); /*dummy value*/
-+#endif
-+}
-+
-+extern "C"
-+void
-+innobase_thd_kill(
-+/*==============*/
-+ void* thd)
-+{
-+#ifdef EXTENDED_FOR_KILLIDLE
-+ thd_kill((THD*) thd);
-+#else
-+ return;
-+#endif
-+}
-+
-+
- static SHOW_VAR innodb_status_variables_export[]= {
- {"Innodb", (char*) &show_innodb_vars, SHOW_FUNC},
- {NullS, NullS, SHOW_LONG}
-@@ -11474,6 +11520,15 @@
- "Number of times a thread is allowed to enter InnoDB within the same SQL query after it has once got the ticket",
- NULL, NULL, 500L, 1L, ~0L, 0);
-
-+static MYSQL_SYSVAR_LONG(kill_idle_transaction, srv_kill_idle_transaction,
-+ PLUGIN_VAR_RQCMDARG,
-+#ifdef EXTENDED_FOR_KILLIDLE
-+ "If non-zero value, the idle session with transaction which is idle over the value in seconds is killed by InnoDB.",
-+#else
-+ "No effect for this build.",
-+#endif
-+ NULL, NULL, 0, 0, LONG_MAX, 0);
-+
- static MYSQL_SYSVAR_LONG(file_io_threads, innobase_file_io_threads,
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR,
- "Number of file I/O threads in InnoDB.",
-@@ -11767,6 +11822,7 @@
- MYSQL_SYSVAR(fast_checksum),
- MYSQL_SYSVAR(commit_concurrency),
- MYSQL_SYSVAR(concurrency_tickets),
-+ MYSQL_SYSVAR(kill_idle_transaction),
- MYSQL_SYSVAR(data_file_path),
- MYSQL_SYSVAR(doublewrite_file),
- MYSQL_SYSVAR(data_home_dir),
---- a/storage/innodb_plugin/include/srv0srv.h
-+++ b/storage/innodb_plugin/include/srv0srv.h
-@@ -282,6 +282,7 @@
- extern ulint srv_activity_count;
- extern ulint srv_fatal_semaphore_wait_threshold;
- extern ulint srv_dml_needed_delay;
-+extern lint srv_kill_idle_transaction;
-
- extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs,
- query threads, and lock table: we allocate
---- a/storage/innodb_plugin/include/trx0trx.h
-+++ b/storage/innodb_plugin/include/trx0trx.h
-@@ -600,6 +600,8 @@
- ulint mysql_process_no;/* since in Linux, 'top' reports
- process id's and not thread id's, we
- store the process number too */
-+ time_t idle_start;
-+ ib_int64_t last_stmt_start;
- /*------------------------------*/
- ulint n_mysql_tables_in_use; /* number of Innobase tables
- used in the processing of the current
---- a/storage/innodb_plugin/srv/srv0srv.c
-+++ b/storage/innodb_plugin/srv/srv0srv.c
-@@ -86,6 +86,11 @@
- #include "trx0i_s.h"
- #include "os0sync.h" /* for HAVE_ATOMIC_BUILTINS */
-
-+/* prototypes of new functions added to ha_innodb.cc for kill_idle_transaction */
-+ibool innobase_thd_is_idle(const void* thd);
-+ib_int64_t innobase_thd_get_start_time(const void* thd);
-+void innobase_thd_kill(void* thd);
-+
- /* prototypes for new functions added to ha_innodb.cc */
- ibool innobase_get_slow_log();
-
-@@ -100,6 +105,9 @@
- /* The following is the maximum allowed duration of a lock wait. */
- UNIV_INTERN ulint srv_fatal_semaphore_wait_threshold = 600;
-
-+/**/
-+UNIV_INTERN lint srv_kill_idle_transaction = 0;
-+
- /* How much data manipulation language (DML) statements need to be delayed,
- in microseconds, in order to reduce the lagging of the purge thread. */
- UNIV_INTERN ulint srv_dml_needed_delay = 0;
-@@ -2557,6 +2565,36 @@
- old_sema = sema;
- }
-
-+ if (srv_kill_idle_transaction && trx_sys) {
-+ trx_t* trx;
-+ time_t now;
-+rescan_idle:
-+ now = time(NULL);
-+ mutex_enter(&kernel_mutex);
-+ trx = UT_LIST_GET_FIRST(trx_sys->mysql_trx_list);
-+ while (trx) {
-+ if (trx->conc_state == TRX_ACTIVE
-+ && trx->mysql_thd
-+ && innobase_thd_is_idle(trx->mysql_thd)) {
-+ ib_int64_t start_time; /* as stmt ID */
-+
-+ start_time = innobase_thd_get_start_time(trx->mysql_thd);
-+ if (trx->last_stmt_start != start_time) {
-+ trx->idle_start = now;
-+ trx->last_stmt_start = start_time;
-+ } else if (difftime(now, trx->idle_start)
-+ > srv_kill_idle_transaction) {
-+ /* kill the session */
-+ mutex_exit(&kernel_mutex);
-+ innobase_thd_kill(trx->mysql_thd);
-+ goto rescan_idle;
-+ }
-+ }
-+ trx = UT_LIST_GET_NEXT(mysql_trx_list, trx);
-+ }
-+ mutex_exit(&kernel_mutex);
-+ }
-+
- /* Flush stderr so that a database user gets the output
- to possible MySQL error file */
-
---- a/storage/innodb_plugin/trx/trx0trx.c
-+++ b/storage/innodb_plugin/trx/trx0trx.c
-@@ -137,6 +137,9 @@
- trx->mysql_relay_log_file_name = "";
- trx->mysql_relay_log_pos = 0;
-
-+ trx->idle_start = 0;
-+ trx->last_stmt_start = 0;
-+
- mutex_create(&trx->undo_mutex, SYNC_TRX_UNDO);
-
- trx->rseg = NULL;
---- /dev/null
-+++ b/mysql-test/r/percona_innodb_kill_idle_trx.result
-@@ -0,0 +1,41 @@
-+DROP TABLE IF EXISTS t1;
-+SET autocommit=0;
-+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
-+SHOW GLOBAL VARIABLES LIKE 'innodb_kill_idle_transaction';
-+Variable_name Value
-+innodb_kill_idle_transaction 0
-+SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_kill_idle_transaction';
-+VARIABLE_NAME VARIABLE_VALUE
-+INNODB_KILL_IDLE_TRANSACTION 0
-+SET GLOBAL innodb_kill_idle_transaction=1;
-+SHOW GLOBAL VARIABLES LIKE 'innodb_kill_idle_transaction';
-+Variable_name Value
-+innodb_kill_idle_transaction 1
-+SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_kill_idle_transaction';
-+VARIABLE_NAME VARIABLE_VALUE
-+INNODB_KILL_IDLE_TRANSACTION 1
-+BEGIN;
-+INSERT INTO t1 VALUES (1),(2),(3);
-+COMMIT;
-+SELECT * FROM t1;
-+a
-+1
-+2
-+3
-+BEGIN;
-+INSERT INTO t1 VALUES (4),(5),(6);
-+SELECT * FROM t1;
-+ERROR HY000: MySQL server has gone away
-+SELECT * FROM t1;
-+a
-+1
-+2
-+3
-+DROP TABLE t1;
-+SET GLOBAL innodb_kill_idle_transaction=0;
-+SHOW GLOBAL VARIABLES LIKE 'innodb_kill_idle_transaction';
-+Variable_name Value
-+innodb_kill_idle_transaction 0
-+SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_kill_idle_transaction';
-+VARIABLE_NAME VARIABLE_VALUE
-+INNODB_KILL_IDLE_TRANSACTION 0
---- /dev/null
-+++ b/mysql-test/r/percona_innodb_kill_idle_trx_locks.result
-@@ -0,0 +1,45 @@
-+DROP TABLE IF EXISTS t1;
-+SET autocommit=0;
-+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
-+SHOW GLOBAL VARIABLES LIKE 'innodb_kill_idle_transaction';
-+Variable_name Value
-+innodb_kill_idle_transaction 0
-+SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_kill_idle_transaction';
-+VARIABLE_NAME VARIABLE_VALUE
-+INNODB_KILL_IDLE_TRANSACTION 0
-+SET GLOBAL innodb_kill_idle_transaction=5;
-+SHOW GLOBAL VARIABLES LIKE 'innodb_kill_idle_transaction';
-+Variable_name Value
-+innodb_kill_idle_transaction 5
-+SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_kill_idle_transaction';
-+VARIABLE_NAME VARIABLE_VALUE
-+INNODB_KILL_IDLE_TRANSACTION 5
-+BEGIN;
-+INSERT INTO t1 VALUES (1),(2),(3);
-+COMMIT;
-+SELECT * FROM t1;
-+a
-+1
-+2
-+3
-+### Locking rows. Lock should be released when idle trx is killed.
-+BEGIN;
-+SELECT * FROM t1 FOR UPDATE;
-+a
-+1
-+2
-+3
-+UPDATE t1 set a=4;
-+SELECT * FROM t1;
-+a
-+4
-+4
-+4
-+DROP TABLE t1;
-+SET GLOBAL innodb_kill_idle_transaction=0;
-+SHOW GLOBAL VARIABLES LIKE 'innodb_kill_idle_transaction';
-+Variable_name Value
-+innodb_kill_idle_transaction 0
-+SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_kill_idle_transaction';
-+VARIABLE_NAME VARIABLE_VALUE
-+INNODB_KILL_IDLE_TRANSACTION 0
---- /dev/null
-+++ b/mysql-test/t/percona_innodb_kill_idle_trx.test
-@@ -0,0 +1,28 @@
-+--source include/have_innodb.inc
-+--disable_warnings
-+DROP TABLE IF EXISTS t1;
-+--enable_warnings
-+
-+SET autocommit=0;
-+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
-+
-+--source include/percona_innodb_kill_idle_trx_show.inc
-+SET GLOBAL innodb_kill_idle_transaction=1;
-+--source include/percona_innodb_kill_idle_trx_show.inc
-+
-+BEGIN;
-+INSERT INTO t1 VALUES (1),(2),(3);
-+COMMIT;
-+SELECT * FROM t1;
-+
-+BEGIN;
-+INSERT INTO t1 VALUES (4),(5),(6);
-+sleep 3;
-+
-+--enable_reconnect
-+--error 2006 --error CR_SERVER_GONE_ERROR
-+SELECT * FROM t1;
-+SELECT * FROM t1;
-+DROP TABLE t1;
-+SET GLOBAL innodb_kill_idle_transaction=0;
-+--source include/percona_innodb_kill_idle_trx_show.inc
---- /dev/null
-+++ b/mysql-test/t/percona_innodb_kill_idle_trx_locks.test
-@@ -0,0 +1,31 @@
-+--source include/have_innodb.inc
-+--disable_warnings
-+DROP TABLE IF EXISTS t1;
-+--enable_warnings
-+
-+SET autocommit=0;
-+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
-+
-+--source include/percona_innodb_kill_idle_trx_show.inc
-+SET GLOBAL innodb_kill_idle_transaction=5;
-+--source include/percona_innodb_kill_idle_trx_show.inc
-+
-+connect (conn1,localhost,root,,);
-+connection conn1;
-+
-+BEGIN;
-+INSERT INTO t1 VALUES (1),(2),(3);
-+COMMIT;
-+SELECT * FROM t1;
-+
-+--echo ### Locking rows. Lock should be released when idle trx is killed.
-+BEGIN;
-+SELECT * FROM t1 FOR UPDATE;
-+
-+connection default;
-+UPDATE t1 set a=4;
-+
-+SELECT * FROM t1;
-+DROP TABLE t1;
-+SET GLOBAL innodb_kill_idle_transaction=0;
-+--source include/percona_innodb_kill_idle_trx_show.inc
---- /dev/null
-+++ b/mysql-test/include/percona_innodb_kill_idle_trx_show.inc
-@@ -0,0 +1,2 @@
-+SHOW GLOBAL VARIABLES LIKE 'innodb_kill_idle_transaction';
-+SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_kill_idle_transaction';
diff --git a/mysql-acc-pslist.patch b/mysql-acc-pslist.patch
deleted file mode 100644
index f447f4f..0000000
--- a/mysql-acc-pslist.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-diff -r 1a59073d658d mysql-test/r/create.result
---- a/mysql-test/r/create.result Sat Sep 13 17:31:30 2008 -0700
-+++ b/mysql-test/r/create.result Sat Sep 13 17:31:40 2008 -0700
-@@ -1720,7 +1720,8 @@
- `COMMAND` varchar(16) NOT NULL DEFAULT '',
- `TIME` bigint(7) NOT NULL DEFAULT '0',
- `STATE` varchar(64) DEFAULT NULL,
-- `INFO` longtext
-+ `INFO` longtext,
-+ `TIME_MS` decimal(22,3) NOT NULL DEFAULT '0.000'
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8
- drop table t1;
- create temporary table t1 like information_schema.processlist;
-@@ -1734,7 +1735,8 @@
- `COMMAND` varchar(16) NOT NULL DEFAULT '',
- `TIME` bigint(7) NOT NULL DEFAULT '0',
- `STATE` varchar(64) DEFAULT NULL,
-- `INFO` longtext
-+ `INFO` longtext,
-+ `TIME_MS` decimal(22,3) NOT NULL DEFAULT '0.000'
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8
- drop table t1;
- create table t1 like information_schema.character_sets;
-diff -r 1a59073d658d sql/sql_show.cc
---- a/sql/sql_show.cc Sat Sep 13 17:31:30 2008 -0700
-+++ b/sql/sql_show.cc Sat Sep 13 17:31:40 2008 -0700
-@@ -1803,7 +1803,7 @@
- TABLE *table= tables->table;
- CHARSET_INFO *cs= system_charset_info;
- char *user;
-- time_t now= my_time(0);
-+ ulonglong unow= my_micro_time();
- DBUG_ENTER("fill_process_list");
-
- user= thd->security_ctx->master_access & PROCESS_ACL ?
-@@ -1873,8 +1873,8 @@
- table->field[4]->store(command_name[tmp->command].str,
- command_name[tmp->command].length, cs);
- /* MYSQL_TIME */
-- table->field[5]->store((longlong)(tmp->start_time ?
-- now - tmp->start_time : 0), FALSE);
-+ const ulonglong utime= tmp->start_utime ? unow - tmp->start_utime : 0;
-+ table->field[5]->store(utime / 1000000, TRUE);
- /* STATE */
- #ifndef EMBEDDED_LIBRARY
- val= (char*) (tmp->locked ? "Locked" :
-@@ -1896,11 +1896,15 @@
- table->field[7]->set_notnull();
- }
-
-+ /* TIME_MS */
-+ table->field[8]->store((double)(utime / 1000.0));
-+
- if (schema_table_store_record(thd, table))
- {
- VOID(pthread_mutex_unlock(&LOCK_thread_count));
- DBUG_RETURN(1);
- }
-+
- }
- }
-
-@@ -5531,7 +5535,7 @@
- into it two numbers, based on modulus of base-10 numbers. In the ones
- position is the number of decimals. Tens position is unused. In the
- hundreds and thousands position is a two-digit decimal number representing
-- length. Encode this value with (decimals*100)+length , where
-+ length. Encode this value with (length*100)+decimals , where
- 0<decimals<10 and 0<=length<100 .
-
- @param
-@@ -6539,6 +6543,8 @@
- {"STATE", 64, MYSQL_TYPE_STRING, 0, 1, "State", SKIP_OPEN_TABLE},
- {"INFO", PROCESS_LIST_INFO_WIDTH, MYSQL_TYPE_STRING, 0, 1, "Info",
- SKIP_OPEN_TABLE},
-+ {"TIME_MS", 100 * (MY_INT64_NUM_DECIMAL_DIGITS + 1) + 3, MYSQL_TYPE_DECIMAL,
-+ 0, 0, "Time_ms", SKIP_OPEN_TABLE},
- {0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
- };
-
diff --git a/mysql-bug-34192.patch b/mysql-bug-34192.patch
deleted file mode 100644
index d6491d4..0000000
--- a/mysql-bug-34192.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From: Chad MILLERDate: February 1 2008 5:53pm
-Subject: bk commit into 5.0 tree (cmiller:1.2572) BUG#34192
-
-Below is the list of changes that have just been committed into a local
-5.0 repository of cmiller. When cmiller does a push these changes
-will be propagated to the main repository and, within 24 hours after the
-push, to the public repository.
-For information on how to access the public repository
-see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
-
-ChangeSet at stripped, 2008-02-01 11:53:48-05:00, cmiller at stripped +1 -0
- Bug#34192: mysqldump from mysql 5.0.51 silently fails on dumping \
- databases from 4.0 server
-
- Contribution from Arkadiusz Miskiewicz. No CLA required for this size.
-
- mysqldump treated a failure to set the results charset as a severe
- error.
-
- Now, don't try to set the charset for the SHOW CREATE TABLE statement,
- if the dumper doesn't want SET NAMES or the remote server doesn't
- support changing charsets.
-
- (The original patch tried to set the charset to binary and back in
- any case, and only exited-with-failure if the dumper wanted it and
- the remote server supported it.)
-
- client/mysqldump.c at stripped, 2008-02-01 11:53:46-05:00, cmiller at stripped +13 -3
- Don't set the charset for receiving results if it's not wanted or if
- the server doesn't support it.
-
-diff -Nrup a/client/mysqldump.c b/client/mysqldump.c
---- a/client/mysqldump.c 2007-12-04 22:07:00 -05:00
-+++ b/client/mysqldump.c 2008-02-01 11:53:46 -05:00
-@@ -1705,10 +1705,20 @@ static uint get_table_structure(char *ta
-
- my_snprintf(buff, sizeof(buff), "show create table %s", result_table);
-
-- if (switch_character_set_results(mysql, "binary") ||
-- mysql_query_with_error_report(mysql, &result, buff) ||
-- switch_character_set_results(mysql, default_charset))
-+ if (opt_set_charset) /* Was forced to false if server is too old. */
-+ {
-+ if (switch_character_set_results(mysql, "binary") != 0)
-+ DBUG_RETURN(0);
-+ }
-+
-+ if (mysql_query_with_error_report(mysql, &result, buff) != 0)
- DBUG_RETURN(0);
-+
-+ if (opt_set_charset) /* Was forced to false if server is too old. */
-+ {
-+ if (switch_character_set_results(mysql, default_charset) != 0)
-+ DBUG_RETURN(0);
-+ }
-
- if (path)
- {
diff --git a/mysql-bug580324.patch b/mysql-bug580324.patch
deleted file mode 100644
index 3459c76..0000000
--- a/mysql-bug580324.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-# name : bug580324.patch
-# introduced : 11 or before
-# maintainer : Oleg
-#
-#!!! notice !!!
-# Any small change to this file in the main branch
-# should be done or reviewed by the maintainer!
---- a/sql/sql_base.cc
-+++ b/sql/sql_base.cc
-@@ -233,8 +233,12 @@
- uint create_table_def_key(THD *thd, char *key, TABLE_LIST *table_list,
- bool tmp_table)
- {
-- uint key_length= (uint) (strmov(strmov(key, table_list->db)+1,
-- table_list->table_name)-key)+1;
-+ char *db_end= strnmov(key, table_list->db, MAX_DBKEY_LENGTH - 2);
-+ *db_end++= '\0';
-+ char *table_end= strnmov(db_end, table_list->table_name,
-+ key + MAX_DBKEY_LENGTH - 1 - db_end);
-+ *table_end++= '\0';
-+ uint key_length= (uint) (table_end-key);
- if (tmp_table)
- {
- int4store(key + key_length, thd->server_id);
---- a/sql/sql_parse.cc
-+++ b/sql/sql_parse.cc
-@@ -1344,10 +1344,12 @@
- break;
- #else
- {
-- char *fields, *packet_end= packet + packet_length, *arg_end;
-+ char *fields, *packet_end= packet + packet_length, *wildcard;
- /* Locked closure of all tables */
- TABLE_LIST table_list;
-- LEX_STRING conv_name;
-+ char db_buff[NAME_LEN+1];
-+ uint32 db_length;
-+ uint dummy_errors;
-
- /* used as fields initializator */
- lex_start(thd);
-@@ -1359,26 +1361,22 @@
- /*
- We have name + wildcard in packet, separated by endzero
- */
-- arg_end= strend(packet);
-- uint arg_length= arg_end - packet;
--
-- /* Check given table name length. */
-- if (arg_length >= packet_length || arg_length > NAME_LEN)
-+ wildcard= strend(packet);
-+ db_length= wildcard - packet;
-+ wildcard++;
-+ uint query_length= (uint) (packet_end - wildcard); // Don't count end \0
-+ if (db_length > NAME_LEN || query_length > NAME_LEN)
- {
- my_message(ER_UNKNOWN_COM_ERROR, ER(ER_UNKNOWN_COM_ERROR), MYF(0));
- break;
- }
-- thd->convert_string(&conv_name, system_charset_info,
-- packet, arg_length, thd->charset());
-- if (check_table_name(conv_name.str, conv_name.length, FALSE))
-- {
-- /* this is OK due to convert_string() null-terminating the string */
-- my_error(ER_WRONG_TABLE_NAME, MYF(0), conv_name.str);
-+ db_length= copy_and_convert(db_buff, sizeof(db_buff)-1,
-+ system_charset_info, packet, db_length,
-+ thd->charset(), &dummy_errors);
-+ db_buff[db_length]= '\0';
-+ table_list.alias= table_list.table_name= db_buff;
-+ if (!(fields= (char *) thd->memdup(wildcard, query_length + 1)))
- break;
-- }
--
-- table_list.alias= table_list.table_name= conv_name.str;
-- packet= arg_end + 1;
-
- if (is_schema_db(table_list.db, table_list.db_length))
- {
-@@ -1387,9 +1385,6 @@
- table_list.schema_table= schema_table;
- }
-
-- uint query_length= (uint) (packet_end - packet); // Don't count end \0
-- if (!(fields= (char *) thd->memdup(packet, query_length + 1)))
-- break;
- thd->set_query(fields, query_length);
- general_log_print(thd, command, "%s %s", table_list.table_name, fields);
- if (lower_case_table_names)
---- a/strings/ctype-utf8.c
-+++ b/strings/ctype-utf8.c
-@@ -4118,6 +4118,10 @@
- {
- int code;
- char hex[]= "0123456789abcdef";
-+
-+ if (s >= e)
-+ return MY_CS_TOOSMALL;
-+
- if (wc < 128 && filename_safe_char[wc])
- {
- *s= (uchar) wc;
diff --git a/mysql-bug677407.patch b/mysql-bug677407.patch
deleted file mode 100644
index 996e8d8..0000000
--- a/mysql-bug677407.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-# name : bug677407
-# introduced : 13
-# maintainer : Alexey
-
-LP bug#677407 / MySQL Bug#48883: Stale data from INNODB_LOCKS table.
-
-The innodb.innodb_information_schema test could fail sporadically due to
-the flawed logic in the INFORMATION_SCHEMA.INNODB_LOCKS caching
-mechanism.
-
-The logic for how to check when to update the table cache for
-INNODB_LOCKS with real data was flawed. This could result in both not
-updating the cache often enough (when the table is queried repeatedly
-with less than 100 milliseconds in-between) resulting in stale data; as
-well as updating too often (when multiple queries against the table
-start at around the same time).
-
-Fixed by updating the "last updated" timestamp in the right place, when
-the cache is updated, not when it is read.
-
-I hereby grant Percona the following BSD license to this patch for
-inclusion in Percona Server:
-
-Copyright (c) 2010, Kristian Nielsen All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of the author nor the names of its contributors
- may be used to endorse or promote products derived from this
- software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---- a/storage/innodb_plugin/trx/trx0i_s.c
-+++ b/storage/innodb_plugin/trx/trx0i_s.c
-@@ -157,10 +157,6 @@
- ullint last_read; /*!< last time the cache was read;
- measured in microseconds since
- epoch */
-- mutex_t last_read_mutex;/*!< mutex protecting the
-- last_read member - it is updated
-- inside a shared lock of the
-- rw_lock member */
- i_s_table_cache_t innodb_trx; /*!< innodb_trx table */
- i_s_table_cache_t innodb_locks; /*!< innodb_locks table */
- i_s_table_cache_t innodb_lock_waits;/*!< innodb_lock_waits table */
-@@ -1142,13 +1138,6 @@
- {
- ullint now;
-
-- /* Here we read cache->last_read without acquiring its mutex
-- because last_read is only updated when a shared rw lock on the
-- whole cache is being held (see trx_i_s_cache_end_read()) and
-- we are currently holding an exclusive rw lock on the cache.
-- So it is not possible for last_read to be updated while we are
-- reading it. */
--
- #ifdef UNIV_SYNC_DEBUG
- ut_a(rw_lock_own(&cache->rw_lock, RW_LOCK_EX));
- #endif
-@@ -1246,6 +1235,12 @@
- /*===================================*/
- trx_i_s_cache_t* cache) /*!< in/out: cache */
- {
-+ ullint now;
-+
-+#ifdef UNIV_SYNC_DEBUG
-+ ut_a(rw_lock_own(&cache->rw_lock, RW_LOCK_EX));
-+#endif
-+
- if (!can_cache_be_updated(cache)) {
-
- return(1);
-@@ -1258,6 +1253,10 @@
-
- mutex_exit(&kernel_mutex);
-
-+ /* update cache last read time */
-+ now = ut_time_us(NULL);
-+ cache->last_read = now;
-+
- return(0);
- }
-
-@@ -1288,16 +1287,12 @@
- release kernel_mutex
- release trx_i_s_cache_t::rw_lock
- acquire trx_i_s_cache_t::rw_lock, S
-- acquire trx_i_s_cache_t::last_read_mutex
-- release trx_i_s_cache_t::last_read_mutex
- release trx_i_s_cache_t::rw_lock */
-
- rw_lock_create(&cache->rw_lock, SYNC_TRX_I_S_RWLOCK);
-
- cache->last_read = 0;
-
-- mutex_create(&cache->last_read_mutex, SYNC_TRX_I_S_LAST_READ);
--
- table_cache_init(&cache->innodb_trx, sizeof(i_s_trx_row_t));
- table_cache_init(&cache->innodb_locks, sizeof(i_s_locks_row_t));
- table_cache_init(&cache->innodb_lock_waits,
-@@ -1348,18 +1343,10 @@
- /*===================*/
- trx_i_s_cache_t* cache) /*!< in: cache */
- {
-- ullint now;
--
- #ifdef UNIV_SYNC_DEBUG
- ut_a(rw_lock_own(&cache->rw_lock, RW_LOCK_SHARED));
- #endif
-
-- /* update cache last read time */
-- now = ut_time_us(NULL);
-- mutex_enter(&cache->last_read_mutex);
-- cache->last_read = now;
-- mutex_exit(&cache->last_read_mutex);
--
- rw_lock_s_unlock(&cache->rw_lock);
- }
-
diff --git a/mysql-bugfix48929.patch b/mysql-bugfix48929.patch
deleted file mode 100644
index 266ba7b..0000000
--- a/mysql-bugfix48929.patch
+++ /dev/null
@@ -1,162 +0,0 @@
-# name : bugfix48929.patch
-# introduced : 11 or before
-# maintainer : Oleg
-#
-#!!! notice !!!
-# Any small change to this file in the main branch
-# should be done or reviewed by the maintainer!
---- a/configure.in
-+++ b/configure.in
-@@ -815,7 +815,7 @@
- AC_HEADER_STDC
- AC_HEADER_SYS_WAIT
- AC_CHECK_HEADERS(fcntl.h fenv.h float.h floatingpoint.h fpu_control.h \
-- ieeefp.h limits.h memory.h pwd.h select.h \
-+ ieeefp.h limits.h memory.h pwd.h select.h poll.h \
- stdlib.h stddef.h \
- strings.h string.h synch.h sys/mman.h sys/socket.h netinet/in.h arpa/inet.h \
- sys/timeb.h sys/types.h sys/un.h sys/vadvise.h sys/wait.h term.h \
---- a/sql/mysqld.cc
-+++ b/sql/mysqld.cc
-@@ -56,6 +56,10 @@
- #include "sp_rcontext.h"
- #include "sp_cache.h"
-
-+#ifdef HAVE_POLL_H
-+#include <poll.h>
-+#endif
-+
- #define mysqld_charset &my_charset_latin1
-
- #ifdef HAVE_purify
-@@ -5137,31 +5141,58 @@
- #ifndef EMBEDDED_LIBRARY
- pthread_handler_t handle_connections_sockets(void *arg __attribute__((unused)))
- {
-- my_socket sock,new_sock;
-+ my_socket UNINIT_VAR(sock),new_sock;
- uint error_count=0;
-- uint max_used_connection= (uint) (max(ip_sock,unix_sock)+1);
-- fd_set readFDs,clientFDs;
- THD *thd;
- struct sockaddr_in cAddr;
-- int ip_flags=0,socket_flags=0,flags;
-+#if !defined(HAVE_POLL)
-+ int ip_flags= 0;
-+#endif
-+#if defined(HAVE_SYS_UN_H) && !defined(HAVE_POLL)
-+ int socket_flags= 0;
-+#endif
-+ int UNINIT_VAR(flags),retval;
- st_vio *vio_tmp;
-+#ifdef HAVE_POLL
-+ int socket_count= 0;
-+ struct pollfd fds[2]; // for ip_sock and unix_sock
-+#else
-+ fd_set readFDs,clientFDs;
-+ uint max_used_connection= (uint) (max(ip_sock,unix_sock)+1);
-+#endif
-+
- DBUG_ENTER("handle_connections_sockets");
-
- LINT_INIT(new_sock);
-
- (void) my_pthread_getprio(pthread_self()); // For debugging
-
-+#ifndef HAVE_POLL
- FD_ZERO(&clientFDs);
-+#endif
-+
- if (ip_sock != INVALID_SOCKET)
- {
-+#ifdef HAVE_POLL
-+ fds[socket_count].fd= ip_sock;
-+ fds[socket_count].events= POLLIN;
-+ socket_count++;
-+#else
- FD_SET(ip_sock,&clientFDs);
--#ifdef HAVE_FCNTL
-+#endif
-+#if !defined (HAVE_POLL) && defined(HAVE_FCNTL)
- ip_flags = fcntl(ip_sock, F_GETFL, 0);
- #endif
- }
- #ifdef HAVE_SYS_UN_H
-+#ifdef HAVE_POLL
-+ fds[socket_count].fd= unix_sock;
-+ fds[socket_count].events= POLLIN;
-+ socket_count++;
-+#else
- FD_SET(unix_sock,&clientFDs);
--#ifdef HAVE_FCNTL
-+#endif
-+#if defined(HAVE_FCNTL) && defined(HAVE_SYS_UN_H) && !defined(HAVE_POLL)
- socket_flags=fcntl(unix_sock, F_GETFL, 0);
- #endif
- #endif
-@@ -5170,12 +5201,15 @@
- MAYBE_BROKEN_SYSCALL;
- while (!abort_loop)
- {
-- readFDs=clientFDs;
--#ifdef HPUX10
-- if (select(max_used_connection,(int*) &readFDs,0,0,0) < 0)
-- continue;
-+#ifdef HAVE_POLL
-+ retval= poll(fds, socket_count, -1);
- #else
-- if (select((int) max_used_connection,&readFDs,0,0,0) < 0)
-+ readFDs=clientFDs;
-+
-+ retval= select((int) max_used_connection,&readFDs,0,0,0);
-+#endif
-+
-+ if (retval < 0)
- {
- if (socket_errno != SOCKET_EINTR)
- {
-@@ -5185,7 +5219,7 @@
- MAYBE_BROKEN_SYSCALL
- continue;
- }
--#endif /* HPUX10 */
-+
- if (abort_loop)
- {
- MAYBE_BROKEN_SYSCALL;
-@@ -5193,6 +5227,21 @@
- }
-
- /* Is this a new connection request ? */
-+#ifdef HAVE_POLL
-+ for (int i= 0; i < socket_count; ++i)
-+ {
-+ if (fds[i].revents & POLLIN)
-+ {
-+ sock= fds[i].fd;
-+#ifdef HAVE_FCNTL
-+ flags= fcntl(sock, F_GETFL, 0);
-+#else
-+ flags= 0;
-+#endif // HAVE_FCNTL
-+ break;
-+ }
-+ }
-+#else // HAVE_POLL
- #ifdef HAVE_SYS_UN_H
- if (FD_ISSET(unix_sock,&readFDs))
- {
-@@ -5200,11 +5249,12 @@
- flags= socket_flags;
- }
- else
--#endif
-+#endif // HAVE_SYS_UN_H
- {
- sock = ip_sock;
- flags= ip_flags;
- }
-+#endif // HAVE_POOL
-
- #if !defined(NO_FCNTL_NONBLOCK)
- if (!(test_flags & TEST_BLOCKING))
diff --git a/mysql-control_online_alter_index.patch b/mysql-control_online_alter_index.patch
deleted file mode 100644
index 5a921fb..0000000
--- a/mysql-control_online_alter_index.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-# name : control_online_alter_index.patch
-# introduced : 12
-# maintainer : Yasufumi
-#
-#!!! notice !!!
-# Any small change to this file in the main branch
-# should be done or reviewed by the maintainer!
---- a/sql/handler.h
-+++ b/sql/handler.h
-@@ -171,6 +171,19 @@
- #define HA_ONLINE_DROP_UNIQUE_INDEX (1L << 9) /*drop uniq. online*/
- #define HA_ONLINE_ADD_PK_INDEX (1L << 10)/*add prim. online*/
- #define HA_ONLINE_DROP_PK_INDEX (1L << 11)/*drop prim. online*/
-+
-+#define HA_ONLINE_ALTER_INDEX_MASK (HA_ONLINE_ADD_INDEX_NO_WRITES \
-+ | HA_ONLINE_DROP_INDEX_NO_WRITES \
-+ | HA_ONLINE_ADD_UNIQUE_INDEX_NO_WRITES \
-+ | HA_ONLINE_DROP_UNIQUE_INDEX_NO_WRITES \
-+ | HA_ONLINE_ADD_PK_INDEX_NO_WRITES \
-+ | HA_ONLINE_DROP_PK_INDEX_NO_WRITES \
-+ | HA_ONLINE_ADD_INDEX \
-+ | HA_ONLINE_DROP_INDEX \
-+ | HA_ONLINE_ADD_UNIQUE_INDEX \
-+ | HA_ONLINE_DROP_UNIQUE_INDEX \
-+ | HA_ONLINE_ADD_PK_INDEX \
-+ | HA_ONLINE_DROP_PK_INDEX)
- /*
- HA_PARTITION_FUNCTION_SUPPORTED indicates that the function is
- supported at all.
---- a/sql/mysqld.cc
-+++ b/sql/mysqld.cc
-@@ -5914,6 +5914,7 @@
- OPT_USERSTAT_RUNNING,
- OPT_THREAD_STATISTICS,
- OPT_OPTIMIZER_FIX,
-+ OPT_ONLINE_ALTER_INDEX,
- OPT_SUPPRESS_LOG_WARNING_1592,
- OPT_QUERY_CACHE_STRIP_COMMENTS,
- OPT_USE_GLOBAL_LONG_QUERY_TIME,
-@@ -5946,6 +5947,13 @@
- "from libc.so",
- &opt_allow_suspicious_udfs, &opt_allow_suspicious_udfs,
- 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
-+ {"fast_index_creation",
-+ OPT_ONLINE_ALTER_INDEX,
-+ "If disabled, suppresses online operations for indexes of ALTER TABLE "
-+ "(e.g. fast index creation of InnoDB Plugin) for the session.",
-+ (uchar**) &global_system_variables.online_alter_index,
-+ (uchar**) &global_system_variables.online_alter_index,
-+ 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
- {"ansi", 'a', "Use ANSI SQL syntax instead of MySQL syntax. This mode "
- "will also set transaction isolation level 'serializable'.", 0, 0, 0,
- GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
---- a/sql/set_var.cc
-+++ b/sql/set_var.cc
-@@ -760,6 +760,11 @@
- sys_engine_condition_pushdown(&vars, "engine_condition_pushdown",
- &SV::engine_condition_pushdown);
-
-+/* Control online operations of ALTER TABLE */
-+static sys_var_thd_bool
-+sys_online_alter_index(&vars, "fast_index_creation",
-+ &SV::online_alter_index);
-+
- #ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
- /* ndb thread specific variable settings */
- static sys_var_thd_ulong
---- a/sql/sql_class.h
-+++ b/sql/sql_class.h
-@@ -383,6 +383,8 @@
- my_bool ndb_use_transactions;
- my_bool ndb_index_stat_enable;
-
-+ my_bool online_alter_index;
-+
- my_bool old_alter_table;
- my_bool old_passwords;
-
---- a/sql/sql_partition.cc
-+++ b/sql/sql_partition.cc
-@@ -4381,7 +4381,12 @@
- alter_info->no_parts= curr_part_no - new_part_no;
- }
- }
-- if (!(flags= table->file->alter_table_flags(alter_info->flags)))
-+ flags= table->file->alter_table_flags(alter_info->flags);
-+ if (!thd->variables.online_alter_index)
-+ {
-+ flags&= ~((uint)HA_ONLINE_ALTER_INDEX_MASK);
-+ }
-+ if (!flags)
- {
- my_error(ER_PARTITION_FUNCTION_FAILURE, MYF(0));
- DBUG_RETURN(1);
---- a/sql/sql_table.cc
-+++ b/sql/sql_table.cc
-@@ -7023,6 +7023,10 @@
- uint *idx_end_p;
-
- alter_flags= table->file->alter_table_flags(alter_info->flags);
-+ if (!thd->variables.online_alter_index)
-+ {
-+ alter_flags&= ~((ulong)HA_ONLINE_ALTER_INDEX_MASK);
-+ }
- DBUG_PRINT("info", ("alter_flags: %lu", alter_flags));
- /* Check dropped indexes. */
- for (idx_p= index_drop_buffer, idx_end_p= idx_p + index_drop_count;
diff --git a/mysql-error_pad.patch b/mysql-error_pad.patch
deleted file mode 100644
index 5402dab..0000000
--- a/mysql-error_pad.patch
+++ /dev/null
@@ -1,266 +0,0 @@
-# name : error_pad.patch
-# introduced : 12
-# maintainer : Oleg
-#
-#!!! notice !!!
-# Any small change to this file in the main branch
-# should be done or reviewed by the maintainer!
---- a/extra/comp_err.c
-+++ b/extra/comp_err.c
-@@ -32,11 +32,12 @@
- #include <assert.h>
- #include <my_dir.h>
-
--#define MAX_ROWS 1000
-+#define MAX_ROWS 5000
- #define HEADER_LENGTH 32 /* Length of header in errmsg.sys */
- #define DEFAULT_CHARSET_DIR "../sql/share/charsets"
- #define ER_PREFIX "ER_"
- #define WARN_PREFIX "WARN_"
-+#define PADD_PREFIX "PADD_"
- static char *OUTFILE= (char*) "errmsg.sys";
- static char *HEADERFILE= (char*) "mysqld_error.h";
- static char *NAMEFILE= (char*) "mysqld_ername.h";
-@@ -91,6 +92,7 @@
- const char *sql_code1; /* sql state */
- const char *sql_code2; /* ODBC state */
- struct errors *next_error; /* Pointer to next error */
-+ my_bool is_padding; /* If true - padd this er_name while er_code != d_code*/
- DYNAMIC_ARRAY msg; /* All language texts for this error */
- };
-
-@@ -129,6 +131,7 @@
-
-
- static struct languages *parse_charset_string(char *str);
-+static struct errors *parse_padd_string(char *ptr, int er_count);
- static struct errors *parse_error_string(char *ptr, int er_count);
- static struct message *parse_message_string(struct message *new_message,
- char *str);
-@@ -231,6 +234,11 @@
-
- for (tmp_error= error_head; tmp_error; tmp_error= tmp_error->next_error)
- {
-+ if (tmp_error->is_padding)
-+ {
-+ er_last= tmp_error->d_code;
-+ continue;
-+ }
- /*
- generating mysqld_error.h
- fprintf() will automatically add \r on windows
-@@ -320,12 +328,29 @@
- "language\n", tmp_error->er_name, tmp_lang->lang_short_name);
- goto err;
- }
-- if (copy_rows(to, tmp->text, row_nr, start_pos))
-+ if (tmp_error->is_padding)
- {
-- fprintf(stderr, "Failed to copy rows to %s\n", outfile);
-- goto err;
-+ int padd_to= tmp_error->d_code;
-+ char* padd_message= tmp->text;
-+ while ((int) row_nr + er_offset < padd_to)
-+ {
-+ if (copy_rows(to, padd_message,row_nr,start_pos))
-+ {
-+ fprintf(stderr, "Failed to copy rows to %s\n", outfile);
-+ goto err;
-+ }
-+ row_nr++;
-+ }
-+ }
-+ else
-+ {
-+ if (copy_rows(to, tmp->text, row_nr, start_pos))
-+ {
-+ fprintf(stderr, "Failed to copy rows to %s\n", outfile);
-+ goto err;
-+ }
-+ row_nr++;
- }
-- row_nr++;
- }
-
- /* continue with header of the errmsg.sys file */
-@@ -476,14 +501,26 @@
- DBUG_RETURN(0);
- continue;
- }
-- if (is_prefix(str, ER_PREFIX) || is_prefix(str, WARN_PREFIX))
-+ if (is_prefix(str, ER_PREFIX) || is_prefix(str, WARN_PREFIX) || is_prefix(str, PADD_PREFIX))
- {
-- if (!(current_error= parse_error_string(str, rcount)))
-+ if (is_prefix(str, PADD_PREFIX))
- {
-- fprintf(stderr, "Failed to parse the error name string\n");
-- DBUG_RETURN(0);
-+ if (!(current_error= parse_padd_string(str, rcount)))
-+ {
-+ fprintf(stderr, "Failed to parse the error padd string\n");
-+ DBUG_RETURN(0);
-+ }
-+ rcount= current_error->d_code - er_offset; /* Count number of unique errors */
-+ }
-+ else
-+ {
-+ if (!(current_error= parse_error_string(str, rcount)))
-+ {
-+ fprintf(stderr, "Failed to parse the error name string\n");
-+ DBUG_RETURN(0);
-+ }
-+ rcount++; /* Count number of unique errors */
- }
-- rcount++; /* Count number of unique errors */
-
- /* add error to the list */
- *tail_error= current_error;
-@@ -824,78 +861,122 @@
- DBUG_RETURN(new_message);
- }
-
-+static struct errors* create_new_error(my_bool is_padding, char *er_name, int d_code, const char *sql_code1, const char *sql_code2)
-+{
-+ struct errors *new_error;
-+ DBUG_ENTER("create_new_error");
-+ /* create a new element */
-+ new_error= (struct errors *) my_malloc(sizeof(*new_error), MYF(MY_WME));
-+ if (my_init_dynamic_array(&new_error->msg, sizeof(struct message), 0, 0))
-+ DBUG_RETURN(0); /* OOM: Fatal error */
-+ new_error->is_padding= is_padding;
-+ DBUG_PRINT("info", ("is_padding: %s", (is_padding ? "true" : "false")));
-+ new_error->er_name= er_name;
-+ DBUG_PRINT("info", ("er_name: %s", er_name));
-+ new_error->d_code= d_code;
-+ DBUG_PRINT("info", ("d_code: %d", d_code));
-+ new_error->sql_code1= sql_code1;
-+ DBUG_PRINT("info", ("sql_code1: %s", sql_code1));
-+ new_error->sql_code2= sql_code2;
-+ DBUG_PRINT("info", ("sql_code2: %s", sql_code2));
-+ DBUG_RETURN(new_error);
-+}
-
- /*
-- Parsing the string with error name and codes; returns the pointer to
-+ Parsing the string with padd syntax (name + error to pad); returns the pointer to
- the errors struct
- */
-
--static struct errors *parse_error_string(char *str, int er_count)
-+static struct errors *parse_padd_string(char* str, int er_count)
- {
-- struct errors *new_error;
-+ char *er_name;
-+ uint d_code;
-+ char *start;
- DBUG_ENTER("parse_error_string");
- DBUG_PRINT("enter", ("str: %s", str));
-
-- /* create a new element */
-- new_error= (struct errors *) my_malloc(sizeof(*new_error), MYF(MY_WME));
-+ start= str;
-+ str= skip_delimiters(str);
-
-- if (my_init_dynamic_array(&new_error->msg, sizeof(struct message), 0, 0))
-+ /* getting the error name */
-+
-+ if (!(er_name= get_word(&str)))
- DBUG_RETURN(0); /* OOM: Fatal error */
-
-- /* getting the error name */
- str= skip_delimiters(str);
-
-- if (!(new_error->er_name= get_word(&str)))
-+ if (!(d_code= parse_error_offset(start)))
-+ {
-+ fprintf(stderr, "Failed to parse the error padd string '%s' '%s' (d_code doesn't parse)!\n",er_name,str);
-+ DBUG_RETURN(0);
-+ }
-+ if (d_code < (uint) er_offset + er_count)
-+ {
-+ fprintf(stderr, "Error to padding less current error number!\n");
-+ DBUG_RETURN(0);
-+ }
-+ DBUG_RETURN(create_new_error(TRUE,er_name,d_code,empty_string,empty_string));
-+}
-+
-+/*
-+ Parsing the string with error name and codes; returns the pointer to
-+ the errors struct
-+*/
-+
-+static struct errors *parse_error_string(char *str, int er_count)
-+{
-+ char *er_name;
-+ int d_code;
-+ const char *sql_code1= empty_string;
-+ const char *sql_code2= empty_string;
-+ DBUG_ENTER("parse_error_string");
-+ DBUG_PRINT("enter", ("str: %s", str));
-+
-+ str= skip_delimiters(str);
-+
-+ /* getting the error name */
-+
-+ if (!(er_name= get_word(&str)))
- DBUG_RETURN(0); /* OOM: Fatal error */
-- DBUG_PRINT("info", ("er_name: %s", new_error->er_name));
-
- str= skip_delimiters(str);
-
- /* getting the code1 */
--
-- new_error->d_code= er_offset + er_count;
-- DBUG_PRINT("info", ("d_code: %d", new_error->d_code));
-+ d_code= er_offset + er_count;
-
- str= skip_delimiters(str);
-
- /* if we reached EOL => no more codes, but this can happen */
- if (!*str)
- {
-- new_error->sql_code1= empty_string;
-- new_error->sql_code2= empty_string;
- DBUG_PRINT("info", ("str: %s", str));
-- DBUG_RETURN(new_error);
-+ goto complete_create;
- }
--
- /* getting the sql_code 1 */
--
-- if (!(new_error->sql_code1= get_word(&str)))
-+ if (!(sql_code1= get_word(&str)))
- DBUG_RETURN(0); /* OOM: Fatal error */
-- DBUG_PRINT("info", ("sql_code1: %s", new_error->sql_code1));
-
- str= skip_delimiters(str);
-
- /* if we reached EOL => no more codes, but this can happen */
- if (!*str)
- {
-- new_error->sql_code2= empty_string;
- DBUG_PRINT("info", ("str: %s", str));
-- DBUG_RETURN(new_error);
-+ goto complete_create;
- }
--
- /* getting the sql_code 2 */
-- if (!(new_error->sql_code2= get_word(&str)))
-+ if (!(sql_code2= get_word(&str)))
- DBUG_RETURN(0); /* OOM: Fatal error */
-- DBUG_PRINT("info", ("sql_code2: %s", new_error->sql_code2));
-
- str= skip_delimiters(str);
-+
- if (*str)
- {
- fprintf(stderr, "The error line did not end with sql/odbc code!");
- DBUG_RETURN(0);
- }
--
-- DBUG_RETURN(new_error);
-+complete_create:
-+ DBUG_RETURN(create_new_error(FALSE,er_name,d_code,sql_code1,sql_code2));
- }
-
-
diff --git a/mysql-fix-bug671764.patch b/mysql-fix-bug671764.patch
deleted file mode 100644
index bda76b2..0000000
--- a/mysql-fix-bug671764.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-# name : fix-bug671764.patch
-# introduced : 12
-# maintainer : Alexander
-#
-#!!! notice !!!
-# Any small change to this file in the main branch
-# should be done or reviewed by the maintainer!
---- a/configure.in
-+++ b/configure.in
-@@ -2772,7 +2772,7 @@
- MAN_DROP="$MAN_DROP embedded"
- grep -v 'embedded' $MANLISTFIL > $TMPLISTFIL ; mv -f $TMPLISTFIL $MANLISTFIL
- fi
-- if test X"$with_plugin_innobase" != Xyes
-+ if test X"$with_plugin_innodb_plugin" != Xyes
- then
- MAN_DROP="$MAN_DROP innodb"
- grep -v 'inno' $MANLISTFIL > $TMPLISTFIL ; mv -f $TMPLISTFIL $MANLISTFIL
-@@ -2851,7 +2851,7 @@
- fi
-
- # "innochecksum" is not in the "innobase/" subdirectory, but should be switched
<Skipped 47313 lines>
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/mysql.git/commitdiff/9f8d0edd0c0ae213101ec789f9d69a7c6ca48856
More information about the pld-cvs-commit
mailing list