#At file:///Users/tnurnberg/forest/11762799_/56-11762799_/ based on revid:tatjana.nuernberg@stripped
3367 Tatjana Azundris Nuernberg 2011-05-12 [merge]
manual merge
added:
mysql-test/include/start_slave_io.inc
mysql-test/include/start_slave_sql.inc
modified:
.bzrignore
BUILD/SETUP.sh
client/mysql.cc*
client/mysqlbinlog.cc
client/mysqltest.cc
extra/replace.c
include/mysql.h
include/mysql.h.pp
libmysql/libmysql.c
mysql-test/collections/default.experimental
mysql-test/extra/rpl_tests/check_type.inc
mysql-test/include/wait_show_condition.inc
mysql-test/r/ctype_binary.result
mysql-test/r/ctype_cp1251.result
mysql-test/r/ctype_latin1.result
mysql-test/r/ctype_ucs.result
mysql-test/r/ctype_utf8.result
mysql-test/r/distinct.result
mysql-test/r/explain.result
mysql-test/r/innodb_mysql_lock.result
mysql-test/r/metadata.result
mysql-test/r/mysqlbinlog_base64.result
mysql-test/r/mysqldump.result
mysql-test/r/trigger.result
mysql-test/r/type_ranges.result
mysql-test/r/variables-big.result
mysql-test/suite/binlog/t/binlog_bug23533.test
mysql-test/suite/funcs_1/r/is_columns_mysql.result
mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result
mysql-test/suite/rpl/r/rpl_crash_safe_master.result
mysql-test/suite/rpl/r/rpl_row_crash_safe.result
mysql-test/suite/rpl/r/rpl_row_ignorable_event.result
mysql-test/suite/rpl/r/rpl_server_id2.result
mysql-test/suite/rpl/r/rpl_show_slave_hosts.result
mysql-test/suite/rpl/r/rpl_stm_mixed_crash_safe.result
mysql-test/suite/rpl/r/rpl_typeconv.result
mysql-test/suite/rpl/t/rpl_crash_safe_master.test
mysql-test/suite/rpl/t/rpl_row_ignorable_event.test
mysql-test/suite/rpl/t/rpl_row_until.test
mysql-test/suite/rpl/t/rpl_server_id2.test
mysql-test/suite/rpl/t/rpl_show_slave_hosts.test
mysql-test/suite/rpl/t/rpl_typeconv.test
mysql-test/t/distinct.test
mysql-test/t/explain.test
mysql-test/t/innodb_mysql_lock.test
mysql-test/t/mysqlbinlog_base64.test
mysql-test/t/mysqlbinlog_raw_mode.test
mysql-test/t/mysqldump.test
mysql-test/t/trigger.test
mysql-test/t/variables-big.test
scripts/make_win_bin_dist
scripts/mysql_system_tables.sql
sql/handler.h
sql/item.cc
sql/item_cmpfunc.cc
sql/item_func.cc
sql/item_row.cc
sql/item_strfunc.cc
sql/log_event.cc
sql/my_decimal.cc
sql/opt_range.cc
sql/protocol.cc
sql/rpl_slave.cc
sql/sql_analyse.cc
sql/sql_class.h
sql/sql_lex.h
sql/sql_partition.cc
storage/archive/ha_archive.cc
storage/ndb/src/kernel/blocks/lgman.cpp
strings/decimal.c
vio/viosocket.c
=== modified file '.bzrignore'
--- a/.bzrignore 2011-04-23 20:44:45 +0000
+++ b/.bzrignore 2011-05-11 12:47:11 +0000
@@ -3156,3 +3156,6 @@ libmysqld/sql_partition_admin.cc
generated
doxyerror.log
VERSION.dep
+info_macros.cmake
+Docs/INFO_BIN
+Docs/INFO_SRC
=== modified file 'BUILD/SETUP.sh'
--- a/BUILD/SETUP.sh 2011-01-21 16:14:47 +0000
+++ b/BUILD/SETUP.sh 2011-05-06 13:21:38 +0000
@@ -31,6 +31,7 @@ Usage: $0 [-h|-n] [configure-options]
-h, --help Show this help message.
-n, --just-print Don't actually run any commands; just print them.
-c, --just-configure Stop after running configure.
+ --with-debug=full Build with full debug(no optimizations, keep call stack).
--warning-mode=[old|pedantic|maintainer]
Influences the debug flags. Old is default.
--prefix=path Build with prefix 'path'.
@@ -46,6 +47,8 @@ parse_options()
case "$1" in
--prefix=*)
prefix=`get_key_value "$1"`;;
+ --with-debug=full)
+ full_debug="=full";;
--warning-mode=*)
warning_mode=`get_key_value "$1"`;;
-c | --just-configure)
@@ -76,6 +79,7 @@ just_print=
just_configure=
warning_mode=
maintainer_mode=
+full_debug=
parse_options "$@"
@@ -154,7 +158,11 @@ base_cxxflags="-felide-constructors -fno
fast_cflags="-O3 -fno-omit-frame-pointer"
debug_configs="--with-debug"
-debug_cflags="$debug_cflags $debug_extra_cflags"
+if [ -z "$full_debug" ]
+then
+ debug_cflags="$debug_cflags $debug_extra_cflags"
+fi
+
#
# Configuration options.
=== modified file 'client/mysql.cc' (properties changed: -x to +x)
--- a/client/mysql.cc 2011-03-09 20:54:55 +0000
+++ b/client/mysql.cc 2011-05-06 08:26:00 +0000
@@ -1096,12 +1096,34 @@ static void end_timer(ulong start_time,c
static void mysql_end_timer(ulong start_time,char *buff);
static void nice_time(double sec,char *buff,bool part_second);
extern "C" sig_handler mysql_end(int sig);
-extern "C" sig_handler handle_sigint(int sig);
+extern "C" sig_handler handle_kill_signal(int sig);
#if defined(HAVE_TERMIOS_H) && defined(GWINSZ_IN_SYS_IOCTL)
static sig_handler window_resize(int sig);
#endif
+#ifdef _WIN32
+BOOL windows_ctrl_handler(DWORD fdwCtrlType)
+{
+ switch (fdwCtrlType)
+ {
+ case CTRL_C_EVENT:
+ case CTRL_BREAK_EVENT:
+ if (!opt_sigint_ignore)
+ handle_kill_signal(SIGINT);
+ /* Indicate that signal has beed handled. */
+ return TRUE;
+ case CTRL_CLOSE_EVENT:
+ case CTRL_LOGOFF_EVENT:
+ case CTRL_SHUTDOWN_EVENT:
+ handle_kill_signal(SIGINT + 1);
+ }
+ /* Pass signal to the next control handler function. */
+ return FALSE;
+}
+#endif
+
+
int main(int argc,char *argv[])
{
char buff[80];
@@ -1198,11 +1220,17 @@ int main(int argc,char *argv[])
if (!status.batch)
ignore_errors=1; // Don't abort monitor
+#ifndef _WIN32
if (opt_sigint_ignore)
signal(SIGINT, SIG_IGN);
else
- signal(SIGINT, handle_sigint); // Catch SIGINT to clean up
+ signal(SIGINT, handle_kill_signal); // Catch SIGINT to clean up
signal(SIGQUIT, mysql_end); // Catch SIGQUIT to clean up
+ signal(SIGHUP, handle_kill_signal); // Catch SIGHUP to clean up
+#else
+ SetConsoleCtrlHandler((PHANDLER_ROUTINE) windows_ctrl_handler, TRUE);
+#endif
+
#if defined(HAVE_TERMIOS_H) && defined(GWINSZ_IN_SYS_IOCTL)
/* Readline will call this if it installs a handler */
@@ -1329,16 +1357,17 @@ sig_handler mysql_end(int sig)
If query is in process, kill query
no query in process, terminate like previous behavior
*/
-sig_handler handle_sigint(int sig)
+sig_handler handle_kill_signal(int sig)
{
char kill_buffer[40];
MYSQL *kill_mysql= NULL;
+ const char *reason = sig == SIGINT ? "Ctrl-C" : "Terminal close";
/* terminate if no query being executed, or we already tried interrupting */
/* terminate if no query being executed, or we already tried interrupting */
if (!executing_query || (interrupted_query == 2))
{
- tee_fprintf(stdout, "Ctrl-C -- exit!\n");
+ tee_fprintf(stdout, "%s -- exit!\n", reason);
goto err;
}
@@ -1346,7 +1375,7 @@ sig_handler handle_sigint(int sig)
if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
"", opt_mysql_port, opt_mysql_unix_port,0))
{
- tee_fprintf(stdout, "Ctrl-C -- sorry, cannot connect to server to kill query, giving up ...\n");
+ tee_fprintf(stdout, "%s -- sorry, cannot connect to server to kill query, giving up ...\n", reason);
goto err;
}
@@ -1360,10 +1389,11 @@ sig_handler handle_sigint(int sig)
sprintf(kill_buffer, "KILL %s%lu",
(interrupted_query == 1) ? "QUERY " : "",
mysql_thread_id(&mysql));
- tee_fprintf(stdout, "Ctrl-C -- sending \"%s\" to server ...\n", kill_buffer);
+ tee_fprintf(stdout, "%s -- sending \"%s\" to server ...\n",
+ reason, kill_buffer);
mysql_real_query(kill_mysql, kill_buffer, (uint) strlen(kill_buffer));
mysql_close(kill_mysql);
- tee_fprintf(stdout, "Ctrl-C -- query aborted.\n");
+ tee_fprintf(stdout, "%s -- query aborted.\n", reason);
return;
=== modified file 'client/mysqlbinlog.cc'
--- a/client/mysqlbinlog.cc 2011-03-29 13:56:27 +0000
+++ b/client/mysqlbinlog.cc 2011-05-05 23:59:11 +0000
@@ -935,7 +935,8 @@ Exit_status process_event(PRINT_EVENT_IN
row events.
*/
if (!print_event_info->printed_fd_event && !short_form &&
- ev_type != TABLE_MAP_EVENT && ev_type != ROWS_QUERY_LOG_EVENT)
+ ev_type != TABLE_MAP_EVENT && ev_type != ROWS_QUERY_LOG_EVENT &&
+ opt_base64_output_mode != BASE64_OUTPUT_DECODE_ROWS)
{
const char* type_str= ev->get_type_str();
if (opt_base64_output_mode == BASE64_OUTPUT_NEVER)
=== modified file 'client/mysqltest.cc'
--- a/client/mysqltest.cc 2011-04-11 14:57:47 +0000
+++ b/client/mysqltest.cc 2011-05-05 23:52:44 +0000
@@ -10088,7 +10088,7 @@ int find_set(REP_SETS *sets,REP_SET *fin
return i;
}
}
- return i; /* return new postion */
+ return i; /* return new position */
}
/* find if there is a found_set with same table_offset & found_offset
@@ -10108,7 +10108,7 @@ int find_found(FOUND_SET *found_set,uint
found_set[i].table_offset=table_offset;
found_set[i].found_offset=found_offset;
found_sets++;
- return -i-2; /* return new postion */
+ return -i-2; /* return new position */
}
/* Return 1 if regexp starts with \b or ends with \b*/
=== modified file 'extra/replace.c'
--- a/extra/replace.c 2010-07-23 20:16:29 +0000
+++ b/extra/replace.c 2011-05-05 23:50:31 +0000
@@ -1,17 +1,19 @@
-/* Copyright (C) 2000 MySQL AB
+/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; version 2 of
+ the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301 USA */
/*
Replace strings in textfile
@@ -818,7 +820,7 @@ static short find_set(REP_SETS *sets,REP
return (short) i;
}
}
- return (short) i; /* return new postion */
+ return (short) i; /* return new position */
}
@@ -841,7 +843,7 @@ static short find_found(FOUND_SET *found
found_set[i].table_offset=table_offset;
found_set[i].found_offset=found_offset;
found_sets++;
- return (short) (-i-2); /* return new postion */
+ return (short) (-i-2); /* return new position */
}
/* Return 1 if regexp starts with \b or ends with \b*/
=== modified file 'include/mysql.h'
--- a/include/mysql.h 2010-11-22 10:02:01 +0000
+++ b/include/mysql.h 2011-05-06 13:46:57 +0000
@@ -587,6 +587,8 @@ typedef struct st_mysql_bind
} MYSQL_BIND;
+struct st_mysql_stmt_extension;
+
/* statement handler */
typedef struct st_mysql_stmt
{
@@ -632,7 +634,7 @@ typedef struct st_mysql_stmt
metadata fields when doing mysql_stmt_store_result.
*/
my_bool update_max_length;
- void *extension;
+ struct st_mysql_stmt_extension *extension;
} MYSQL_STMT;
enum enum_stmt_attr_type
=== modified file 'include/mysql.h.pp'
--- a/include/mysql.h.pp 2011-02-11 14:38:34 +0000
+++ b/include/mysql.h.pp 2011-05-06 13:46:57 +0000
@@ -516,6 +516,7 @@ typedef struct st_mysql_bind
my_bool is_null_value;
void *extension;
} MYSQL_BIND;
+struct st_mysql_stmt_extension;
typedef struct st_mysql_stmt
{
MEM_ROOT mem_root;
@@ -545,7 +546,7 @@ typedef struct st_mysql_stmt
unsigned char bind_result_done;
my_bool unbuffered_fetch_cancelled;
my_bool update_max_length;
- void *extension;
+ struct st_mysql_stmt_extension *extension;
} MYSQL_STMT;
enum enum_stmt_attr_type
{
=== modified file 'libmysql/libmysql.c'
--- a/libmysql/libmysql.c 2011-04-15 09:33:58 +0000
+++ b/libmysql/libmysql.c 2011-05-06 13:46:57 +0000
@@ -87,6 +87,11 @@ sig_handler my_pipe_sig_handler(int sig)
static my_bool mysql_client_init= 0;
static my_bool org_my_init_done= 0;
+typedef struct st_mysql_stmt_extension
+{
+ MEM_ROOT fields_mem_root;
+} MYSQL_STMT_EXT;
+
/*
Initialize the MySQL client library
@@ -1473,11 +1478,16 @@ mysql_stmt_init(MYSQL *mysql)
MYSQL_STMT *stmt;
DBUG_ENTER("mysql_stmt_init");
- if (!(stmt= (MYSQL_STMT *) my_malloc(sizeof(MYSQL_STMT),
+ if (!(stmt=
+ (MYSQL_STMT *) my_malloc(sizeof (MYSQL_STMT),
+ MYF(MY_WME | MY_ZEROFILL))) ||
+ !(stmt->extension=
+ (MYSQL_STMT_EXT *) my_malloc(sizeof (MYSQL_STMT_EXT),
MYF(MY_WME | MY_ZEROFILL))))
{
set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate);
- DBUG_RETURN(0);
+ my_free(stmt);
+ DBUG_RETURN(NULL);
}
init_alloc_root(&stmt->mem_root, 2048, 2048);
@@ -1492,6 +1502,8 @@ mysql_stmt_init(MYSQL *mysql)
strmov(stmt->sqlstate, not_error_sqlstate);
/* The rest of statement members was bzeroed inside malloc */
+ init_alloc_root(&stmt->extension->fields_mem_root, 2048, 0);
+
DBUG_RETURN(stmt);
}
@@ -1564,6 +1576,7 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, con
stmt->bind_param_done= stmt->bind_result_done= FALSE;
stmt->param_count= stmt->field_count= 0;
free_root(&stmt->mem_root, MYF(MY_KEEP_PREALLOC));
+ free_root(&stmt->extension->fields_mem_root, MYF(0));
int4store(buff, stmt->stmt_id);
@@ -1624,21 +1637,21 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, con
static void alloc_stmt_fields(MYSQL_STMT *stmt)
{
MYSQL_FIELD *fields, *field, *end;
- MEM_ROOT *alloc= &stmt->mem_root;
+ MEM_ROOT *fields_mem_root= &stmt->extension->fields_mem_root;
MYSQL *mysql= stmt->mysql;
- DBUG_ASSERT(mysql->field_count);
+ DBUG_ASSERT(stmt->field_count);
- stmt->field_count= mysql->field_count;
+ free_root(fields_mem_root, MYF(0));
/*
Get the field information for non-select statements
like SHOW and DESCRIBE commands
*/
- if (!(stmt->fields= (MYSQL_FIELD *) alloc_root(alloc,
+ if (!(stmt->fields= (MYSQL_FIELD *) alloc_root(fields_mem_root,
sizeof(MYSQL_FIELD) *
stmt->field_count)) ||
- !(stmt->bind= (MYSQL_BIND *) alloc_root(alloc,
+ !(stmt->bind= (MYSQL_BIND *) alloc_root(fields_mem_root,
sizeof(MYSQL_BIND) *
stmt->field_count)))
{
@@ -1651,18 +1664,36 @@ static void alloc_stmt_fields(MYSQL_STMT
field && fields < end; fields++, field++)
{
*field= *fields; /* To copy all numeric parts. */
- field->catalog= strmake_root(alloc, fields->catalog,
+ field->catalog= strmake_root(fields_mem_root,
+ fields->catalog,
fields->catalog_length);
- field->db= strmake_root(alloc, fields->db, fields->db_length);
- field->table= strmake_root(alloc, fields->table, fields->table_length);
- field->org_table= strmake_root(alloc, fields->org_table,
+ field->db= strmake_root(fields_mem_root,
+ fields->db,
+ fields->db_length);
+ field->table= strmake_root(fields_mem_root,
+ fields->table,
+ fields->table_length);
+ field->org_table= strmake_root(fields_mem_root,
+ fields->org_table,
fields->org_table_length);
- field->name= strmake_root(alloc, fields->name, fields->name_length);
- field->org_name= strmake_root(alloc, fields->org_name,
+ field->name= strmake_root(fields_mem_root,
+ fields->name,
+ fields->name_length);
+ field->org_name= strmake_root(fields_mem_root,
+ fields->org_name,
fields->org_name_length);
- field->def= fields->def ? strmake_root(alloc, fields->def,
- fields->def_length) : 0;
- field->def_length= field->def ? fields->def_length : 0;
+ if (fields->def)
+ {
+ field->def= strmake_root(fields_mem_root,
+ fields->def,
+ fields->def_length);
+ field->def_length= fields->def_length;
+ }
+ else
+ {
+ field->def= NULL;
+ field->def_length= 0;
+ }
field->extension= 0; /* Avoid dangling links. */
field->max_length= 0; /* max_length is set in mysql_stmt_store_result() */
}
@@ -2380,6 +2411,9 @@ static void reinit_result_set_metadata(M
prepared statements can't send result set metadata for these queries
on prepare stage. Read it now.
*/
+
+ stmt->field_count= stmt->mysql->field_count;
+
alloc_stmt_fields(stmt);
}
else
@@ -2397,7 +2431,7 @@ static void reinit_result_set_metadata(M
previous branch always works.
TODO: send metadata only when it's really necessary and add a warning
'Metadata changed' when it's sent twice.
- */
+ */
update_stmt_fields(stmt);
}
}
@@ -4598,6 +4632,7 @@ my_bool STDCALL mysql_stmt_close(MYSQL_S
free_root(&stmt->result.alloc, MYF(0));
free_root(&stmt->mem_root, MYF(0));
+ free_root(&stmt->extension->fields_mem_root, MYF(0));
if (mysql)
{
@@ -4632,6 +4667,7 @@ my_bool STDCALL mysql_stmt_close(MYSQL_S
}
}
+ my_free(stmt->extension);
my_free(stmt);
DBUG_RETURN(test(rc));
@@ -4798,16 +4834,13 @@ int STDCALL mysql_stmt_next_result(MYSQL
stmt->state= MYSQL_STMT_EXECUTE_DONE;
stmt->bind_result_done= FALSE;
+ stmt->field_count= mysql->field_count;
if (mysql->field_count)
{
alloc_stmt_fields(stmt);
prepare_to_fetch_result(stmt);
}
- else
- {
- stmt->field_count= mysql->field_count;
- }
DBUG_RETURN(0);
}
=== modified file 'mysql-test/collections/default.experimental'
--- a/mysql-test/collections/default.experimental 2011-05-02 14:43:45 +0000
+++ b/mysql-test/collections/default.experimental 2011-05-09 17:44:44 +0000
@@ -9,7 +9,6 @@ funcs_1.charset_collation_1
main.func_math @freebsd # Bug#43020 2010-05-04 alik main.func_math fails on FreeBSD in PB2
main.gis-rtree @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
main.lock_multi_bug38499 # Bug#47448 2009-09-19 alik main.lock_multi_bug38499 times out sporadically
-main.mysqlbinlog_raw_mode # BUG#11761610 2011-04-11 sven fails on pb2
main.mysqlslap @windows # Bug#54024 2010-08-10 alik mysqlslap fails sporadically starting from Dahlia
main.outfile_loaddata @solaris # Bug#46895 2010-01-20 alik Test "outfile_loaddata" fails (reproducible)
main.signal_demo3 @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
@@ -38,7 +37,7 @@ sys_vars.wait_timeout_func
sys_vars.ndb_log_update_as_write_basic
sys_vars.have_ndbcluster_basic
sys_vars.ndb_log_updated_only_basic
-
+sys_vars.rpl_init_slave_func # Bug#12535301 2011-05-09 andrei sys_vars.rpl_init_slave_func mismatches in daily-5.5
rpl_bhs.* # skozlov : WL#5139 - rpl_bhs suite generated "on-the-fly" at testing moment from rpl suite
main.gis-rtree # svoj: due to BUG#38965
=== modified file 'mysql-test/extra/rpl_tests/check_type.inc'
--- a/mysql-test/extra/rpl_tests/check_type.inc 2009-12-14 11:04:55 +0000
+++ b/mysql-test/extra/rpl_tests/check_type.inc 2011-05-11 07:49:23 +0000
@@ -11,18 +11,28 @@
# on the slave)
# $can_convert True if conversion shall work, false if it
# shall generate an error
+# $engine_type The storage engine to be used for storing table
+# on both master and slave
+if (!$engine_type)
+{
+ # Use the default storage engine
+ let $engine_type=`SELECT @@storage_engine`;
+}
connection master;
disable_warnings;
DROP TABLE IF EXISTS t1;
enable_warnings;
-eval CREATE TABLE t1 (a $source_type);
+eval CREATE TABLE t1(
+ pk INT NOT NULL PRIMARY KEY,
+ a $source_type
+) ENGINE=$engine_type;
sync_slave_with_master;
eval ALTER TABLE t1 MODIFY a $target_type;
connection master;
-eval INSERT INTO t1 VALUES($source_value);
+eval INSERT INTO t1 VALUES(1, $source_value);
if ($can_convert) {
sync_slave_with_master;
eval SELECT a = $target_value into @compare FROM t1;
=== added file 'mysql-test/include/start_slave_io.inc'
--- a/mysql-test/include/start_slave_io.inc 1970-01-01 00:00:00 +0000
+++ b/mysql-test/include/start_slave_io.inc 2011-05-05 09:58:48 +0000
@@ -0,0 +1,39 @@
+# ==== Purpose ====
+#
+# Issues START SLAVE IO_THREAD on the current connection. Then waits
+# until the IO thread has started, or until a timeout is reached.
+#
+# Please use this instead of 'START SLAVE IO_THREAD', to reduce the
+# risk of races in test cases.
+#
+#
+# ==== Usage ====
+#
+# [--let $slave_timeout= NUMBER]
+# [--let $rpl_debug= 1]
+# --source include/start_slave_io.inc
+#
+# Parameters:
+# $slave_timeout
+# See include/wait_for_slave_param.inc
+#
+# $rpl_debug
+# See include/rpl_init.inc
+
+
+--let $include_filename= start_slave_io.inc
+--source include/begin_include_file.inc
+
+
+if (!$rpl_debug)
+{
+ --disable_query_log
+}
+
+
+START SLAVE IO_THREAD;
+--source include/wait_for_slave_io_to_start.inc
+
+
+--let $include_filename= start_slave_io.inc
+--source include/end_include_file.inc
=== added file 'mysql-test/include/start_slave_sql.inc'
--- a/mysql-test/include/start_slave_sql.inc 1970-01-01 00:00:00 +0000
+++ b/mysql-test/include/start_slave_sql.inc 2011-05-05 09:58:48 +0000
@@ -0,0 +1,39 @@
+# ==== Purpose ====
+#
+# Issues START SLAVE SQL_THREAD on the current connection. Then waits
+# until the SQL thread has started, or until a timeout is reached.
+#
+# Please use this instead of 'START SLAVE SQL_THREAD', to reduce the
+# risk of races in test cases.
+#
+#
+# ==== Usage ====
+#
+# [--let $slave_timeout= NUMBER]
+# [--let $rpl_debug= 1]
+# --source include/start_slave_sql.inc
+#
+# Parameters:
+# $slave_timeout
+# See include/wait_for_slave_param.inc
+#
+# $rpl_debug
+# See include/rpl_init.inc
+
+
+--let $include_filename= start_slave_sql.inc
+--source include/begin_include_file.inc
+
+
+if (!$rpl_debug)
+{
+ --disable_query_log
+}
+
+
+START SLAVE SQL_THREAD;
+--source include/wait_for_slave_io_to_start.inc
+
+
+--let $include_filename= start_slave_sql.inc
+--source include/end_include_file.inc
=== modified file 'mysql-test/include/wait_show_condition.inc'
--- a/mysql-test/include/wait_show_condition.inc 2010-11-19 10:38:08 +0000
+++ b/mysql-test/include/wait_show_condition.inc 2011-05-11 14:19:51 +0000
@@ -31,6 +31,21 @@
# Created: 2009-02-18 mleich
#
+if (!$condition)
+{
+ --die ERROR IN TEST: the "condition" variable must be set
+}
+
+if (!$field)
+{
+ --die ERROR IN TEST: the "field" variable must be set
+}
+
+if (!$show_statement)
+{
+ --die ERROR IN TEST: the "show_statement" variable must be set
+}
+
let $max_run_time= 30;
if ($wait_timeout)
{
=== modified file 'mysql-test/r/ctype_binary.result'
--- a/mysql-test/r/ctype_binary.result 2011-04-08 13:41:38 +0000
+++ b/mysql-test/r/ctype_binary.result 2011-05-11 12:32:23 +0000
@@ -2046,7 +2046,7 @@ create table t2 as select concat(a) from
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `concat(a)` varbinary(2) DEFAULT NULL
+ `concat(a)` varbinary(4) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1, t2;
create table t1 (a year);
@@ -2355,7 +2355,7 @@ insert into t1 values (1);
create view v1(a) as select concat(a) from t1;
show columns from v1;
Field Type Null Key Default Extra
-a varbinary(2) YES NULL
+a varbinary(4) YES NULL
select hex(a) from v1;
hex(a)
3031
=== modified file 'mysql-test/r/ctype_cp1251.result'
--- a/mysql-test/r/ctype_cp1251.result 2011-04-08 13:41:38 +0000
+++ b/mysql-test/r/ctype_cp1251.result 2011-05-11 12:32:23 +0000
@@ -2438,7 +2438,7 @@ create table t2 as select concat(a) from
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `concat(a)` varchar(2) CHARACTER SET cp1251 DEFAULT NULL
+ `concat(a)` varchar(4) CHARACTER SET cp1251 DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1, t2;
create table t1 (a year);
@@ -2747,7 +2747,7 @@ insert into t1 values (1);
create view v1(a) as select concat(a) from t1;
show columns from v1;
Field Type Null Key Default Extra
-a varchar(2) YES NULL
+a varchar(4) YES NULL
select hex(a) from v1;
hex(a)
3031
=== modified file 'mysql-test/r/ctype_latin1.result'
--- a/mysql-test/r/ctype_latin1.result 2011-04-08 13:41:38 +0000
+++ b/mysql-test/r/ctype_latin1.result 2011-05-11 12:32:23 +0000
@@ -2465,7 +2465,7 @@ create table t2 as select concat(a) from
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `concat(a)` varchar(2) DEFAULT NULL
+ `concat(a)` varchar(4) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1, t2;
create table t1 (a year);
@@ -2774,7 +2774,7 @@ insert into t1 values (1);
create view v1(a) as select concat(a) from t1;
show columns from v1;
Field Type Null Key Default Extra
-a varchar(2) YES NULL
+a varchar(4) YES NULL
select hex(a) from v1;
hex(a)
3031
=== modified file 'mysql-test/r/ctype_ucs.result'
--- a/mysql-test/r/ctype_ucs.result 2011-04-08 13:41:38 +0000
+++ b/mysql-test/r/ctype_ucs.result 2011-05-11 12:32:23 +0000
@@ -3365,7 +3365,7 @@ create table t2 as select concat(a) from
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `concat(a)` varchar(2) CHARACTER SET ucs2 DEFAULT NULL
+ `concat(a)` varchar(4) CHARACTER SET ucs2 DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1, t2;
create table t1 (a year);
@@ -3674,7 +3674,7 @@ insert into t1 values (1);
create view v1(a) as select concat(a) from t1;
show columns from v1;
Field Type Null Key Default Extra
-a varchar(2) YES NULL
+a varchar(4) YES NULL
select hex(a) from v1;
hex(a)
00300031
=== modified file 'mysql-test/r/ctype_utf8.result'
--- a/mysql-test/r/ctype_utf8.result 2011-04-08 13:41:38 +0000
+++ b/mysql-test/r/ctype_utf8.result 2011-05-11 12:32:23 +0000
@@ -4268,7 +4268,7 @@ create table t2 as select concat(a) from
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `concat(a)` varchar(2) CHARACTER SET utf8 DEFAULT NULL
+ `concat(a)` varchar(4) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1, t2;
create table t1 (a year);
@@ -4577,7 +4577,7 @@ insert into t1 values (1);
create view v1(a) as select concat(a) from t1;
show columns from v1;
Field Type Null Key Default Extra
-a varchar(2) YES NULL
+a varchar(4) YES NULL
select hex(a) from v1;
hex(a)
3031
=== modified file 'mysql-test/r/distinct.result'
--- a/mysql-test/r/distinct.result 2010-11-29 13:30:18 +0000
+++ b/mysql-test/r/distinct.result 2011-05-11 12:32:23 +0000
@@ -794,3 +794,14 @@ DROP TABLE t1;
SET @@sort_buffer_size = @old_sort_buffer_size;
SET @@max_heap_table_size = @old_max_heap_table_size;
End of 5.1 tests
+#
+# Bug #11744875: 4082: integer lengths cause truncation with distinct concat and innodb
+#
+CREATE TABLE t1 (a INT(1), b INT(1));
+INSERT INTO t1 VALUES (1111, 2222), (3333, 4444);
+SELECT DISTINCT CONCAT(a,b) AS c FROM t1 ORDER BY 1;
+c
+11112222
+33334444
+DROP TABLE t1;
+End of 5.5 tests
=== modified file 'mysql-test/r/explain.result'
--- a/mysql-test/r/explain.result 2010-12-17 11:28:59 +0000
+++ b/mysql-test/r/explain.result 2011-05-10 13:37:37 +0000
@@ -443,4 +443,17 @@ Note 1003 select `test`.`t1`.`url` AS `u
DROP TABLE t1;
# End BUG#53562
+#
+# Bug#11829785 EXPLAIN EXTENDED CRASH WITH RIGHT OUTER JOIN, SUBQUERIES
+#
+CREATE TABLE t1(a INT);
+INSERT INTO t1 VALUES (0), (0);
+PREPARE s FROM
+'EXPLAIN EXTENDED
+SELECT SUBSTRING(1, (SELECT 1 FROM t1 a1 RIGHT OUTER JOIN t1 ON 0)) AS d
+FROM t1 WHERE 0 > ANY (SELECT @a FROM t1)';
+EXECUTE s;
+ERROR 21000: Subquery returns more than 1 row
+DEALLOCATE PREPARE s;
+DROP TABLE t1;
End of 6.0 tests.
=== modified file 'mysql-test/r/innodb_mysql_lock.result'
--- a/mysql-test/r/innodb_mysql_lock.result 2011-04-13 18:43:08 +0000
+++ b/mysql-test/r/innodb_mysql_lock.result 2011-05-10 10:55:34 +0000
@@ -170,3 +170,15 @@ id value
1 12345
COMMIT;
DROP TABLE t1;
+#
+# Bug#11747690 33650: MYSQL_ALTER_TABLE() UNNECESSARILY DOES
+# FULL TABLE COPY
+#
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1(a INT, b VARCHAR(255), PRIMARY KEY(a,b))
+engine=innodb default charset=utf8;
+INSERT INTO t1 VALUES (1, 'a'), (2, 'b');
+CREATE INDEX t1ba ON t1(b,a);
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+DROP TABLE t1;
=== modified file 'mysql-test/r/metadata.result'
--- a/mysql-test/r/metadata.result 2010-03-24 15:03:44 +0000
+++ b/mysql-test/r/metadata.result 2011-05-11 11:11:57 +0000
@@ -126,7 +126,7 @@ renamed
1
select * from v3 where renamed=1 group by renamed;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def v3 v3 renamed renamed 8 11 0 Y 32896 0 63
+def v3 v3 renamed renamed 8 12 0 Y 32896 0 63
renamed
drop table t1;
drop view v1,v2,v3;
=== modified file 'mysql-test/r/mysqlbinlog_base64.result'
--- a/mysql-test/r/mysqlbinlog_base64.result 2008-07-28 07:15:20 +0000
+++ b/mysql-test/r/mysqlbinlog_base64.result 2011-05-05 22:48:15 +0000
@@ -109,3 +109,13 @@ count(*)
35840
drop table t1;
drop table t2;
+RESET MASTER;
+USE test;
+SET @old_binlog_format= @@binlog_format;
+SET SESSION binlog_format=ROW;
+CREATE TABLE t1(c1 INT);
+INSERT INTO t1 VALUES (1);
+FLUSH LOGS;
+DROP TABLE t1;
+SET SESSION binlog_format= @old_binlog_format;
+RESET MASTER;
=== modified file 'mysql-test/r/mysqldump.result'
--- a/mysql-test/r/mysqldump.result 2011-03-17 12:45:19 +0000
+++ b/mysql-test/r/mysqldump.result 2011-05-10 13:37:37 +0000
@@ -4631,7 +4631,7 @@ DELIMITER ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
ALTER DATABASE `test-database` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
DROP DATABASE `test-database`;
-USE `test`;
+USE test;
#
# End of 5.1 tests
#
=== modified file 'mysql-test/r/trigger.result'
--- a/mysql-test/r/trigger.result 2011-03-10 08:33:54 +0000
+++ b/mysql-test/r/trigger.result 2011-05-09 08:48:22 +0000
@@ -2196,6 +2196,26 @@ trigger_name
# Clean-up.
drop temporary table t1;
drop table t1;
+
+#
+# Bug #12362125: SP INOUT HANDLING IS BROKEN FOR TEXT TYPE.
+#
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1(c TEXT);
+CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+DECLARE v TEXT;
+SET v = 'aaa';
+SET NEW.c = v;
+END|
+INSERT INTO t1 VALUES('qazwsxedc');
+SELECT c FROM t1;
+c
+aaa
+DROP TABLE t1;
+
+End of 5.5 tests.
+
#
# Bug#34432 Wrong lock type passed to the engine if pre-locking +
# multi-update in a trigger
=== modified file 'mysql-test/r/type_ranges.result'
--- a/mysql-test/r/type_ranges.result 2010-02-27 07:43:32 +0000
+++ b/mysql-test/r/type_ranges.result 2011-05-11 11:11:57 +0000
@@ -271,7 +271,7 @@ drop table t2;
create table t2 (primary key (auto)) select auto+1 as auto,1 as t1, 'a' as t2, repeat('a',256) as t3, binary repeat('b',256) as t4, repeat('a',4096) as t5, binary repeat('b',4096) as t6, '' as t7, binary '' as t8 from t1;
show full columns from t2;
Field Type Collation Null Key Default Extra Privileges Comment
-auto int(6) unsigned NULL NO PRI 0 #
+auto int(11) unsigned NULL NO PRI 0 #
t1 int(1) NULL NO 0 #
t2 varchar(1) latin1_swedish_ci NO #
t3 varchar(256) latin1_swedish_ci NO #
=== modified file 'mysql-test/r/variables-big.result'
--- a/mysql-test/r/variables-big.result 2011-04-05 13:17:38 +0000
+++ b/mysql-test/r/variables-big.result 2011-05-10 09:06:31 +0000
@@ -1,3 +1,4 @@
+SET @def_var= @@session.transaction_prealloc_size;
SET SESSION transaction_prealloc_size=1024*1024*1024*1;
SHOW PROCESSLIST;
Id User Host db Command Time State Info
@@ -18,3 +19,4 @@ SET SESSION transaction_prealloc_size=10
SHOW PROCESSLIST;
Id User Host db Command Time State Info
<Id> root <Host> test Query <Time> init SHOW PROCESSLIST
+SET @@session.transaction_prealloc_size= @def_var;
=== modified file 'mysql-test/suite/binlog/t/binlog_bug23533.test'
--- a/mysql-test/suite/binlog/t/binlog_bug23533.test 2011-04-25 19:49:56 +0000
+++ b/mysql-test/suite/binlog/t/binlog_bug23533.test 2011-05-09 19:26:41 +0000
@@ -35,7 +35,7 @@ connect(default,localhost,root,,test);
# Copied data from t1 into t2 large than max_binlog_cache_size
START TRANSACTION;
---error 1197
+--error ER_TRANS_CACHE_FULL
CREATE TABLE t2 SELECT * FROM t1;
COMMIT;
SHOW TABLES LIKE 't%';
=== modified file 'mysql-test/suite/funcs_1/r/is_columns_mysql.result'
--- a/mysql-test/suite/funcs_1/r/is_columns_mysql.result 2011-03-18 14:58:27 +0000
+++ b/mysql-test/suite/funcs_1/r/is_columns_mysql.result 2011-05-05 22:46:07 +0000
@@ -150,34 +150,34 @@ def mysql servers Server_name 1 NO char
def mysql servers Socket 7 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
def mysql servers Username 4 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
def mysql servers Wrapper 8 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
-def mysql slave_master_info Bind 18 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_master_info Connect_retry 9 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned select,insert,update,references
-def mysql slave_master_info Enabled_ssl 10 NULL NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
+def mysql slave_master_info Bind 18 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references Displays which interface is employed when connecting to the MySQL server
+def mysql slave_master_info Connect_retry 9 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned select,insert,update,references The period (in seconds) that the slave will wait before trying to reconnect to the master.
+def mysql slave_master_info Enabled_ssl 10 NULL NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references Indicates whether the server supports SSL connections.
def mysql slave_master_info Heartbeat 17 NULL NO float NULL NULL 12 NULL NULL NULL float select,insert,update,references
-def mysql slave_master_info Host 5 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_master_info Ignored_server_ids 19 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
+def mysql slave_master_info Host 5 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The host name of the master.
+def mysql slave_master_info Ignored_server_ids 19 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The number of server IDs to be ignored, followed by the actual server IDs
def mysql slave_master_info Master_id 1 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned PRI select,insert,update,references
-def mysql slave_master_info Master_log_name 3 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_master_info Master_log_pos 4 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned select,insert,update,references
-def mysql slave_master_info Number_of_lines 2 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned select,insert,update,references
-def mysql slave_master_info Port 8 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned select,insert,update,references
-def mysql slave_master_info Retry_count 21 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned select,insert,update,references
-def mysql slave_master_info Ssl_ca 11 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_master_info Ssl_capath 12 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_master_info Ssl_cert 13 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_master_info Ssl_cipher 14 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_master_info Ssl_key 15 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_master_info Ssl_verify_servert_cert 16 NULL NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
-def mysql slave_master_info User_name 6 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_master_info User_password 7 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_master_info Uuid 20 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
+def mysql slave_master_info Master_log_name 3 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The name of the master binary log currently being read from the master.
+def mysql slave_master_info Master_log_pos 4 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned select,insert,update,references The master log position of the last read event.
+def mysql slave_master_info Number_of_lines 2 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned select,insert,update,references Number of lines in the file.
+def mysql slave_master_info Port 8 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned select,insert,update,references The network port used to connect to the master.
+def mysql slave_master_info Retry_count 21 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned select,insert,update,references Number of reconnect attempts, to the master, before giving up.
+def mysql slave_master_info Ssl_ca 11 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The file used for the Certificate Authority (CA) certificate.
+def mysql slave_master_info Ssl_capath 12 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The path to the Certificate Authority (CA) certificates.
+def mysql slave_master_info Ssl_cert 13 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The name of the SSL certificate file.
+def mysql slave_master_info Ssl_cipher 14 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The name of the cipher in use for the SSL connection.
+def mysql slave_master_info Ssl_key 15 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The name of the SSL key file.
+def mysql slave_master_info Ssl_verify_server_cert 16 NULL NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references Whether to verify the server certificate.
+def mysql slave_master_info User_name 6 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The user name used to connect to the master.
+def mysql slave_master_info User_password 7 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The password used to connect to the master.
+def mysql slave_master_info Uuid 20 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The master server uuid.
def mysql slave_relay_log_info Master_id 1 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned PRI select,insert,update,references
-def mysql slave_relay_log_info Master_log_name 5 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_relay_log_info Master_log_pos 6 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned select,insert,update,references
-def mysql slave_relay_log_info Number_of_lines 2 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned select,insert,update,references
-def mysql slave_relay_log_info Relay_log_name 3 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references
-def mysql slave_relay_log_info Relay_log_pos 4 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned select,insert,update,references
-def mysql slave_relay_log_info Sql_delay 7 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+def mysql slave_relay_log_info Master_log_name 5 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The name of the master binary log file from which the events in the relay log file were read.
+def mysql slave_relay_log_info Master_log_pos 6 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned select,insert,update,references The master log position of the last executed event.
+def mysql slave_relay_log_info Number_of_lines 2 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned select,insert,update,references Number of lines in the file or rows in the table. Used to version table definitions.
+def mysql slave_relay_log_info Relay_log_name 3 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text select,insert,update,references The name of the current relay log file.
+def mysql slave_relay_log_info Relay_log_pos 4 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned select,insert,update,references The relay log position of the last executed event.
+def mysql slave_relay_log_info Sql_delay 7 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references The number of seconds that the slave must lag behind the master.
def mysql slow_log db 7 NULL NO varchar 512 1536 NULL NULL utf8 utf8_general_ci varchar(512) select,insert,update,references
def mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
def mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
@@ -488,7 +488,7 @@ NULL mysql slave_master_info Enabled_ssl
1.0000 mysql slave_master_info Ssl_cert text 65535 65535 utf8 utf8_bin text
1.0000 mysql slave_master_info Ssl_cipher text 65535 65535 utf8 utf8_bin text
1.0000 mysql slave_master_info Ssl_key text 65535 65535 utf8 utf8_bin text
-NULL mysql slave_master_info Ssl_verify_servert_cert tinyint NULL NULL NULL NULL tinyint(1)
+NULL mysql slave_master_info Ssl_verify_server_cert tinyint NULL NULL NULL NULL tinyint(1)
NULL mysql slave_master_info Heartbeat float NULL NULL NULL NULL float
1.0000 mysql slave_master_info Bind text 65535 65535 utf8 utf8_bin text
1.0000 mysql slave_master_info Ignored_server_ids text 65535 65535 utf8 utf8_bin text
=== modified file 'mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result'
--- a/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result 2011-03-22 04:38:53 +0000
+++ b/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result 2011-05-06 10:38:10 +0000
@@ -150,34 +150,34 @@ def mysql servers Server_name 1 NO char
def mysql servers Socket 7 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64)
def mysql servers Username 4 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64)
def mysql servers Wrapper 8 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64)
-def mysql slave_master_info Bind 18 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_master_info Connect_retry 9 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned
-def mysql slave_master_info Enabled_ssl 10 NULL NO tinyint NULL NULL 3 0 NULL NULL tinyint(1)
+def mysql slave_master_info Bind 18 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text Displays which interface is employed when connecting to the MySQL server
+def mysql slave_master_info Connect_retry 9 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned The period (in seconds) that the slave will wait before trying to reconnect to the master.
+def mysql slave_master_info Enabled_ssl 10 NULL NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) Indicates whether the server supports SSL connections.
def mysql slave_master_info Heartbeat 17 NULL NO float NULL NULL 12 NULL NULL NULL float
-def mysql slave_master_info Host 5 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_master_info Ignored_server_ids 19 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
+def mysql slave_master_info Host 5 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text The host name of the master.
+def mysql slave_master_info Ignored_server_ids 19 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text The number of server IDs to be ignored, followed by the actual server IDs
def mysql slave_master_info Master_id 1 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned PRI
-def mysql slave_master_info Master_log_name 3 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_master_info Master_log_pos 4 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned
-def mysql slave_master_info Number_of_lines 2 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned
-def mysql slave_master_info Port 8 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned
-def mysql slave_master_info Retry_count 21 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned
-def mysql slave_master_info Ssl_ca 11 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_master_info Ssl_capath 12 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_master_info Ssl_cert 13 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_master_info Ssl_cipher 14 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_master_info Ssl_key 15 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_master_info Ssl_verify_servert_cert 16 NULL NO tinyint NULL NULL 3 0 NULL NULL tinyint(1)
-def mysql slave_master_info User_name 6 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_master_info User_password 7 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_master_info Uuid 20 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text
+def mysql slave_master_info Master_log_name 3 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text The name of the master binary log currently being read from the master.
+def mysql slave_master_info Master_log_pos 4 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned The master log position of the last read event.
+def mysql slave_master_info Number_of_lines 2 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned Number of lines in the file.
+def mysql slave_master_info Port 8 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned The network port used to connect to the master.
+def mysql slave_master_info Retry_count 21 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned Number of reconnect attempts, to the master, before giving up.
+def mysql slave_master_info Ssl_ca 11 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text The file used for the Certificate Authority (CA) certificate.
+def mysql slave_master_info Ssl_capath 12 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text The path to the Certificate Authority (CA) certificates.
+def mysql slave_master_info Ssl_cert 13 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text The name of the SSL certificate file.
+def mysql slave_master_info Ssl_cipher 14 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text The name of the cipher in use for the SSL connection.
+def mysql slave_master_info Ssl_key 15 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text The name of the SSL key file.
+def mysql slave_master_info Ssl_verify_server_cert 16 NULL NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) Whether to verify the server certificate.
+def mysql slave_master_info User_name 6 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text The user name used to connect to the master.
+def mysql slave_master_info User_password 7 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text The password used to connect to the master.
+def mysql slave_master_info Uuid 20 NULL YES text 65535 65535 NULL NULL utf8 utf8_bin text The master server uuid.
def mysql slave_relay_log_info Master_id 1 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned PRI
-def mysql slave_relay_log_info Master_log_name 5 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_relay_log_info Master_log_pos 6 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned
-def mysql slave_relay_log_info Number_of_lines 2 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned
-def mysql slave_relay_log_info Relay_log_name 3 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text
-def mysql slave_relay_log_info Relay_log_pos 4 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned
-def mysql slave_relay_log_info Sql_delay 7 NULL NO int NULL NULL 10 0 NULL NULL int(11)
+def mysql slave_relay_log_info Master_log_name 5 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text The name of the master binary log file from which the events in the relay log file were read.
+def mysql slave_relay_log_info Master_log_pos 6 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned The master log position of the last executed event.
+def mysql slave_relay_log_info Number_of_lines 2 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned Number of lines in the file or rows in the table. Used to version table definitions.
+def mysql slave_relay_log_info Relay_log_name 3 NULL NO text 65535 65535 NULL NULL utf8 utf8_bin text The name of the current relay log file.
+def mysql slave_relay_log_info Relay_log_pos 4 NULL NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned The relay log position of the last executed event.
+def mysql slave_relay_log_info Sql_delay 7 NULL NO int NULL NULL 10 0 NULL NULL int(11) The number of seconds that the slave must lag behind the master.
def mysql slow_log db 7 NULL NO varchar 512 1536 NULL NULL utf8 utf8_general_ci varchar(512)
def mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL int(11)
def mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL int(11)
@@ -488,7 +488,7 @@ NULL mysql slave_master_info Enabled_ssl
1.0000 mysql slave_master_info Ssl_cert text 65535 65535 utf8 utf8_bin text
1.0000 mysql slave_master_info Ssl_cipher text 65535 65535 utf8 utf8_bin text
1.0000 mysql slave_master_info Ssl_key text 65535 65535 utf8 utf8_bin text
-NULL mysql slave_master_info Ssl_verify_servert_cert tinyint NULL NULL NULL NULL tinyint(1)
+NULL mysql slave_master_info Ssl_verify_server_cert tinyint NULL NULL NULL NULL tinyint(1)
NULL mysql slave_master_info Heartbeat float NULL NULL NULL NULL float
1.0000 mysql slave_master_info Bind text 65535 65535 utf8 utf8_bin text
1.0000 mysql slave_master_info Ignored_server_ids text 65535 65535 utf8 utf8_bin text
=== modified file 'mysql-test/suite/rpl/r/rpl_crash_safe_master.result'
--- a/mysql-test/suite/rpl/r/rpl_crash_safe_master.result 2011-01-13 03:14:52 +0000
+++ b/mysql-test/suite/rpl/r/rpl_crash_safe_master.result 2011-05-05 09:58:48 +0000
@@ -10,6 +10,10 @@ call mtr.add_suppression("Buffered warni
CREATE TABLE t1(a LONGBLOB) ENGINE=INNODB;
# Test case1: Set DEBUG POINT before binlog to make
# the master crash for transaction
+# Lets stop the slave IO thread first, so that it does not timeout on
+# reconnection while the master is down (it happened before on some
+# slow hosts).
+include/stop_slave_io.inc
BEGIN;
INSERT INTO t1 (a) VALUES (REPEAT('a',2));
INSERT INTO t1 (a) VALUES (REPEAT('a',2));
@@ -22,17 +26,19 @@ ERROR HY000: Lost connection to MySQL se
show binlog events in 'master-bin.000001' from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; CREATE TABLE t1(a LONGBLOB) ENGINE=INNODB
-# On master, test the data will be rolled back after restart.
-SELECT COUNT(*) FROM t1;
-COUNT(*)
-0
+include/assert.inc [On master, test the data will be rolled back after restart.]
+# lets restart the slave io thread and check that
+# the slave gets synchronized again
+include/start_slave_io.inc
# On slave, test replication will work fine, and the data
# is not replicated
-SELECT COUNT(*) FROM t1;
-COUNT(*)
-0
+include/diff_tables.inc [master:test.t1, slave:test.t1]
# Test case2: Set DEBUG POINT after binlog, and before the date
# is committed to make crash for transaction
+# Lets stop the slave IO thread first, so that it does not timeout on
+# reconnection while the master is down (it happened before on some
+# slow hosts).
+include/stop_slave_io.inc
BEGIN;
INSERT INTO t1 (a) VALUES (REPEAT('a',2));
INSERT INTO t1 (a) VALUES (REPEAT('a',2));
@@ -52,14 +58,12 @@ master-bin.000002 # Write_rows # # table
master-bin.000002 # Table_map # # table_id: # (test.t1)
master-bin.000002 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000002 # Xid # # COMMIT /* XID */
-# On master, test the data will be recovered after the master restart
-SELECT COUNT(*) FROM t1;
-COUNT(*)
-3
+include/assert.inc [On master, test the data will be recovered after the master restart.]
+# lets restart the slave io thread and check that
+# the slave gets synchronized again
+include/start_slave_io.inc
# On slave, test replication will work fine, and the data is replicated
-SELECT COUNT(*) FROM t1;
-COUNT(*)
-3
+include/diff_tables.inc [master:test.t1, slave:test.t1]
DROP TABLE t1;
include/stop_slave.inc
CREATE TABLE t1(a LONGBLOB) ENGINE=INNODB;
=== modified file 'mysql-test/suite/rpl/r/rpl_row_crash_safe.result'
--- a/mysql-test/suite/rpl/r/rpl_row_crash_safe.result 2011-04-04 10:06:13 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_crash_safe.result 2011-05-05 22:46:07 +0000
@@ -15,12 +15,12 @@ SHOW CREATE TABLE mysql.slave_relay_log_
Table Create Table
slave_relay_log_info CREATE TABLE `slave_relay_log_info` (
`Master_id` int(10) unsigned NOT NULL,
- `Number_of_lines` int(10) unsigned NOT NULL,
- `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `Relay_log_pos` bigint(20) unsigned NOT NULL,
- `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `Master_log_pos` bigint(20) unsigned NOT NULL,
- `Sql_delay` int(11) NOT NULL,
+ `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
+ `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.',
+ `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.',
+ `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
+ `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.',
+ `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
PRIMARY KEY (`Master_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Relay Log Information'
ALTER TABLE mysql.slave_relay_log_info ENGINE= Innodb;
@@ -28,12 +28,12 @@ SHOW CREATE TABLE mysql.slave_relay_log_
Table Create Table
slave_relay_log_info CREATE TABLE `slave_relay_log_info` (
`Master_id` int(10) unsigned NOT NULL,
- `Number_of_lines` int(10) unsigned NOT NULL,
- `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `Relay_log_pos` bigint(20) unsigned NOT NULL,
- `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `Master_log_pos` bigint(20) unsigned NOT NULL,
- `Sql_delay` int(11) NOT NULL,
+ `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
+ `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.',
+ `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.',
+ `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
+ `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.',
+ `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
PRIMARY KEY (`Master_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Relay Log Information'
include/start_slave.inc
=== modified file 'mysql-test/suite/rpl/r/rpl_row_ignorable_event.result'
--- a/mysql-test/suite/rpl/r/rpl_row_ignorable_event.result 2011-01-21 11:30:47 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_ignorable_event.result 2011-05-10 10:45:25 +0000
@@ -36,6 +36,8 @@ insert into t5(a, b) values(3,1);
# Test the Rows_query log event will be filtered out if slave filters
# out all its related tables by replication filtering rules
update t4,t5 set t4.a=4, t5.a=5 where t4.b=t5.b;
+FLUSH TABLES;
+# Assert that no delayed thread handlers exist
SET @old_debug= @@global.debug;
SET GLOBAL debug="+d,after_handle_inserts";
set DEBUG_SYNC= 'before_write_delayed SIGNAL before_insert EXECUTE 3';
@@ -43,6 +45,9 @@ set DEBUG_SYNC= 'after_write_delayed WAI
# Test insert delayed ...
insert delayed into t3(a,b) values(1,5),(1,6),(1,7);
SET @@global.debug= @old_debug;
+FLUSH TABLES t3;
+# Assert that no delayed thread handlers exist for table t3
+include/assert.inc [Assert that insert delayed related data has been written to the binary log]
# Test load data infile
create table t6(a VARCHAR(60)) engine= myisam;
load data infile '../../std_data/words.dat' into table t6;
@@ -129,6 +134,7 @@ master-bin.000001 # Table_map # # table_
master-bin.000001 # Table_map # # table_id: # (test.t5)
master-bin.000001 # Update_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Query # # use `test`; FLUSH TABLES
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Rows_query # # # insert delayed into t3(a,b) values(1,5),(1,6),(1,7)
master-bin.000001 # Table_map # # table_id: # (test.t3)
@@ -138,6 +144,7 @@ master-bin.000001 # Write_rows # # table
master-bin.000001 # Table_map # # table_id: # (test.t3)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Query # # use `test`; FLUSH TABLES t3
master-bin.000001 # Query # # use `test`; create table t6(a VARCHAR(60)) engine= myisam
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Rows_query # # # load data infile '../../std_data/words.dat' into table t6
@@ -518,6 +525,11 @@ COMMIT
# at #
#server id # end_log_pos # Query thread_id=# exec_time=# error_code=#
SET TIMESTAMP=t/*!*/;
+FLUSH TABLES
+/*!*/;
+# at #
+#server id # end_log_pos # Query thread_id=# exec_time=# error_code=#
+SET TIMESTAMP=t/*!*/;
BEGIN
/*!*/;
# at #
@@ -555,6 +567,11 @@ COMMIT
# at #
#server id # end_log_pos # Query thread_id=# exec_time=# error_code=#
SET TIMESTAMP=t/*!*/;
+FLUSH TABLES t3
+/*!*/;
+# at #
+#server id # end_log_pos # Query thread_id=# exec_time=# error_code=#
+SET TIMESTAMP=t/*!*/;
create table t6(a VARCHAR(60)) engine= myisam
/*!*/;
# at #
@@ -943,6 +960,7 @@ slave-bin.000001 # Rows_query # # # upda
slave-bin.000001 # Table_map # # table_id: # (test.t3)
slave-bin.000001 # Update_rows # # table_id: # flags: STMT_END_F
slave-bin.000001 # Query # # COMMIT
+slave-bin.000001 # Query # # use `test`; FLUSH TABLES
slave-bin.000001 # Query # # BEGIN
slave-bin.000001 # Rows_query # # # insert delayed into t3(a,b) values(1,5),(1,6),(1,7)
slave-bin.000001 # Table_map # # table_id: # (test.t3)
@@ -956,6 +974,7 @@ slave-bin.000001 # Query # # BEGIN
slave-bin.000001 # Table_map # # table_id: # (test.t3)
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
slave-bin.000001 # Query # # COMMIT
+slave-bin.000001 # Query # # use `test`; FLUSH TABLES t3
slave-bin.000001 # Query # # use `test`; create table t6(a VARCHAR(60)) engine= myisam
slave-bin.000001 # Query # # BEGIN
slave-bin.000001 # Rows_query # # # load data infile '../../std_data/words.dat' into table t6
=== modified file 'mysql-test/suite/rpl/r/rpl_server_id2.result'
--- a/mysql-test/suite/rpl/r/rpl_server_id2.result 2010-12-19 17:15:12 +0000
+++ b/mysql-test/suite/rpl/r/rpl_server_id2.result 2011-05-05 23:50:31 +0000
@@ -22,7 +22,7 @@ change master to master_port=MASTER_PORT
start slave until master_log_file='master-bin.000001', master_log_pos=UNTIL_POS;
include/wait_for_slave_io_to_start.inc
include/wait_for_slave_sql_to_stop.inc
-*** checking until postion execution: must be only t1 in the list ***
+*** checking until position execution: must be only t1 in the list ***
show tables;
Tables_in_test
t1
=== modified file 'mysql-test/suite/rpl/r/rpl_show_slave_hosts.result'
--- a/mysql-test/suite/rpl/r/rpl_show_slave_hosts.result 2010-12-19 17:22:30 +0000
+++ b/mysql-test/suite/rpl/r/rpl_show_slave_hosts.result 2011-05-11 14:19:51 +0000
@@ -8,8 +8,7 @@ SHOW SLAVE HOSTS;
Server_id Host Port Master_id Slave_UUID
3 slave2 DEFAULT_PORT 1 SLAVE_UUID
2 SLAVE_PORT 1 SLAVE_UUID
-STOP SLAVE IO_THREAD;
-include/wait_for_slave_io_to_stop.inc
+include/stop_slave_io.inc
SHOW SLAVE HOSTS;
Server_id Host Port Master_id Slave_UUID
2 SLAVE_PORT 1 SLAVE_UUID
=== modified file 'mysql-test/suite/rpl/r/rpl_stm_mixed_crash_safe.result'
--- a/mysql-test/suite/rpl/r/rpl_stm_mixed_crash_safe.result 2011-04-04 10:06:13 +0000
+++ b/mysql-test/suite/rpl/r/rpl_stm_mixed_crash_safe.result 2011-05-05 22:46:07 +0000
@@ -15,12 +15,12 @@ SHOW CREATE TABLE mysql.slave_relay_log_
Table Create Table
slave_relay_log_info CREATE TABLE `slave_relay_log_info` (
`Master_id` int(10) unsigned NOT NULL,
- `Number_of_lines` int(10) unsigned NOT NULL,
- `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `Relay_log_pos` bigint(20) unsigned NOT NULL,
- `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `Master_log_pos` bigint(20) unsigned NOT NULL,
- `Sql_delay` int(11) NOT NULL,
+ `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
+ `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.',
+ `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.',
+ `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
+ `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.',
+ `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
PRIMARY KEY (`Master_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Relay Log Information'
ALTER TABLE mysql.slave_relay_log_info ENGINE= Innodb;
@@ -28,12 +28,12 @@ SHOW CREATE TABLE mysql.slave_relay_log_
Table Create Table
slave_relay_log_info CREATE TABLE `slave_relay_log_info` (
`Master_id` int(10) unsigned NOT NULL,
- `Number_of_lines` int(10) unsigned NOT NULL,
- `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `Relay_log_pos` bigint(20) unsigned NOT NULL,
- `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `Master_log_pos` bigint(20) unsigned NOT NULL,
- `Sql_delay` int(11) NOT NULL,
+ `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
+ `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.',
+ `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.',
+ `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
+ `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.',
+ `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
PRIMARY KEY (`Master_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Relay Log Information'
include/start_slave.inc
=== modified file 'mysql-test/suite/rpl/r/rpl_typeconv.result'
--- a/mysql-test/suite/rpl/r/rpl_typeconv.result 2011-02-23 11:54:58 +0000
+++ b/mysql-test/suite/rpl/r/rpl_typeconv.result 2011-05-11 07:49:23 +0000
@@ -534,7 +534,7 @@ BIT(6) BIT(5) ALL_LOSS
BIT(5) BIT(12) ALL_LOSSY,ALL_NON_LOSSY <Correct value>
BIT(12) BIT(5) ALL_LOSSY,ALL_NON_LOSSY <Correct value>
DROP TABLE type_conversions;
-call mtr.add_suppression("Slave SQL.*Column 0 of table .test.t1. cannot be converted from type.* Error_code: 1677");
+call mtr.add_suppression("Slave SQL.*Column 1 of table .test.t1. cannot be converted from type.* Error_code: 1677");
DROP TABLE t1;
set global slave_type_conversions = @saved_slave_type_conversions;
include/rpl_end.inc
=== modified file 'mysql-test/suite/rpl/t/rpl_crash_safe_master.test'
--- a/mysql-test/suite/rpl/t/rpl_crash_safe_master.test 2011-03-15 15:17:13 +0000
+++ b/mysql-test/suite/rpl/t/rpl_crash_safe_master.test 2011-05-05 09:58:48 +0000
@@ -55,6 +55,14 @@ CREATE TABLE t1(a LONGBLOB) ENGINE=INNOD
-- echo # Test case1: Set DEBUG POINT before binlog to make
-- echo # the master crash for transaction
+
+-- echo # Lets stop the slave IO thread first, so that it does not timeout on
+-- echo # reconnection while the master is down (it happened before on some
+-- echo # slow hosts).
+--sync_slave_with_master
+--source include/stop_slave_io.inc
+--connection master
+
BEGIN;
let $rows= 3;
WHILE($rows)
@@ -79,19 +87,35 @@ COMMIT;
-- echo # Test the transaction statements will not be binlogged
-- source include/show_binlog_events.inc
--- echo # On master, test the data will be rolled back after restart.
-SELECT COUNT(*) FROM t1;
+--let $assert_cond= `SELECT COUNT(*) = 0 FROM t1`
+--let $assert_text= On master, test the data will be rolled back after restart.
+--source include/assert.inc
+
+--connection slave
+--echo # lets restart the slave io thread and check that
+--echo # the slave gets synchronized again
+--source include/start_slave_io.inc
+--connection master
sync_slave_with_master;
-- echo # On slave, test replication will work fine, and the data
-- echo # is not replicated
-SELECT COUNT(*) FROM t1;
+--let $diff_tables= master:test.t1, slave:test.t1
+--source include/diff_tables.inc
connection master;
-- let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1)
-- let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
-- echo # Test case2: Set DEBUG POINT after binlog, and before the date
-- echo # is committed to make crash for transaction
+
+-- echo # Lets stop the slave IO thread first, so that it does not timeout on
+-- echo # reconnection while the master is down (it happened before on some
+-- echo # slow hosts).
+--sync_slave_with_master
+--source include/stop_slave_io.inc
+--connection master
+
BEGIN;
let $rows= 3;
WHILE($rows)
@@ -116,12 +140,20 @@ COMMIT;
-- echo # Test the transaction statements will be binlogged
-- source include/show_binlog_events.inc
--- echo # On master, test the data will be recovered after the master restart
-SELECT COUNT(*) FROM t1;
+--let $assert_cond= `SELECT COUNT(*) = 3 FROM t1`
+--let $assert_text= On master, test the data will be recovered after the master restart.
+--source include/assert.inc
+
+--connection slave
+--echo # lets restart the slave io thread and check that
+--echo # the slave gets synchronized again
+--source include/start_slave_io.inc
+--connection master
sync_slave_with_master;
-- echo # On slave, test replication will work fine, and the data is replicated
-SELECT COUNT(*) FROM t1;
+--let $diff_tables= master:test.t1, slave:test.t1
+--source include/diff_tables.inc
connection master;
DROP TABLE t1;
=== modified file 'mysql-test/suite/rpl/t/rpl_row_ignorable_event.test'
--- a/mysql-test/suite/rpl/t/rpl_row_ignorable_event.test 2011-01-21 11:30:47 +0000
+++ b/mysql-test/suite/rpl/t/rpl_row_ignorable_event.test 2011-05-10 10:45:25 +0000
@@ -58,10 +58,17 @@ insert into t5(a, b) values(3,1);
--echo # out all its related tables by replication filtering rules
update t4,t5 set t4.a=4, t5.a=5 where t4.b=t5.b;
+FLUSH TABLES;
+--echo # Assert that no delayed thread handlers exist
+--let $status_var= delayed_insert_threads
+--let $status_var_value= 0
+--source include/wait_for_status_var.inc
+
SET @old_debug= @@global.debug;
SET GLOBAL debug="+d,after_handle_inserts";
set DEBUG_SYNC= 'before_write_delayed SIGNAL before_insert EXECUTE 3';
set DEBUG_SYNC= 'after_write_delayed WAIT_FOR inserts_handled EXECUTE 3';
+--let $pos_before_insert_delayed=query_get_value(SHOW MASTER STATUS, Position, 1)
--echo # Test insert delayed ...
let $table=t3;
insert delayed into t3(a,b) values(1,5),(1,6),(1,7);
@@ -69,6 +76,20 @@ let $count=4;
--source include/wait_until_rows_count.inc
SET @@global.debug= @old_debug;
+# this makes sure that the delayed thread will
+# have stopped and written to the binary log
+FLUSH TABLES t3;
+--echo # Assert that no delayed thread handlers exist for table t3
+--let $status_var= delayed_insert_threads
+--let $status_var_value= 0
+--source include/wait_for_status_var.inc
+
+# this is just for a sanity check after BUG#12416768
+--let $pos_after_insert_delayed=query_get_value(SHOW MASTER STATUS, Position, 1)
+--let $assert_text= Assert that insert delayed related data has been written to the binary log
+--let $assert_cond= $pos_after_insert_delayed <> $pos_before_insert_delayed
+--source include/assert.inc
+
--echo # Test load data infile
create table t6(a VARCHAR(60)) engine= myisam;
load data infile '../../std_data/words.dat' into table t6;
=== modified file 'mysql-test/suite/rpl/t/rpl_row_until.test'
--- a/mysql-test/suite/rpl/t/rpl_row_until.test 2010-12-19 17:22:30 +0000
+++ b/mysql-test/suite/rpl/t/rpl_row_until.test 2011-05-05 23:52:44 +0000
@@ -8,32 +8,32 @@
connection master;
CREATE TABLE t1(n INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
INSERT INTO t1 VALUES (1),(2),(3),(4);
-# Save master log postion for query DROP TABLE t1
+# Save master log position for query DROP TABLE t1
let $master_pos_drop_t1= query_get_value(SHOW MASTER STATUS, Position, 1);
DROP TABLE t1;
-# Save master log postion for query DROP TABLE t1
+# Save master log position for query DROP TABLE t1
save_master_pos;
let $master_pos_drop_t1= query_get_value(SHOW BINLOG EVENTS, Pos, 7);
let $master_log_file= query_get_value(SHOW BINLOG EVENTS, Log_name, 7);
-# Save master log postion for query CREATE TABLE t2
+# Save master log position for query CREATE TABLE t2
let $master_pos_create_t2= query_get_value(SHOW MASTER STATUS, Position, 1);
CREATE TABLE t2(n INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
#show binlog events;
INSERT INTO t2 VALUES (1),(2);
-# Save master log postion for query INSERT INTO t2 VALUES (1),(2);
+# Save master log position for query INSERT INTO t2 VALUES (1),(2);
let $master_pos_insert1_t2= query_get_value(SHOW MASTER STATUS, Position, 1);
sync_slave_with_master;
#show binlog events;
-# Save relay log postion for query INSERT INTO t2 VALUES (1),(2);
+# Save relay log position for query INSERT INTO t2 VALUES (1),(2);
let $relay_pos_insert1_t2= query_get_value(SHOW SLAVE STATUS, Relay_Log_Pos, 1);
connection master;
INSERT INTO t2 VALUES (3),(4);
DROP TABLE t2;
-# Save master log postion for query DROP TABLE t2;
+# Save master log position for query DROP TABLE t2;
let $master_pos_drop_t2= query_get_value(SHOW MASTER STATUS, Position, 1);
sync_slave_with_master;
#show binlog events;
=== modified file 'mysql-test/suite/rpl/t/rpl_server_id2.test'
--- a/mysql-test/suite/rpl/t/rpl_server_id2.test 2010-12-19 17:15:12 +0000
+++ b/mysql-test/suite/rpl/t/rpl_server_id2.test 2011-05-05 23:50:31 +0000
@@ -50,7 +50,7 @@ eval start slave until master_log_file='
--source include/wait_for_slave_io_to_start.inc
--source include/wait_for_slave_sql_to_stop.inc
---echo *** checking until postion execution: must be only t1 in the list ***
+--echo *** checking until position execution: must be only t1 in the list ***
show tables;
# cleanup
=== modified file 'mysql-test/suite/rpl/t/rpl_show_slave_hosts.test'
--- a/mysql-test/suite/rpl/t/rpl_show_slave_hosts.test 2010-12-19 17:22:30 +0000
+++ b/mysql-test/suite/rpl/t/rpl_show_slave_hosts.test 2011-05-11 14:19:51 +0000
@@ -23,13 +23,12 @@ connection master;
let $show_statement= SHOW SLAVE HOSTS;
let $field= Server_id;
# 3 is server_id of slave2.
-let $connection= ='3';
+let $condition= ='3';
source include/wait_show_condition.inc;
source include/show_slave_hosts.inc;
connection slave2;
-STOP SLAVE IO_THREAD;
-source include/wait_for_slave_io_to_stop.inc;
+--source include/stop_slave_io.inc
connection master;
let $show_statement= SHOW SLAVE HOSTS;
=== modified file 'mysql-test/suite/rpl/t/rpl_typeconv.test'
--- a/mysql-test/suite/rpl/t/rpl_typeconv.test 2011-02-23 11:54:58 +0000
+++ b/mysql-test/suite/rpl/t/rpl_typeconv.test 2011-05-11 07:49:23 +0000
@@ -61,7 +61,7 @@ SELECT RPAD(Source, 15, ' ') AS Source_T
enable_query_log;
DROP TABLE type_conversions;
-call mtr.add_suppression("Slave SQL.*Column 0 of table .test.t1. cannot be converted from type.* Error_code: 1677");
+call mtr.add_suppression("Slave SQL.*Column 1 of table .test.t1. cannot be converted from type.* Error_code: 1677");
connection master;
DROP TABLE t1;
=== modified file 'mysql-test/t/distinct.test'
--- a/mysql-test/t/distinct.test 2009-09-05 20:42:17 +0000
+++ b/mysql-test/t/distinct.test 2011-05-11 11:11:57 +0000
@@ -614,3 +614,16 @@ SET @@sort_buffer_size = @old_sort_buffe
SET @@max_heap_table_size = @old_max_heap_table_size;
--echo End of 5.1 tests
+
+
+--echo #
+--echo # Bug #11744875: 4082: integer lengths cause truncation with distinct concat and innodb
+--echo #
+
+CREATE TABLE t1 (a INT(1), b INT(1));
+INSERT INTO t1 VALUES (1111, 2222), (3333, 4444);
+SELECT DISTINCT CONCAT(a,b) AS c FROM t1 ORDER BY 1;
+DROP TABLE t1;
+
+
+--echo End of 5.5 tests
=== modified file 'mysql-test/t/explain.test'
--- a/mysql-test/t/explain.test 2010-12-17 11:28:59 +0000
+++ b/mysql-test/t/explain.test 2011-05-10 13:37:37 +0000
@@ -354,4 +354,23 @@ DROP TABLE t1;
--echo # End BUG#53562
+--echo #
+--echo # Bug#11829785 EXPLAIN EXTENDED CRASH WITH RIGHT OUTER JOIN, SUBQUERIES
+--echo #
+
+CREATE TABLE t1(a INT);
+
+INSERT INTO t1 VALUES (0), (0);
+
+PREPARE s FROM
+'EXPLAIN EXTENDED
+SELECT SUBSTRING(1, (SELECT 1 FROM t1 a1 RIGHT OUTER JOIN t1 ON 0)) AS d
+FROM t1 WHERE 0 > ANY (SELECT @a FROM t1)';
+
+--error ER_SUBQUERY_NO_1_ROW
+EXECUTE s;
+
+DEALLOCATE PREPARE s;
+DROP TABLE t1;
+
--echo End of 6.0 tests.
=== modified file 'mysql-test/t/innodb_mysql_lock.test'
--- a/mysql-test/t/innodb_mysql_lock.test 2011-04-13 18:43:08 +0000
+++ b/mysql-test/t/innodb_mysql_lock.test 2011-05-10 10:55:34 +0000
@@ -311,6 +311,27 @@ DROP TABLE t1;
disconnect con1;
+--echo #
+--echo # Bug#11747690 33650: MYSQL_ALTER_TABLE() UNNECESSARILY DOES
+--echo # FULL TABLE COPY
+--echo #
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1(a INT, b VARCHAR(255), PRIMARY KEY(a,b))
+ engine=innodb default charset=utf8;
+INSERT INTO t1 VALUES (1, 'a'), (2, 'b');
+
+# Check that 0 rows are affected
+--enable_info
+CREATE INDEX t1ba ON t1(b,a);
+--disable_info
+
+DROP TABLE t1;
+
+
# Check that all connections opened by test cases in this file are really
# gone so execution of other tests won't be affected by their presence.
--source include/wait_until_count_sessions.inc
=== modified file 'mysql-test/t/mysqlbinlog_base64.test'
--- a/mysql-test/t/mysqlbinlog_base64.test 2008-07-28 07:15:20 +0000
+++ b/mysql-test/t/mysqlbinlog_base64.test 2011-05-05 22:48:15 +0000
@@ -71,3 +71,32 @@ select count(*) from t2;
--remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_base64.sql
drop table t1;
drop table t2;
+
+#
+# BUG#12354268
+#
+# This test verifies that using --start-position with DECODE-ROWS
+# does not make mysqlbinlog to output an error stating that it
+# does not contain any FD event.
+#
+
+RESET MASTER;
+USE test;
+SET @old_binlog_format= @@binlog_format;
+SET SESSION binlog_format=ROW;
+CREATE TABLE t1(c1 INT);
+--let $master_binlog= query_get_value(SHOW MASTER STATUS, File, 1)
+--let $master_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
+--let $MYSQLD_DATADIR= `SELECT @@datadir`
+
+INSERT INTO t1 VALUES (1);
+
+FLUSH LOGS;
+
+--disable_result_log
+--exec $MYSQL_BINLOG --base64-output=DECODE-ROWS --start-position=$master_pos -v $MYSQLD_DATADIR/$master_binlog
+--enable_result_log
+
+DROP TABLE t1;
+SET SESSION binlog_format= @old_binlog_format;
+RESET MASTER;
=== modified file 'mysql-test/t/mysqlbinlog_raw_mode.test'
--- a/mysql-test/t/mysqlbinlog_raw_mode.test 2011-04-27 21:05:54 +0000
+++ b/mysql-test/t/mysqlbinlog_raw_mode.test 2011-05-05 14:07:28 +0000
@@ -9,7 +9,7 @@
CREATE TABLE raw_mode_exit (exit_code INT);
# Now jump some loops to have mysqlbinlog executed in the background
--write_file $MYSQL_TMP_DIR/mbl.sh
-#!/bin/sh
+#!/bin/bash
(`$MYSQL_BINLOG --raw --read-from-remote-server --stop-never --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --result-file=$MYSQL_TMP_DIR/ master-bin.000001 ; [ $? -le 1 ]` && $MYSQL -e "use test; INSERT INTO raw_mode_exit VALUES (1);") < /dev/null > /dev/null 2>&1 &
EOF
--chmod 0755 $MYSQL_TMP_DIR/mbl.sh
@@ -20,7 +20,7 @@ let $wait_condition= SELECT id from info
# Wait until creating binlog files by mysqlbinlog
--perl
$timeout= 30;
-$binlog= $ENV{'MYSQL_TMP_DIR'} . '/master-bin.000002';
+$binlog= $ENV{'MYSQL_TMP_DIR'} . '/master-bin.000003';
$binlog_exists= 0;
while ($timeout > 0 && $binlog_exists == 0)
{
=== modified file 'mysql-test/t/mysqldump.test'
--- a/mysql-test/t/mysqldump.test 2011-03-17 12:45:19 +0000
+++ b/mysql-test/t/mysqldump.test 2011-05-10 13:37:37 +0000
@@ -2211,7 +2211,7 @@ ALTER DATABASE `test-database` CHARACTER
DROP DATABASE `test-database`;
# Switching back to test database.
-USE `test`;
+USE test;
--echo #
--echo # End of 5.1 tests
=== modified file 'mysql-test/t/trigger.test'
--- a/mysql-test/t/trigger.test 2011-03-10 08:33:54 +0000
+++ b/mysql-test/t/trigger.test 2011-05-09 08:48:22 +0000
@@ -2569,6 +2569,38 @@ select trigger_name from information_sch
drop temporary table t1;
drop table t1;
+
+--echo
+--echo #
+--echo # Bug #12362125: SP INOUT HANDLING IS BROKEN FOR TEXT TYPE.
+--echo #
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1(c TEXT);
+
+delimiter |;
+CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+ DECLARE v TEXT;
+ SET v = 'aaa';
+ SET NEW.c = v;
+END|
+delimiter ;|
+
+INSERT INTO t1 VALUES('qazwsxedc');
+
+SELECT c FROM t1;
+
+DROP TABLE t1;
+
+--echo
+--echo End of 5.5 tests.
+--echo
+
+
--echo #
--echo # Bug#34432 Wrong lock type passed to the engine if pre-locking +
--echo # multi-update in a trigger
=== modified file 'mysql-test/t/variables-big.test'
--- a/mysql-test/t/variables-big.test 2010-11-15 15:17:38 +0000
+++ b/mysql-test/t/variables-big.test 2011-05-10 09:06:31 +0000
@@ -34,6 +34,7 @@
# There is a significant probablitity that this tests fails with testcase
# timeout if the testing box is not powerful enough.
#
+SET @def_var= @@session.transaction_prealloc_size;
--disable_warnings
SET SESSION transaction_prealloc_size=1024*1024*1024*1;
@@ -53,3 +54,5 @@ SET SESSION transaction_prealloc_size=10
SHOW PROCESSLIST;
--enable_warnings
+SET @@session.transaction_prealloc_size= @def_var;
+
=== modified file 'scripts/make_win_bin_dist'
--- a/scripts/make_win_bin_dist 2011-03-08 19:14:42 +0000
+++ b/scripts/make_win_bin_dist 2011-05-10 13:37:37 +0000
@@ -181,6 +181,7 @@ cp Docs/INSTALL-BINARY $DESTDIR/Docs/
cp Docs/manual.chm $DESTDIR/Docs/ || /bin/true
cp ChangeLog $DESTDIR/Docs/ || /bin/true
cp support-files/my-*.ini $DESTDIR/
+cp README $DESTDIR/
if [ -f COPYING ] ; then
cp COPYING $DESTDIR/
=== modified file 'scripts/mysql_system_tables.sql'
--- a/scripts/mysql_system_tables.sql 2011-03-18 22:51:17 +0000
+++ b/scripts/mysql_system_tables.sql 2011-05-05 22:46:07 +0000
@@ -100,9 +100,9 @@ CREATE TABLE IF NOT EXISTS event ( db ch
CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL, File VARCHAR(255) NOT NULL, epoch BIGINT UNSIGNED NOT NULL, inserts BIGINT UNSIGNED NOT NULL, updates BIGINT UNSIGNED NOT NULL, deletes BIGINT UNSIGNED NOT NULL, schemaops BIGINT UNSIGNED NOT NULL, PRIMARY KEY(epoch)) ENGINE=MYISAM;
-CREATE TABLE IF NOT EXISTS slave_relay_log_info (Master_id INTEGER UNSIGNED NOT NULL, Number_of_lines INTEGER UNSIGNED NOT NULL, Relay_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, Relay_log_pos BIGINT UNSIGNED NOT NULL, Master_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, Master_log_pos BIGINT UNSIGNED NOT NULL, Sql_delay INTEGER NOT NULL, PRIMARY KEY(Master_id)) ENGINE=MYISAM DEFAULT CHARSET=utf8 COMMENT 'Relay Log Information';
+CREATE TABLE IF NOT EXISTS slave_relay_log_info (Master_id INTEGER UNSIGNED NOT NULL, Number_of_lines INTEGER UNSIGNED NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.', Relay_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.', Relay_log_pos BIGINT UNSIGNED NOT NULL COMMENT 'The relay log position of the last executed event.', Master_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.', Master_log_pos BIGINT UNSIGNED NOT NULL COMMENT 'The master log position of the last executed event.', Sql_delay INTEGER NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.', PRIMARY KEY(Master_id)) ENGINE=MYISAM DEFAULT CHARSET=utf8 COMMENT 'Relay Log Information';
-CREATE TABLE IF NOT EXISTS slave_master_info (Master_id INTEGER UNSIGNED NOT NULL, Number_of_lines INTEGER UNSIGNED NOT NULL, Master_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, Master_log_pos BIGINT UNSIGNED NOT NULL, Host TEXT CHARACTER SET utf8 COLLATE utf8_bin, User_name TEXT CHARACTER SET utf8 COLLATE utf8_bin, User_password TEXT CHARACTER SET utf8 COLLATE utf8_bin, Port INTEGER UNSIGNED NOT NULL, Connect_retry INTEGER UNSIGNED NOT NULL, Enabled_ssl BOOLEAN NOT NULL, Ssl_ca TEXT CHARACTER SET utf8 COLLATE utf8_bin, Ssl_capath TEXT CHARACTER SET utf8 COLLATE utf8_bin, Ssl_cert TEXT CHARACTER SET utf8 COLLATE utf8_bin, Ssl_cipher TEXT CHARACTER SET utf8 COLLATE utf8_bin, Ssl_key TEXT CHARACTER SET utf8 COLLATE utf8_bin, Ssl_verify_servert_cert BOOLEAN NOT NULL, Heartbeat FLOAT NOT NULL, Bind TEXT CHARACTER SET utf8 COLLATE utf8_bin, Ignored_server_ids TEXT CHARACTER SET utf8 COLLATE utf8_bin, Uuid TEXT CHARACTER SET utf8 COLLATE utf8_bin, Retry_count BIGIN!
T UNSIGNED NOT NULL, PRIMARY KEY(Master_id)) ENGINE=MYISAM DEFAULT CHARSET=utf8 COMMENT 'Master Information';
+CREATE TABLE IF NOT EXISTS slave_master_info (Master_id INTEGER UNSIGNED NOT NULL, Number_of_lines INTEGER UNSIGNED NOT NULL COMMENT 'Number of lines in the file.', Master_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.', Master_log_pos BIGINT UNSIGNED NOT NULL COMMENT 'The master log position of the last read event.', Host TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The host name of the master.', User_name TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.', User_password TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.', Port INTEGER UNSIGNED NOT NULL COMMENT 'The network port used to connect to the master.', Connect_retry INTEGER UNSIGNED NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.', Enabled_ssl BOOLEAN NOT NULL COMMENT 'In!
dicates whether the server supports SSL connections.', Ssl_ca TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.', Ssl_capath TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.', Ssl_cert TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.', Ssl_cipher TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.', Ssl_key TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.', Ssl_verify_server_cert BOOLEAN NOT NULL COMMENT 'Whether to verify the server certificate.', Heartbeat FLOAT NOT NULL COMMENT '', Bind TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server', Ignored_server_ids TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the a!
ctual server IDs', Uuid TEXT CHARACTER SET utf8 COLLATE utf8_bin COMME
NT 'The master server uuid.', Retry_count BIGINT UNSIGNED NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.', PRIMARY KEY(Master_id)) ENGINE=MYISAM DEFAULT CHARSET=utf8 COMMENT 'Master Information';
--
-- PERFORMANCE SCHEMA INSTALLATION
=== modified file 'sql/handler.h'
--- a/sql/handler.h 2011-04-26 08:49:10 +0000
+++ b/sql/handler.h 2011-05-05 23:52:44 +0000
@@ -3,18 +3,20 @@
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; version 2 of
+ the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301 USA */
/* Definitions for parameters to do with handler-routines */
@@ -57,7 +59,7 @@
a table with rnd_next()
- We will see all rows (including deleted ones)
- Row positions are 'table->s->db_record_offset' apart
- If this flag is not set, filesort will do a postion() call for each matched
+ If this flag is not set, filesort will do a position() call for each matched
row to be able to find the row later.
*/
#define HA_REC_NOT_IN_SEQ (1 << 3)
=== modified file 'sql/item.cc'
--- a/sql/item.cc 2011-04-28 08:28:18 +0000
+++ b/sql/item.cc 2011-05-11 12:32:23 +0000
@@ -580,7 +580,7 @@ void Item::rename(char *new_name)
Item* Item::transform(Item_transformer transformer, uchar *arg)
{
- DBUG_ASSERT(!current_thd->is_stmt_prepare());
+ DBUG_ASSERT(!current_thd->stmt_arena->is_stmt_prepare());
return (this->*transformer)(arg);
}
@@ -1800,14 +1800,17 @@ bool agg_item_set_converter(DTCollation
}
THD *thd= current_thd;
- Query_arena *arena, backup;
bool res= FALSE;
uint i;
+
/*
In case we're in statement prepare, create conversion item
in its memory: it will be reused on each execute.
*/
- arena= thd->activate_stmt_arena_if_needed(&backup);
+ Query_arena backup;
+ Query_arena *arena= thd->stmt_arena->is_stmt_prepare() ?
+ thd->activate_stmt_arena_if_needed(&backup) :
+ NULL;
for (i= 0, arg= args; i < nargs; i++, arg+= item_sep)
{
@@ -1864,7 +1867,7 @@ bool agg_item_set_converter(DTCollation
been created in prepare. In this case register the change for
rollback.
*/
- if (thd->is_stmt_prepare())
+ if (thd->stmt_arena->is_stmt_prepare())
*arg= conv;
else
thd->change_item_tree(arg, conv);
@@ -2027,6 +2030,61 @@ Item_field::Item_field(THD *thd, Item_fi
collation.set(DERIVATION_IMPLICIT);
}
+
+/**
+ Calculate the max column length not taking into account the
+ limitations over integer types.
+
+ When storing data into fields the server currently just ignores the
+ limits specified on integer types, e.g. 1234 can safely be stored in
+ an int(2) and will not cause an error.
+ Thus when creating temporary tables and doing transformations
+ we must adjust the maximum field length to reflect this fact.
+ We take the un-restricted maximum length and adjust it similarly to
+ how the declared length is adjusted wrt unsignedness etc.
+ TODO: this all needs to go when we disable storing 1234 in int(2).
+
+ @param field_par Original field the use to calculate the lengths
+ @param max_length Item's calculated explicit max length
+ @return The adjusted max length
+*/
+
+inline static uint32
+adjust_max_effective_column_length(Field *field_par, uint32 max_length)
+{
+ uint32 new_max_length= field_par->max_display_length();
+ uint32 sign_length= (field_par->flags & UNSIGNED_FLAG) ? 0 : 1;
+
+ switch (field_par->type())
+ {
+ case MYSQL_TYPE_INT24:
+ /*
+ Compensate for MAX_MEDIUMINT_WIDTH being 1 too long (8)
+ compared to the actual number of digits that can fit into
+ the column.
+ */
+ new_max_length+= 1;
+ /* fall through */
+ case MYSQL_TYPE_LONG:
+ case MYSQL_TYPE_TINY:
+ case MYSQL_TYPE_SHORT:
+
+ /* Take out the sign and add a conditional sign */
+ new_max_length= new_max_length - 1 + sign_length;
+ break;
+
+ /* BINGINT is always 20 no matter the sign */
+ case MYSQL_TYPE_LONGLONG:
+ /* make gcc happy */
+ default:
+ break;
+ }
+
+ /* Adjust only if the actual precision based one is bigger than specified */
+ return new_max_length > max_length ? new_max_length : max_length;
+}
+
+
void Item_field::set_field(Field *field_par)
{
field=result_field=field_par; // for easy coding with fields
@@ -2040,6 +2098,9 @@ void Item_field::set_field(Field *field_
collation.set(field_par->charset(), field_par->derivation(),
field_par->repertoire());
fix_char_length(field_par->char_length());
+
+ max_length= adjust_max_effective_column_length(field_par, max_length);
+
fixed= 1;
if (field->table->s->tmp_table == SYSTEM_TMP_TABLE)
any_privileges= 0;
@@ -7098,7 +7159,7 @@ int Item_default_value::save_in_field(Fi
Item *Item_default_value::transform(Item_transformer transformer, uchar *args)
{
- DBUG_ASSERT(!current_thd->is_stmt_prepare());
+ DBUG_ASSERT(!current_thd->stmt_arena->is_stmt_prepare());
/*
If the value of arg is NULL, then this object represents a constant,
@@ -7264,8 +7325,26 @@ bool Item_trigger_field::set_value(THD *
{
Item *item= sp_prepare_func_item(thd, it);
- return (!item || (!fixed && fix_fields(thd, 0)) ||
- (item->save_in_field(field, 0) < 0));
+ if (!item)
+ return true;
+
+ if (!fixed)
+ {
+ if (fix_fields(thd, NULL))
+ return true;
+ }
+
+ // NOTE: field->table->copy_blobs should be false here, but let's
+ // remember the value at runtime to avoid subtle bugs.
+ bool copy_blobs_saved= field->table->copy_blobs;
+
+ field->table->copy_blobs= true;
+
+ int err_code= item->save_in_field(field, 0);
+
+ field->table->copy_blobs= copy_blobs_saved;
+
+ return err_code < 0;
}
=== modified file 'sql/item_cmpfunc.cc'
--- a/sql/item_cmpfunc.cc 2011-04-26 08:49:10 +0000
+++ b/sql/item_cmpfunc.cc 2011-05-06 13:32:53 +0000
@@ -2000,7 +2000,7 @@ Item *Item_in_optimizer::transform(Item_
{
Item *new_item;
- DBUG_ASSERT(!current_thd->is_stmt_prepare());
+ DBUG_ASSERT(!current_thd->stmt_arena->is_stmt_prepare());
DBUG_ASSERT(arg_count == 2);
/* Transform the left IN operand. */
@@ -4469,7 +4469,7 @@ bool Item_cond::walk(Item_processor proc
Item *Item_cond::transform(Item_transformer transformer, uchar *arg)
{
- DBUG_ASSERT(!current_thd->is_stmt_prepare());
+ DBUG_ASSERT(!current_thd->stmt_arena->is_stmt_prepare());
List_iterator<Item> li(list);
Item *item;
@@ -5867,7 +5867,7 @@ bool Item_equal::walk(Item_processor pro
Item *Item_equal::transform(Item_transformer transformer, uchar *arg)
{
- DBUG_ASSERT(!current_thd->is_stmt_prepare());
+ DBUG_ASSERT(!current_thd->stmt_arena->is_stmt_prepare());
List_iterator<Item_field> it(fields);
Item *item;
=== modified file 'sql/item_func.cc'
--- a/sql/item_func.cc 2011-04-26 20:35:24 +0000
+++ b/sql/item_func.cc 2011-05-10 13:37:37 +0000
@@ -314,7 +314,7 @@ void Item_func::traverse_cond(Cond_trave
Item *Item_func::transform(Item_transformer transformer, uchar *argument)
{
- DBUG_ASSERT(!current_thd->is_stmt_prepare());
+ DBUG_ASSERT(!current_thd->stmt_arena->is_stmt_prepare());
if (arg_count)
{
=== modified file 'sql/item_row.cc'
--- a/sql/item_row.cc 2011-03-08 19:14:42 +0000
+++ b/sql/item_row.cc 2011-05-06 13:32:53 +0000
@@ -184,7 +184,7 @@ bool Item_row::walk(Item_processor proce
Item *Item_row::transform(Item_transformer transformer, uchar *arg)
{
- DBUG_ASSERT(!current_thd->is_stmt_prepare());
+ DBUG_ASSERT(!current_thd->stmt_arena->is_stmt_prepare());
for (uint i= 0; i < arg_count; i++)
{
=== modified file 'sql/item_strfunc.cc'
--- a/sql/item_strfunc.cc 2011-04-15 09:04:21 +0000
+++ b/sql/item_strfunc.cc 2011-05-06 13:32:53 +0000
@@ -2629,7 +2629,7 @@ String *Item_func_make_set::val_str(Stri
Item *Item_func_make_set::transform(Item_transformer transformer, uchar *arg)
{
- DBUG_ASSERT(!current_thd->is_stmt_prepare());
+ DBUG_ASSERT(!current_thd->stmt_arena->is_stmt_prepare());
Item *new_item= item->transform(transformer, arg);
if (!new_item)
=== modified file 'sql/log_event.cc'
--- a/sql/log_event.cc 2011-05-04 07:51:15 +0000
+++ b/sql/log_event.cc 2011-05-05 10:52:34 +0000
@@ -6087,10 +6087,10 @@ void User_var_log_event::pack_info(Proto
break;
case DECIMAL_RESULT:
{
- if (!(buf= (char*) my_malloc(val_offset + DECIMAL_MAX_STR_LENGTH,
+ if (!(buf= (char*) my_malloc(val_offset + DECIMAL_MAX_STR_LENGTH + 1,
MYF(MY_WME))))
return;
- String str(buf+val_offset, DECIMAL_MAX_STR_LENGTH, &my_charset_bin);
+ String str(buf+val_offset, DECIMAL_MAX_STR_LENGTH + 1, &my_charset_bin);
my_decimal dec;
binary2my_decimal(E_DEC_FATAL_ERROR, (uchar*) (val+2), &dec, val[0],
val[1]);
=== modified file 'sql/my_decimal.cc'
--- a/sql/my_decimal.cc 2011-05-12 03:31:08 +0000
+++ b/sql/my_decimal.cc 2011-05-12 04:28:33 +0000
@@ -106,7 +106,7 @@ int my_decimal2string(uint mask, const m
required size of the buffer.
*/
int length= (fixed_prec
- ? (fixed_prec + ((fixed_prec == fixed_dec) ? 1 : 0) + 1)
+ ? (fixed_prec + ((fixed_prec == fixed_dec) ? 1 : 0) + 1 + 1)
: my_decimal_string_length(d));
int result;
if (str->alloc(length))
=== modified file 'sql/opt_range.cc'
--- a/sql/opt_range.cc 2011-04-23 20:44:45 +0000
+++ b/sql/opt_range.cc 2011-05-06 13:26:31 +0000
@@ -6725,7 +6725,7 @@ key_or(RANGE_OPT_PARAM *param, SEL_ARG *
{
key1->free_tree();
key2->free_tree();
- return 0; // Can't optimize this
+ return 0; // Can't optimize this
}
// If one of the key is MAYBE_KEY then the found region may be bigger
@@ -6749,246 +6749,493 @@ key_or(RANGE_OPT_PARAM *param, SEL_ARG *
swap_variables(SEL_ARG *,key1,key2);
}
if (key1->use_count > 0 || !(key1=key1->clone_tree(param)))
- return 0; // OOM
+ return 0; // OOM
}
// Add tree at key2 to tree at key1
bool key2_shared=key2->use_count != 0;
key1->maybe_flag|=key2->maybe_flag;
+ /*
+ Notation for illustrations used in the rest of this function:
+
+ Range: [--------]
+ ^ ^
+ start stop
+
+ Two overlapping ranges:
+ [-----] [----] [--]
+ [---] or [---] or [-------]
+
+ Ambiguity: ***
+ The range starts or stops somewhere in the "***" range.
+ Example: a starts before b and may end before/the same plase/after b
+ a: [----***]
+ b: [---]
+
+ Adjacent ranges:
+ Ranges that meet but do not overlap. Example: a = "x < 3", b = "x >= 3"
+ a: ----]
+ b: [----
+ */
+
for (key2=key2->first(); key2; )
{
- SEL_ARG *tmp=key1->find_range(key2); // Find key1.min <= key2.min
- int cmp;
+ /*
+ key1 consists of one or more ranges. tmp is the range currently
+ being handled.
+
+ initialize tmp to the latest range in key1 that starts the same
+ place or before the range in key2 starts
+
+ key2: [------]
+ key1: [---] [-----] [----]
+ ^
+ tmp
+ */
+ SEL_ARG *tmp=key1->find_range(key2);
+
+ /*
+ Used to describe how two key values are positioned compared to
+ each other. Consider key_value_a.<cmp_func>(key_value_b):
+
+ -2: key_value_a is smaller than key_value_b, and they are adjacent
+ -1: key_value_a is smaller than key_value_b (not adjacent)
+ 0: the key values are equal
+ 1: key_value_a is bigger than key_value_b (not adjacent)
+ -2: key_value_a is bigger than key_value_b, and they are adjacent
+
+ Example: "cmp= tmp->cmp_max_to_min(key2)"
+
+ key2: [-------- (10 <= x ...)
+ tmp: -----] (... x < 10) => cmp==-2
+ tmp: ----] (... x <= 9) => cmp==-1
+ tmp: ------] (... x = 10) => cmp== 0
+ tmp: --------] (... x <= 12) => cmp== 1
+ (cmp == 2 does not make sense for cmp_max_to_min())
+ */
+ int cmp= 0;
if (!tmp)
{
- tmp=key1->first(); // tmp.min > key2.min
+ /*
+ The range in key2 starts before the first range in key1. Use
+ the first range in key1 as tmp.
+
+ key2: [--------]
+ key1: [****--] [----] [-------]
+ ^
+ tmp
+ */
+ tmp=key1->first();
cmp= -1;
}
- else if ((cmp=tmp->cmp_max_to_min(key2)) < 0)
- { // Found tmp.max < key2.min
+ else if ((cmp= tmp->cmp_max_to_min(key2)) < 0)
+ {
+ /*
+ This is the case:
+ key2: [-------]
+ tmp: [----**]
+ */
SEL_ARG *next=tmp->next;
- /* key1 on the left of key2 non-overlapping */
if (cmp == -2 && eq_tree(tmp->next_key_part,key2->next_key_part))
{
- // Join near ranges like tmp.max < 0 and key2.min >= 0
- SEL_ARG *key2_next=key2->next;
- if (key2_shared)
- {
- if (!(key2=new SEL_ARG(*key2)))
- return 0; // out of memory
- key2->increment_use_count(key1->use_count+1);
- key2->next=key2_next; // New copy of key2
- }
- key2->copy_min(tmp);
- if (!(key1=key1->tree_delete(tmp)))
- { // Only one key in tree
- key1=key2;
- key1->make_root();
- key2=key2_next;
- break;
- }
+ /*
+ Adjacent (cmp==-2) and equal next_key_parts => ranges can be merged
+
+ This is the case:
+ key2: [-------]
+ tmp: [----]
+
+ Result:
+ key2: [-------------] => inserted into key1 below
+ tmp: => deleted
+ */
+ SEL_ARG *key2_next=key2->next;
+ if (key2_shared)
+ {
+ if (!(key2=new SEL_ARG(*key2)))
+ return 0; // out of memory
+ key2->increment_use_count(key1->use_count+1);
+ key2->next=key2_next; // New copy of key2
+ }
+
+ key2->copy_min(tmp);
+ if (!(key1=key1->tree_delete(tmp)))
+ { // Only one key in tree
+ key1=key2;
+ key1->make_root();
+ key2=key2_next;
+ break;
+ }
}
- if (!(tmp=next)) // tmp.min > key2.min
- break; // Copy rest of key2
+ if (!(tmp=next)) // Move to next range in key1. Now tmp.min > key2.min
+ break; // No more ranges in key1. Copy rest of key2
}
+
if (cmp < 0)
- { // tmp.min > key2.min
+ {
+ /*
+ This is the case:
+ key2: [--***]
+ tmp: [----]
+ */
int tmp_cmp;
- if ((tmp_cmp=tmp->cmp_min_to_max(key2)) > 0) // if tmp.min > key2.max
+ if ((tmp_cmp=tmp->cmp_min_to_max(key2)) > 0)
{
- /* tmp is on the right of key2 non-overlapping */
- if (tmp_cmp == 2 && eq_tree(tmp->next_key_part,key2->next_key_part))
- { // ranges are connected
- tmp->copy_min_to_min(key2);
- key1->merge_flags(key2);
- if (tmp->min_flag & NO_MIN_RANGE &&
- tmp->max_flag & NO_MAX_RANGE)
- {
- if (key1->maybe_flag)
- return new SEL_ARG(SEL_ARG::MAYBE_KEY);
- return 0;
- }
- key2->increment_use_count(-1); // Free not used tree
- key2=key2->next;
- continue;
- }
- else
- {
- SEL_ARG *next=key2->next; // Keys are not overlapping
- if (key2_shared)
- {
- SEL_ARG *cpy= new SEL_ARG(*key2); // Must make copy
- if (!cpy)
- return 0; // OOM
- key1=key1->insert(cpy);
- key2->increment_use_count(key1->use_count+1);
- }
- else
- key1=key1->insert(key2); // Will destroy key2_root
- key2=next;
- continue;
- }
+ /*
+ This is the case:
+ key2: [------**]
+ tmp: [----]
+ */
+ if (tmp_cmp == 2 && eq_tree(tmp->next_key_part,key2->next_key_part))
+ {
+ /*
+ Adjacent ranges with equal next_key_part. Merge like this:
+
+ This is the case:
+ key2: [------]
+ tmp: [-----]
+
+ Result:
+ key2: [------]
+ tmp: [-------------]
+
+ Then move on to next key2 range.
+ */
+ tmp->copy_min_to_min(key2);
+ key1->merge_flags(key2);
+ if (tmp->min_flag & NO_MIN_RANGE &&
+ tmp->max_flag & NO_MAX_RANGE)
+ {
+ if (key1->maybe_flag)
+ return new SEL_ARG(SEL_ARG::MAYBE_KEY);
+ return 0;
+ }
+ key2->increment_use_count(-1); // Free not used tree
+ key2=key2->next;
+ continue;
+ }
+ else
+ {
+ /*
+ key2 not adjacent to tmp or has different next_key_part.
+ Insert into key1 and move to next range in key2
+
+ This is the case:
+ key2: [------**]
+ tmp: [----]
+
+ Result:
+ key1_ [------**][----]
+ ^ ^
+ insert tmp
+ */
+ SEL_ARG *next=key2->next;
+ if (key2_shared)
+ {
+ SEL_ARG *cpy= new SEL_ARG(*key2); // Must make copy
+ if (!cpy)
+ return 0; // OOM
+ key1=key1->insert(cpy);
+ key2->increment_use_count(key1->use_count+1);
+ }
+ else
+ key1=key1->insert(key2); // Will destroy key2_root
+ key2=next;
+ continue;
+ }
}
}
- /*
- tmp.min >= key2.min && tmp.min <= key.max (overlapping ranges)
- key2.min <= tmp.min <= key2.max
- */
+ /*
+ The ranges in tmp and key2 are overlapping:
+
+ key2: [----------]
+ tmp: [*****-----*****]
+
+ Corollary: tmp.min <= key2.max
+ */
if (eq_tree(tmp->next_key_part,key2->next_key_part))
{
+ // Merge overlapping ranges with equal next_key_part
if (tmp->is_same(key2))
{
- /*
- Found exact match of key2 inside key1.
+ /*
+ Found exact match of key2 inside key1.
Use the relevant range in key1.
*/
- tmp->merge_flags(key2); // Copy maybe flags
- key2->increment_use_count(-1); // Free not used tree
+ tmp->merge_flags(key2); // Copy maybe flags
+ key2->increment_use_count(-1); // Free not used tree
}
else
{
- SEL_ARG *last=tmp;
- SEL_ARG *first=tmp;
- /*
- Find the last range in tmp that overlaps key2 and has the same
- condition on the rest of the keyparts.
+ SEL_ARG *last= tmp;
+ SEL_ARG *first= tmp;
+
+ /*
+ Find the last range in key1 that overlaps key2 and
+ where all ranges first...last have the same next_key_part as
+ key2.
+
+ key2: [****----------------------*******]
+ key1: [--] [----] [---] [-----] [xxxx]
+ ^ ^ ^
+ first last different next_key_part
+
+ Since key2 covers them, the ranges between first and last
+ are merged into one range by deleting first...last-1 from
+ the key1 tree. In the figure, this applies to first and the
+ two consecutive ranges. The range of last is then extended:
+ * last.min: Set to min(key2.min, first.min)
+ * last.max: If there is a last->next that overlaps key2 (i.e.,
+ last->next has a different next_key_part):
+ Set adjacent to last->next.min
+ Otherwise: Set to max(key2.max, last.max)
+
+ Result:
+ key2: [****----------------------*******]
+ [--] [----] [---] => deleted from key1
+ key1: [**------------------------***][xxxx]
+ ^ ^
+ tmp=last different next_key_part
*/
- while (last->next && last->next->cmp_min_to_max(key2) <= 0 &&
- eq_tree(last->next->next_key_part,key2->next_key_part))
- {
+ while (last->next && last->next->cmp_min_to_max(key2) <= 0 &&
+ eq_tree(last->next->next_key_part,key2->next_key_part))
+ {
/*
- We've found the last overlapping key1 range in last.
- This means that the ranges between (and including) the
- first overlapping range (tmp) and the last overlapping range
- (last) are fully nested into the current range of key2
- and can safely be discarded. We just need the minimum endpoint
- of the first overlapping range (tmp) so we can compare it with
- the minimum endpoint of the enclosing key2 range.
+ last->next is covered by key2 and has same next_key_part.
+ last can be deleted
*/
- SEL_ARG *save=last;
- last=last->next;
- key1=key1->tree_delete(save);
- }
+ SEL_ARG *save=last;
+ last=last->next;
+ key1=key1->tree_delete(save);
+ }
+ // Redirect tmp to last which will cover the entire range
+ tmp= last;
+
/*
- The tmp range (the first overlapping range) could have been discarded
- by the previous loop. We should re-direct tmp to the new united range
- that's taking its place.
+ We need the minimum endpoint of first so we can compare it
+ with the minimum endpoint of the enclosing key2 range.
*/
- tmp= last;
last->copy_min(first);
bool full_range= last->copy_min(key2);
if (!full_range)
{
if (last->next && key2->cmp_max_to_min(last->next) >= 0)
{
- last->max_value= last->next->min_value;
- if (last->next->min_flag & NEAR_MIN)
- last->max_flag&= ~NEAR_MAX;
- else
- last->max_flag|= NEAR_MAX;
+ /*
+ This is the case:
+ key2: [-------------]
+ key1: [***------] [xxxx]
+ ^ ^
+ last different next_key_part
+
+ Extend range of last up to last->next:
+ key2: [-------------]
+ key1: [***--------][xxxx]
+ */
+ last->copy_min_to_max(last->next);
}
else
+ /*
+ This is the case:
+ key2: [--------*****]
+ key1: [***---------] [xxxx]
+ ^ ^
+ last different next_key_part
+
+ Extend range of last up to max(last.max, key2.max):
+ key2: [--------*****]
+ key1: [***----------**] [xxxx]
+ */
full_range= last->copy_max(key2);
}
- if (full_range)
- { // Full range
- key1->free_tree();
- for (; key2 ; key2=key2->next)
- key2->increment_use_count(-1); // Free not used tree
- if (key1->maybe_flag)
- return new SEL_ARG(SEL_ARG::MAYBE_KEY);
- return 0;
- }
+ if (full_range)
+ { // Full range
+ key1->free_tree();
+ for (; key2 ; key2=key2->next)
+ key2->increment_use_count(-1); // Free not used tree
+ if (key1->maybe_flag)
+ return new SEL_ARG(SEL_ARG::MAYBE_KEY);
+ return 0;
+ }
}
}
if (cmp >= 0 && tmp->cmp_min_to_min(key2) < 0)
- { // tmp.min <= x < key2.min
+ {
+ /*
+ This is the case ("cmp>=0" means that tmp.max >= key2.min):
+ key2: [----]
+ tmp: [------------*****]
+
+ The ranges are overlapping but have not been merged because
+ next_key_part of tmp and key2 are different
+
+ Result:
+ key2: [----]
+ key1: [--------][--*****]
+ ^ ^
+ insert tmp
+ */
SEL_ARG *new_arg=tmp->clone_first(key2);
if (!new_arg)
- return 0; // OOM
+ return 0; // OOM
if ((new_arg->next_key_part= key1->next_key_part))
- new_arg->increment_use_count(key1->use_count+1);
+ new_arg->increment_use_count(key1->use_count+1);
tmp->copy_min_to_min(key2);
key1=key1->insert(new_arg);
- }
+ } // tmp.min >= key2.min due to this if()
- // tmp.min >= key2.min && tmp.min <= key2.max
- SEL_ARG key(*key2); // Get copy we can modify
+ /*
+ Now key2.min <= tmp.min <= key2.max:
+ key2: [---------]
+ tmp: [****---*****]
+ */
+ SEL_ARG key2_cpy(*key2); // Get copy we can modify
for (;;)
{
- if (tmp->cmp_min_to_min(&key) > 0)
- { // key.min <= x < tmp.min
- SEL_ARG *new_arg=key.clone_first(tmp);
- if (!new_arg)
- return 0; // OOM
- if ((new_arg->next_key_part=key.next_key_part))
- new_arg->increment_use_count(key1->use_count+1);
- key1=key1->insert(new_arg);
- }
- if ((cmp=tmp->cmp_max_to_max(&key)) <= 0)
- { // tmp.min. <= x <= tmp.max
- tmp->maybe_flag|= key.maybe_flag;
- key.increment_use_count(key1->use_count+1);
- tmp->next_key_part= key_or(param, tmp->next_key_part, key.next_key_part);
- if (!cmp) // Key2 is ready
- break;
- key.copy_max_to_min(tmp);
- if (!(tmp=tmp->next))
- {
- SEL_ARG *tmp2= new SEL_ARG(key);
- if (!tmp2)
- return 0; // OOM
- key1=key1->insert(tmp2);
- key2=key2->next;
- goto end;
- }
- if (tmp->cmp_min_to_max(&key) > 0)
- {
- SEL_ARG *tmp2= new SEL_ARG(key);
- if (!tmp2)
- return 0; // OOM
- key1=key1->insert(tmp2);
- break;
- }
+ if (tmp->cmp_min_to_min(&key2_cpy) > 0)
+ {
+ /*
+ This is the case:
+ key2_cpy: [------------]
+ key1: [-*****]
+ ^
+ tmp
+
+ Result:
+ key2_cpy: [---]
+ key1: [-------][-*****]
+ ^ ^
+ insert tmp
+ */
+ SEL_ARG *new_arg=key2_cpy.clone_first(tmp);
+ if (!new_arg)
+ return 0; // OOM
+ if ((new_arg->next_key_part=key2_cpy.next_key_part))
+ new_arg->increment_use_count(key1->use_count+1);
+ key1=key1->insert(new_arg);
+ key2_cpy.copy_min_to_min(tmp);
+ }
+ // Now key2_cpy.min == tmp.min
+
+ if ((cmp= tmp->cmp_max_to_max(&key2_cpy)) <= 0)
+ {
+ /*
+ tmp.max <= key2_cpy.max:
+ key2_cpy: a) [-------] or b) [----]
+ tmp: [----] [----]
+
+ Steps:
+ 1) Update next_key_part of tmp: OR it with key2_cpy->next_key_part.
+ 2) If case a: Insert range [tmp.max, key2_cpy.max] into key1 using
+ next_key_part of key2_cpy
+
+ Result:
+ key1: a) [----][-] or b) [----]
+ */
+ tmp->maybe_flag|= key2_cpy.maybe_flag;
+ key2_cpy.increment_use_count(key1->use_count+1);
+ tmp->next_key_part= key_or(param, tmp->next_key_part,
+ key2_cpy.next_key_part);
+
+ if (!cmp)
+ break; // case b: done with this key2 range
+
+ // Make key2_cpy the range [tmp.max, key2_cpy.max]
+ key2_cpy.copy_max_to_min(tmp);
+ if (!(tmp=tmp->next))
+ {
+ /*
+ No more ranges in key1. Insert key2_cpy and go to "end"
+ label to insert remaining ranges in key2 if any.
+ */
+ SEL_ARG *tmp2= new SEL_ARG(key2_cpy);
+ if (!tmp2)
+ return 0; // OOM
+ key1=key1->insert(tmp2);
+ key2=key2->next;
+ goto end;
+ }
+ if (tmp->cmp_min_to_max(&key2_cpy) > 0)
+ {
+ /*
+ The next range in key1 does not overlap with key2_cpy.
+ Insert this range into key1 and move on to the next range
+ in key2.
+ */
+ SEL_ARG *tmp2= new SEL_ARG(key2_cpy);
+ if (!tmp2)
+ return 0; // OOM
+ key1=key1->insert(tmp2);
+ break;
+ }
+ /*
+ key2_cpy overlaps with the next range in key1 and the case
+ is now "key2.min <= tmp.min <= key2.max". Go back to for(;;)
+ to handle this situation.
+ */
+ continue;
}
else
{
- SEL_ARG *new_arg=tmp->clone_last(&key); // tmp.min <= x <= key.max
- if (!new_arg)
- return 0; // OOM
- tmp->copy_max_to_min(&key);
- tmp->increment_use_count(key1->use_count+1);
- /* Increment key count as it may be used for next loop */
- key.increment_use_count(1);
- new_arg->next_key_part= key_or(param, tmp->next_key_part, key.next_key_part);
- key1=key1->insert(new_arg);
- break;
+ /*
+ This is the case:
+ key2_cpy: [-------]
+ tmp: [------------]
+
+ Result:
+ key1: [-------][---]
+ ^ ^
+ new_arg tmp
+ Steps:
+ 1) Make new_arg with range [tmp.min, key2_cpy.max].
+ new_arg->next_key_part is OR between next_key_part
+ of tmp and key2_cpy
+ 2) Make tmp the range [key2.max, tmp.max]
+ 3) Insert new_arg into key1
+ */
+ SEL_ARG *new_arg=tmp->clone_last(&key2_cpy);
+ if (!new_arg)
+ return 0; // OOM
+ tmp->copy_max_to_min(&key2_cpy);
+ tmp->increment_use_count(key1->use_count+1);
+ /* Increment key count as it may be used for next loop */
+ key2_cpy.increment_use_count(1);
+ new_arg->next_key_part= key_or(param, tmp->next_key_part,
+ key2_cpy.next_key_part);
+ key1=key1->insert(new_arg);
+ break;
}
}
- key2=key2->next;
+ // Move on to next range in key2
+ key2=key2->next;
}
end:
+ /*
+ Add key2 ranges that are non-overlapping with and higher than the
+ highest range in key1.
+ */
while (key2)
{
SEL_ARG *next=key2->next;
if (key2_shared)
{
- SEL_ARG *tmp=new SEL_ARG(*key2); // Must make copy
+ SEL_ARG *tmp=new SEL_ARG(*key2); // Must make copy
if (!tmp)
- return 0;
+ return 0;
key2->increment_use_count(key1->use_count+1);
key1=key1->insert(tmp);
}
else
- key1=key1->insert(key2); // Will destroy key2_root
+ key1=key1->insert(key2); // Will destroy key2_root
key2=next;
}
key1->use_count++;
+
return key1;
}
=== modified file 'sql/protocol.cc'
--- a/sql/protocol.cc 2011-03-22 11:44:40 +0000
+++ b/sql/protocol.cc 2011-05-05 10:52:34 +0000
@@ -1063,7 +1063,7 @@ bool Protocol_text::store_decimal(const
field_types[field_pos] == MYSQL_TYPE_NEWDECIMAL);
field_pos++;
#endif
- char buff[DECIMAL_MAX_STR_LENGTH];
+ char buff[DECIMAL_MAX_STR_LENGTH + 1];
String str(buff, sizeof(buff), &my_charset_bin);
(void) my_decimal2string(E_DEC_FATAL_ERROR, d, 0, 0, 0, &str);
return net_store_data((uchar*) str.ptr(), str.length());
@@ -1344,7 +1344,7 @@ bool Protocol_binary::store_decimal(cons
field_types[field_pos] == MYSQL_TYPE_NEWDECIMAL);
field_pos++;
#endif
- char buff[DECIMAL_MAX_STR_LENGTH];
+ char buff[DECIMAL_MAX_STR_LENGTH + 1];
String str(buff, sizeof(buff), &my_charset_bin);
(void) my_decimal2string(E_DEC_FATAL_ERROR, d, 0, 0, 0, &str);
return store(str.ptr(), str.length(), str.charset());
=== modified file 'sql/rpl_slave.cc'
--- a/sql/rpl_slave.cc 2011-04-28 16:50:10 +0000
+++ b/sql/rpl_slave.cc 2011-05-05 23:52:44 +0000
@@ -114,7 +114,7 @@ static const char *reconnect_messages[SL
registration on master",
"Reconnecting after a failed registration on master",
"failed registering on master, reconnecting to try again, \
-log '%s' at postion %s",
+log '%s' at position %s",
"COM_REGISTER_SLAVE",
"Slave I/O thread killed during or after reconnect"
},
@@ -122,7 +122,7 @@ log '%s' at postion %s",
"Waiting to reconnect after a failed binlog dump request",
"Slave I/O thread killed while retrying master dump",
"Reconnecting after a failed binlog dump request",
- "failed dump request, reconnecting to try again, log '%s' at postion %s",
+ "failed dump request, reconnecting to try again, log '%s' at position %s",
"COM_BINLOG_DUMP",
"Slave I/O thread killed during or after reconnect"
},
@@ -131,7 +131,7 @@ log '%s' at postion %s",
"Slave I/O thread killed while waiting to reconnect after a failed read",
"Reconnecting after a failed master event read",
"Slave I/O thread: Failed reading log event, reconnecting to retry, \
-log '%s' at postion %s",
+log '%s' at position %s",
"",
"Slave I/O thread killed during or after a reconnect done to recover from \
failed read"
=== modified file 'sql/sql_analyse.cc'
--- a/sql/sql_analyse.cc 2011-03-22 11:44:40 +0000
+++ b/sql/sql_analyse.cc 2011-05-05 10:52:34 +0000
@@ -1102,7 +1102,7 @@ int collect_real(double *element, elemen
int collect_decimal(uchar *element, element_count count,
TREE_INFO *info)
{
- char buff[DECIMAL_MAX_STR_LENGTH];
+ char buff[DECIMAL_MAX_STR_LENGTH + 1];
String s(buff, sizeof(buff),&my_charset_bin);
if (info->found)
=== modified file 'sql/sql_class.h'
--- a/sql/sql_class.h 2011-05-04 07:51:15 +0000
+++ b/sql/sql_class.h 2011-05-06 13:32:53 +0000
@@ -696,15 +696,10 @@ public:
virtual ~Query_arena() {};
inline bool is_stmt_prepare() const { return state == INITIALIZED; }
- inline bool is_first_sp_execute() const
- { return state == INITIALIZED_FOR_SP; }
inline bool is_stmt_prepare_or_first_sp_execute() const
{ return (int)state < (int)PREPARED; }
inline bool is_stmt_prepare_or_first_stmt_execute() const
{ return (int)state <= (int)PREPARED; }
- inline bool is_first_stmt_execute() const { return state == PREPARED; }
- inline bool is_stmt_execute() const
- { return state == PREPARED || state == EXECUTED; }
inline bool is_conventional() const
{ return state == CONVENTIONAL_EXECUTION; }
@@ -1478,6 +1473,19 @@ class THD :public Statement,
public Open_tables_state,
public MDL_context_owner
{
+private:
+ inline bool is_stmt_prepare() const
+ { DBUG_ASSERT(0); return Statement::is_stmt_prepare(); }
+
+ inline bool is_stmt_prepare_or_first_sp_execute() const
+ { DBUG_ASSERT(0); return Statement::is_stmt_prepare_or_first_sp_execute(); }
+
+ inline bool is_stmt_prepare_or_first_stmt_execute() const
+ { DBUG_ASSERT(0); return Statement::is_stmt_prepare_or_first_stmt_execute(); }
+
+ inline bool is_conventional() const
+ { DBUG_ASSERT(0); return Statement::is_conventional(); }
+
public:
MDL_context mdl_context;
=== modified file 'sql/sql_lex.h'
--- a/sql/sql_lex.h 2011-05-04 07:51:15 +0000
+++ b/sql/sql_lex.h 2011-05-11 11:31:27 +0000
@@ -2049,7 +2049,6 @@ struct LEX: public Query_tables_list
char *length,*dec,*change;
LEX_STRING name;
char *help_arg;
- char *backup_dir; /* For RESTORE/BACKUP */
char* to_log; /* For PURGE MASTER LOGS TO */
char* x509_subject,*x509_issuer,*ssl_cipher;
String *wild;
=== modified file 'sql/sql_partition.cc'
--- a/sql/sql_partition.cc 2011-03-11 09:35:38 +0000
+++ b/sql/sql_partition.cc 2011-05-06 13:21:38 +0000
@@ -4051,7 +4051,7 @@ void get_partition_set(const TABLE *tabl
part_spec->start_part= 0;
part_spec->end_part= num_parts - 1;
if ((index < MAX_KEY) &&
- key_spec->flag == (uint)HA_READ_KEY_EXACT &&
+ key_spec && key_spec->flag == (uint)HA_READ_KEY_EXACT &&
part_info->some_fields_in_PF.is_set(index))
{
key_info= table->key_info+index;
=== modified file 'storage/archive/ha_archive.cc'
--- a/storage/archive/ha_archive.cc 2011-04-19 03:29:06 +0000
+++ b/storage/archive/ha_archive.cc 2011-05-10 13:41:34 +0000
@@ -1,17 +1,19 @@
-/* Copyright (C) 2003 MySQL AB, 2008-2009 Sun Microsystems, Inc
+/* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; version 2 of
+ the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301 USA */
#include "sql_priv.h"
#include "probes_mysql.h"
@@ -918,7 +920,7 @@ int ha_archive::write_row(uchar *buf)
*/
azflush(&(share->archive_write), Z_SYNC_FLUSH);
/*
- Set the position of the local read thread to the beginning postion.
+ Set the position of the local read thread to the beginning position.
*/
if (read_data_header(&archive))
{
=== modified file 'storage/ndb/src/kernel/blocks/lgman.cpp'
--- a/storage/ndb/src/kernel/blocks/lgman.cpp 2008-02-08 14:17:45 +0000
+++ b/storage/ndb/src/kernel/blocks/lgman.cpp 2011-05-05 23:46:53 +0000
@@ -1,17 +1,19 @@
-/* Copyright (C) 2003 MySQL AB
+/* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; version 2 of
+ the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301 USA */
#include "lgman.hpp"
#include "diskpage.hpp"
@@ -2501,7 +2503,7 @@ Lgman::init_run_undo_log(Signal* signal)
sendSignal(reference(), GSN_CONTINUEB, signal, 2, JBB);
/**
- * Insert in correct postion in list of logfile_group's
+ * Insert in correct position in list of logfile_group's
*/
Ptr<Logfile_group> pos;
for(tmp.first(pos); !pos.isNull(); tmp.next(pos))
=== modified file 'strings/decimal.c'
--- a/strings/decimal.c 2011-05-12 03:31:08 +0000
+++ b/strings/decimal.c 2011-05-12 04:28:33 +0000
@@ -369,20 +369,28 @@ int decimal2string(const decimal_t *from
}
else if (unlikely(len > --*to_len)) /* reserve one byte for \0 */
{
- int j= len-*to_len;
+ int j= len - *to_len; /* excess printable chars */
error= (frac && j <= frac + 1) ? E_DEC_TRUNCATED : E_DEC_OVERFLOW;
- if (frac && j >= frac + 1) j--;
+
+ /*
+ If we need to cut more places than frac is wide, we'll end up
+ dropping the decimal point as well. Account for this.
+ */
+ if (frac && j >= frac + 1)
+ j--;
+
if (j > frac)
{
- intg-= j-frac;
+ intg_len= intg-= j-frac;
frac= 0;
}
else
frac-=j;
+ frac_len= frac;
len= from->sign + intg_len + test(frac) + frac_len;
}
- *to_len=len;
- s[len]=0;
+ *to_len= len;
+ s[len]= 0;
if (from->sign)
*s++='-';
@@ -404,14 +412,14 @@ int decimal2string(const decimal_t *from
x*=10;
}
}
- for(; fill; fill--)
+ for(; fill > 0; fill--)
*s1++=filler;
}
fill= intg_len - intg;
if (intg == 0)
fill--; /* symbol 0 before digital point */
- for(; fill; fill--)
+ for(; fill > 0; fill--)
*s++=filler;
if (intg)
{
@@ -429,6 +437,7 @@ int decimal2string(const decimal_t *from
}
else
*s= '0';
+
return error;
}
=== modified file 'vio/viosocket.c'
--- a/vio/viosocket.c 2011-04-29 21:48:23 +0000
+++ b/vio/viosocket.c 2011-05-05 23:50:31 +0000
@@ -1,17 +1,19 @@
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; version 2 of
+ the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301 USA */
/*
Note that we can't have assertion on file descriptors; The reason for
@@ -865,7 +867,7 @@ size_t vio_read_shared_memory(Vio * vio,
{
size_t length;
size_t remain_local;
- char *current_postion;
+ char *current_position;
HANDLE events[2];
DBUG_ENTER("vio_read_shared_memory");
@@ -873,7 +875,7 @@ size_t vio_read_shared_memory(Vio * vio,
size));
remain_local = size;
- current_postion=buf;
+ current_position=buf;
events[0]= vio->event_server_wrote;
events[1]= vio->event_conn_closed;
@@ -907,11 +909,11 @@ size_t vio_read_shared_memory(Vio * vio,
if (length > remain_local)
length = remain_local;
- memcpy(current_postion,vio->shared_memory_pos,length);
+ memcpy(current_position,vio->shared_memory_pos,length);
vio->shared_memory_remain-=length;
vio->shared_memory_pos+=length;
- current_postion+=length;
+ current_position+=length;
remain_local-=length;
if (!vio->shared_memory_remain)
@@ -931,7 +933,7 @@ size_t vio_write_shared_memory(Vio * vio
{
size_t length, remain, sz;
HANDLE pos;
- const uchar *current_postion;
+ const uchar *current_position;
HANDLE events[2];
DBUG_ENTER("vio_write_shared_memory");
@@ -939,7 +941,7 @@ size_t vio_write_shared_memory(Vio * vio
size));
remain = size;
- current_postion = buf;
+ current_position = buf;
events[0]= vio->event_server_read;
events[1]= vio->event_conn_closed;
@@ -957,9 +959,9 @@ size_t vio_write_shared_memory(Vio * vio
int4store(vio->handle_map,sz);
pos = vio->handle_map + 4;
- memcpy(pos,current_postion,sz);
+ memcpy(pos,current_position,sz);
remain-=sz;
- current_postion+=sz;
+ current_position+=sz;
if (!SetEvent(vio->event_client_wrote))
DBUG_RETURN((size_t) -1);
}
No bundle (reason: revision is a merge (you can force generation of a bundle with env var BZR_FORCE_BUNDLE=1)).
| Thread |
|---|
| • bzr commit into mysql-trunk branch (tatjana.nuernberg:3367) | Tatjana Azundris Nuernberg | 12 May |