Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.1-new-rpl
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.1-merge client/mysqlbinlog.cc: Auto merged client/mysqldump.c: Auto merged configure.in: Auto merged include/config-win.h: Auto merged include/my_global.h: Auto merged include/my_pthread.h: Auto merged libmysqld/CMakeLists.txt: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/r/rpl_row_tabledefs_2myisam.result: Auto merged mysql-test/r/rpl_row_tabledefs_3innodb.result: Auto merged mysql-test/r/rpl_sp.result: Auto merged mysql-test/t/disabled.def: Auto merged mysys/my_thr_init.c: Auto merged sql/CMakeLists.txt: Auto merged sql/field.cc: Auto merged sql/field.h: Auto merged sql/handler.cc: Auto merged sql/item_create.cc: Auto merged sql/item_timefunc.cc: Auto merged sql/log.cc: Auto merged sql/log.h: Auto merged sql/log_event.h: Auto merged sql/mysql_priv.h: Auto merged sql/rpl_injector.cc: Auto merged sql/rpl_injector.h: Auto merged sql/set_var.cc: Auto merged sql/set_var.h: Auto merged sql/slave.cc: Auto merged sql/sp_head.cc: Auto merged sql/sp_head.h: Auto merged sql/sql_acl.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_load.cc: Auto merged sql/sql_locale.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_view.cc: Auto merged sql/table.cc: Auto merged unittest/mysys/my_atomic-t.c: Auto merged sql/log_event.cc: Manual merge main->rpl sql/mysqld.cc: Manual merge main->rpl
This commit is contained in:
commit
bb48472601
@ -66,6 +66,7 @@ static bool opt_hexdump= 0;
|
|||||||
static bool opt_base64_output= 0;
|
static bool opt_base64_output= 0;
|
||||||
static const char* database= 0;
|
static const char* database= 0;
|
||||||
static my_bool force_opt= 0, short_form= 0, remote_opt= 0, info_flag;
|
static my_bool force_opt= 0, short_form= 0, remote_opt= 0, info_flag;
|
||||||
|
static my_bool force_if_open_opt= 1;
|
||||||
static ulonglong offset = 0;
|
static ulonglong offset = 0;
|
||||||
static const char* host = 0;
|
static const char* host = 0;
|
||||||
static int port= 0;
|
static int port= 0;
|
||||||
@ -85,6 +86,7 @@ static short binlog_flags = 0;
|
|||||||
static MYSQL* mysql = NULL;
|
static MYSQL* mysql = NULL;
|
||||||
static const char* dirname_for_local_load= 0;
|
static const char* dirname_for_local_load= 0;
|
||||||
static bool stop_passed= 0;
|
static bool stop_passed= 0;
|
||||||
|
static my_bool file_not_closed_error= 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
check_header() will set the pointer below.
|
check_header() will set the pointer below.
|
||||||
@ -94,8 +96,10 @@ static bool stop_passed= 0;
|
|||||||
*/
|
*/
|
||||||
Format_description_log_event* description_event;
|
Format_description_log_event* description_event;
|
||||||
|
|
||||||
static int dump_local_log_entries(const char* logname);
|
static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
|
||||||
static int dump_remote_log_entries(const char* logname);
|
const char* logname);
|
||||||
|
static int dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
|
||||||
|
const char* logname);
|
||||||
static int dump_log_entries(const char* logname);
|
static int dump_log_entries(const char* logname);
|
||||||
static int dump_remote_file(NET* net, const char* fname);
|
static int dump_remote_file(NET* net, const char* fname);
|
||||||
static void die(const char* fmt, ...);
|
static void die(const char* fmt, ...);
|
||||||
@ -645,6 +649,12 @@ Create_file event for file_id: %u\n",exv->file_id);
|
|||||||
later.
|
later.
|
||||||
*/
|
*/
|
||||||
ev= 0;
|
ev= 0;
|
||||||
|
if (!force_if_open_opt &&
|
||||||
|
(description_event->flags & LOG_EVENT_BINLOG_IN_USE_F))
|
||||||
|
{
|
||||||
|
file_not_closed_error= 1;
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case BEGIN_LOAD_QUERY_EVENT:
|
case BEGIN_LOAD_QUERY_EVENT:
|
||||||
ev->print(result_file, print_event_info);
|
ev->print(result_file, print_event_info);
|
||||||
@ -724,6 +734,9 @@ static struct my_option my_long_options[] =
|
|||||||
"already have. NOTE: you will need a SUPER privilege to use this option.",
|
"already have. NOTE: you will need a SUPER privilege to use this option.",
|
||||||
(gptr*) &disable_log_bin, (gptr*) &disable_log_bin, 0, GET_BOOL,
|
(gptr*) &disable_log_bin, (gptr*) &disable_log_bin, 0, GET_BOOL,
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"force-if-open", 'F', "Force if binlog was not closed properly.",
|
||||||
|
(gptr*) &force_if_open_opt, (gptr*) &force_if_open_opt, 0, GET_BOOL, NO_ARG,
|
||||||
|
1, 0, 0, 0, 0, 0},
|
||||||
{"force-read", 'f', "Force reading unknown binlog events.",
|
{"force-read", 'f', "Force reading unknown binlog events.",
|
||||||
(gptr*) &force_opt, (gptr*) &force_opt, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
(gptr*) &force_opt, (gptr*) &force_opt, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
||||||
0, 0},
|
0, 0},
|
||||||
@ -1001,8 +1014,22 @@ static MYSQL* safe_connect()
|
|||||||
|
|
||||||
static int dump_log_entries(const char* logname)
|
static int dump_log_entries(const char* logname)
|
||||||
{
|
{
|
||||||
return (remote_opt ? dump_remote_log_entries(logname) :
|
int rc;
|
||||||
dump_local_log_entries(logname));
|
PRINT_EVENT_INFO print_event_info;
|
||||||
|
/*
|
||||||
|
Set safe delimiter, to dump things
|
||||||
|
like CREATE PROCEDURE safely
|
||||||
|
*/
|
||||||
|
fprintf(result_file, "DELIMITER /*!*/;\n");
|
||||||
|
strcpy(print_event_info.delimiter, "/*!*/;");
|
||||||
|
|
||||||
|
rc= (remote_opt ? dump_remote_log_entries(&print_event_info, logname) :
|
||||||
|
dump_local_log_entries(&print_event_info, logname));
|
||||||
|
|
||||||
|
/* Set delimiter back to semicolon */
|
||||||
|
fprintf(result_file, "DELIMITER ;\n");
|
||||||
|
strcpy(print_event_info.delimiter, ";");
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1067,11 +1094,11 @@ static int check_master_version(MYSQL* mysql,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int dump_remote_log_entries(const char* logname)
|
static int dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
|
||||||
|
const char* logname)
|
||||||
|
|
||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
PRINT_EVENT_INFO print_event_info;
|
|
||||||
ulong len;
|
ulong len;
|
||||||
uint logname_len;
|
uint logname_len;
|
||||||
NET* net;
|
NET* net;
|
||||||
@ -1194,7 +1221,7 @@ could be out of memory");
|
|||||||
len= 1; // fake Rotate, so don't increment old_off
|
len= 1; // fake Rotate, so don't increment old_off
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((error= process_event(&print_event_info, ev, old_off)))
|
if ((error= process_event(print_event_info, ev, old_off)))
|
||||||
{
|
{
|
||||||
error= ((error < 0) ? 0 : 1);
|
error= ((error < 0) ? 0 : 1);
|
||||||
goto err;
|
goto err;
|
||||||
@ -1213,7 +1240,7 @@ could be out of memory");
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((error= process_event(&print_event_info, ev, old_off)))
|
if ((error= process_event(print_event_info, ev, old_off)))
|
||||||
{
|
{
|
||||||
my_close(file,MYF(MY_WME));
|
my_close(file,MYF(MY_WME));
|
||||||
error= ((error < 0) ? 0 : 1);
|
error= ((error < 0) ? 0 : 1);
|
||||||
@ -1339,11 +1366,11 @@ at offset %lu ; this could be a log format error or read error",
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int dump_local_log_entries(const char* logname)
|
static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
|
||||||
|
const char* logname)
|
||||||
{
|
{
|
||||||
File fd = -1;
|
File fd = -1;
|
||||||
IO_CACHE cache,*file= &cache;
|
IO_CACHE cache,*file= &cache;
|
||||||
PRINT_EVENT_INFO print_event_info;
|
|
||||||
byte tmp_buff[BIN_LOG_HEADER_SIZE];
|
byte tmp_buff[BIN_LOG_HEADER_SIZE];
|
||||||
int error= 0;
|
int error= 0;
|
||||||
|
|
||||||
@ -1430,7 +1457,7 @@ static int dump_local_log_entries(const char* logname)
|
|||||||
// file->error == 0 means EOF, that's OK, we break in this case
|
// file->error == 0 means EOF, that's OK, we break in this case
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ((error= process_event(&print_event_info, ev, old_off)))
|
if ((error= process_event(print_event_info, ev, old_off)))
|
||||||
{
|
{
|
||||||
if (error < 0)
|
if (error < 0)
|
||||||
error= 0;
|
error= 0;
|
||||||
@ -1547,6 +1574,16 @@ int main(int argc, char** argv)
|
|||||||
my_free_open_file_info();
|
my_free_open_file_info();
|
||||||
/* We cannot free DBUG, it is used in global destructors after exit(). */
|
/* We cannot free DBUG, it is used in global destructors after exit(). */
|
||||||
my_end((info_flag ? MY_CHECK_ERROR : 0) | MY_DONT_FREE_DBUG);
|
my_end((info_flag ? MY_CHECK_ERROR : 0) | MY_DONT_FREE_DBUG);
|
||||||
|
|
||||||
|
if (file_not_closed_error)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"\nError: attempting to dump binlog '%s' which was not closed properly.\n"
|
||||||
|
"Most probably mysqld is still writting it, or crashed.\n"
|
||||||
|
"Your current options specify --disable-force-if-open\n"
|
||||||
|
"which means to abort on this problem.\n"
|
||||||
|
"You can rerun using --force-if-open to ignore this problem.\n\n", argv[-1]);
|
||||||
|
}
|
||||||
exit(exit_value);
|
exit(exit_value);
|
||||||
DBUG_RETURN(exit_value); // Keep compilers happy
|
DBUG_RETURN(exit_value); // Keep compilers happy
|
||||||
}
|
}
|
||||||
|
@ -229,10 +229,7 @@ AC_DEFUN([MYSQL_SETUP_NDBCLUSTER], [
|
|||||||
if test X"$ndb_binlog" = Xdefault ||
|
if test X"$ndb_binlog" = Xdefault ||
|
||||||
test X"$ndb_binlog" = Xyes
|
test X"$ndb_binlog" = Xyes
|
||||||
then
|
then
|
||||||
if test X"$have_row_based" = Xyes
|
have_ndb_binlog="yes"
|
||||||
then
|
|
||||||
have_ndb_binlog="yes"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test X"$have_ndb_binlog" = Xyes
|
if test X"$have_ndb_binlog" = Xyes
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
dnl This file contains configuration parameters for replication.
|
|
||||||
|
|
||||||
dnl ---------------------------------------------------------------------------
|
|
||||||
dnl Macro: MYSQL_CHECK_REPLICATION
|
|
||||||
dnl Sets HAVE_ROW_BASED_REPLICATION if --with-row-based-replication is used
|
|
||||||
dnl ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
AC_DEFUN([MYSQL_CHECK_REPLICATION], [
|
|
||||||
AC_ARG_WITH([row-based-replication],
|
|
||||||
AC_HELP_STRING([--without-row-based-replication],
|
|
||||||
[Don't include row-based replication]),
|
|
||||||
[row_based="$withval"],
|
|
||||||
[row_based=yes])
|
|
||||||
AC_MSG_CHECKING([for row-based replication])
|
|
||||||
|
|
||||||
case "$row_based" in
|
|
||||||
yes )
|
|
||||||
AC_DEFINE([WITH_ROW_BASED_REPLICATION], [1], [Define to have row-based replication])
|
|
||||||
AC_MSG_RESULT([-- including row-based replication])
|
|
||||||
[have_row_based=yes]
|
|
||||||
;;
|
|
||||||
* )
|
|
||||||
AC_MSG_RESULT([-- not including row-based replication])
|
|
||||||
[have_row_based=no]
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
])
|
|
||||||
dnl ---------------------------------------------------------------------------
|
|
||||||
dnl END OF MYSQL_CHECK_REPLICATION
|
|
||||||
dnl ---------------------------------------------------------------------------
|
|
@ -35,7 +35,6 @@ sinclude(config/ac-macros/ha_ndbcluster.m4)
|
|||||||
sinclude(config/ac-macros/large_file.m4)
|
sinclude(config/ac-macros/large_file.m4)
|
||||||
sinclude(config/ac-macros/misc.m4)
|
sinclude(config/ac-macros/misc.m4)
|
||||||
sinclude(config/ac-macros/readline.m4)
|
sinclude(config/ac-macros/readline.m4)
|
||||||
sinclude(config/ac-macros/replication.m4)
|
|
||||||
sinclude(config/ac-macros/ssl.m4)
|
sinclude(config/ac-macros/ssl.m4)
|
||||||
sinclude(config/ac-macros/zlib.m4)
|
sinclude(config/ac-macros/zlib.m4)
|
||||||
|
|
||||||
@ -2172,7 +2171,6 @@ AC_MSG_RESULT("$netinet_inc")
|
|||||||
|
|
||||||
MYSQL_CHECK_BIG_TABLES
|
MYSQL_CHECK_BIG_TABLES
|
||||||
MYSQL_CHECK_MAX_INDEXES
|
MYSQL_CHECK_MAX_INDEXES
|
||||||
MYSQL_CHECK_REPLICATION
|
|
||||||
MYSQL_CHECK_VIO
|
MYSQL_CHECK_VIO
|
||||||
MYSQL_CHECK_SSL
|
MYSQL_CHECK_SSL
|
||||||
|
|
||||||
|
@ -435,7 +435,6 @@ inline double ulonglong2double(ulonglong value)
|
|||||||
|
|
||||||
#define HAVE_SPATIAL 1
|
#define HAVE_SPATIAL 1
|
||||||
#define HAVE_RTREE_KEYS 1
|
#define HAVE_RTREE_KEYS 1
|
||||||
#define HAVE_ROW_BASED_REPLICATION 1
|
|
||||||
|
|
||||||
#define HAVE_OPENSSL 1
|
#define HAVE_OPENSSL 1
|
||||||
#define HAVE_YASSL 1
|
#define HAVE_YASSL 1
|
||||||
|
@ -78,9 +78,6 @@
|
|||||||
#endif /* _WIN32... */
|
#endif /* _WIN32... */
|
||||||
|
|
||||||
#ifndef EMBEDDED_LIBRARY
|
#ifndef EMBEDDED_LIBRARY
|
||||||
#ifdef WITH_ROW_BASED_REPLICATION
|
|
||||||
#define HAVE_ROW_BASED_REPLICATION 1
|
|
||||||
#endif
|
|
||||||
#ifdef WITH_NDB_BINLOG
|
#ifdef WITH_NDB_BINLOG
|
||||||
#define HAVE_NDB_BINLOG 1
|
#define HAVE_NDB_BINLOG 1
|
||||||
#endif
|
#endif
|
||||||
|
@ -30,8 +30,26 @@ extern "C" {
|
|||||||
#define EXTERNC
|
#define EXTERNC
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
#if defined(__WIN__)
|
/*
|
||||||
|
BUG#24507: Race conditions inside current NPTL pthread_exit() implementation.
|
||||||
|
|
||||||
|
If macro NPTL_PTHREAD_EXIT_HACK is defined then a hack described in the bug
|
||||||
|
report will be implemented inside my_thread_global_init() in my_thr_init.c.
|
||||||
|
|
||||||
|
This amounts to spawning a dummy thread which does nothing but executes
|
||||||
|
pthread_exit(0).
|
||||||
|
|
||||||
|
This bug is fixed in version 2.5 of glibc library.
|
||||||
|
|
||||||
|
TODO: Remove this code when fixed versions of glibc6 are in common use.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(TARGET_OS_LINUX) && defined(HAVE_NPTL) && \
|
||||||
|
defined(__GLIBC__) && ( __GLIBC__ < 2 || __GLIBC__ == 2 && __GLIBC_MINOR__ < 5 )
|
||||||
|
#define NPTL_PTHREAD_EXIT_BUG 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__WIN__)
|
||||||
typedef CRITICAL_SECTION pthread_mutex_t;
|
typedef CRITICAL_SECTION pthread_mutex_t;
|
||||||
typedef HANDLE pthread_t;
|
typedef HANDLE pthread_t;
|
||||||
typedef struct thread_attr {
|
typedef struct thread_attr {
|
||||||
|
@ -18,8 +18,7 @@ SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
|
|||||||
|
|
||||||
# Need to set USE_TLS, since __declspec(thread) approach to thread local
|
# Need to set USE_TLS, since __declspec(thread) approach to thread local
|
||||||
# storage does not work properly in DLLs.
|
# storage does not work properly in DLLs.
|
||||||
ADD_DEFINITIONS(-DUSE_TLS -DHAVE_ROW_BASED_REPLICATION -DMYSQL_SERVER
|
ADD_DEFINITIONS(-DUSE_TLS -DMYSQL_SERVER -DEMBEDDED_LIBRARY)
|
||||||
-DEMBEDDED_LIBRARY)
|
|
||||||
|
|
||||||
# The old Windows build method used renamed (.cc -> .cpp) source files, fails
|
# The old Windows build method used renamed (.cc -> .cpp) source files, fails
|
||||||
# in #include in lib_sql.cc. So disable that using the USING_CMAKE define.
|
# in #include in lib_sql.cc. So disable that using the USING_CMAKE define.
|
||||||
|
@ -14,6 +14,7 @@ show binlog events from 102;
|
|||||||
# more important than SHOW BINLOG EVENTS, mysqlbinlog (where we
|
# more important than SHOW BINLOG EVENTS, mysqlbinlog (where we
|
||||||
# absolutely need variables names to be quoted and strings to be
|
# absolutely need variables names to be quoted and strings to be
|
||||||
# escaped).
|
# escaped).
|
||||||
|
flush logs;
|
||||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||||
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001
|
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001
|
||||||
drop table t2;
|
drop table t2;
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
--source include/have_row_based.inc
|
|
||||||
--source include/have_binlog_format_row.inc
|
--source include/have_binlog_format_row.inc
|
||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
|
|
||||||
|
@ -80,28 +80,28 @@ INSERT INTO t1_bit VALUES (1,2);
|
|||||||
INSERT INTO t1_bit VALUES (2,5);
|
INSERT INTO t1_bit VALUES (2,5);
|
||||||
INSERT INTO t1_char VALUES (1,2);
|
INSERT INTO t1_char VALUES (1,2);
|
||||||
INSERT INTO t1_char VALUES (2,5);
|
INSERT INTO t1_char VALUES (2,5);
|
||||||
SELECT * FROM t1_int;
|
SELECT * FROM t1_int ORDER BY a;
|
||||||
SELECT * FROM t1_bit;
|
SELECT * FROM t1_bit ORDER BY a;
|
||||||
SELECT * FROM t1_char;
|
SELECT * FROM t1_char ORDER BY a;
|
||||||
--echo **** On Slave ****
|
--echo **** On Slave ****
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT a,b,x FROM t1_int;
|
SELECT a,b,x FROM t1_int ORDER BY a;
|
||||||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
|
||||||
SELECT a,b,x FROM t1_char;
|
SELECT a,b,x FROM t1_char ORDER BY a;
|
||||||
|
|
||||||
--echo **** On Master ****
|
--echo **** On Master ****
|
||||||
connection master;
|
connection master;
|
||||||
UPDATE t1_int SET b=2*b WHERE a=2;
|
UPDATE t1_int SET b=2*b WHERE a=2;
|
||||||
UPDATE t1_char SET b=2*b WHERE a=2;
|
UPDATE t1_char SET b=2*b WHERE a=2;
|
||||||
UPDATE t1_bit SET b=2*b WHERE a=2;
|
UPDATE t1_bit SET b=2*b WHERE a=2;
|
||||||
SELECT * FROM t1_int;
|
SELECT * FROM t1_int ORDER BY a;
|
||||||
SELECT * FROM t1_bit;
|
SELECT * FROM t1_bit ORDER BY a;
|
||||||
SELECT * FROM t1_char;
|
SELECT * FROM t1_char ORDER BY a;
|
||||||
--echo **** On Slave ****
|
--echo **** On Slave ****
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT a,b,x FROM t1_int;
|
SELECT a,b,x FROM t1_int ORDER BY a;
|
||||||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
|
||||||
SELECT a,b,x FROM t1_char;
|
SELECT a,b,x FROM t1_char ORDER BY a;
|
||||||
|
|
||||||
# Each of these inserts should generate an error and stop the slave
|
# Each of these inserts should generate an error and stop the slave
|
||||||
|
|
||||||
@ -188,11 +188,11 @@ sync_slave_with_master;
|
|||||||
connection master;
|
connection master;
|
||||||
INSERT INTO t7 VALUES (1),(2),(3);
|
INSERT INTO t7 VALUES (1),(2),(3);
|
||||||
INSERT INTO t8 VALUES (1),(2),(3);
|
INSERT INTO t8 VALUES (1),(2),(3);
|
||||||
SELECT * FROM t7;
|
SELECT * FROM t7 ORDER BY a;
|
||||||
SELECT * FROM t8;
|
SELECT * FROM t8 ORDER BY a;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT * FROM t7;
|
SELECT * FROM t7 ORDER BY a;
|
||||||
SELECT * FROM t8;
|
SELECT * FROM t8 ORDER BY a;
|
||||||
|
|
||||||
# We will now try to update and then delete a row on the master where
|
# We will now try to update and then delete a row on the master where
|
||||||
# the extra field on the slave does not have a default value. This
|
# the extra field on the slave does not have a default value. This
|
||||||
@ -216,20 +216,20 @@ INSERT INTO t1_nodef VALUES (2,4,6);
|
|||||||
--echo **** On Master ****
|
--echo **** On Master ****
|
||||||
connection master;
|
connection master;
|
||||||
UPDATE t1_nodef SET b=2*b WHERE a=1;
|
UPDATE t1_nodef SET b=2*b WHERE a=1;
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
|
|
||||||
--echo **** On Slave ****
|
--echo **** On Slave ****
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
|
|
||||||
--echo **** On Master ****
|
--echo **** On Master ****
|
||||||
connection master;
|
connection master;
|
||||||
DELETE FROM t1_nodef WHERE a=2;
|
DELETE FROM t1_nodef WHERE a=2;
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
|
|
||||||
--echo **** On Slave ****
|
--echo **** On Slave ****
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
|
|
||||||
--echo **** Cleanup ****
|
--echo **** Cleanup ****
|
||||||
connection master;
|
connection master;
|
||||||
|
@ -156,6 +156,7 @@ select hex(c1), hex(c2) from t1;
|
|||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
# Let's have a look at generated SETs.
|
# Let's have a look at generated SETs.
|
||||||
|
flush logs;
|
||||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||||
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001
|
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#
|
#
|
||||||
# Author(s): Mats Kindahl
|
# Author(s): Mats Kindahl
|
||||||
|
|
||||||
--source include/have_row_based.inc
|
|
||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
|
|
||||||
let $format = STATEMENT;
|
let $format = STATEMENT;
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
-- require r/have_row_based.require
|
|
||||||
disable_query_log;
|
|
||||||
show variables like "have_row_based_replication";
|
|
||||||
enable_query_log;
|
|
@ -1,4 +0,0 @@
|
|||||||
-- require r/not_row_based.require
|
|
||||||
disable_query_log;
|
|
||||||
show variables like "have_row_based_replication";
|
|
||||||
enable_query_log;
|
|
@ -1855,7 +1855,7 @@ sub environment_setup () {
|
|||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
my $cmdline_mysqlbinlog=
|
my $cmdline_mysqlbinlog=
|
||||||
"$exe_mysqlbinlog" .
|
"$exe_mysqlbinlog" .
|
||||||
" --no-defaults --debug-info --local-load=$opt_tmpdir";
|
" --no-defaults --disable-force-if-open --debug-info --local-load=$opt_tmpdir";
|
||||||
if ( $mysql_version_id >= 50000 )
|
if ( $mysql_version_id >= 50000 )
|
||||||
{
|
{
|
||||||
$cmdline_mysqlbinlog .=" --character-sets-dir=$path_charsetsdir";
|
$cmdline_mysqlbinlog .=" --character-sets-dir=$path_charsetsdir";
|
||||||
|
@ -7,9 +7,12 @@ show binlog events from 102;
|
|||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 102 Table_map 1 141 table_id: # (test.t2)
|
master-bin.000001 102 Table_map 1 141 table_id: # (test.t2)
|
||||||
master-bin.000001 141 Write_rows 1 231 table_id: # flags: STMT_END_F
|
master-bin.000001 141 Write_rows 1 231 table_id: # flags: STMT_END_F
|
||||||
|
flush logs;
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
|
ROLLBACK/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
|
@ -400,6 +400,7 @@ insert into t2 select * from t1;
|
|||||||
select get_lock("a",10);
|
select get_lock("a",10);
|
||||||
get_lock("a",10)
|
get_lock("a",10)
|
||||||
1
|
1
|
||||||
|
flush logs;
|
||||||
select
|
select
|
||||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
|
||||||
is not null;
|
is not null;
|
||||||
@ -407,8 +408,8 @@ is not null;
|
|||||||
is not null
|
is not null
|
||||||
1
|
1
|
||||||
select
|
select
|
||||||
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%",
|
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
|
||||||
@a not like "%#%error_code=%error_code=%";
|
@a not like "%#%error_code=%error_code=%";
|
||||||
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
||||||
1 1
|
1 1
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
@ -7,17 +7,20 @@ show binlog events from 102;
|
|||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 102 User var 1 142 @`v`=_ucs2 0x006100620063 COLLATE ucs2_general_ci
|
master-bin.000001 102 User var 1 142 @`v`=_ucs2 0x006100620063 COLLATE ucs2_general_ci
|
||||||
master-bin.000001 142 Query 1 231 use `test`; insert into t2 values (@v)
|
master-bin.000001 142 Query 1 231 use `test`; insert into t2 values (@v)
|
||||||
|
flush logs;
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
SET @`v`:=_ucs2 0x006100620063 COLLATE `ucs2_general_ci`;
|
ROLLBACK/*!*/;
|
||||||
use test;
|
SET @`v`:=_ucs2 0x006100620063 COLLATE `ucs2_general_ci`/*!*/;
|
||||||
SET TIMESTAMP=10000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=10000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
insert into t2 values (@v);
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
insert into t2 values (@v)/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
|
@ -367,6 +367,7 @@ insert into t2 select * from t1;
|
|||||||
select get_lock("a",10);
|
select get_lock("a",10);
|
||||||
get_lock("a",10)
|
get_lock("a",10)
|
||||||
1
|
1
|
||||||
|
flush logs;
|
||||||
select
|
select
|
||||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
|
||||||
is not null;
|
is not null;
|
||||||
@ -374,8 +375,8 @@ is not null;
|
|||||||
is not null
|
is not null
|
||||||
1
|
1
|
||||||
select
|
select
|
||||||
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%",
|
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
|
||||||
@a not like "%#%error_code=%error_code=%";
|
@a not like "%#%error_code=%error_code=%";
|
||||||
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
||||||
1 1
|
1 1
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
@ -41,6 +41,6 @@ IN ind DECIMAL(10,2))
|
|||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO t4 VALUES (ins1, ins2, ind);
|
INSERT INTO t4 VALUES (ins1, ins2, ind);
|
||||||
END
|
END
|
||||||
master-bin.000001 805 Query 1 1010 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1'Foo\'s a Bar'), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93))
|
master-bin.000001 805 Query 1 1021 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93))
|
||||||
master-bin.000001 1010 Query 1 1096 use `test`; DROP PROCEDURE bug18293
|
master-bin.000001 1021 Query 1 1107 use `test`; DROP PROCEDURE bug18293
|
||||||
master-bin.000001 1096 Query 1 1172 use `test`; DROP TABLE t4
|
master-bin.000001 1107 Query 1 1183 use `test`; DROP TABLE t4
|
||||||
|
@ -124,12 +124,34 @@ create table t1 select date_format("2004-01-19 10:10:10", "%Y-%m-%d");
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`date_format("2004-01-19 10:10:10", "%Y-%m-%d")` varbinary(10) DEFAULT NULL
|
`date_format("2004-01-19 10:10:10", "%Y-%m-%d")` varchar(10) CHARACTER SET utf8 DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
select * from t1;
|
select * from t1;
|
||||||
date_format("2004-01-19 10:10:10", "%Y-%m-%d")
|
date_format("2004-01-19 10:10:10", "%Y-%m-%d")
|
||||||
2004-01-19
|
2004-01-19
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set names utf8;
|
||||||
|
set LC_TIME_NAMES='fr_FR';
|
||||||
|
create table t1 (s1 char(20) character set latin1);
|
||||||
|
insert into t1 values (date_format('2004-02-02','%M'));
|
||||||
|
select hex(s1) from t1;
|
||||||
|
hex(s1)
|
||||||
|
66E97672696572
|
||||||
|
drop table t1;
|
||||||
|
create table t1 (s1 char(20) character set koi8r);
|
||||||
|
set LC_TIME_NAMES='ru_RU';
|
||||||
|
insert into t1 values (date_format('2004-02-02','%M'));
|
||||||
|
insert into t1 values (date_format('2004-02-02','%b'));
|
||||||
|
insert into t1 values (date_format('2004-02-02','%W'));
|
||||||
|
insert into t1 values (date_format('2004-02-02','%a'));
|
||||||
|
select hex(s1), s1 from t1;
|
||||||
|
hex(s1) s1
|
||||||
|
E6C5D7D2C1CCD1 Февраля
|
||||||
|
E6C5D7 Фев
|
||||||
|
F0CFCEC5C4C5CCD8CEC9CB Понедельник
|
||||||
|
F0CEC4 Пнд
|
||||||
|
drop table t1;
|
||||||
|
set LC_TIME_NAMES='en_US';
|
||||||
set names koi8r;
|
set names koi8r;
|
||||||
create table t1 (s1 char(1) character set utf8);
|
create table t1 (s1 char(1) character set utf8);
|
||||||
insert into t1 values (_koi8r'ÁÂ');
|
insert into t1 values (_koi8r'ÁÂ');
|
||||||
|
@ -59,6 +59,7 @@ SELECT * FROM slow_event_test;
|
|||||||
slo_val val
|
slo_val val
|
||||||
SET SESSION long_query_time=1;
|
SET SESSION long_query_time=1;
|
||||||
SET GLOBAL event_scheduler=on;
|
SET GLOBAL event_scheduler=on;
|
||||||
|
SET GLOBAL long_query_time=20;
|
||||||
CREATE EVENT long_event ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO slow_event_test SELECT @@long_query_time, SLEEP(1.5);
|
CREATE EVENT long_event ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO slow_event_test SELECT @@long_query_time, SLEEP(1.5);
|
||||||
"Sleep some more time than the actual event run will take"
|
"Sleep some more time than the actual event run will take"
|
||||||
SHOW VARIABLES LIKE 'event_scheduler';
|
SHOW VARIABLES LIKE 'event_scheduler';
|
||||||
@ -67,20 +68,22 @@ event_scheduler ON
|
|||||||
"Check our table. Should see 1 row"
|
"Check our table. Should see 1 row"
|
||||||
SELECT * FROM slow_event_test;
|
SELECT * FROM slow_event_test;
|
||||||
slo_val val
|
slo_val val
|
||||||
4 0
|
20 0
|
||||||
"Check slow log. Should not see anything because 1.5 is under the threshold of 300 for GLOBAL, though over SESSION which is 2"
|
"Check slow log. Should not see anything because 1.5 is under the threshold of 20 for GLOBAL, though over SESSION which is 1"
|
||||||
|
"This should show that the GLOBAL value is regarded and not the SESSION one of the current connection"
|
||||||
SELECT user_host, query_time, db, sql_text FROM mysql.slow_log;
|
SELECT user_host, query_time, db, sql_text FROM mysql.slow_log;
|
||||||
user_host query_time db sql_text
|
user_host query_time db sql_text
|
||||||
|
"Another test to show that GLOBAL is regarded and not SESSION."
|
||||||
"This should go to the slow log"
|
"This should go to the slow log"
|
||||||
DROP EVENT long_event;
|
|
||||||
SET SESSION long_query_time=10;
|
SET SESSION long_query_time=10;
|
||||||
|
DROP EVENT long_event;
|
||||||
SET GLOBAL long_query_time=1;
|
SET GLOBAL long_query_time=1;
|
||||||
CREATE EVENT long_event2 ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO slow_event_test SELECT @@long_query_time, SLEEP(2);
|
CREATE EVENT long_event2 ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO slow_event_test SELECT @@long_query_time, SLEEP(2);
|
||||||
"Sleep some more time than the actual event run will take"
|
"Sleep some more time than the actual event run will take"
|
||||||
"Check our table. Should see 2 rows"
|
"Check our table. Should see 2 rows"
|
||||||
SELECT * FROM slow_event_test;
|
SELECT * FROM slow_event_test;
|
||||||
slo_val val
|
slo_val val
|
||||||
4 0
|
20 0
|
||||||
1 0
|
1 0
|
||||||
"Check slow log. Should see 1 row because 4 is over the threshold of 3 for GLOBAL, though under SESSION which is 10"
|
"Check slow log. Should see 1 row because 4 is over the threshold of 3 for GLOBAL, though under SESSION which is 10"
|
||||||
SELECT user_host, query_time, db, sql_text FROM mysql.slow_log;
|
SELECT user_host, query_time, db, sql_text FROM mysql.slow_log;
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
Variable_name Value
|
|
||||||
have_row_based_replication YES
|
|
@ -15,31 +15,33 @@ flush logs;
|
|||||||
--- Local --
|
--- Local --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
use test;
|
ROLLBACK/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
drop table if exists t1,t2;
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
drop table if exists t1,t2/*!*/;
|
||||||
create table t1 (word varchar(20));
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
create table t1 (word varchar(20))/*!*/;
|
||||||
create table t2 (id int auto_increment not null primary key);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
create table t2 (id int auto_increment not null primary key)/*!*/;
|
||||||
insert into t1 values ("abirvalg");
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET INSERT_ID=1;
|
insert into t1 values ("abirvalg")/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=1/*!*/;
|
||||||
insert into t2 values ();
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
insert into t2 values ()/*!*/;
|
||||||
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-1-0' INTO table t1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-1-0' INTO table t1/*!*/;
|
||||||
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-2-0' INTO table t1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-2-0' INTO table t1/*!*/;
|
||||||
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-3-0' INTO table t1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-3-0' INTO table t1/*!*/;
|
||||||
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-4-0' INTO table t1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-4-0' INTO table t1/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -47,13 +49,15 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- Broken LOAD DATA --
|
--- Broken LOAD DATA --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
use test;
|
DELIMITER /*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
insert into t1 values ("Alas");
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
insert into t1 values ("Alas")/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -61,8 +65,10 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- --database --
|
--- --database --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
SET INSERT_ID=1;
|
ROLLBACK/*!*/;
|
||||||
|
SET INSERT_ID=1/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -70,13 +76,15 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- --position --
|
--- --position --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
use test;
|
DELIMITER /*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
insert into t1 values ("Alas");
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
insert into t1 values ("Alas")/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -84,31 +92,33 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- Remote --
|
--- Remote --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
use test;
|
ROLLBACK/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
drop table if exists t1,t2;
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
drop table if exists t1,t2/*!*/;
|
||||||
create table t1 (word varchar(20));
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
create table t1 (word varchar(20))/*!*/;
|
||||||
create table t2 (id int auto_increment not null primary key);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
create table t2 (id int auto_increment not null primary key)/*!*/;
|
||||||
insert into t1 values ("abirvalg");
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET INSERT_ID=1;
|
insert into t1 values ("abirvalg")/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=1/*!*/;
|
||||||
insert into t2 values ();
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
insert into t2 values ()/*!*/;
|
||||||
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-1-2' INTO table t1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-1-2' INTO table t1/*!*/;
|
||||||
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-2-2' INTO table t1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-2-2' INTO table t1/*!*/;
|
||||||
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-3-2' INTO table t1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-3-2' INTO table t1/*!*/;
|
||||||
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-4-2' INTO table t1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-4-2' INTO table t1/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -116,13 +126,15 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- Broken LOAD DATA --
|
--- Broken LOAD DATA --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
use test;
|
DELIMITER /*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
insert into t1 values ("Alas");
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
insert into t1 values ("Alas")/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -130,8 +142,10 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- --database --
|
--- --database --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
SET INSERT_ID=1;
|
ROLLBACK/*!*/;
|
||||||
|
SET INSERT_ID=1/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -139,13 +153,15 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- --position --
|
--- --position --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
use test;
|
DELIMITER /*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
insert into t1 values ("Alas");
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
insert into t1 values ("Alas")/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -153,22 +169,26 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- reading stdin --
|
--- reading stdin --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
use test;
|
ROLLBACK/*!*/;
|
||||||
SET TIMESTAMP=1108844556;
|
use test/*!*/;
|
||||||
BEGIN;
|
SET TIMESTAMP=1108844556/*!*/;
|
||||||
SET TIMESTAMP=1108844555;
|
BEGIN/*!*/;
|
||||||
insert t1 values (1);
|
SET TIMESTAMP=1108844555/*!*/;
|
||||||
|
insert t1 values (1)/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
use test;
|
DELIMITER /*!*/;
|
||||||
SET TIMESTAMP=1108844556;
|
use test/*!*/;
|
||||||
BEGIN;
|
SET TIMESTAMP=1108844556/*!*/;
|
||||||
SET TIMESTAMP=1108844555;
|
BEGIN/*!*/;
|
||||||
insert t1 values (1);
|
SET TIMESTAMP=1108844555/*!*/;
|
||||||
|
insert t1 values (1)/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -190,8 +210,65 @@ select HEX(f) from t4;
|
|||||||
HEX(f)
|
HEX(f)
|
||||||
835C
|
835C
|
||||||
flush logs;
|
flush logs;
|
||||||
|
flush logs;
|
||||||
select * from t5 /* must be (1),(1) */;
|
select * from t5 /* must be (1),(1) */;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
|
flush logs;
|
||||||
|
drop table if exists t5;
|
||||||
|
create table t5 (c1 int, c2 varchar(128) character set latin1 not null);
|
||||||
|
insert into t5 values (1, date_format('2001-01-01','%W'));
|
||||||
|
set lc_time_names=de_DE;
|
||||||
|
insert into t5 values (2, date_format('2001-01-01','%W'));
|
||||||
|
set lc_time_names=en_US;
|
||||||
|
insert into t5 values (3, date_format('2001-01-01','%W'));
|
||||||
|
select * from t5 order by c1;
|
||||||
|
c1 c2
|
||||||
|
1 Monday
|
||||||
|
2 Montag
|
||||||
|
3 Monday
|
||||||
|
flush logs;
|
||||||
|
drop table t5;
|
||||||
|
select * from t5 order by c1;
|
||||||
|
c1 c2
|
||||||
|
1 Monday
|
||||||
|
2 Montag
|
||||||
|
3 Monday
|
||||||
|
drop procedure if exists p1;
|
||||||
|
flush logs;
|
||||||
|
create procedure p1()
|
||||||
|
begin
|
||||||
|
select 1;
|
||||||
|
end;
|
||||||
|
//
|
||||||
|
flush logs;
|
||||||
|
call p1();
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop procedure p1;
|
||||||
|
call p1();
|
||||||
|
ERROR 42000: PROCEDURE test.p1 does not exist
|
||||||
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
|
DELIMITER /*!*/;
|
||||||
|
use test/*!*/;
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
|
SET @@session.sql_mode=0/*!*/;
|
||||||
|
/*!\C latin1 *//*!*/;
|
||||||
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
CREATE DEFINER=`root`@`localhost` procedure p1()
|
||||||
|
begin
|
||||||
|
select 1;
|
||||||
|
end/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
|
# End of log file
|
||||||
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
|
call p1();
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop procedure p1;
|
||||||
drop table t1, t2, t03, t04, t3, t4, t5;
|
drop table t1, t2, t03, t04, t3, t4, t5;
|
||||||
|
flush logs;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -6,6 +6,7 @@ update t1 set a=a+2 where a=2;
|
|||||||
update t1 set a=a+2 where a=3;
|
update t1 set a=a+2 where a=3;
|
||||||
create table t2 (word varchar(20));
|
create table t2 (word varchar(20));
|
||||||
load data infile '../std_data_ln/words.dat' into table t2;
|
load data infile '../std_data_ln/words.dat' into table t2;
|
||||||
|
flush logs;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
@ -1787,6 +1787,78 @@ CREATE TABLE `t1` (
|
|||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# BUG#13926: --order-by-primary fails if PKEY contains quote character
|
||||||
|
#
|
||||||
|
DROP TABLE IF EXISTS `t1`;
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`a b` INT,
|
||||||
|
`c"d` INT,
|
||||||
|
`e``f` INT,
|
||||||
|
PRIMARY KEY (`a b`, `c"d`, `e``f`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
insert into t1 values (0815, 4711, 2006);
|
||||||
|
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||||
|
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||||
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||||
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO,ANSI' */;
|
||||||
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
DROP TABLE IF EXISTS "t1";
|
||||||
|
CREATE TABLE "t1" (
|
||||||
|
"a b" int(11) NOT NULL DEFAULT '0',
|
||||||
|
"c""d" int(11) NOT NULL DEFAULT '0',
|
||||||
|
"e`f" int(11) NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY ("a b","c""d","e`f")
|
||||||
|
);
|
||||||
|
|
||||||
|
LOCK TABLES "t1" WRITE;
|
||||||
|
/*!40000 ALTER TABLE "t1" DISABLE KEYS */;
|
||||||
|
INSERT INTO "t1" VALUES (815,4711,2006);
|
||||||
|
/*!40000 ALTER TABLE "t1" ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||||
|
|
||||||
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||||
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||||
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||||
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8 */;
|
||||||
|
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||||
|
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||||
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||||
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
DROP TABLE IF EXISTS `t1`;
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`a b` int(11) NOT NULL DEFAULT '0',
|
||||||
|
`c"d` int(11) NOT NULL DEFAULT '0',
|
||||||
|
`e``f` int(11) NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`a b`,`c"d`,`e``f`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
|
||||||
|
LOCK TABLES `t1` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
||||||
|
INSERT INTO `t1` VALUES (815,4711,2006);
|
||||||
|
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||||
|
|
||||||
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||||
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||||
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
|
DROP TABLE `t1`;
|
||||||
End of 4.1 tests
|
End of 4.1 tests
|
||||||
#
|
#
|
||||||
# Bug #10213 mysqldump crashes when dumping VIEWs(on MacOS X)
|
# Bug #10213 mysqldump crashes when dumping VIEWs(on MacOS X)
|
||||||
@ -3123,78 +3195,6 @@ drop user myDB_User@localhost;
|
|||||||
drop database mysqldump_myDB;
|
drop database mysqldump_myDB;
|
||||||
use test;
|
use test;
|
||||||
#
|
#
|
||||||
# BUG#13926: --order-by-primary fails if PKEY contains quote character
|
|
||||||
#
|
|
||||||
DROP TABLE IF EXISTS `t1`;
|
|
||||||
CREATE TABLE `t1` (
|
|
||||||
`a b` INT,
|
|
||||||
`c"d` INT,
|
|
||||||
`e``f` INT,
|
|
||||||
PRIMARY KEY (`a b`, `c"d`, `e``f`)
|
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
|
||||||
insert into t1 values (0815, 4711, 2006);
|
|
||||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
|
||||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
|
||||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO,ANSI' */;
|
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
|
||||||
DROP TABLE IF EXISTS "t1";
|
|
||||||
CREATE TABLE "t1" (
|
|
||||||
"a b" int(11) NOT NULL DEFAULT '0',
|
|
||||||
"c""d" int(11) NOT NULL DEFAULT '0',
|
|
||||||
"e`f" int(11) NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY ("a b","c""d","e`f")
|
|
||||||
);
|
|
||||||
|
|
||||||
LOCK TABLES "t1" WRITE;
|
|
||||||
/*!40000 ALTER TABLE "t1" DISABLE KEYS */;
|
|
||||||
INSERT INTO "t1" VALUES (815,4711,2006);
|
|
||||||
/*!40000 ALTER TABLE "t1" ENABLE KEYS */;
|
|
||||||
UNLOCK TABLES;
|
|
||||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
|
||||||
|
|
||||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
|
||||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
|
||||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
|
||||||
|
|
||||||
|
|
||||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
|
||||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
|
||||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
|
||||||
/*!40101 SET NAMES utf8 */;
|
|
||||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
|
||||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
|
||||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
|
||||||
DROP TABLE IF EXISTS `t1`;
|
|
||||||
CREATE TABLE `t1` (
|
|
||||||
`a b` int(11) NOT NULL DEFAULT '0',
|
|
||||||
`c"d` int(11) NOT NULL DEFAULT '0',
|
|
||||||
`e``f` int(11) NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY (`a b`,`c"d`,`e``f`)
|
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
|
||||||
|
|
||||||
LOCK TABLES `t1` WRITE;
|
|
||||||
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
|
||||||
INSERT INTO `t1` VALUES (815,4711,2006);
|
|
||||||
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
|
|
||||||
UNLOCK TABLES;
|
|
||||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
|
||||||
|
|
||||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
|
||||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
|
||||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
|
||||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
|
||||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
|
||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
|
||||||
|
|
||||||
DROP TABLE `t1`;
|
|
||||||
#
|
|
||||||
# Bug #19745: mysqldump --xml produces invalid xml
|
# Bug #19745: mysqldump --xml produces invalid xml
|
||||||
#
|
#
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
Variable_name Value
|
|
||||||
have_row_based_replication NO
|
|
26
mysql-test/r/rpl_charset_sjis.result
Normal file
26
mysql-test/r/rpl_charset_sjis.result
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
drop table if exists t1;
|
||||||
|
drop procedure if exists p1;
|
||||||
|
create table t1 (a varchar(255) character set sjis);
|
||||||
|
create procedure p1 (in a varchar(255) character set sjis) insert into t1 values (a);
|
||||||
|
SET NAMES binary;
|
||||||
|
CALL p1 ('–\\');
|
||||||
|
select "--- on master ---";
|
||||||
|
--- on master ---
|
||||||
|
--- on master ---
|
||||||
|
select hex(a) from t1 ;
|
||||||
|
hex(a)
|
||||||
|
965C
|
||||||
|
select "--- on slave ---";
|
||||||
|
--- on slave ---
|
||||||
|
--- on slave ---
|
||||||
|
select hex(a) from t1;
|
||||||
|
hex(a)
|
||||||
|
965C
|
||||||
|
drop table t1;
|
||||||
|
drop procedure p1;
|
@ -20,6 +20,17 @@ set password for rpl_do_grant@localhost=password("does it work?");
|
|||||||
select password<>_binary'' from mysql.user where user=_binary'rpl_do_grant';
|
select password<>_binary'' from mysql.user where user=_binary'rpl_do_grant';
|
||||||
password<>_binary''
|
password<>_binary''
|
||||||
1
|
1
|
||||||
|
update mysql.user set password='' where user='rpl_do_grant';
|
||||||
|
flush privileges;
|
||||||
|
select password<>'' from mysql.user where user='rpl_do_grant';
|
||||||
|
password<>''
|
||||||
|
0
|
||||||
|
set sql_mode='ANSI_QUOTES';
|
||||||
|
set password for rpl_do_grant@localhost=password('does it work?');
|
||||||
|
set sql_mode='';
|
||||||
|
select password<>'' from mysql.user where user='rpl_do_grant';
|
||||||
|
password<>''
|
||||||
|
1
|
||||||
delete from mysql.user where user=_binary'rpl_do_grant';
|
delete from mysql.user where user=_binary'rpl_do_grant';
|
||||||
delete from mysql.db where user=_binary'rpl_do_grant';
|
delete from mysql.db where user=_binary'rpl_do_grant';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
|
20
mysql-test/r/rpl_locale.result
Normal file
20
mysql-test/r/rpl_locale.result
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
create table t1 (s1 char(10));
|
||||||
|
set lc_time_names= 'de_DE';
|
||||||
|
insert into t1 values (date_format('2001-01-01','%W'));
|
||||||
|
set lc_time_names= 'en_US';
|
||||||
|
insert into t1 values (date_format('2001-01-01','%W'));
|
||||||
|
select * from t1;
|
||||||
|
s1
|
||||||
|
Montag
|
||||||
|
Monday
|
||||||
|
select * from t1;
|
||||||
|
s1
|
||||||
|
Montag
|
||||||
|
Monday
|
||||||
|
drop table t1;
|
@ -127,7 +127,7 @@ NULL 5 10
|
|||||||
NULL 6 12
|
NULL 6 12
|
||||||
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
|
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
|
||||||
ERROR 23000: Duplicate entry '2' for key 'b'
|
ERROR 23000: Duplicate entry '2' for key 'b'
|
||||||
SHOW BINLOG EVENTS FROM 1256;
|
SHOW BINLOG EVENTS FROM 1118;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
CREATE TABLE t7 (a INT, b INT UNIQUE);
|
CREATE TABLE t7 (a INT, b INT UNIQUE);
|
||||||
INSERT INTO t7 SELECT a,b FROM tt3;
|
INSERT INTO t7 SELECT a,b FROM tt3;
|
||||||
@ -212,3 +212,192 @@ Create Table CREATE TABLE `t9` (
|
|||||||
`a` int(11) DEFAULT NULL,
|
`a` int(11) DEFAULT NULL,
|
||||||
`b` int(11) DEFAULT NULL
|
`b` int(11) DEFAULT NULL
|
||||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||||
|
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
STOP SLAVE;
|
||||||
|
SET GLOBAL storage_engine=@storage_engine;
|
||||||
|
START SLAVE;
|
||||||
|
================ BUG#22864 ================
|
||||||
|
STOP SLAVE;
|
||||||
|
RESET SLAVE;
|
||||||
|
RESET MASTER;
|
||||||
|
START SLAVE;
|
||||||
|
SET AUTOCOMMIT=0;
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
CREATE TABLE t2 ENGINE=INNODB SELECT * FROM t1;
|
||||||
|
ROLLBACK;
|
||||||
|
CREATE TABLE t3 ENGINE=INNODB SELECT * FROM t1;
|
||||||
|
INSERT INTO t3 VALUES (4),(5),(6);
|
||||||
|
ROLLBACK;
|
||||||
|
CREATE TABLE t4 ENGINE=INNODB SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 VALUES (4),(5),(6);
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
SHOW TABLES;
|
||||||
|
Tables_in_test
|
||||||
|
t1
|
||||||
|
t2
|
||||||
|
t3
|
||||||
|
t4
|
||||||
|
SELECT TABLE_NAME,ENGINE
|
||||||
|
FROM INFORMATION_SCHEMA.TABLES
|
||||||
|
WHERE TABLE_NAME LIKE 't_'
|
||||||
|
ORDER BY TABLE_NAME;
|
||||||
|
TABLE_NAME ENGINE
|
||||||
|
t1 MyISAM
|
||||||
|
t2 InnoDB
|
||||||
|
t3 InnoDB
|
||||||
|
t4 InnoDB
|
||||||
|
SELECT * FROM t1 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t3 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t4 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SHOW BINLOG EVENTS;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 4 Format_desc 1 102 Server ver: #, Binlog ver: #
|
||||||
|
master-bin.000001 102 Query 1 188 use `test`; CREATE TABLE t1 (a INT)
|
||||||
|
master-bin.000001 188 Table_map 1 227 table_id: # (test.t1)
|
||||||
|
master-bin.000001 227 Write_rows 1 271 table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 271 Query 1 339 use `test`; BEGIN
|
||||||
|
master-bin.000001 339 Query 1 125 use `test`; CREATE TABLE `t2` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=InnoDB
|
||||||
|
master-bin.000001 464 Table_map 1 164 table_id: # (test.t2)
|
||||||
|
master-bin.000001 503 Write_rows 1 208 table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 547 Xid 1 574 COMMIT /* XID */
|
||||||
|
master-bin.000001 574 Query 1 642 use `test`; BEGIN
|
||||||
|
master-bin.000001 642 Query 1 125 use `test`; CREATE TABLE `t3` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=InnoDB
|
||||||
|
master-bin.000001 767 Table_map 1 164 table_id: # (test.t3)
|
||||||
|
master-bin.000001 806 Write_rows 1 208 table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 850 Xid 1 877 COMMIT /* XID */
|
||||||
|
master-bin.000001 877 Query 1 945 use `test`; BEGIN
|
||||||
|
master-bin.000001 945 Query 1 125 use `test`; CREATE TABLE `t4` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=InnoDB
|
||||||
|
master-bin.000001 1070 Table_map 1 164 table_id: # (test.t4)
|
||||||
|
master-bin.000001 1109 Write_rows 1 208 table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 1153 Xid 1 1180 COMMIT /* XID */
|
||||||
|
master-bin.000001 1180 Table_map 1 1219 table_id: # (test.t1)
|
||||||
|
master-bin.000001 1219 Write_rows 1 1263 table_id: # flags: STMT_END_F
|
||||||
|
SHOW TABLES;
|
||||||
|
Tables_in_test
|
||||||
|
t1
|
||||||
|
t2
|
||||||
|
t3
|
||||||
|
t4
|
||||||
|
SELECT TABLE_NAME,ENGINE
|
||||||
|
FROM INFORMATION_SCHEMA.TABLES
|
||||||
|
WHERE TABLE_NAME LIKE 't_'
|
||||||
|
ORDER BY TABLE_NAME;
|
||||||
|
TABLE_NAME ENGINE
|
||||||
|
t1 MyISAM
|
||||||
|
t2 InnoDB
|
||||||
|
t3 InnoDB
|
||||||
|
t4 InnoDB
|
||||||
|
SELECT * FROM t1 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t3 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t4 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
DROP TABLE IF EXISTS t1,t2,t3,t4;
|
||||||
|
SET AUTOCOMMIT=1;
|
||||||
|
STOP SLAVE;
|
||||||
|
RESET SLAVE;
|
||||||
|
RESET MASTER;
|
||||||
|
START SLAVE;
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
CREATE TABLE t2 (a INT) ENGINE=INNODB;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t2 SELECT a*a FROM t1;
|
||||||
|
CREATE TEMPORARY TABLE tt1
|
||||||
|
SELECT a+1 AS a
|
||||||
|
FROM t1
|
||||||
|
WHERE a MOD 2 = 1;
|
||||||
|
INSERT INTO t2 SELECT a+2 FROM tt1;
|
||||||
|
COMMIT;
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
4
|
||||||
|
4
|
||||||
|
6
|
||||||
|
9
|
||||||
|
SHOW BINLOG EVENTS;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 4 Format_desc 1 102 Server ver: #, Binlog ver: #
|
||||||
|
master-bin.000001 102 Query 1 188 use `test`; CREATE TABLE t1 (a INT)
|
||||||
|
master-bin.000001 188 Table_map 1 227 table_id: # (test.t1)
|
||||||
|
master-bin.000001 227 Write_rows 1 271 table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 271 Query 1 371 use `test`; CREATE TABLE t2 (a INT) ENGINE=INNODB
|
||||||
|
master-bin.000001 371 Query 1 439 use `test`; BEGIN
|
||||||
|
master-bin.000001 439 Table_map 1 39 table_id: # (test.t2)
|
||||||
|
master-bin.000001 478 Write_rows 1 83 table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 522 Table_map 1 122 table_id: # (test.t2)
|
||||||
|
master-bin.000001 561 Write_rows 1 161 table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 600 Xid 1 627 COMMIT /* XID */
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
4
|
||||||
|
4
|
||||||
|
6
|
||||||
|
9
|
||||||
|
TRUNCATE TABLE t2;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t2 SELECT a*a FROM t1;
|
||||||
|
CREATE TEMPORARY TABLE tt2
|
||||||
|
SELECT a+1 AS a
|
||||||
|
FROM t1
|
||||||
|
WHERE a MOD 2 = 1;
|
||||||
|
INSERT INTO t2 SELECT a+2 FROM tt2;
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
a
|
||||||
|
SHOW BINLOG EVENTS FROM 627;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 627 Query 1 80 use `test`; TRUNCATE TABLE t2
|
||||||
|
master-bin.000001 707 Xid 1 734 COMMIT /* XID */
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
a
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
@ -154,13 +154,15 @@ c1 c3 c4 c5
|
|||||||
--- Test 2 position test --
|
--- Test 2 position test --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
use test;
|
DELIMITER /*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT);
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -168,20 +170,22 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- Test 3 First Remote test --
|
--- Test 3 First Remote test --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
use test;
|
ROLLBACK/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
DROP TABLE IF EXISTS t1,t2,t3;
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
DROP TABLE IF EXISTS t1,t2,t3/*!*/;
|
||||||
CREATE TABLE t1(word VARCHAR(20));
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
CREATE TABLE t1(word VARCHAR(20))/*!*/;
|
||||||
CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY)/*!*/;
|
||||||
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -189,6 +193,8 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- Test 5 LOAD DATA --
|
--- Test 5 LOAD DATA --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
|
DELIMITER /*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -196,20 +202,22 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- Test 6 reading stdin --
|
--- Test 6 reading stdin --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
use test;
|
ROLLBACK/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
DROP TABLE IF EXISTS t1,t2,t3;
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
DROP TABLE IF EXISTS t1,t2,t3/*!*/;
|
||||||
CREATE TABLE t1(word VARCHAR(20));
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
CREATE TABLE t1(word VARCHAR(20))/*!*/;
|
||||||
CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY)/*!*/;
|
||||||
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
@ -217,13 +225,15 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
--- Test 7 reading stdin w/position --
|
--- Test 7 reading stdin w/position --
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
use test;
|
DELIMITER /*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT);
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
|
@ -46,60 +46,60 @@ INSERT INTO t1_bit VALUES (1,2);
|
|||||||
INSERT INTO t1_bit VALUES (2,5);
|
INSERT INTO t1_bit VALUES (2,5);
|
||||||
INSERT INTO t1_char VALUES (1,2);
|
INSERT INTO t1_char VALUES (1,2);
|
||||||
INSERT INTO t1_char VALUES (2,5);
|
INSERT INTO t1_char VALUES (2,5);
|
||||||
SELECT * FROM t1_int;
|
SELECT * FROM t1_int ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 5
|
2 5
|
||||||
SELECT * FROM t1_bit;
|
SELECT * FROM t1_bit ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 5
|
2 5
|
||||||
SELECT * FROM t1_char;
|
SELECT * FROM t1_char ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 5
|
2 5
|
||||||
**** On Slave ****
|
**** On Slave ****
|
||||||
SELECT a,b,x FROM t1_int;
|
SELECT a,b,x FROM t1_int ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
2 5 4711
|
|
||||||
1 2 42
|
1 2 42
|
||||||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
2 5 4711
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
|
||||||
a b HEX(x) HEX(y) HEX(z)
|
a b HEX(x) HEX(y) HEX(z)
|
||||||
2 5 5 1C 1
|
|
||||||
1 2 3 15 2
|
1 2 3 15 2
|
||||||
SELECT a,b,x FROM t1_char;
|
2 5 5 1C 1
|
||||||
|
SELECT a,b,x FROM t1_char ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
2 5 Foo is a bar
|
|
||||||
1 2 Just a test
|
1 2 Just a test
|
||||||
|
2 5 Foo is a bar
|
||||||
**** On Master ****
|
**** On Master ****
|
||||||
UPDATE t1_int SET b=2*b WHERE a=2;
|
UPDATE t1_int SET b=2*b WHERE a=2;
|
||||||
UPDATE t1_char SET b=2*b WHERE a=2;
|
UPDATE t1_char SET b=2*b WHERE a=2;
|
||||||
UPDATE t1_bit SET b=2*b WHERE a=2;
|
UPDATE t1_bit SET b=2*b WHERE a=2;
|
||||||
SELECT * FROM t1_int;
|
SELECT * FROM t1_int ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 10
|
2 10
|
||||||
SELECT * FROM t1_bit;
|
SELECT * FROM t1_bit ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 10
|
2 10
|
||||||
SELECT * FROM t1_char;
|
SELECT * FROM t1_char ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 10
|
2 10
|
||||||
**** On Slave ****
|
**** On Slave ****
|
||||||
SELECT a,b,x FROM t1_int;
|
SELECT a,b,x FROM t1_int ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
2 10 4711
|
|
||||||
1 2 42
|
1 2 42
|
||||||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
2 10 4711
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
|
||||||
a b HEX(x) HEX(y) HEX(z)
|
a b HEX(x) HEX(y) HEX(z)
|
||||||
2 10 5 1C 1
|
|
||||||
1 2 3 15 2
|
1 2 3 15 2
|
||||||
SELECT a,b,x FROM t1_char;
|
2 10 5 1C 1
|
||||||
|
SELECT a,b,x FROM t1_char ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
2 10 Foo is a bar
|
|
||||||
1 2 Just a test
|
1 2 Just a test
|
||||||
|
2 10 Foo is a bar
|
||||||
INSERT INTO t9 VALUES (2);
|
INSERT INTO t9 VALUES (2);
|
||||||
INSERT INTO t1_nodef VALUES (1,2);
|
INSERT INTO t1_nodef VALUES (1,2);
|
||||||
SHOW SLAVE STATUS;
|
SHOW SLAVE STATUS;
|
||||||
@ -327,22 +327,22 @@ Master_SSL_Key
|
|||||||
Seconds_Behind_Master #
|
Seconds_Behind_Master #
|
||||||
INSERT INTO t7 VALUES (1),(2),(3);
|
INSERT INTO t7 VALUES (1),(2),(3);
|
||||||
INSERT INTO t8 VALUES (1),(2),(3);
|
INSERT INTO t8 VALUES (1),(2),(3);
|
||||||
SELECT * FROM t7;
|
SELECT * FROM t7 ORDER BY a;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
SELECT * FROM t8;
|
SELECT * FROM t8 ORDER BY a;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
SELECT * FROM t7;
|
SELECT * FROM t7 ORDER BY a;
|
||||||
a e1 e2 e3 e4 e5 e6 e7 e8
|
a e1 e2 e3 e4 e5 e6 e7 e8
|
||||||
1 NULL NULL NULL NULL NULL NULL NULL NULL
|
1 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
2 NULL NULL NULL NULL NULL NULL NULL NULL
|
2 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
3 NULL NULL NULL NULL NULL NULL NULL NULL
|
3 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
SELECT * FROM t8;
|
SELECT * FROM t8 ORDER BY a;
|
||||||
a e1 e2 e3 e4 e5 e6 e7 e8
|
a e1 e2 e3 e4 e5 e6 e7 e8
|
||||||
1 0 0 0 0 0 0 0 0
|
1 0 0 0 0 0 0 0 0
|
||||||
2 0 0 0 0 0 0 0 0
|
2 0 0 0 0 0 0 0 0
|
||||||
@ -358,22 +358,22 @@ INSERT INTO t1_nodef VALUES (1,2,3);
|
|||||||
INSERT INTO t1_nodef VALUES (2,4,6);
|
INSERT INTO t1_nodef VALUES (2,4,6);
|
||||||
**** On Master ****
|
**** On Master ****
|
||||||
UPDATE t1_nodef SET b=2*b WHERE a=1;
|
UPDATE t1_nodef SET b=2*b WHERE a=1;
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 4
|
1 4
|
||||||
2 4
|
2 4
|
||||||
**** On Slave ****
|
**** On Slave ****
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
1 4 3
|
1 4 3
|
||||||
2 4 6
|
2 4 6
|
||||||
**** On Master ****
|
**** On Master ****
|
||||||
DELETE FROM t1_nodef WHERE a=2;
|
DELETE FROM t1_nodef WHERE a=2;
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 4
|
1 4
|
||||||
**** On Slave ****
|
**** On Slave ****
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
1 4 3
|
1 4 3
|
||||||
**** Cleanup ****
|
**** Cleanup ****
|
||||||
|
@ -46,60 +46,60 @@ INSERT INTO t1_bit VALUES (1,2);
|
|||||||
INSERT INTO t1_bit VALUES (2,5);
|
INSERT INTO t1_bit VALUES (2,5);
|
||||||
INSERT INTO t1_char VALUES (1,2);
|
INSERT INTO t1_char VALUES (1,2);
|
||||||
INSERT INTO t1_char VALUES (2,5);
|
INSERT INTO t1_char VALUES (2,5);
|
||||||
SELECT * FROM t1_int;
|
SELECT * FROM t1_int ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 5
|
2 5
|
||||||
SELECT * FROM t1_bit;
|
SELECT * FROM t1_bit ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 5
|
2 5
|
||||||
SELECT * FROM t1_char;
|
SELECT * FROM t1_char ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 5
|
2 5
|
||||||
**** On Slave ****
|
**** On Slave ****
|
||||||
SELECT a,b,x FROM t1_int;
|
SELECT a,b,x FROM t1_int ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
2 5 4711
|
|
||||||
1 2 42
|
1 2 42
|
||||||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
2 5 4711
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
|
||||||
a b HEX(x) HEX(y) HEX(z)
|
a b HEX(x) HEX(y) HEX(z)
|
||||||
2 5 5 1C 1
|
|
||||||
1 2 3 15 2
|
1 2 3 15 2
|
||||||
SELECT a,b,x FROM t1_char;
|
2 5 5 1C 1
|
||||||
|
SELECT a,b,x FROM t1_char ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
2 5 Foo is a bar
|
|
||||||
1 2 Just a test
|
1 2 Just a test
|
||||||
|
2 5 Foo is a bar
|
||||||
**** On Master ****
|
**** On Master ****
|
||||||
UPDATE t1_int SET b=2*b WHERE a=2;
|
UPDATE t1_int SET b=2*b WHERE a=2;
|
||||||
UPDATE t1_char SET b=2*b WHERE a=2;
|
UPDATE t1_char SET b=2*b WHERE a=2;
|
||||||
UPDATE t1_bit SET b=2*b WHERE a=2;
|
UPDATE t1_bit SET b=2*b WHERE a=2;
|
||||||
SELECT * FROM t1_int;
|
SELECT * FROM t1_int ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 10
|
2 10
|
||||||
SELECT * FROM t1_bit;
|
SELECT * FROM t1_bit ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 10
|
2 10
|
||||||
SELECT * FROM t1_char;
|
SELECT * FROM t1_char ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 10
|
2 10
|
||||||
**** On Slave ****
|
**** On Slave ****
|
||||||
SELECT a,b,x FROM t1_int;
|
SELECT a,b,x FROM t1_int ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
2 10 4711
|
|
||||||
1 2 42
|
1 2 42
|
||||||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
2 10 4711
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
|
||||||
a b HEX(x) HEX(y) HEX(z)
|
a b HEX(x) HEX(y) HEX(z)
|
||||||
2 10 5 1C 1
|
|
||||||
1 2 3 15 2
|
1 2 3 15 2
|
||||||
SELECT a,b,x FROM t1_char;
|
2 10 5 1C 1
|
||||||
|
SELECT a,b,x FROM t1_char ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
2 10 Foo is a bar
|
|
||||||
1 2 Just a test
|
1 2 Just a test
|
||||||
|
2 10 Foo is a bar
|
||||||
INSERT INTO t9 VALUES (2);
|
INSERT INTO t9 VALUES (2);
|
||||||
INSERT INTO t1_nodef VALUES (1,2);
|
INSERT INTO t1_nodef VALUES (1,2);
|
||||||
SHOW SLAVE STATUS;
|
SHOW SLAVE STATUS;
|
||||||
@ -327,22 +327,22 @@ Master_SSL_Key
|
|||||||
Seconds_Behind_Master #
|
Seconds_Behind_Master #
|
||||||
INSERT INTO t7 VALUES (1),(2),(3);
|
INSERT INTO t7 VALUES (1),(2),(3);
|
||||||
INSERT INTO t8 VALUES (1),(2),(3);
|
INSERT INTO t8 VALUES (1),(2),(3);
|
||||||
SELECT * FROM t7;
|
SELECT * FROM t7 ORDER BY a;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
SELECT * FROM t8;
|
SELECT * FROM t8 ORDER BY a;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
SELECT * FROM t7;
|
SELECT * FROM t7 ORDER BY a;
|
||||||
a e1 e2 e3 e4 e5 e6 e7 e8
|
a e1 e2 e3 e4 e5 e6 e7 e8
|
||||||
1 NULL NULL NULL NULL NULL NULL NULL NULL
|
1 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
2 NULL NULL NULL NULL NULL NULL NULL NULL
|
2 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
3 NULL NULL NULL NULL NULL NULL NULL NULL
|
3 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
SELECT * FROM t8;
|
SELECT * FROM t8 ORDER BY a;
|
||||||
a e1 e2 e3 e4 e5 e6 e7 e8
|
a e1 e2 e3 e4 e5 e6 e7 e8
|
||||||
1 0 0 0 0 0 0 0 0
|
1 0 0 0 0 0 0 0 0
|
||||||
2 0 0 0 0 0 0 0 0
|
2 0 0 0 0 0 0 0 0
|
||||||
@ -358,22 +358,22 @@ INSERT INTO t1_nodef VALUES (1,2,3);
|
|||||||
INSERT INTO t1_nodef VALUES (2,4,6);
|
INSERT INTO t1_nodef VALUES (2,4,6);
|
||||||
**** On Master ****
|
**** On Master ****
|
||||||
UPDATE t1_nodef SET b=2*b WHERE a=1;
|
UPDATE t1_nodef SET b=2*b WHERE a=1;
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 4
|
1 4
|
||||||
2 4
|
2 4
|
||||||
**** On Slave ****
|
**** On Slave ****
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
1 4 3
|
1 4 3
|
||||||
2 4 6
|
2 4 6
|
||||||
**** On Master ****
|
**** On Master ****
|
||||||
DELETE FROM t1_nodef WHERE a=2;
|
DELETE FROM t1_nodef WHERE a=2;
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 4
|
1 4
|
||||||
**** On Slave ****
|
**** On Slave ****
|
||||||
SELECT * FROM t1_nodef;
|
SELECT * FROM t1_nodef ORDER BY a;
|
||||||
a b x
|
a b x
|
||||||
1 4 3
|
1 4 3
|
||||||
**** Cleanup ****
|
**** Cleanup ****
|
||||||
|
@ -269,107 +269,6 @@ insert into t1 values (1);
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
show binlog events in 'master-bin.000001' from 102;
|
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
|
||||||
master-bin.000001 # Query 1 # drop database if exists mysqltest1
|
|
||||||
master-bin.000001 # Query 1 # create database mysqltest1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a varchar(100))
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo()
|
|
||||||
begin
|
|
||||||
declare b int;
|
|
||||||
set b = 8;
|
|
||||||
insert into t1 values (b);
|
|
||||||
insert into t1 values (unix_timestamp());
|
|
||||||
end
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values ( NAME_CONST('b',8))
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (unix_timestamp())
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo2()
|
|
||||||
select * from mysqltest1.t1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter procedure foo2 contains sql
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t2 like t1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo3()
|
|
||||||
deterministic
|
|
||||||
insert into t1 values (15)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` procedure foo4()
|
|
||||||
deterministic
|
|
||||||
begin
|
|
||||||
insert into t2 values(3);
|
|
||||||
insert into t1 values (5);
|
|
||||||
end
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(3)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (15)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(3)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter procedure foo4 sql security invoker
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(3)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (5)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo4
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo4()
|
|
||||||
deterministic
|
|
||||||
begin
|
|
||||||
insert into t2 values(20),(20);
|
|
||||||
end
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(20),(20)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo4
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo2
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo3
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1(x int)
|
|
||||||
returns int
|
|
||||||
deterministic
|
|
||||||
begin
|
|
||||||
insert into t1 values (x);
|
|
||||||
return x+2;
|
|
||||||
end
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete t1,t2 from t1,t2
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(20)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(fn1(21))
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1()
|
|
||||||
returns int
|
|
||||||
no sql
|
|
||||||
begin
|
|
||||||
return unix_timestamp();
|
|
||||||
end
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values(fn1())
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` function fn2()
|
|
||||||
returns int
|
|
||||||
no sql
|
|
||||||
begin
|
|
||||||
return unix_timestamp();
|
|
||||||
end
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn3()
|
|
||||||
returns int
|
|
||||||
not deterministic
|
|
||||||
reads sql data
|
|
||||||
begin
|
|
||||||
return 0;
|
|
||||||
end
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1(x int)
|
|
||||||
returns int
|
|
||||||
begin
|
|
||||||
insert into t2 values(x),(x);
|
|
||||||
return 10;
|
|
||||||
end
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(100)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(20)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1)
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop trigger trg
|
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1)
|
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
@ -465,10 +364,6 @@ RETURN 0
|
|||||||
DROP PROCEDURE p1;
|
DROP PROCEDURE p1;
|
||||||
DROP FUNCTION f1;
|
DROP FUNCTION f1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set global log_bin_trust_function_creators=0;
|
|
||||||
set global log_bin_trust_function_creators=0;
|
|
||||||
End of 5.0 tests
|
|
||||||
reset master;
|
|
||||||
drop database if exists mysqltest;
|
drop database if exists mysqltest;
|
||||||
drop database if exists mysqltest2;
|
drop database if exists mysqltest2;
|
||||||
create database mysqltest;
|
create database mysqltest;
|
||||||
@ -477,17 +372,165 @@ use mysqltest2;
|
|||||||
create table t ( t integer );
|
create table t ( t integer );
|
||||||
create procedure mysqltest.test() begin end;
|
create procedure mysqltest.test() begin end;
|
||||||
insert into t values ( 1 );
|
insert into t values ( 1 );
|
||||||
show binlog events in 'master-bin.000001' from 102;
|
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
|
||||||
master-bin.000001 102 Query 1 203 drop database if exists mysqltest
|
|
||||||
master-bin.000001 203 Query 1 306 drop database if exists mysqltest2
|
|
||||||
master-bin.000001 306 Query 1 399 create database mysqltest
|
|
||||||
master-bin.000001 399 Query 1 494 create database mysqltest2
|
|
||||||
master-bin.000001 494 Query 1 591 use `mysqltest2`; create table t ( t integer )
|
|
||||||
master-bin.000001 591 Query 1 730 use `mysqltest2`; CREATE DEFINER=`root`@`localhost` procedure mysqltest.test() begin end
|
|
||||||
master-bin.000001 730 Query 1 825 use `mysqltest2`; insert into t values ( 1 )
|
|
||||||
create procedure `\\`.test() begin end;
|
create procedure `\\`.test() begin end;
|
||||||
ERROR 42000: Unknown database '\\'
|
ERROR 42000: Unknown database '\\'
|
||||||
|
create function f1 () returns int
|
||||||
|
begin
|
||||||
|
insert into t values (1);
|
||||||
|
return 0;
|
||||||
|
end|
|
||||||
|
use mysqltest;
|
||||||
|
set @a:= mysqltest2.f1();
|
||||||
|
show binlog events in 'master-bin.000001' from 102;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query 1 # drop database if exists mysqltest1
|
||||||
|
master-bin.000001 # Query 1 # create database mysqltest1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a varchar(100))
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo()
|
||||||
|
begin
|
||||||
|
declare b int;
|
||||||
|
set b = 8;
|
||||||
|
insert into t1 values (b);
|
||||||
|
insert into t1 values (unix_timestamp());
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values ( NAME_CONST('b',8))
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (unix_timestamp())
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo2()
|
||||||
|
select * from mysqltest1.t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; alter procedure foo2 contains sql
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t2 like t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo3()
|
||||||
|
deterministic
|
||||||
|
insert into t1 values (15)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` procedure foo4()
|
||||||
|
deterministic
|
||||||
|
begin
|
||||||
|
insert into t2 values(3);
|
||||||
|
insert into t1 values (5);
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(3)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (15)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(3)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; alter procedure foo4 sql security invoker
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(3)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (5)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo4
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo4()
|
||||||
|
deterministic
|
||||||
|
begin
|
||||||
|
insert into t2 values(20),(20);
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(20),(20)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo4
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo2
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo3
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1(x int)
|
||||||
|
returns int
|
||||||
|
deterministic
|
||||||
|
begin
|
||||||
|
insert into t1 values (x);
|
||||||
|
return x+2;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; delete t1,t2 from t1,t2
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(fn1(21))
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1()
|
||||||
|
returns int
|
||||||
|
no sql
|
||||||
|
begin
|
||||||
|
return unix_timestamp();
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values(fn1())
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` function fn2()
|
||||||
|
returns int
|
||||||
|
no sql
|
||||||
|
begin
|
||||||
|
return unix_timestamp();
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn3()
|
||||||
|
returns int
|
||||||
|
not deterministic
|
||||||
|
reads sql data
|
||||||
|
begin
|
||||||
|
return 0;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1(x int)
|
||||||
|
returns int
|
||||||
|
begin
|
||||||
|
insert into t2 values(x),(x);
|
||||||
|
return 10;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(100)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop trigger trg
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1)
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo()
|
||||||
|
not deterministic
|
||||||
|
reads sql data
|
||||||
|
select * from t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||||
|
master-bin.000001 # Query 1 # drop database mysqltest1
|
||||||
|
master-bin.000001 # Query 1 # drop user "zedjzlcsjhd"@127.0.0.1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` function f1() returns int reads sql data
|
||||||
|
begin
|
||||||
|
declare var integer;
|
||||||
|
declare c cursor for select a from v1;
|
||||||
|
open c;
|
||||||
|
fetch c into var;
|
||||||
|
close c;
|
||||||
|
return var;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 as a
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table t1 (a int)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; insert into t1 (a) values (f1())
|
||||||
|
master-bin.000001 # Query 1 # use `test`; drop view v1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; drop function f1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; DROP TABLE IF EXISTS t1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; CREATE TABLE t1(col VARCHAR(10))
|
||||||
|
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE p1(arg VARCHAR(10))
|
||||||
|
INSERT INTO t1 VALUES(arg)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test'))
|
||||||
|
master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE p1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE p1() SET @a = 1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION f1() RETURNS INT RETURN 0
|
||||||
|
master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE p1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; DROP FUNCTION f1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||||
|
master-bin.000001 # Query 1 # drop database if exists mysqltest
|
||||||
|
master-bin.000001 # Query 1 # drop database if exists mysqltest2
|
||||||
|
master-bin.000001 # Query 1 # create database mysqltest
|
||||||
|
master-bin.000001 # Query 1 # create database mysqltest2
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest2`; create table t ( t integer )
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` procedure mysqltest.test() begin end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest2`; insert into t values ( 1 )
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` function f1 () returns int
|
||||||
|
begin
|
||||||
|
insert into t values (1);
|
||||||
|
return 0;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest`; SELECT `mysqltest2`.`f1`()
|
||||||
|
set global log_bin_trust_function_creators=0;
|
||||||
|
set global log_bin_trust_function_creators=0;
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
drop database mysqltest2;
|
drop database mysqltest2;
|
||||||
|
End of 5.0 tests
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -174,86 +174,89 @@ CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
|
|||||||
select hex(c1), hex(c2) from t1;
|
select hex(c1), hex(c2) from t1;
|
||||||
hex(c1) hex(c2)
|
hex(c1) hex(c2)
|
||||||
CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
|
CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
|
||||||
|
flush logs;
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
ROLLBACK/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
drop database if exists mysqltest2;
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
drop database if exists mysqltest2/*!*/;
|
||||||
drop database if exists mysqltest3;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
drop database if exists mysqltest3/*!*/;
|
||||||
create database mysqltest2 character set latin2;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
create database mysqltest2 character set latin2/*!*/;
|
||||||
/*!\C latin1 */;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30;
|
/*!\C latin1 *//*!*/;
|
||||||
create database mysqltest3;
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
create database mysqltest3/*!*/;
|
||||||
/*!\C latin1 */;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=64;
|
/*!\C latin1 *//*!*/;
|
||||||
drop database mysqltest3;
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=64/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
drop database mysqltest3/*!*/;
|
||||||
create database mysqltest3;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
use mysqltest2;
|
create database mysqltest3/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use mysqltest2/*!*/;
|
||||||
create table t1 (a int auto_increment primary key, b varchar(100));
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET INSERT_ID=1;
|
create table t1 (a int auto_increment primary key, b varchar(100))/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=1/*!*/;
|
||||||
/*!\C cp850 */;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.character_set_client=4,@@session.collation_connection=27,@@session.collation_server=64;
|
/*!\C cp850 *//*!*/;
|
||||||
insert into t1 (b) values(@@character_set_server);
|
SET @@session.character_set_client=4,@@session.collation_connection=27,@@session.collation_server=64/*!*/;
|
||||||
SET INSERT_ID=2;
|
insert into t1 (b) values(@@character_set_server)/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=2/*!*/;
|
||||||
insert into t1 (b) values(@@collation_server);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET INSERT_ID=3;
|
insert into t1 (b) values(@@collation_server)/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=3/*!*/;
|
||||||
insert into t1 (b) values(@@character_set_client);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET INSERT_ID=4;
|
insert into t1 (b) values(@@character_set_client)/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=4/*!*/;
|
||||||
insert into t1 (b) values(@@character_set_connection);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET INSERT_ID=5;
|
insert into t1 (b) values(@@character_set_connection)/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=5/*!*/;
|
||||||
insert into t1 (b) values(@@collation_connection);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
insert into t1 (b) values(@@collation_connection)/*!*/;
|
||||||
/*!\C latin1 */;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=5,@@session.collation_server=64;
|
/*!\C latin1 *//*!*/;
|
||||||
truncate table t1;
|
SET @@session.character_set_client=8,@@session.collation_connection=5,@@session.collation_server=64/*!*/;
|
||||||
SET INSERT_ID=1;
|
truncate table t1/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=1/*!*/;
|
||||||
insert into t1 (b) values(@@collation_connection);
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET INSERT_ID=2;
|
insert into t1 (b) values(@@collation_connection)/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=2/*!*/;
|
||||||
insert into t1 (b) values(LEAST("Müller","Muffler"));
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET INSERT_ID=3;
|
insert into t1 (b) values(LEAST("Müller","Muffler"))/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=3/*!*/;
|
||||||
/*!\C latin1 */;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=31,@@session.collation_server=64;
|
/*!\C latin1 *//*!*/;
|
||||||
insert into t1 (b) values(@@collation_connection);
|
SET @@session.character_set_client=8,@@session.collation_connection=31,@@session.collation_server=64/*!*/;
|
||||||
SET INSERT_ID=4;
|
insert into t1 (b) values(@@collation_connection)/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET INSERT_ID=4/*!*/;
|
||||||
insert into t1 (b) values(LEAST("Müller","Muffler"));
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
insert into t1 (b) values(LEAST("Müller","Muffler"))/*!*/;
|
||||||
truncate table t1;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET INSERT_ID=1;
|
truncate table t1/*!*/;
|
||||||
SET @`a`:=_cp850 0x4DFC6C6C6572 COLLATE `cp850_general_ci`;
|
SET INSERT_ID=1/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
SET @`a`:=_cp850 0x4DFC6C6C6572 COLLATE `cp850_general_ci`/*!*/;
|
||||||
insert into t1 (b) values(collation(@a));
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
insert into t1 (b) values(collation(@a))/*!*/;
|
||||||
drop database mysqltest2;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
drop database mysqltest2/*!*/;
|
||||||
drop database mysqltest3;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
use test;
|
drop database mysqltest3/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
use test/*!*/;
|
||||||
/*!\C latin1 */;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30;
|
/*!\C latin1 *//*!*/;
|
||||||
CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255));
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30/*!*/;
|
||||||
SET TIMESTAMP=1000000000;
|
CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255))/*!*/;
|
||||||
/*!\C koi8r */;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.character_set_client=7,@@session.collation_connection=51,@@session.collation_server=30;
|
/*!\C koi8r *//*!*/;
|
||||||
INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ');
|
SET @@session.character_set_client=7,@@session.collation_connection=51,@@session.collation_server=30/*!*/;
|
||||||
|
INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ')/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
|
@ -559,7 +559,7 @@ begin
|
|||||||
insert into t2 select x;
|
insert into t2 select x;
|
||||||
return 100;
|
return 100;
|
||||||
end
|
end
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `foo6`(_latin1'foo6_1_')
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`foo6`(_latin1'foo6_1_')
|
||||||
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
@ -620,7 +620,7 @@ master-bin.000001 # Query 1 # use `mysqltest1`; create table t12 select * from t
|
|||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int, b varchar(100), key(a))
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int, b varchar(100), key(a))
|
||||||
master-bin.000001 # Intvar 1 # INSERT_ID=4
|
master-bin.000001 # Intvar 1 # INSERT_ID=4
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `f`(_latin1'try_45_')
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`f`(_latin1'try_45_')
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t13 select * from t1
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t13 select * from t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int primary key auto_increment, b varchar(100))
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int primary key auto_increment, b varchar(100))
|
||||||
@ -660,9 +660,9 @@ set y = (select count(*) from t2);
|
|||||||
return y;
|
return y;
|
||||||
end
|
end
|
||||||
master-bin.000001 # Intvar 1 # INSERT_ID=4
|
master-bin.000001 # Intvar 1 # INSERT_ID=4
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `f1`(_latin1'try_53_')
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`f1`(_latin1'try_53_')
|
||||||
master-bin.000001 # Intvar 1 # INSERT_ID=5
|
master-bin.000001 # Intvar 1 # INSERT_ID=5
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `f2`(_latin1'try_54_')
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`f2`(_latin1'try_54_')
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function f2
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop function f2
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger t1_bi before insert on t1 for each row
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger t1_bi before insert on t1 for each row
|
||||||
begin
|
begin
|
||||||
@ -869,7 +869,7 @@ begin
|
|||||||
insert into t2 select x;
|
insert into t2 select x;
|
||||||
return 100;
|
return 100;
|
||||||
end
|
end
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `foo6`(_latin1'foo6_1_')
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`foo6`(_latin1'foo6_1_')
|
||||||
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
@ -930,7 +930,7 @@ master-bin.000001 # Query 1 # use `mysqltest1`; create table t12 select * from t
|
|||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int, b varchar(100), key(a))
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int, b varchar(100), key(a))
|
||||||
master-bin.000001 # Intvar 1 # INSERT_ID=4
|
master-bin.000001 # Intvar 1 # INSERT_ID=4
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `f`(_latin1'try_45_')
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`f`(_latin1'try_45_')
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t13 select * from t1
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t13 select * from t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int primary key auto_increment, b varchar(100))
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int primary key auto_increment, b varchar(100))
|
||||||
@ -970,9 +970,9 @@ set y = (select count(*) from t2);
|
|||||||
return y;
|
return y;
|
||||||
end
|
end
|
||||||
master-bin.000001 # Intvar 1 # INSERT_ID=4
|
master-bin.000001 # Intvar 1 # INSERT_ID=4
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `f1`(_latin1'try_53_')
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`f1`(_latin1'try_53_')
|
||||||
master-bin.000001 # Intvar 1 # INSERT_ID=5
|
master-bin.000001 # Intvar 1 # INSERT_ID=5
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `f2`(_latin1'try_54_')
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`f2`(_latin1'try_54_')
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function f2
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop function f2
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger t1_bi before insert on t1 for each row
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger t1_bi before insert on t1 for each row
|
||||||
begin
|
begin
|
||||||
|
@ -13,21 +13,24 @@ master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES(@`a b`)
|
|||||||
master-bin.000001 # User var 1 # @`var1`=_latin1 0x273B616161 COLLATE latin1_swedish_ci
|
master-bin.000001 # User var 1 # @`var1`=_latin1 0x273B616161 COLLATE latin1_swedish_ci
|
||||||
master-bin.000001 # User var 1 # @`var2`=_binary 0x61 COLLATE binary
|
master-bin.000001 # User var 1 # @`var2`=_binary 0x61 COLLATE binary
|
||||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values (@var1),(@var2)
|
master-bin.000001 # Query 1 # use `test`; insert into t1 values (@var1),(@var2)
|
||||||
|
flush logs;
|
||||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
ROLLBACK;
|
DELIMITER /*!*/;
|
||||||
SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`;
|
ROLLBACK/*!*/;
|
||||||
use test;
|
SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`/*!*/;
|
||||||
SET TIMESTAMP=10000;
|
use test/*!*/;
|
||||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
SET TIMESTAMP=10000/*!*/;
|
||||||
SET @@session.sql_mode=0;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
/*!\C latin1 */;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
|
/*!\C latin1 *//*!*/;
|
||||||
INSERT INTO t1 VALUES(@`a b`);
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`;
|
INSERT INTO t1 VALUES(@`a b`)/*!*/;
|
||||||
SET @`var2`:=_binary 0x61 COLLATE `binary`;
|
SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`/*!*/;
|
||||||
SET TIMESTAMP=10000;
|
SET @`var2`:=_binary 0x61 COLLATE `binary`/*!*/;
|
||||||
insert into t1 values (@var1),(@var2);
|
SET TIMESTAMP=10000/*!*/;
|
||||||
|
insert into t1 values (@var1),(@var2)/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
|
@ -697,6 +697,63 @@ set names latin1;
|
|||||||
select @@have_innodb;
|
select @@have_innodb;
|
||||||
@@have_innodb
|
@@have_innodb
|
||||||
#
|
#
|
||||||
|
*** Various tests with LC_TIME_NAMES
|
||||||
|
*** LC_TIME_NAMES: testing case insensitivity
|
||||||
|
set @@lc_time_names='ru_ru';
|
||||||
|
select @@lc_time_names;
|
||||||
|
@@lc_time_names
|
||||||
|
ru_RU
|
||||||
|
*** LC_TIME_NAMES: testing with a user variable
|
||||||
|
set @lc='JA_JP';
|
||||||
|
set @@lc_time_names=@lc;
|
||||||
|
select @@lc_time_names;
|
||||||
|
@@lc_time_names
|
||||||
|
ja_JP
|
||||||
|
*** LC_TIME_NAMES: testing with string expressions
|
||||||
|
set lc_time_names=concat('de','_','DE');
|
||||||
|
select @@lc_time_names;
|
||||||
|
@@lc_time_names
|
||||||
|
de_DE
|
||||||
|
set lc_time_names=concat('de','+','DE');
|
||||||
|
ERROR HY000: Unknown locale: 'de+DE'
|
||||||
|
select @@lc_time_names;
|
||||||
|
@@lc_time_names
|
||||||
|
de_DE
|
||||||
|
LC_TIME_NAMES: testing with numeric expressions
|
||||||
|
set @@lc_time_names=1+2;
|
||||||
|
select @@lc_time_names;
|
||||||
|
@@lc_time_names
|
||||||
|
sv_SE
|
||||||
|
set @@lc_time_names=1/0;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'lc_time_names'
|
||||||
|
select @@lc_time_names;
|
||||||
|
@@lc_time_names
|
||||||
|
sv_SE
|
||||||
|
set lc_time_names=en_US;
|
||||||
|
LC_TIME_NAMES: testing NULL and a negative number:
|
||||||
|
set lc_time_names=NULL;
|
||||||
|
ERROR 42000: Variable 'lc_time_names' can't be set to the value of 'NULL'
|
||||||
|
set lc_time_names=-1;
|
||||||
|
ERROR HY000: Unknown locale: '-1'
|
||||||
|
select @@lc_time_names;
|
||||||
|
@@lc_time_names
|
||||||
|
en_US
|
||||||
|
LC_TIME_NAMES: testing locale with the last ID:
|
||||||
|
set lc_time_names=108;
|
||||||
|
select @@lc_time_names;
|
||||||
|
@@lc_time_names
|
||||||
|
zh_HK
|
||||||
|
LC_TIME_NAMES: testing a number beyond the valid ID range:
|
||||||
|
set lc_time_names=109;
|
||||||
|
ERROR HY000: Unknown locale: '109'
|
||||||
|
select @@lc_time_names;
|
||||||
|
@@lc_time_names
|
||||||
|
zh_HK
|
||||||
|
LC_TIME_NAMES: testing that 0 is en_US:
|
||||||
|
set lc_time_names=0;
|
||||||
|
select @@lc_time_names;
|
||||||
|
@@lc_time_names
|
||||||
|
en_US
|
||||||
set @test = @@query_prealloc_size;
|
set @test = @@query_prealloc_size;
|
||||||
set @@query_prealloc_size = @test;
|
set @@query_prealloc_size = @test;
|
||||||
select @@query_prealloc_size = @test;
|
select @@query_prealloc_size = @test;
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
# we check that the error code of the "ROLLBACK" event is 0 and not
|
# we check that the error code of the "ROLLBACK" event is 0 and not
|
||||||
# ER_SERVER_SHUTDOWN (i.e. disconnection just rolls back transaction
|
# ER_SERVER_SHUTDOWN (i.e. disconnection just rolls back transaction
|
||||||
# and does not make slave to stop)
|
# and does not make slave to stop)
|
||||||
|
flush logs;
|
||||||
--exec $MYSQL_BINLOG --start-position=516 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
|
--exec $MYSQL_BINLOG --start-position=516 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
|
||||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
eval select
|
eval select
|
||||||
@ -26,6 +27,6 @@ eval select
|
|||||||
is not null;
|
is not null;
|
||||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||||
eval select
|
eval select
|
||||||
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%",
|
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
|
||||||
@a not like "%#%error_code=%error_code=%";
|
@a not like "%#%error_code=%error_code=%";
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
# we check that the error code of the "ROLLBACK" event is 0 and not
|
# we check that the error code of the "ROLLBACK" event is 0 and not
|
||||||
# ER_SERVER_SHUTDOWN (i.e. disconnection just rolls back transaction
|
# ER_SERVER_SHUTDOWN (i.e. disconnection just rolls back transaction
|
||||||
# and does not make slave to stop)
|
# and does not make slave to stop)
|
||||||
|
flush logs;
|
||||||
--exec $MYSQL_BINLOG --start-position=551 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
|
--exec $MYSQL_BINLOG --start-position=551 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
|
||||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
eval select
|
eval select
|
||||||
@ -18,6 +19,6 @@ eval select
|
|||||||
is not null;
|
is not null;
|
||||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||||
eval select
|
eval select
|
||||||
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%",
|
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
|
||||||
@a not like "%#%error_code=%error_code=%";
|
@a not like "%#%error_code=%error_code=%";
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
@ -93,6 +93,26 @@ show create table t1;
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#22646 LC_TIME_NAMES: Assignment to non-UTF8 target fails
|
||||||
|
#
|
||||||
|
set names utf8;
|
||||||
|
set LC_TIME_NAMES='fr_FR';
|
||||||
|
create table t1 (s1 char(20) character set latin1);
|
||||||
|
insert into t1 values (date_format('2004-02-02','%M'));
|
||||||
|
select hex(s1) from t1;
|
||||||
|
drop table t1;
|
||||||
|
create table t1 (s1 char(20) character set koi8r);
|
||||||
|
set LC_TIME_NAMES='ru_RU';
|
||||||
|
insert into t1 values (date_format('2004-02-02','%M'));
|
||||||
|
insert into t1 values (date_format('2004-02-02','%b'));
|
||||||
|
insert into t1 values (date_format('2004-02-02','%W'));
|
||||||
|
insert into t1 values (date_format('2004-02-02','%a'));
|
||||||
|
select hex(s1), s1 from t1;
|
||||||
|
drop table t1;
|
||||||
|
set LC_TIME_NAMES='en_US';
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #2366 Wrong utf8 behaviour when data is truncated
|
# Bug #2366 Wrong utf8 behaviour when data is truncated
|
||||||
#
|
#
|
||||||
|
@ -72,17 +72,20 @@ SET SESSION long_query_time=1;
|
|||||||
SELECT * FROM slow_event_test;
|
SELECT * FROM slow_event_test;
|
||||||
SET SESSION long_query_time=1;
|
SET SESSION long_query_time=1;
|
||||||
SET GLOBAL event_scheduler=on;
|
SET GLOBAL event_scheduler=on;
|
||||||
|
SET GLOBAL long_query_time=20;
|
||||||
CREATE EVENT long_event ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO slow_event_test SELECT @@long_query_time, SLEEP(1.5);
|
CREATE EVENT long_event ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO slow_event_test SELECT @@long_query_time, SLEEP(1.5);
|
||||||
--echo "Sleep some more time than the actual event run will take"
|
--echo "Sleep some more time than the actual event run will take"
|
||||||
--sleep 2
|
--sleep 2
|
||||||
SHOW VARIABLES LIKE 'event_scheduler';
|
SHOW VARIABLES LIKE 'event_scheduler';
|
||||||
--echo "Check our table. Should see 1 row"
|
--echo "Check our table. Should see 1 row"
|
||||||
SELECT * FROM slow_event_test;
|
SELECT * FROM slow_event_test;
|
||||||
--echo "Check slow log. Should not see anything because 1.5 is under the threshold of 300 for GLOBAL, though over SESSION which is 2"
|
--echo "Check slow log. Should not see anything because 1.5 is under the threshold of 20 for GLOBAL, though over SESSION which is 1"
|
||||||
|
--echo "This should show that the GLOBAL value is regarded and not the SESSION one of the current connection"
|
||||||
SELECT user_host, query_time, db, sql_text FROM mysql.slow_log;
|
SELECT user_host, query_time, db, sql_text FROM mysql.slow_log;
|
||||||
|
--echo "Another test to show that GLOBAL is regarded and not SESSION."
|
||||||
--echo "This should go to the slow log"
|
--echo "This should go to the slow log"
|
||||||
DROP EVENT long_event;
|
|
||||||
SET SESSION long_query_time=10;
|
SET SESSION long_query_time=10;
|
||||||
|
DROP EVENT long_event;
|
||||||
SET GLOBAL long_query_time=1;
|
SET GLOBAL long_query_time=1;
|
||||||
CREATE EVENT long_event2 ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO slow_event_test SELECT @@long_query_time, SLEEP(2);
|
CREATE EVENT long_event2 ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO slow_event_test SELECT @@long_query_time, SLEEP(2);
|
||||||
--echo "Sleep some more time than the actual event run will take"
|
--echo "Sleep some more time than the actual event run will take"
|
||||||
|
@ -133,10 +133,63 @@ flush logs;
|
|||||||
# resulted binlog, parly consisting of multi-byte utf8 chars,
|
# resulted binlog, parly consisting of multi-byte utf8 chars,
|
||||||
# must be digestable for both client and server. In 4.1 the client
|
# must be digestable for both client and server. In 4.1 the client
|
||||||
# should use default-character-set same as the server.
|
# should use default-character-set same as the server.
|
||||||
|
flush logs;
|
||||||
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000006 | $MYSQL
|
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000006 | $MYSQL
|
||||||
select * from t5 /* must be (1),(1) */;
|
select * from t5 /* must be (1),(1) */;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#22645 LC_TIME_NAMES: Statement not replicated
|
||||||
|
# Check that a dump created by mysqlbinlog reproduces
|
||||||
|
# lc_time_names dependent values correctly
|
||||||
|
#
|
||||||
|
flush logs;
|
||||||
|
drop table if exists t5;
|
||||||
|
create table t5 (c1 int, c2 varchar(128) character set latin1 not null);
|
||||||
|
insert into t5 values (1, date_format('2001-01-01','%W'));
|
||||||
|
set lc_time_names=de_DE;
|
||||||
|
insert into t5 values (2, date_format('2001-01-01','%W'));
|
||||||
|
set lc_time_names=en_US;
|
||||||
|
insert into t5 values (3, date_format('2001-01-01','%W'));
|
||||||
|
select * from t5 order by c1;
|
||||||
|
flush logs;
|
||||||
|
drop table t5;
|
||||||
|
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000008 | $MYSQL
|
||||||
|
select * from t5 order by c1;
|
||||||
|
#
|
||||||
|
# Bug#20396 Bin Log does not get DELIMETER cmd - Recover StoredProc fails
|
||||||
|
#
|
||||||
|
--disable_warnings
|
||||||
|
drop procedure if exists p1;
|
||||||
|
--enable_warnings
|
||||||
|
flush logs;
|
||||||
|
delimiter //;
|
||||||
|
create procedure p1()
|
||||||
|
begin
|
||||||
|
select 1;
|
||||||
|
end;
|
||||||
|
//
|
||||||
|
delimiter ;//
|
||||||
|
flush logs;
|
||||||
|
call p1();
|
||||||
|
drop procedure p1;
|
||||||
|
--error 1305
|
||||||
|
call p1();
|
||||||
|
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000010
|
||||||
|
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000010 | $MYSQL
|
||||||
|
call p1();
|
||||||
|
drop procedure p1;
|
||||||
|
|
||||||
# clean up
|
# clean up
|
||||||
drop table t1, t2, t03, t04, t3, t4, t5;
|
drop table t1, t2, t03, t04, t3, t4, t5;
|
||||||
|
|
||||||
# End of 5.0 tests
|
# End of 5.0 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test --disable-force-if-open and --force-if-open
|
||||||
|
#
|
||||||
|
flush logs;
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000012 >/dev/null 2>/dev/null
|
||||||
|
--exec $MYSQL_BINLOG --force-if-open $MYSQLTEST_VARDIR/log/master-bin.000012 >/dev/null 2>/dev/null
|
||||||
|
|
||||||
|
# End of 5.1 tests
|
||||||
|
@ -72,6 +72,7 @@ select "--- Local with 2 binlogs on command line --" as "";
|
|||||||
|
|
||||||
# This is to verify that some options apply only to first, or last binlog
|
# This is to verify that some options apply only to first, or last binlog
|
||||||
|
|
||||||
|
flush logs;
|
||||||
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001 $MYSQLTEST_VARDIR/log/master-bin.000002
|
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001 $MYSQLTEST_VARDIR/log/master-bin.000002
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
|
@ -15,6 +15,7 @@ load data infile '../std_data_ln/words.dat' into table t2;
|
|||||||
#
|
#
|
||||||
# Save binlog
|
# Save binlog
|
||||||
#
|
#
|
||||||
|
flush logs;
|
||||||
--exec $MYSQL_BINLOG --hexdump $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_base64.sql
|
--exec $MYSQL_BINLOG --hexdump $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_base64.sql
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -713,6 +713,25 @@ create table t1 (a int);
|
|||||||
--exec $MYSQL_DUMP --skip-comments --force test t1 --where='xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 2>&1
|
--exec $MYSQL_DUMP --skip-comments --force test t1 --where='xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 2>&1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#13926: --order-by-primary fails if PKEY contains quote character
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS `t1`;
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`a b` INT,
|
||||||
|
`c"d` INT,
|
||||||
|
`e``f` INT,
|
||||||
|
PRIMARY KEY (`a b`, `c"d`, `e``f`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
insert into t1 values (0815, 4711, 2006);
|
||||||
|
|
||||||
|
--exec $MYSQL_DUMP --skip-comments --compatible=ansi --order-by-primary test t1
|
||||||
|
--exec $MYSQL_DUMP --skip-comments --order-by-primary test t1
|
||||||
|
DROP TABLE `t1`;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
--echo End of 4.1 tests
|
--echo End of 4.1 tests
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
@ -1394,28 +1413,6 @@ revoke all privileges on mysqldump_myDB.* from myDB_User@localhost;
|
|||||||
drop user myDB_User@localhost;
|
drop user myDB_User@localhost;
|
||||||
drop database mysqldump_myDB;
|
drop database mysqldump_myDB;
|
||||||
use test;
|
use test;
|
||||||
connection default;
|
|
||||||
disconnect root;
|
|
||||||
disconnect user1;
|
|
||||||
|
|
||||||
--echo #
|
|
||||||
--echo # BUG#13926: --order-by-primary fails if PKEY contains quote character
|
|
||||||
--echo #
|
|
||||||
|
|
||||||
--disable_warnings
|
|
||||||
DROP TABLE IF EXISTS `t1`;
|
|
||||||
CREATE TABLE `t1` (
|
|
||||||
`a b` INT,
|
|
||||||
`c"d` INT,
|
|
||||||
`e``f` INT,
|
|
||||||
PRIMARY KEY (`a b`, `c"d`, `e``f`)
|
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
|
||||||
insert into t1 values (0815, 4711, 2006);
|
|
||||||
|
|
||||||
--exec $MYSQL_DUMP --skip-comments --compatible=ansi --order-by-primary test t1
|
|
||||||
--exec $MYSQL_DUMP --skip-comments --order-by-primary test t1
|
|
||||||
DROP TABLE `t1`;
|
|
||||||
--enable_warnings
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Bug #19745: mysqldump --xml produces invalid xml
|
--echo # Bug #19745: mysqldump --xml produces invalid xml
|
||||||
|
25
mysql-test/t/rpl_charset_sjis.test
Normal file
25
mysql-test/t/rpl_charset_sjis.test
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
source include/have_sjis.inc;
|
||||||
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1;
|
||||||
|
drop procedure if exists p1;
|
||||||
|
--enable_warnings
|
||||||
|
create table t1 (a varchar(255) character set sjis);
|
||||||
|
create procedure p1 (in a varchar(255) character set sjis) insert into t1 values (a);
|
||||||
|
|
||||||
|
SET NAMES binary;
|
||||||
|
CALL p1 ('–\\');
|
||||||
|
select "--- on master ---";
|
||||||
|
select hex(a) from t1 ;
|
||||||
|
sync_slave_with_master;
|
||||||
|
connection slave;
|
||||||
|
select "--- on slave ---";
|
||||||
|
select hex(a) from t1;
|
||||||
|
connection master;
|
||||||
|
drop table t1;
|
||||||
|
drop procedure p1;
|
||||||
|
sync_slave_with_master;
|
||||||
|
connection master;
|
||||||
|
|
||||||
|
# End of 5.0 tests
|
@ -34,6 +34,22 @@ connection slave;
|
|||||||
sync_with_master;
|
sync_with_master;
|
||||||
select password<>_binary'' from mysql.user where user=_binary'rpl_do_grant';
|
select password<>_binary'' from mysql.user where user=_binary'rpl_do_grant';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#24158 SET PASSWORD in binary log fails under ANSI_QUOTES
|
||||||
|
#
|
||||||
|
connection master;
|
||||||
|
update mysql.user set password='' where user='rpl_do_grant';
|
||||||
|
flush privileges;
|
||||||
|
select password<>'' from mysql.user where user='rpl_do_grant';
|
||||||
|
set sql_mode='ANSI_QUOTES';
|
||||||
|
set password for rpl_do_grant@localhost=password('does it work?');
|
||||||
|
set sql_mode='';
|
||||||
|
save_master_pos;
|
||||||
|
connection slave;
|
||||||
|
sync_with_master;
|
||||||
|
select password<>'' from mysql.user where user='rpl_do_grant';
|
||||||
|
|
||||||
|
|
||||||
# clear what we have done, to not influence other tests.
|
# clear what we have done, to not influence other tests.
|
||||||
connection master;
|
connection master;
|
||||||
delete from mysql.user where user=_binary'rpl_do_grant';
|
delete from mysql.user where user=_binary'rpl_do_grant';
|
||||||
|
24
mysql-test/t/rpl_locale.test
Normal file
24
mysql-test/t/rpl_locale.test
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Replication of locale variables
|
||||||
|
|
||||||
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#22645 LC_TIME_NAMES: Statement not replicated
|
||||||
|
#
|
||||||
|
connection master;
|
||||||
|
create table t1 (s1 char(10));
|
||||||
|
set lc_time_names= 'de_DE';
|
||||||
|
insert into t1 values (date_format('2001-01-01','%W'));
|
||||||
|
set lc_time_names= 'en_US';
|
||||||
|
insert into t1 values (date_format('2001-01-01','%W'));
|
||||||
|
select * from t1;
|
||||||
|
sync_slave_with_master;
|
||||||
|
connection slave;
|
||||||
|
select * from t1;
|
||||||
|
connection master;
|
||||||
|
drop table t1;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
|||||||
-- source include/have_row_based.inc
|
|
||||||
-- source include/have_binlog_format_mixed_or_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source include/not_ndb_default.inc
|
-- source include/not_ndb_default.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
--source include/have_row_based.inc
|
|
||||||
--source include/have_binlog_format_row.inc
|
--source include/have_binlog_format_row.inc
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
# partition tables with same engine (MyISAM) in both ends. #
|
# partition tables with same engine (MyISAM) in both ends. #
|
||||||
############################################################
|
############################################################
|
||||||
|
|
||||||
--source include/have_row_based.inc
|
|
||||||
--source include/have_binlog_format_row.inc
|
--source include/have_binlog_format_row.inc
|
||||||
--source include/have_partition.inc
|
--source include/have_partition.inc
|
||||||
--source include/not_ndb_default.inc
|
--source include/not_ndb_default.inc
|
||||||
|
1
mysql-test/t/rpl_row_create_table-slave.opt
Normal file
1
mysql-test/t/rpl_row_create_table-slave.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--innodb
|
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
--source include/have_binlog_format_row.inc
|
--source include/have_binlog_format_row.inc
|
||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
connection slave;
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
connection master;
|
||||||
|
|
||||||
# Bug#18326: Do not lock table for writing during prepare of statement
|
# Bug#18326: Do not lock table for writing during prepare of statement
|
||||||
# The use of the ps protocol causes extra table maps in the binlog, so
|
# The use of the ps protocol causes extra table maps in the binlog, so
|
||||||
@ -31,7 +35,7 @@ CREATE TABLE t2 (a INT, b INT) ENGINE=Merge;
|
|||||||
CREATE TABLE t3 (a INT, b INT) CHARSET=utf8;
|
CREATE TABLE t3 (a INT, b INT) CHARSET=utf8;
|
||||||
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
|
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
|
||||||
--replace_column 1 # 4 # 5 #
|
--replace_column 1 # 4 # 5 #
|
||||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
--query_vertical SHOW BINLOG EVENTS FROM 212
|
--query_vertical SHOW BINLOG EVENTS FROM 212
|
||||||
--echo **** On Master ****
|
--echo **** On Master ****
|
||||||
--query_vertical SHOW CREATE TABLE t1
|
--query_vertical SHOW CREATE TABLE t1
|
||||||
@ -66,8 +70,8 @@ connection master;
|
|||||||
--error 1062
|
--error 1062
|
||||||
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
|
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
|
||||||
# Shouldn't be written to the binary log
|
# Shouldn't be written to the binary log
|
||||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS FROM 1256;
|
SHOW BINLOG EVENTS FROM 1118;
|
||||||
|
|
||||||
# Test that INSERT-SELECT works the same way as for SBR.
|
# Test that INSERT-SELECT works the same way as for SBR.
|
||||||
CREATE TABLE t7 (a INT, b INT UNIQUE);
|
CREATE TABLE t7 (a INT, b INT UNIQUE);
|
||||||
@ -75,7 +79,7 @@ CREATE TABLE t7 (a INT, b INT UNIQUE);
|
|||||||
INSERT INTO t7 SELECT a,b FROM tt3;
|
INSERT INTO t7 SELECT a,b FROM tt3;
|
||||||
SELECT * FROM t7 ORDER BY a,b;
|
SELECT * FROM t7 ORDER BY a,b;
|
||||||
# Should be written to the binary log
|
# Should be written to the binary log
|
||||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS FROM 1118;
|
SHOW BINLOG EVENTS FROM 1118;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT * FROM t7 ORDER BY a,b;
|
SELECT * FROM t7 ORDER BY a,b;
|
||||||
@ -86,7 +90,7 @@ INSERT INTO tt4 VALUES (4,8), (5,10), (6,12);
|
|||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO t7 SELECT a,b FROM tt4;
|
INSERT INTO t7 SELECT a,b FROM tt4;
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS FROM 1314;
|
SHOW BINLOG EVENTS FROM 1314;
|
||||||
SELECT * FROM t7 ORDER BY a,b;
|
SELECT * FROM t7 ORDER BY a,b;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
@ -101,7 +105,7 @@ CREATE TEMPORARY TABLE tt7 SELECT 1;
|
|||||||
--echo **** On Master ****
|
--echo **** On Master ****
|
||||||
--query_vertical SHOW CREATE TABLE t8
|
--query_vertical SHOW CREATE TABLE t8
|
||||||
--query_vertical SHOW CREATE TABLE t9
|
--query_vertical SHOW CREATE TABLE t9
|
||||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS FROM 1410;
|
SHOW BINLOG EVENTS FROM 1410;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
--echo **** On Slave ****
|
--echo **** On Slave ****
|
||||||
@ -109,12 +113,117 @@ sync_slave_with_master;
|
|||||||
--query_vertical SHOW CREATE TABLE t9
|
--query_vertical SHOW CREATE TABLE t9
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
--disable_query_log
|
|
||||||
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
# Here we reset the value of the default storage engine
|
# Here we reset the value of the default storage engine
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
SET GLOBAL storage_engine=@storage_engine;
|
SET GLOBAL storage_engine=@storage_engine;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
--enable_query_log
|
|
||||||
--enable_ps_protocol
|
--enable_ps_protocol
|
||||||
|
|
||||||
|
# BUG#22864 (Rollback following CREATE ... SELECT discards 'CREATE
|
||||||
|
# table' from log):
|
||||||
|
--echo ================ BUG#22864 ================
|
||||||
|
connection slave;
|
||||||
|
STOP SLAVE;
|
||||||
|
RESET SLAVE;
|
||||||
|
connection master;
|
||||||
|
RESET MASTER;
|
||||||
|
connection slave;
|
||||||
|
START SLAVE;
|
||||||
|
connection master;
|
||||||
|
SET AUTOCOMMIT=0;
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
|
||||||
|
CREATE TABLE t2 ENGINE=INNODB SELECT * FROM t1;
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
CREATE TABLE t3 ENGINE=INNODB SELECT * FROM t1;
|
||||||
|
INSERT INTO t3 VALUES (4),(5),(6);
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
CREATE TABLE t4 ENGINE=INNODB SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 VALUES (4),(5),(6);
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
SHOW TABLES;
|
||||||
|
SELECT TABLE_NAME,ENGINE
|
||||||
|
FROM INFORMATION_SCHEMA.TABLES
|
||||||
|
WHERE TABLE_NAME LIKE 't_'
|
||||||
|
ORDER BY TABLE_NAME;
|
||||||
|
SELECT * FROM t1 ORDER BY a;
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
SELECT * FROM t3 ORDER BY a;
|
||||||
|
SELECT * FROM t4 ORDER BY a;
|
||||||
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
||||||
|
SHOW BINLOG EVENTS;
|
||||||
|
sync_slave_with_master;
|
||||||
|
SHOW TABLES;
|
||||||
|
SELECT TABLE_NAME,ENGINE
|
||||||
|
FROM INFORMATION_SCHEMA.TABLES
|
||||||
|
WHERE TABLE_NAME LIKE 't_'
|
||||||
|
ORDER BY TABLE_NAME;
|
||||||
|
SELECT * FROM t1 ORDER BY a;
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
SELECT * FROM t3 ORDER BY a;
|
||||||
|
SELECT * FROM t4 ORDER BY a;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
DROP TABLE IF EXISTS t1,t2,t3,t4;
|
||||||
|
SET AUTOCOMMIT=1;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
# Some tests with temporary tables
|
||||||
|
connection slave;
|
||||||
|
STOP SLAVE;
|
||||||
|
RESET SLAVE;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
RESET MASTER;
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
START SLAVE;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (a INT) ENGINE=INNODB;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t2 SELECT a*a FROM t1;
|
||||||
|
CREATE TEMPORARY TABLE tt1
|
||||||
|
SELECT a+1 AS a
|
||||||
|
FROM t1
|
||||||
|
WHERE a MOD 2 = 1;
|
||||||
|
INSERT INTO t2 SELECT a+2 FROM tt1;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
||||||
|
SHOW BINLOG EVENTS;
|
||||||
|
sync_slave_with_master;
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
TRUNCATE TABLE t2;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t2 SELECT a*a FROM t1;
|
||||||
|
CREATE TEMPORARY TABLE tt2
|
||||||
|
SELECT a+1 AS a
|
||||||
|
FROM t1
|
||||||
|
WHERE a MOD 2 = 1;
|
||||||
|
INSERT INTO t2 SELECT a+2 FROM tt2;
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
||||||
|
SHOW BINLOG EVENTS FROM 627;
|
||||||
|
sync_slave_with_master;
|
||||||
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
sync_slave_with_master;
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
# Requires statement logging
|
# Requires statement logging
|
||||||
-- source include/not_ndb_default.inc
|
-- source include/not_ndb_default.inc
|
||||||
-- source include/have_row_based.inc
|
|
||||||
SET SESSION BINLOG_FORMAT=ROW;
|
SET SESSION BINLOG_FORMAT=ROW;
|
||||||
SET GLOBAL BINLOG_FORMAT=ROW;
|
SET GLOBAL BINLOG_FORMAT=ROW;
|
||||||
-- source extra/rpl_tests/rpl_max_relay_size.test
|
-- source extra/rpl_tests/rpl_max_relay_size.test
|
||||||
|
1
mysql-test/t/rpl_row_tabledefs_3innodb-slave.opt
Normal file
1
mysql-test/t/rpl_row_tabledefs_3innodb-slave.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--innodb
|
@ -343,13 +343,13 @@ delete from t1;
|
|||||||
drop trigger trg;
|
drop trigger trg;
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
--replace_column 2 # 5 #
|
|
||||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
|
||||||
show binlog events in 'master-bin.000001' from 102;
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
|
||||||
|
|
||||||
|
# ********************** PART 4 : RELATED FIXED BUGS ***************
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test for bug #13969 "Routines which are replicated from master can't be
|
# Test for bug #13969 "Routines which are replicated from master can't be
|
||||||
# executed on slave".
|
# executed on slave".
|
||||||
@ -522,17 +522,11 @@ connection master;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
# Restore log_bin_trust_function_creators to original value
|
|
||||||
set global log_bin_trust_function_creators=0;
|
|
||||||
connection master;
|
|
||||||
set global log_bin_trust_function_creators=0;
|
|
||||||
--echo End of 5.0 tests
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug22043: MySQL don't add "USE <DATABASE>" before "DROP PROCEDURE IF EXISTS"
|
# Bug22043: MySQL don't add "USE <DATABASE>" before "DROP PROCEDURE IF EXISTS"
|
||||||
#
|
#
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
reset master;
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop database if exists mysqltest;
|
drop database if exists mysqltest;
|
||||||
drop database if exists mysqltest2;
|
drop database if exists mysqltest2;
|
||||||
@ -543,12 +537,49 @@ use mysqltest2;
|
|||||||
create table t ( t integer );
|
create table t ( t integer );
|
||||||
create procedure mysqltest.test() begin end;
|
create procedure mysqltest.test() begin end;
|
||||||
insert into t values ( 1 );
|
insert into t values ( 1 );
|
||||||
show binlog events in 'master-bin.000001' from 102;
|
|
||||||
--error ER_BAD_DB_ERROR
|
--error ER_BAD_DB_ERROR
|
||||||
create procedure `\\`.test() begin end;
|
create procedure `\\`.test() begin end;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#19725: Calls to stored function in other database are not
|
||||||
|
# replicated correctly in some cases
|
||||||
|
#
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
delimiter |;
|
||||||
|
create function f1 () returns int
|
||||||
|
begin
|
||||||
|
insert into t values (1);
|
||||||
|
return 0;
|
||||||
|
end|
|
||||||
|
delimiter ;|
|
||||||
|
sync_slave_with_master;
|
||||||
|
# Let us test if we don't forget to binlog the function's database
|
||||||
|
connection master;
|
||||||
|
use mysqltest;
|
||||||
|
set @a:= mysqltest2.f1();
|
||||||
|
sync_slave_with_master;
|
||||||
|
connection master;
|
||||||
|
|
||||||
|
|
||||||
|
# Final inspection which verifies how all statements of this test file
|
||||||
|
# were written to the binary log.
|
||||||
|
--replace_column 2 # 5 #
|
||||||
|
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||||
|
show binlog events in 'master-bin.000001' from 102;
|
||||||
|
|
||||||
|
|
||||||
|
# Restore log_bin_trust_function_creators to its original value.
|
||||||
|
# This is a cleanup for all parts above where we tested stored
|
||||||
|
# functions and triggers.
|
||||||
|
set global log_bin_trust_function_creators=0;
|
||||||
|
connection master;
|
||||||
|
set global log_bin_trust_function_creators=0;
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
drop database mysqltest2;
|
drop database mysqltest2;
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
-- source include/have_row_based.inc
|
|
||||||
-- source include/not_ndb_default.inc
|
-- source include/not_ndb_default.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ show binlog events from 102;
|
|||||||
# absolutely need variables names to be quoted and strings to be
|
# absolutely need variables names to be quoted and strings to be
|
||||||
# escaped).
|
# escaped).
|
||||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||||
|
flush logs;
|
||||||
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001
|
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
@ -496,6 +496,50 @@ set names latin1;
|
|||||||
--replace_column 1 #
|
--replace_column 1 #
|
||||||
select @@have_innodb;
|
select @@have_innodb;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Tests for lc_time_names
|
||||||
|
# Note, when adding new locales, please fix ID accordingly:
|
||||||
|
# - to test the last ID (currently 108)
|
||||||
|
# - and the next after the last (currently 109)
|
||||||
|
#
|
||||||
|
--echo *** Various tests with LC_TIME_NAMES
|
||||||
|
--echo *** LC_TIME_NAMES: testing case insensitivity
|
||||||
|
set @@lc_time_names='ru_ru';
|
||||||
|
select @@lc_time_names;
|
||||||
|
--echo *** LC_TIME_NAMES: testing with a user variable
|
||||||
|
set @lc='JA_JP';
|
||||||
|
set @@lc_time_names=@lc;
|
||||||
|
select @@lc_time_names;
|
||||||
|
--echo *** LC_TIME_NAMES: testing with string expressions
|
||||||
|
set lc_time_names=concat('de','_','DE');
|
||||||
|
select @@lc_time_names;
|
||||||
|
--error 1105
|
||||||
|
set lc_time_names=concat('de','+','DE');
|
||||||
|
select @@lc_time_names;
|
||||||
|
--echo LC_TIME_NAMES: testing with numeric expressions
|
||||||
|
set @@lc_time_names=1+2;
|
||||||
|
select @@lc_time_names;
|
||||||
|
--error 1232
|
||||||
|
set @@lc_time_names=1/0;
|
||||||
|
select @@lc_time_names;
|
||||||
|
set lc_time_names=en_US;
|
||||||
|
--echo LC_TIME_NAMES: testing NULL and a negative number:
|
||||||
|
--error 1231
|
||||||
|
set lc_time_names=NULL;
|
||||||
|
--error 1105
|
||||||
|
set lc_time_names=-1;
|
||||||
|
select @@lc_time_names;
|
||||||
|
--echo LC_TIME_NAMES: testing locale with the last ID:
|
||||||
|
set lc_time_names=108;
|
||||||
|
select @@lc_time_names;
|
||||||
|
--echo LC_TIME_NAMES: testing a number beyond the valid ID range:
|
||||||
|
--error 1105
|
||||||
|
set lc_time_names=109;
|
||||||
|
select @@lc_time_names;
|
||||||
|
--echo LC_TIME_NAMES: testing that 0 is en_US:
|
||||||
|
set lc_time_names=0;
|
||||||
|
select @@lc_time_names;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #13334: query_prealloc_size default less than minimum
|
# Bug #13334: query_prealloc_size default less than minimum
|
||||||
#
|
#
|
||||||
|
@ -46,6 +46,23 @@ pthread_mutexattr_t my_fast_mutexattr;
|
|||||||
pthread_mutexattr_t my_errorcheck_mutexattr;
|
pthread_mutexattr_t my_errorcheck_mutexattr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef NPTL_PTHREAD_EXIT_BUG /* see my_pthread.h */
|
||||||
|
|
||||||
|
/*
|
||||||
|
Dummy thread spawned in my_thread_global_init() below to avoid
|
||||||
|
race conditions in NPTL pthread_exit code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static
|
||||||
|
pthread_handler_t nptl_pthread_exit_hack_handler(void *arg)
|
||||||
|
{
|
||||||
|
/* Do nothing! */
|
||||||
|
pthread_exit(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
initialize thread environment
|
initialize thread environment
|
||||||
|
|
||||||
@ -64,6 +81,28 @@ my_bool my_thread_global_init(void)
|
|||||||
fprintf(stderr,"Can't initialize threads: error %d\n",errno);
|
fprintf(stderr,"Can't initialize threads: error %d\n",errno);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef NPTL_PTHREAD_EXIT_BUG
|
||||||
|
|
||||||
|
/*
|
||||||
|
BUG#24507: Race conditions inside current NPTL pthread_exit() implementation.
|
||||||
|
|
||||||
|
To avoid a possible segmentation fault during concurrent executions of
|
||||||
|
pthread_exit(), a dummy thread is spawned which initializes internal variables
|
||||||
|
of pthread lib. See bug description for thoroughfull explanation.
|
||||||
|
|
||||||
|
TODO: Remove this code when fixed versions of glibc6 are in common use.
|
||||||
|
*/
|
||||||
|
|
||||||
|
pthread_t dummy_thread;
|
||||||
|
pthread_attr_t dummy_thread_attr;
|
||||||
|
|
||||||
|
pthread_attr_init(&dummy_thread_attr);
|
||||||
|
pthread_attr_setdetachstate(&dummy_thread_attr,PTHREAD_CREATE_DETACHED);
|
||||||
|
|
||||||
|
pthread_create(&dummy_thread,&dummy_thread_attr,nptl_pthread_exit_hack_handler,NULL);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
|
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
|
||||||
/*
|
/*
|
||||||
|
@ -37,8 +37,7 @@ SET_SOURCE_FILES_PROPERTIES(${CMAKE_SOURCE_DIR}/sql/message.rc
|
|||||||
${PROJECT_SOURCE_DIR}/include/sql_state.h
|
${PROJECT_SOURCE_DIR}/include/sql_state.h
|
||||||
PROPERTIES GENERATED 1)
|
PROPERTIES GENERATED 1)
|
||||||
|
|
||||||
ADD_DEFINITIONS(-DHAVE_ROW_BASED_REPLICATION -DMYSQL_SERVER
|
ADD_DEFINITIONS(-DMYSQL_SERVER -D_CONSOLE -DHAVE_DLOPEN)
|
||||||
-D_CONSOLE -DHAVE_DLOPEN)
|
|
||||||
|
|
||||||
ADD_EXECUTABLE(mysqld ../sql-common/client.c derror.cc des_key_file.cc
|
ADD_EXECUTABLE(mysqld ../sql-common/client.c derror.cc des_key_file.cc
|
||||||
discover.cc ../libmysql/errmsg.c field.cc field_conv.cc
|
discover.cc ../libmysql/errmsg.c field.cc field_conv.cc
|
||||||
|
10
sql/field.cc
10
sql/field.cc
@ -8524,10 +8524,12 @@ const char *Field_bit::unpack(char *to, const char *from)
|
|||||||
|
|
||||||
void Field_bit::set_default()
|
void Field_bit::set_default()
|
||||||
{
|
{
|
||||||
my_ptrdiff_t const offset= (my_ptrdiff_t) (table->s->default_values -
|
if (bit_len > 0)
|
||||||
table->record[0]);
|
{
|
||||||
uchar bits= (uchar) get_rec_bits(bit_ptr + offset, bit_ofs, bit_len);
|
my_ptrdiff_t const offset= table->s->default_values - table->record[0];
|
||||||
set_rec_bits(bits, bit_ptr, bit_ofs, bit_len);
|
uchar bits= get_rec_bits(bit_ptr + offset, bit_ofs, bit_len);
|
||||||
|
set_rec_bits(bits, bit_ptr, bit_ofs, bit_len);
|
||||||
|
}
|
||||||
Field::set_default();
|
Field::set_default();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1503,6 +1503,13 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
BIT field represented as chars for non-MyISAM tables.
|
||||||
|
|
||||||
|
@todo The inheritance relationship is backwards since Field_bit is
|
||||||
|
an extended version of Field_bit_as_char and not the other way
|
||||||
|
around. Hence, we should refactor it to fix the hierarchy order.
|
||||||
|
*/
|
||||||
class Field_bit_as_char: public Field_bit {
|
class Field_bit_as_char: public Field_bit {
|
||||||
public:
|
public:
|
||||||
Field_bit_as_char(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,
|
Field_bit_as_char(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,
|
||||||
|
@ -3458,7 +3458,6 @@ bool ha_show_status(THD *thd, handlerton *db_type, enum ha_stat_type stat)
|
|||||||
- table is not mysql.event
|
- table is not mysql.event
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/* The Sun compiler cannot instantiate the template below if this is
|
/* The Sun compiler cannot instantiate the template below if this is
|
||||||
declared static, but it works by putting it into an anonymous
|
declared static, but it works by putting it into an anonymous
|
||||||
namespace. */
|
namespace. */
|
||||||
@ -3613,7 +3612,6 @@ namespace
|
|||||||
binlog_log_row<Update_rows_log_event>(TABLE *, const byte *, const byte *);
|
binlog_log_row<Update_rows_log_event>(TABLE *, const byte *, const byte *);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_ROW_BASED_REPLICATION */
|
|
||||||
|
|
||||||
int handler::ha_external_lock(THD *thd, int lock_type)
|
int handler::ha_external_lock(THD *thd, int lock_type)
|
||||||
{
|
{
|
||||||
@ -3654,10 +3652,8 @@ int handler::ha_write_row(byte *buf)
|
|||||||
int error;
|
int error;
|
||||||
if (unlikely(error= write_row(buf)))
|
if (unlikely(error= write_row(buf)))
|
||||||
return error;
|
return error;
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
if (unlikely(error= binlog_log_row<Write_rows_log_event>(table, 0, buf)))
|
if (unlikely(error= binlog_log_row<Write_rows_log_event>(table, 0, buf)))
|
||||||
return error;
|
return error;
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3673,10 +3669,8 @@ int handler::ha_update_row(const byte *old_data, byte *new_data)
|
|||||||
|
|
||||||
if (unlikely(error= update_row(old_data, new_data)))
|
if (unlikely(error= update_row(old_data, new_data)))
|
||||||
return error;
|
return error;
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
if (unlikely(error= binlog_log_row<Update_rows_log_event>(table, old_data, new_data)))
|
if (unlikely(error= binlog_log_row<Update_rows_log_event>(table, old_data, new_data)))
|
||||||
return error;
|
return error;
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3685,10 +3679,8 @@ int handler::ha_delete_row(const byte *buf)
|
|||||||
int error;
|
int error;
|
||||||
if (unlikely(error= delete_row(buf)))
|
if (unlikely(error= delete_row(buf)))
|
||||||
return error;
|
return error;
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
if (unlikely(error= binlog_log_row<Delete_rows_log_event>(table, buf, 0)))
|
if (unlikely(error= binlog_log_row<Delete_rows_log_event>(table, buf, 0)))
|
||||||
return error;
|
return error;
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2341,9 +2341,7 @@ Create_udf_func::create(THD *thd, udf_func *udf, List<Item> *item_list)
|
|||||||
if (item_list != NULL)
|
if (item_list != NULL)
|
||||||
arg_count= item_list->elements;
|
arg_count= item_list->elements;
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
thd->lex->binlog_row_based_if_mixed= TRUE;
|
thd->lex->binlog_row_based_if_mixed= TRUE;
|
||||||
#endif
|
|
||||||
|
|
||||||
DBUG_ASSERT( (udf->type == UDFTYPE_FUNCTION)
|
DBUG_ASSERT( (udf->type == UDFTYPE_FUNCTION)
|
||||||
|| (udf->type == UDFTYPE_AGGREGATE));
|
|| (udf->type == UDFTYPE_AGGREGATE));
|
||||||
@ -4532,9 +4530,7 @@ Create_func_uuid Create_func_uuid::s_singleton;
|
|||||||
Item*
|
Item*
|
||||||
Create_func_uuid::create(THD *thd)
|
Create_func_uuid::create(THD *thd)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
thd->lex->binlog_row_based_if_mixed= TRUE;
|
thd->lex->binlog_row_based_if_mixed= TRUE;
|
||||||
#endif
|
|
||||||
return new (thd->mem_root) Item_func_uuid();
|
return new (thd->mem_root) Item_func_uuid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -608,16 +608,10 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time,
|
|||||||
uint weekday;
|
uint weekday;
|
||||||
ulong length;
|
ulong length;
|
||||||
const char *ptr, *end;
|
const char *ptr, *end;
|
||||||
MY_LOCALE *locale;
|
|
||||||
THD *thd= current_thd;
|
THD *thd= current_thd;
|
||||||
char buf[STRING_BUFFER_USUAL_SIZE];
|
MY_LOCALE *locale= thd->variables.lc_time_names;
|
||||||
String tmp(buf, sizeof(buf), thd->variables.character_set_results);
|
|
||||||
uint errors= 0;
|
|
||||||
|
|
||||||
tmp.length(0);
|
|
||||||
str->length(0);
|
str->length(0);
|
||||||
str->set_charset(&my_charset_bin);
|
|
||||||
locale = thd->variables.lc_time_names;
|
|
||||||
|
|
||||||
if (l_time->neg)
|
if (l_time->neg)
|
||||||
str->append('-');
|
str->append('-');
|
||||||
@ -631,41 +625,37 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time,
|
|||||||
{
|
{
|
||||||
switch (*++ptr) {
|
switch (*++ptr) {
|
||||||
case 'M':
|
case 'M':
|
||||||
if (!l_time->month)
|
if (!l_time->month)
|
||||||
return 1;
|
return 1;
|
||||||
tmp.copy(locale->month_names->type_names[l_time->month-1],
|
str->append(locale->month_names->type_names[l_time->month-1],
|
||||||
strlen(locale->month_names->type_names[l_time->month-1]),
|
strlen(locale->month_names->type_names[l_time->month-1]),
|
||||||
system_charset_info, tmp.charset(), &errors);
|
system_charset_info);
|
||||||
str->append(tmp.ptr(), tmp.length());
|
break;
|
||||||
break;
|
|
||||||
case 'b':
|
case 'b':
|
||||||
if (!l_time->month)
|
if (!l_time->month)
|
||||||
return 1;
|
return 1;
|
||||||
tmp.copy(locale->ab_month_names->type_names[l_time->month-1],
|
str->append(locale->ab_month_names->type_names[l_time->month-1],
|
||||||
strlen(locale->ab_month_names->type_names[l_time->month-1]),
|
strlen(locale->ab_month_names->type_names[l_time->month-1]),
|
||||||
system_charset_info, tmp.charset(), &errors);
|
system_charset_info);
|
||||||
str->append(tmp.ptr(), tmp.length());
|
break;
|
||||||
break;
|
|
||||||
case 'W':
|
case 'W':
|
||||||
if (type == MYSQL_TIMESTAMP_TIME)
|
if (type == MYSQL_TIMESTAMP_TIME)
|
||||||
return 1;
|
return 1;
|
||||||
weekday= calc_weekday(calc_daynr(l_time->year,l_time->month,
|
weekday= calc_weekday(calc_daynr(l_time->year,l_time->month,
|
||||||
l_time->day),0);
|
l_time->day),0);
|
||||||
tmp.copy(locale->day_names->type_names[weekday],
|
str->append(locale->day_names->type_names[weekday],
|
||||||
strlen(locale->day_names->type_names[weekday]),
|
strlen(locale->day_names->type_names[weekday]),
|
||||||
system_charset_info, tmp.charset(), &errors);
|
system_charset_info);
|
||||||
str->append(tmp.ptr(), tmp.length());
|
break;
|
||||||
break;
|
|
||||||
case 'a':
|
case 'a':
|
||||||
if (type == MYSQL_TIMESTAMP_TIME)
|
if (type == MYSQL_TIMESTAMP_TIME)
|
||||||
return 1;
|
return 1;
|
||||||
weekday=calc_weekday(calc_daynr(l_time->year,l_time->month,
|
weekday=calc_weekday(calc_daynr(l_time->year,l_time->month,
|
||||||
l_time->day),0);
|
l_time->day),0);
|
||||||
tmp.copy(locale->ab_day_names->type_names[weekday],
|
str->append(locale->ab_day_names->type_names[weekday],
|
||||||
strlen(locale->ab_day_names->type_names[weekday]),
|
strlen(locale->ab_day_names->type_names[weekday]),
|
||||||
system_charset_info, tmp.charset(), &errors);
|
system_charset_info);
|
||||||
str->append(tmp.ptr(), tmp.length());
|
break;
|
||||||
break;
|
|
||||||
case 'D':
|
case 'D':
|
||||||
if (type == MYSQL_TIMESTAMP_TIME)
|
if (type == MYSQL_TIMESTAMP_TIME)
|
||||||
return 1;
|
return 1;
|
||||||
@ -1688,6 +1678,7 @@ longlong Item_func_sec_to_time::val_int()
|
|||||||
|
|
||||||
void Item_func_date_format::fix_length_and_dec()
|
void Item_func_date_format::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
|
THD* thd= current_thd;
|
||||||
/*
|
/*
|
||||||
Must use this_item() in case it's a local SP variable
|
Must use this_item() in case it's a local SP variable
|
||||||
(for ->max_length and ->str_value)
|
(for ->max_length and ->str_value)
|
||||||
@ -1695,22 +1686,18 @@ void Item_func_date_format::fix_length_and_dec()
|
|||||||
Item *arg1= args[1]->this_item();
|
Item *arg1= args[1]->this_item();
|
||||||
|
|
||||||
decimals=0;
|
decimals=0;
|
||||||
collation.set(&my_charset_bin);
|
collation.set(thd->variables.collation_connection);
|
||||||
if (arg1->type() == STRING_ITEM)
|
if (arg1->type() == STRING_ITEM)
|
||||||
{ // Optimize the normal case
|
{ // Optimize the normal case
|
||||||
fixed_length=1;
|
fixed_length=1;
|
||||||
|
max_length= format_length(&arg1->str_value) *
|
||||||
/*
|
collation.collation->mbmaxlen;
|
||||||
The result is a binary string (no reason to use collation->mbmaxlen
|
|
||||||
This is becasue make_date_time() only returns binary strings
|
|
||||||
*/
|
|
||||||
max_length= format_length(&arg1->str_value);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fixed_length=0;
|
fixed_length=0;
|
||||||
/* The result is a binary string (no reason to use collation->mbmaxlen */
|
max_length=min(arg1->max_length, MAX_BLOB_WIDTH) * 10 *
|
||||||
max_length=min(arg1->max_length, MAX_BLOB_WIDTH) * 10;
|
collation.collation->mbmaxlen;
|
||||||
set_if_smaller(max_length,MAX_BLOB_WIDTH);
|
set_if_smaller(max_length,MAX_BLOB_WIDTH);
|
||||||
}
|
}
|
||||||
maybe_null=1; // If wrong date
|
maybe_null=1; // If wrong date
|
||||||
@ -1855,6 +1842,7 @@ String *Item_func_date_format::val_str(String *str)
|
|||||||
date_time_format.format.length= format->length();
|
date_time_format.format.length= format->length();
|
||||||
|
|
||||||
/* Create the result string */
|
/* Create the result string */
|
||||||
|
str->set_charset(collation.collation);
|
||||||
if (!make_date_time(&date_time_format, &l_time,
|
if (!make_date_time(&date_time_format, &l_time,
|
||||||
is_time_format ? MYSQL_TIMESTAMP_TIME :
|
is_time_format ? MYSQL_TIMESTAMP_TIME :
|
||||||
MYSQL_TIMESTAMP_DATE,
|
MYSQL_TIMESTAMP_DATE,
|
||||||
|
186
sql/log.cc
186
sql/log.cc
@ -80,24 +80,55 @@ char *make_default_log_name(char *buff,const char* log_ext)
|
|||||||
MYF(MY_UNPACK_FILENAME|MY_APPEND_EXT));
|
MYF(MY_UNPACK_FILENAME|MY_APPEND_EXT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Helper class to hold a mutex for the duration of the
|
||||||
|
block.
|
||||||
|
|
||||||
|
Eliminates the need for explicit unlocking of mutexes on, e.g.,
|
||||||
|
error returns. On passing a null pointer, the sentry will not do
|
||||||
|
anything.
|
||||||
|
*/
|
||||||
|
class Mutex_sentry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Mutex_sentry(pthread_mutex_t *mutex)
|
||||||
|
: m_mutex(mutex)
|
||||||
|
{
|
||||||
|
if (m_mutex)
|
||||||
|
pthread_mutex_lock(mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
~Mutex_sentry()
|
||||||
|
{
|
||||||
|
if (m_mutex)
|
||||||
|
pthread_mutex_unlock(m_mutex);
|
||||||
|
#ifndef DBUG_OFF
|
||||||
|
m_mutex= 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
pthread_mutex_t *m_mutex;
|
||||||
|
|
||||||
|
// It's not allowed to copy this object in any way
|
||||||
|
Mutex_sentry(Mutex_sentry const&);
|
||||||
|
void operator=(Mutex_sentry const&);
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Helper class to store binary log transaction data.
|
Helper class to store binary log transaction data.
|
||||||
*/
|
*/
|
||||||
class binlog_trx_data {
|
class binlog_trx_data {
|
||||||
public:
|
public:
|
||||||
binlog_trx_data()
|
binlog_trx_data()
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
: m_pending(0), before_stmt_pos(MY_OFF_T_UNDEF)
|
: m_pending(0), before_stmt_pos(MY_OFF_T_UNDEF)
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
trans_log.end_of_file= max_binlog_cache_size;
|
trans_log.end_of_file= max_binlog_cache_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
~binlog_trx_data()
|
~binlog_trx_data()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
DBUG_ASSERT(pending() == NULL);
|
DBUG_ASSERT(pending() == NULL);
|
||||||
#endif
|
|
||||||
close_cached_file(&trans_log);
|
close_cached_file(&trans_log);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,11 +138,7 @@ public:
|
|||||||
|
|
||||||
bool empty() const
|
bool empty() const
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
return pending() == NULL && my_b_tell(&trans_log) == 0;
|
return pending() == NULL && my_b_tell(&trans_log) == 0;
|
||||||
#else
|
|
||||||
return my_b_tell(&trans_log) == 0;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -120,11 +147,13 @@ public:
|
|||||||
*/
|
*/
|
||||||
void truncate(my_off_t pos)
|
void truncate(my_off_t pos)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
DBUG_PRINT("info", ("truncating to position %lu", pos));
|
||||||
|
DBUG_PRINT("info", ("before_stmt_pos=%lu", pos));
|
||||||
delete pending();
|
delete pending();
|
||||||
set_pending(0);
|
set_pending(0);
|
||||||
#endif
|
|
||||||
reinit_io_cache(&trans_log, WRITE_CACHE, pos, 0, 0);
|
reinit_io_cache(&trans_log, WRITE_CACHE, pos, 0, 0);
|
||||||
|
if (pos < before_stmt_pos)
|
||||||
|
before_stmt_pos= MY_OFF_T_UNDEF;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -134,13 +163,10 @@ public:
|
|||||||
void reset() {
|
void reset() {
|
||||||
if (!empty())
|
if (!empty())
|
||||||
truncate(0);
|
truncate(0);
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
before_stmt_pos= MY_OFF_T_UNDEF;
|
before_stmt_pos= MY_OFF_T_UNDEF;
|
||||||
#endif
|
|
||||||
trans_log.end_of_file= max_binlog_cache_size;
|
trans_log.end_of_file= max_binlog_cache_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
Rows_log_event *pending() const
|
Rows_log_event *pending() const
|
||||||
{
|
{
|
||||||
return m_pending;
|
return m_pending;
|
||||||
@ -150,12 +176,10 @@ public:
|
|||||||
{
|
{
|
||||||
m_pending= pending;
|
m_pending= pending;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
IO_CACHE trans_log; // The transaction cache
|
IO_CACHE trans_log; // The transaction cache
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
Pending binrows event. This event is the event where the rows are
|
Pending binrows event. This event is the event where the rows are
|
||||||
currently written.
|
currently written.
|
||||||
@ -167,7 +191,6 @@ public:
|
|||||||
Binlog position before the start of the current statement.
|
Binlog position before the start of the current statement.
|
||||||
*/
|
*/
|
||||||
my_off_t before_stmt_pos;
|
my_off_t before_stmt_pos;
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
handlerton *binlog_hton;
|
handlerton *binlog_hton;
|
||||||
@ -1467,9 +1490,7 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data,
|
|||||||
were, we would have to ensure that we're not ending a statement
|
were, we would have to ensure that we're not ending a statement
|
||||||
inside a stored function.
|
inside a stored function.
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
thd->binlog_flush_pending_rows_event(TRUE);
|
thd->binlog_flush_pending_rows_event(TRUE);
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
We write the transaction cache to the binary log if either we're
|
We write the transaction cache to the binary log if either we're
|
||||||
committing the entire transaction, or if we are doing an
|
committing the entire transaction, or if we are doing an
|
||||||
@ -1479,13 +1500,11 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data,
|
|||||||
{
|
{
|
||||||
error= mysql_bin_log.write(thd, &trx_data->trans_log, end_ev);
|
error= mysql_bin_log.write(thd, &trx_data->trans_log, end_ev);
|
||||||
trx_data->reset();
|
trx_data->reset();
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
We need to step the table map version after writing the
|
We need to step the table map version after writing the
|
||||||
transaction cache to disk.
|
transaction cache to disk.
|
||||||
*/
|
*/
|
||||||
mysql_bin_log.update_table_map_version();
|
mysql_bin_log.update_table_map_version();
|
||||||
#endif
|
|
||||||
statistic_increment(binlog_cache_use, &LOCK_status);
|
statistic_increment(binlog_cache_use, &LOCK_status);
|
||||||
if (trans_log->disk_writes != 0)
|
if (trans_log->disk_writes != 0)
|
||||||
{
|
{
|
||||||
@ -1494,7 +1513,6 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -1503,12 +1521,11 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data,
|
|||||||
|
|
||||||
If rolling back a statement in a transaction, we truncate the
|
If rolling back a statement in a transaction, we truncate the
|
||||||
transaction cache to remove the statement.
|
transaction cache to remove the statement.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if (all || !(thd->options & (OPTION_BEGIN | OPTION_NOT_AUTOCOMMIT)))
|
if (all || !(thd->options & (OPTION_BEGIN | OPTION_NOT_AUTOCOMMIT)))
|
||||||
trx_data->reset();
|
trx_data->reset();
|
||||||
else
|
else // ...statement
|
||||||
trx_data->truncate(trx_data->before_stmt_pos); // ...statement
|
trx_data->truncate(trx_data->before_stmt_pos);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We need to step the table map version on a rollback to ensure
|
We need to step the table map version on a rollback to ensure
|
||||||
@ -1517,7 +1534,6 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data,
|
|||||||
*/
|
*/
|
||||||
mysql_bin_log.update_table_map_version();
|
mysql_bin_log.update_table_map_version();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
@ -2096,7 +2112,7 @@ bool MYSQL_QUERY_LOG::write(time_t event_time, const char *user_host,
|
|||||||
if (my_b_write(&log_file, (byte*) "\t\t" ,2) < 0)
|
if (my_b_write(&log_file, (byte*) "\t\t" ,2) < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/* command_type, thread_id */
|
/* command_type, thread_id */
|
||||||
length= my_snprintf(buff, 32, "%5ld ", (long) thread_id);
|
length= my_snprintf(buff, 32, "%5ld ", (long) thread_id);
|
||||||
|
|
||||||
if (my_b_write(&log_file, (byte*) buff, length))
|
if (my_b_write(&log_file, (byte*) buff, length))
|
||||||
@ -3395,7 +3411,6 @@ int THD::binlog_setup_trx_data()
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
Function to start a statement and optionally a transaction for the
|
Function to start a statement and optionally a transaction for the
|
||||||
binary log.
|
binary log.
|
||||||
@ -3437,18 +3452,7 @@ THD::binlog_start_trans_and_stmt()
|
|||||||
if (trx_data == NULL ||
|
if (trx_data == NULL ||
|
||||||
trx_data->before_stmt_pos == MY_OFF_T_UNDEF)
|
trx_data->before_stmt_pos == MY_OFF_T_UNDEF)
|
||||||
{
|
{
|
||||||
/*
|
this->binlog_set_stmt_begin();
|
||||||
The call to binlog_trans_log_savepos() might create the trx_data
|
|
||||||
structure, if it didn't exist before, so we save the position
|
|
||||||
into an auto variable and then write it into the transaction
|
|
||||||
data for the binary log (i.e., trx_data).
|
|
||||||
*/
|
|
||||||
my_off_t pos= 0;
|
|
||||||
binlog_trans_log_savepos(this, &pos);
|
|
||||||
trx_data= (binlog_trx_data*) ha_data[binlog_hton->slot];
|
|
||||||
|
|
||||||
trx_data->before_stmt_pos= pos;
|
|
||||||
|
|
||||||
if (options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
if (options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
||||||
trans_register_ha(this, TRUE, binlog_hton);
|
trans_register_ha(this, TRUE, binlog_hton);
|
||||||
trans_register_ha(this, FALSE, binlog_hton);
|
trans_register_ha(this, FALSE, binlog_hton);
|
||||||
@ -3456,6 +3460,51 @@ THD::binlog_start_trans_and_stmt()
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void THD::binlog_set_stmt_begin() {
|
||||||
|
binlog_trx_data *trx_data=
|
||||||
|
(binlog_trx_data*) ha_data[binlog_hton->slot];
|
||||||
|
|
||||||
|
/*
|
||||||
|
The call to binlog_trans_log_savepos() might create the trx_data
|
||||||
|
structure, if it didn't exist before, so we save the position
|
||||||
|
into an auto variable and then write it into the transaction
|
||||||
|
data for the binary log (i.e., trx_data).
|
||||||
|
*/
|
||||||
|
my_off_t pos= 0;
|
||||||
|
binlog_trans_log_savepos(this, &pos);
|
||||||
|
trx_data= (binlog_trx_data*) ha_data[binlog_hton->slot];
|
||||||
|
trx_data->before_stmt_pos= pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
int THD::binlog_flush_transaction_cache()
|
||||||
|
{
|
||||||
|
DBUG_ENTER("binlog_flush_transaction_cache");
|
||||||
|
binlog_trx_data *trx_data= (binlog_trx_data*) ha_data[binlog_hton->slot];
|
||||||
|
DBUG_PRINT("enter", ("trx_data=0x%lu", trx_data));
|
||||||
|
if (trx_data)
|
||||||
|
DBUG_PRINT("enter", ("trx_data->before_stmt_pos=%u",
|
||||||
|
trx_data->before_stmt_pos));
|
||||||
|
|
||||||
|
/*
|
||||||
|
Write the transaction cache to the binary log. We don't flush and
|
||||||
|
sync the log file since we don't know if more will be written to
|
||||||
|
it. If the caller want the log file sync:ed, the caller has to do
|
||||||
|
it.
|
||||||
|
|
||||||
|
The transaction data is only reset upon a successful write of the
|
||||||
|
cache to the binary log.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (trx_data && likely(mysql_bin_log.is_open())) {
|
||||||
|
if (int error= mysql_bin_log.write_cache(&trx_data->trans_log, true, true))
|
||||||
|
DBUG_RETURN(error);
|
||||||
|
trx_data->reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Write a table map to the binary log.
|
Write a table map to the binary log.
|
||||||
*/
|
*/
|
||||||
@ -3604,7 +3653,6 @@ MYSQL_BIN_LOG::flush_and_set_pending_rows_event(THD *thd,
|
|||||||
|
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Write an event to the binary log
|
Write an event to the binary log
|
||||||
@ -3637,11 +3685,9 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info)
|
|||||||
we are inside a stored function, we do not end the statement since
|
we are inside a stored function, we do not end the statement since
|
||||||
this will close all tables on the slave.
|
this will close all tables on the slave.
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
bool const end_stmt=
|
bool const end_stmt=
|
||||||
thd->prelocked_mode && thd->lex->requires_prelocking();
|
thd->prelocked_mode && thd->lex->requires_prelocking();
|
||||||
thd->binlog_flush_pending_rows_event(end_stmt);
|
thd->binlog_flush_pending_rows_event(end_stmt);
|
||||||
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
||||||
|
|
||||||
pthread_mutex_lock(&LOCK_log);
|
pthread_mutex_lock(&LOCK_log);
|
||||||
|
|
||||||
@ -3671,7 +3717,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info)
|
|||||||
}
|
}
|
||||||
#endif /* HAVE_REPLICATION */
|
#endif /* HAVE_REPLICATION */
|
||||||
|
|
||||||
#if defined(USING_TRANSACTIONS) && defined(HAVE_ROW_BASED_REPLICATION)
|
#if defined(USING_TRANSACTIONS)
|
||||||
/*
|
/*
|
||||||
Should we write to the binlog cache or to the binlog on disk?
|
Should we write to the binlog cache or to the binlog on disk?
|
||||||
Write to the binlog cache if:
|
Write to the binlog cache if:
|
||||||
@ -3706,7 +3752,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info)
|
|||||||
LOCK_log.
|
LOCK_log.
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
#endif /* USING_TRANSACTIONS && HAVE_ROW_BASED_REPLICATION */
|
#endif /* USING_TRANSACTIONS */
|
||||||
DBUG_PRINT("info",("event type: %d",event_info->get_type_code()));
|
DBUG_PRINT("info",("event type: %d",event_info->get_type_code()));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3868,6 +3914,40 @@ uint MYSQL_BIN_LOG::next_file_id()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Write the contents of a cache to the binary log.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
write_cache()
|
||||||
|
cache Cache to write to the binary log
|
||||||
|
lock_log True if the LOCK_log mutex should be aquired, false otherwise
|
||||||
|
sync_log True if the log should be flushed and sync:ed
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Write the contents of the cache to the binary log. The cache will
|
||||||
|
be reset as a READ_CACHE to be able to read the contents from it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int MYSQL_BIN_LOG::write_cache(IO_CACHE *cache, bool lock_log, bool sync_log)
|
||||||
|
{
|
||||||
|
Mutex_sentry sentry(lock_log ? &LOCK_log : NULL);
|
||||||
|
|
||||||
|
if (reinit_io_cache(cache, READ_CACHE, 0, 0, 0))
|
||||||
|
return ER_ERROR_ON_WRITE;
|
||||||
|
uint bytes= my_b_bytes_in_cache(cache);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (my_b_write(&log_file, cache->read_pos, bytes))
|
||||||
|
return ER_ERROR_ON_WRITE;
|
||||||
|
cache->read_pos= cache->read_end;
|
||||||
|
} while ((bytes= my_b_fill(cache)));
|
||||||
|
|
||||||
|
if (sync_log)
|
||||||
|
flush_and_sync();
|
||||||
|
|
||||||
|
return 0; // All OK
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Write a cached log entry to the binary log
|
Write a cached log entry to the binary log
|
||||||
|
|
||||||
@ -3875,6 +3955,8 @@ uint MYSQL_BIN_LOG::next_file_id()
|
|||||||
write()
|
write()
|
||||||
thd
|
thd
|
||||||
cache The cache to copy to the binlog
|
cache The cache to copy to the binlog
|
||||||
|
commit_event The commit event to print after writing the
|
||||||
|
contents of the cache.
|
||||||
|
|
||||||
NOTE
|
NOTE
|
||||||
- We only come here if there is something in the cache.
|
- We only come here if there is something in the cache.
|
||||||
@ -3934,20 +4016,10 @@ bool MYSQL_BIN_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event)
|
|||||||
if (qinfo.write(&log_file))
|
if (qinfo.write(&log_file))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
/* Read from the file used to cache the queries .*/
|
|
||||||
if (reinit_io_cache(cache, READ_CACHE, 0, 0, 0))
|
|
||||||
goto err;
|
|
||||||
length=my_b_bytes_in_cache(cache);
|
|
||||||
DBUG_EXECUTE_IF("half_binlogged_transaction", length-=100;);
|
|
||||||
do
|
|
||||||
{
|
|
||||||
/* Write data to the binary log file */
|
|
||||||
if (my_b_write(&log_file, cache->read_pos, length))
|
|
||||||
goto err;
|
|
||||||
cache->read_pos=cache->read_end; // Mark buffer used up
|
|
||||||
DBUG_EXECUTE_IF("half_binlogged_transaction", goto DBUG_skip_commit;);
|
|
||||||
} while ((length=my_b_fill(cache)));
|
|
||||||
|
|
||||||
|
if ((write_error= write_cache(cache, false, false)))
|
||||||
|
goto err;
|
||||||
|
|
||||||
if (commit_event && commit_event->write(&log_file))
|
if (commit_event && commit_event->write(&log_file))
|
||||||
goto err;
|
goto err;
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
|
@ -339,6 +339,8 @@ public:
|
|||||||
bool write(Log_event* event_info); // binary log write
|
bool write(Log_event* event_info); // binary log write
|
||||||
bool write(THD *thd, IO_CACHE *cache, Log_event *commit_event);
|
bool write(THD *thd, IO_CACHE *cache, Log_event *commit_event);
|
||||||
|
|
||||||
|
int write_cache(IO_CACHE *cache, bool lock_log, bool flush_and_sync);
|
||||||
|
|
||||||
void start_union_events(THD *thd);
|
void start_union_events(THD *thd);
|
||||||
void stop_union_events(THD *thd);
|
void stop_union_events(THD *thd);
|
||||||
bool is_query_in_union(THD *thd, query_id_t query_id_param);
|
bool is_query_in_union(THD *thd, query_id_t query_id_param);
|
||||||
@ -602,14 +604,12 @@ public:
|
|||||||
|
|
||||||
enum enum_binlog_format {
|
enum enum_binlog_format {
|
||||||
BINLOG_FORMAT_STMT= 0, // statement-based
|
BINLOG_FORMAT_STMT= 0, // statement-based
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
BINLOG_FORMAT_ROW= 1, // row_based
|
BINLOG_FORMAT_ROW= 1, // row_based
|
||||||
/*
|
/*
|
||||||
statement-based except for cases where only row-based can work (UUID()
|
statement-based except for cases where only row-based can work (UUID()
|
||||||
etc):
|
etc):
|
||||||
*/
|
*/
|
||||||
BINLOG_FORMAT_MIXED= 2,
|
BINLOG_FORMAT_MIXED= 2,
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
This value is last, after the end of binlog_format_typelib: it has no
|
This value is last, after the end of binlog_format_typelib: it has no
|
||||||
corresponding cell in this typelib. We use this value to be able to know if
|
corresponding cell in this typelib. We use this value to be able to know if
|
||||||
|
198
sql/log_event.cc
198
sql/log_event.cc
@ -372,7 +372,7 @@ append_query_string(CHARSET_INFO *csinfo,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
*ptr++= '\'';
|
*ptr++= '\'';
|
||||||
ptr+= escape_string_for_mysql(from->charset(), ptr, 0,
|
ptr+= escape_string_for_mysql(csinfo, ptr, 0,
|
||||||
from->ptr(), from->length());
|
from->ptr(), from->length());
|
||||||
*ptr++='\'';
|
*ptr++='\'';
|
||||||
}
|
}
|
||||||
@ -993,7 +993,7 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len,
|
|||||||
case FORMAT_DESCRIPTION_EVENT:
|
case FORMAT_DESCRIPTION_EVENT:
|
||||||
ev = new Format_description_log_event(buf, event_len, description_event);
|
ev = new Format_description_log_event(buf, event_len, description_event);
|
||||||
break;
|
break;
|
||||||
#if defined(HAVE_REPLICATION) && defined(HAVE_ROW_BASED_REPLICATION)
|
#if defined(HAVE_REPLICATION)
|
||||||
case WRITE_ROWS_EVENT:
|
case WRITE_ROWS_EVENT:
|
||||||
ev = new Write_rows_log_event(buf, event_len, description_event);
|
ev = new Write_rows_log_event(buf, event_len, description_event);
|
||||||
break;
|
break;
|
||||||
@ -1182,7 +1182,7 @@ void Log_event::print_base64(IO_CACHE* file,
|
|||||||
my_b_printf(file, "%s\n", tmp_str);
|
my_b_printf(file, "%s\n", tmp_str);
|
||||||
|
|
||||||
if (!more)
|
if (!more)
|
||||||
my_b_printf(file, "';\n");
|
my_b_printf(file, "'%s\n", print_event_info->delimiter);
|
||||||
|
|
||||||
my_free(tmp_str, MYF(0));
|
my_free(tmp_str, MYF(0));
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@ -1288,7 +1288,8 @@ bool Query_log_event::write(IO_CACHE* file)
|
|||||||
1+1+FN_REFLEN+ // code of catalog and catalog length and catalog
|
1+1+FN_REFLEN+ // code of catalog and catalog length and catalog
|
||||||
1+4+ // code of autoinc and the 2 autoinc variables
|
1+4+ // code of autoinc and the 2 autoinc variables
|
||||||
1+6+ // code of charset and charset
|
1+6+ // code of charset and charset
|
||||||
1+1+MAX_TIME_ZONE_NAME_LENGTH // code of tz and tz length and tz name
|
1+1+MAX_TIME_ZONE_NAME_LENGTH+ // code of tz and tz length and tz name
|
||||||
|
1+2 // code of lc_time_names and lc_time_names_number
|
||||||
], *start, *start_of_status;
|
], *start, *start_of_status;
|
||||||
ulong event_length;
|
ulong event_length;
|
||||||
|
|
||||||
@ -1400,6 +1401,13 @@ bool Query_log_event::write(IO_CACHE* file)
|
|||||||
memcpy(start, time_zone_str, time_zone_len);
|
memcpy(start, time_zone_str, time_zone_len);
|
||||||
start+= time_zone_len;
|
start+= time_zone_len;
|
||||||
}
|
}
|
||||||
|
if (lc_time_names_number)
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(lc_time_names_number <= 0xFFFF);
|
||||||
|
*start++= Q_LC_TIME_NAMES_CODE;
|
||||||
|
int2store(start, lc_time_names_number);
|
||||||
|
start+= 2;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
Here there could be code like
|
Here there could be code like
|
||||||
if (command-line-option-which-says-"log_this_variable" && inited)
|
if (command-line-option-which-says-"log_this_variable" && inited)
|
||||||
@ -1464,7 +1472,8 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
|
|||||||
flags2_inited(1), sql_mode_inited(1), charset_inited(1),
|
flags2_inited(1), sql_mode_inited(1), charset_inited(1),
|
||||||
sql_mode(thd_arg->variables.sql_mode),
|
sql_mode(thd_arg->variables.sql_mode),
|
||||||
auto_increment_increment(thd_arg->variables.auto_increment_increment),
|
auto_increment_increment(thd_arg->variables.auto_increment_increment),
|
||||||
auto_increment_offset(thd_arg->variables.auto_increment_offset)
|
auto_increment_offset(thd_arg->variables.auto_increment_offset),
|
||||||
|
lc_time_names_number(thd_arg->variables.lc_time_names->number)
|
||||||
{
|
{
|
||||||
time_t end_time;
|
time_t end_time;
|
||||||
time(&end_time);
|
time(&end_time);
|
||||||
@ -1506,18 +1515,27 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
|
|||||||
|
|
||||||
/* 2 utility functions for the next method */
|
/* 2 utility functions for the next method */
|
||||||
|
|
||||||
static void get_str_len_and_pointer(const char **dst, const char **src, uint *len)
|
|
||||||
|
/*
|
||||||
|
Get the pointer for a string (src) that contains the length in
|
||||||
|
the first byte. Set the output string (dst) to the string value
|
||||||
|
and place the length of the string in the byte after the string.
|
||||||
|
*/
|
||||||
|
static void get_str_len_and_pointer(const Log_event::Byte **src,
|
||||||
|
const char **dst,
|
||||||
|
uint *len)
|
||||||
{
|
{
|
||||||
if ((*len= **src))
|
if ((*len= **src))
|
||||||
*dst= *src + 1; // Will be copied later
|
*dst= (char *)*src + 1; // Will be copied later
|
||||||
(*src)+= *len+1;
|
(*src)+= *len + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void copy_str_and_move(const char **src,
|
||||||
static void copy_str_and_move(char **dst, const char **src, uint len)
|
Log_event::Byte **dst,
|
||||||
|
uint len)
|
||||||
{
|
{
|
||||||
memcpy(*dst, *src, len);
|
memcpy(*dst, *src, len);
|
||||||
*src= *dst;
|
*src= (const char *)*dst;
|
||||||
(*dst)+= len;
|
(*dst)+= len;
|
||||||
*(*dst)++= 0;
|
*(*dst)++= 0;
|
||||||
}
|
}
|
||||||
@ -1535,13 +1553,13 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
|
|||||||
db(NullS), catalog_len(0), status_vars_len(0),
|
db(NullS), catalog_len(0), status_vars_len(0),
|
||||||
flags2_inited(0), sql_mode_inited(0), charset_inited(0),
|
flags2_inited(0), sql_mode_inited(0), charset_inited(0),
|
||||||
auto_increment_increment(1), auto_increment_offset(1),
|
auto_increment_increment(1), auto_increment_offset(1),
|
||||||
time_zone_len(0)
|
time_zone_len(0), lc_time_names_number(0)
|
||||||
{
|
{
|
||||||
ulong data_len;
|
ulong data_len;
|
||||||
uint32 tmp;
|
uint32 tmp;
|
||||||
uint8 common_header_len, post_header_len;
|
uint8 common_header_len, post_header_len;
|
||||||
char *start;
|
Log_event::Byte *start;
|
||||||
const char *end;
|
const Log_event::Byte *end;
|
||||||
bool catalog_nz= 1;
|
bool catalog_nz= 1;
|
||||||
DBUG_ENTER("Query_log_event::Query_log_event(char*,...)");
|
DBUG_ENTER("Query_log_event::Query_log_event(char*,...)");
|
||||||
|
|
||||||
@ -1587,9 +1605,9 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
|
|||||||
|
|
||||||
/* variable-part: the status vars; only in MySQL 5.0 */
|
/* variable-part: the status vars; only in MySQL 5.0 */
|
||||||
|
|
||||||
start= (char*) (buf+post_header_len);
|
start= (Log_event::Byte*) (buf+post_header_len);
|
||||||
end= (const char*) (start+status_vars_len);
|
end= (const Log_event::Byte*) (start+status_vars_len);
|
||||||
for (const uchar* pos= (const uchar*) start; pos < (const uchar*) end;)
|
for (const Log_event::Byte* pos= start; pos < end;)
|
||||||
{
|
{
|
||||||
switch (*pos++) {
|
switch (*pos++) {
|
||||||
case Q_FLAGS2_CODE:
|
case Q_FLAGS2_CODE:
|
||||||
@ -1611,7 +1629,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Q_CATALOG_NZ_CODE:
|
case Q_CATALOG_NZ_CODE:
|
||||||
get_str_len_and_pointer(&catalog, (const char **)(&pos), &catalog_len);
|
get_str_len_and_pointer(&pos, &catalog, &catalog_len);
|
||||||
break;
|
break;
|
||||||
case Q_AUTO_INCREMENT:
|
case Q_AUTO_INCREMENT:
|
||||||
auto_increment_increment= uint2korr(pos);
|
auto_increment_increment= uint2korr(pos);
|
||||||
@ -1627,7 +1645,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
|
|||||||
}
|
}
|
||||||
case Q_TIME_ZONE_CODE:
|
case Q_TIME_ZONE_CODE:
|
||||||
{
|
{
|
||||||
get_str_len_and_pointer(&time_zone_str, (const char **)(&pos), &time_zone_len);
|
get_str_len_and_pointer(&pos, &time_zone_str, &time_zone_len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Q_CATALOG_CODE: /* for 5.0.x where 0<=x<=3 masters */
|
case Q_CATALOG_CODE: /* for 5.0.x where 0<=x<=3 masters */
|
||||||
@ -1636,6 +1654,10 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
|
|||||||
pos+= catalog_len+2; // leap over end 0
|
pos+= catalog_len+2; // leap over end 0
|
||||||
catalog_nz= 0; // catalog has end 0 in event
|
catalog_nz= 0; // catalog has end 0 in event
|
||||||
break;
|
break;
|
||||||
|
case Q_LC_TIME_NAMES_CODE:
|
||||||
|
lc_time_names_number= uint2korr(pos);
|
||||||
|
pos+= 2;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
/* That's why you must write status vars in growing order of code */
|
/* That's why you must write status vars in growing order of code */
|
||||||
DBUG_PRINT("info",("Query_log_event has unknown status vars (first has\
|
DBUG_PRINT("info",("Query_log_event has unknown status vars (first has\
|
||||||
@ -1645,38 +1667,38 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(MYSQL_CLIENT) && defined(HAVE_QUERY_CACHE)
|
#if !defined(MYSQL_CLIENT) && defined(HAVE_QUERY_CACHE)
|
||||||
if (!(start= data_buf = (char*) my_malloc(catalog_len + 1 +
|
if (!(start= data_buf = (Log_event::Byte*) my_malloc(catalog_len + 1 +
|
||||||
time_zone_len + 1 +
|
time_zone_len + 1 +
|
||||||
data_len + 1 +
|
data_len + 1 +
|
||||||
QUERY_CACHE_FLAGS_SIZE +
|
QUERY_CACHE_FLAGS_SIZE +
|
||||||
db_len + 1,
|
db_len + 1,
|
||||||
MYF(MY_WME))))
|
MYF(MY_WME))))
|
||||||
#else
|
#else
|
||||||
if (!(start= data_buf = (char*) my_malloc(catalog_len + 1 +
|
if (!(start= data_buf = (Log_event::Byte*) my_malloc(catalog_len + 1 +
|
||||||
time_zone_len + 1 +
|
time_zone_len + 1 +
|
||||||
data_len + 1,
|
data_len + 1,
|
||||||
MYF(MY_WME))))
|
MYF(MY_WME))))
|
||||||
#endif
|
#endif
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
if (catalog_len) // If catalog is given
|
if (catalog_len) // If catalog is given
|
||||||
{
|
{
|
||||||
if (likely(catalog_nz)) // true except if event comes from 5.0.0|1|2|3.
|
if (likely(catalog_nz)) // true except if event comes from 5.0.0|1|2|3.
|
||||||
copy_str_and_move(&start, &catalog, catalog_len);
|
copy_str_and_move(&catalog, &start, catalog_len);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memcpy(start, catalog, catalog_len+1); // copy end 0
|
memcpy(start, catalog, catalog_len+1); // copy end 0
|
||||||
catalog= start;
|
catalog= (const char *)start;
|
||||||
start+= catalog_len+1;
|
start+= catalog_len+1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (time_zone_len)
|
if (time_zone_len)
|
||||||
copy_str_and_move(&start, &time_zone_str, time_zone_len);
|
copy_str_and_move(&time_zone_str, &start, time_zone_len);
|
||||||
|
|
||||||
/* A 2nd variable part; this is common to all versions */
|
/* A 2nd variable part; this is common to all versions */
|
||||||
memcpy((char*) start, end, data_len); // Copy db and query
|
memcpy((char*) start, end, data_len); // Copy db and query
|
||||||
start[data_len]= '\0'; // End query with \0 (For safetly)
|
start[data_len]= '\0'; // End query with \0 (For safetly)
|
||||||
db= start;
|
db= (char *)start;
|
||||||
query= start + db_len + 1;
|
query= (char *)(start + db_len + 1);
|
||||||
q_len= data_len - db_len -1;
|
q_len= data_len - db_len -1;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
@ -1708,15 +1730,16 @@ void Query_log_event::print_query_header(IO_CACHE* file,
|
|||||||
if (different_db= memcmp(print_event_info->db, db, db_len + 1))
|
if (different_db= memcmp(print_event_info->db, db, db_len + 1))
|
||||||
memcpy(print_event_info->db, db, db_len + 1);
|
memcpy(print_event_info->db, db, db_len + 1);
|
||||||
if (db[0] && different_db)
|
if (db[0] && different_db)
|
||||||
my_b_printf(file, "use %s;\n", db);
|
my_b_printf(file, "use %s%s\n", db, print_event_info->delimiter);
|
||||||
}
|
}
|
||||||
|
|
||||||
end=int10_to_str((long) when, strmov(buff,"SET TIMESTAMP="),10);
|
end=int10_to_str((long) when, strmov(buff,"SET TIMESTAMP="),10);
|
||||||
*end++=';';
|
end= strmov(end, print_event_info->delimiter);
|
||||||
*end++='\n';
|
*end++='\n';
|
||||||
my_b_write(file, (byte*) buff, (uint) (end-buff));
|
my_b_write(file, (byte*) buff, (uint) (end-buff));
|
||||||
if (flags & LOG_EVENT_THREAD_SPECIFIC_F)
|
if (flags & LOG_EVENT_THREAD_SPECIFIC_F)
|
||||||
my_b_printf(file,"SET @@session.pseudo_thread_id=%lu;\n",(ulong)thread_id);
|
my_b_printf(file,"SET @@session.pseudo_thread_id=%lu%s\n",
|
||||||
|
(ulong)thread_id, print_event_info->delimiter);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If flags2_inited==0, this is an event from 3.23 or 4.0; nothing to
|
If flags2_inited==0, this is an event from 3.23 or 4.0; nothing to
|
||||||
@ -1745,7 +1768,7 @@ void Query_log_event::print_query_header(IO_CACHE* file,
|
|||||||
"@@session.sql_auto_is_null", &need_comma);
|
"@@session.sql_auto_is_null", &need_comma);
|
||||||
print_set_option(file, tmp, OPTION_RELAXED_UNIQUE_CHECKS, ~flags2,
|
print_set_option(file, tmp, OPTION_RELAXED_UNIQUE_CHECKS, ~flags2,
|
||||||
"@@session.unique_checks", &need_comma);
|
"@@session.unique_checks", &need_comma);
|
||||||
my_b_printf(file,";\n");
|
my_b_printf(file,"%s\n", print_event_info->delimiter);
|
||||||
print_event_info->flags2= flags2;
|
print_event_info->flags2= flags2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1773,15 +1796,17 @@ void Query_log_event::print_query_header(IO_CACHE* file,
|
|||||||
}
|
}
|
||||||
if (unlikely(print_event_info->sql_mode != sql_mode))
|
if (unlikely(print_event_info->sql_mode != sql_mode))
|
||||||
{
|
{
|
||||||
my_b_printf(file,"SET @@session.sql_mode=%lu;\n",(ulong)sql_mode);
|
my_b_printf(file,"SET @@session.sql_mode=%lu%s\n",
|
||||||
|
(ulong)sql_mode, print_event_info->delimiter);
|
||||||
print_event_info->sql_mode= sql_mode;
|
print_event_info->sql_mode= sql_mode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (print_event_info->auto_increment_increment != auto_increment_increment ||
|
if (print_event_info->auto_increment_increment != auto_increment_increment ||
|
||||||
print_event_info->auto_increment_offset != auto_increment_offset)
|
print_event_info->auto_increment_offset != auto_increment_offset)
|
||||||
{
|
{
|
||||||
my_b_printf(file,"SET @@session.auto_increment_increment=%lu, @@session.auto_increment_offset=%lu;\n",
|
my_b_printf(file,"SET @@session.auto_increment_increment=%lu, @@session.auto_increment_offset=%lu%s\n",
|
||||||
auto_increment_increment,auto_increment_offset);
|
auto_increment_increment,auto_increment_offset,
|
||||||
|
print_event_info->delimiter);
|
||||||
print_event_info->auto_increment_increment= auto_increment_increment;
|
print_event_info->auto_increment_increment= auto_increment_increment;
|
||||||
print_event_info->auto_increment_offset= auto_increment_offset;
|
print_event_info->auto_increment_offset= auto_increment_offset;
|
||||||
}
|
}
|
||||||
@ -1801,16 +1826,18 @@ void Query_log_event::print_query_header(IO_CACHE* file,
|
|||||||
if (cs_info)
|
if (cs_info)
|
||||||
{
|
{
|
||||||
/* for mysql client */
|
/* for mysql client */
|
||||||
my_b_printf(file, "/*!\\C %s */;\n", cs_info->csname);
|
my_b_printf(file, "/*!\\C %s */%s\n",
|
||||||
|
cs_info->csname, print_event_info->delimiter);
|
||||||
}
|
}
|
||||||
my_b_printf(file,"SET "
|
my_b_printf(file,"SET "
|
||||||
"@@session.character_set_client=%d,"
|
"@@session.character_set_client=%d,"
|
||||||
"@@session.collation_connection=%d,"
|
"@@session.collation_connection=%d,"
|
||||||
"@@session.collation_server=%d"
|
"@@session.collation_server=%d"
|
||||||
";\n",
|
"%s\n",
|
||||||
uint2korr(charset),
|
uint2korr(charset),
|
||||||
uint2korr(charset+2),
|
uint2korr(charset+2),
|
||||||
uint2korr(charset+4));
|
uint2korr(charset+4),
|
||||||
|
print_event_info->delimiter);
|
||||||
memcpy(print_event_info->charset, charset, 6);
|
memcpy(print_event_info->charset, charset, 6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1818,10 +1845,17 @@ void Query_log_event::print_query_header(IO_CACHE* file,
|
|||||||
{
|
{
|
||||||
if (bcmp(print_event_info->time_zone_str, time_zone_str, time_zone_len+1))
|
if (bcmp(print_event_info->time_zone_str, time_zone_str, time_zone_len+1))
|
||||||
{
|
{
|
||||||
my_b_printf(file,"SET @@session.time_zone='%s';\n", time_zone_str);
|
my_b_printf(file,"SET @@session.time_zone='%s'%s\n",
|
||||||
|
time_zone_str, print_event_info->delimiter);
|
||||||
memcpy(print_event_info->time_zone_str, time_zone_str, time_zone_len+1);
|
memcpy(print_event_info->time_zone_str, time_zone_str, time_zone_len+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (lc_time_names_number != print_event_info->lc_time_names_number)
|
||||||
|
{
|
||||||
|
my_b_printf(file, "SET @@session.lc_time_names=%d%s\n",
|
||||||
|
lc_time_names_number, print_event_info->delimiter);
|
||||||
|
print_event_info->lc_time_names_number= lc_time_names_number;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1831,7 +1865,7 @@ void Query_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
|||||||
|
|
||||||
print_query_header(&cache, print_event_info);
|
print_query_header(&cache, print_event_info);
|
||||||
my_b_write(&cache, (byte*) query, q_len);
|
my_b_write(&cache, (byte*) query, q_len);
|
||||||
my_b_printf(&cache, ";\n");
|
my_b_printf(&cache, "%s\n", print_event_info->delimiter);
|
||||||
}
|
}
|
||||||
#endif /* MYSQL_CLIENT */
|
#endif /* MYSQL_CLIENT */
|
||||||
|
|
||||||
@ -1964,6 +1998,19 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli,
|
|||||||
goto compare_errors;
|
goto compare_errors;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (lc_time_names_number)
|
||||||
|
{
|
||||||
|
if (!(thd->variables.lc_time_names=
|
||||||
|
my_locale_by_number(lc_time_names_number)))
|
||||||
|
{
|
||||||
|
my_printf_error(ER_UNKNOWN_ERROR,
|
||||||
|
"Unknown locale: '%d'", MYF(0), lc_time_names_number);
|
||||||
|
thd->variables.lc_time_names= &my_locale_en_US;
|
||||||
|
goto compare_errors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
thd->variables.lc_time_names= &my_locale_en_US;
|
||||||
|
|
||||||
/* Execute the query (note that we bypass dispatch_command()) */
|
/* Execute the query (note that we bypass dispatch_command()) */
|
||||||
mysql_parse(thd, thd->query, thd->query_length);
|
mysql_parse(thd, thd->query, thd->query_length);
|
||||||
@ -2188,9 +2235,9 @@ void Start_log_event_v3::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
|||||||
and rollback unfinished transaction.
|
and rollback unfinished transaction.
|
||||||
Probably this can be done with RESET CONNECTION (syntax to be defined).
|
Probably this can be done with RESET CONNECTION (syntax to be defined).
|
||||||
*/
|
*/
|
||||||
my_b_printf(&cache,"RESET CONNECTION;\n");
|
my_b_printf(&cache,"RESET CONNECTION%s\n", print_event_info->delimiter);
|
||||||
#else
|
#else
|
||||||
my_b_printf(&cache,"ROLLBACK;\n");
|
my_b_printf(&cache,"ROLLBACK%s\n", print_event_info->delimiter);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@ -2945,15 +2992,16 @@ void Load_log_event::print(FILE* file_arg, PRINT_EVENT_INFO* print_event_info,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (db && db[0] && different_db)
|
if (db && db[0] && different_db)
|
||||||
my_b_printf(&cache, "%suse %s;\n",
|
my_b_printf(&cache, "%suse %s%s\n",
|
||||||
commented ? "# " : "",
|
commented ? "# " : "",
|
||||||
db);
|
db, print_event_info->delimiter);
|
||||||
|
|
||||||
if (flags & LOG_EVENT_THREAD_SPECIFIC_F)
|
if (flags & LOG_EVENT_THREAD_SPECIFIC_F)
|
||||||
my_b_printf(&cache,"%sSET @@session.pseudo_thread_id=%lu;\n",
|
my_b_printf(&cache,"%sSET @@session.pseudo_thread_id=%lu%s\n",
|
||||||
commented ? "# " : "", (ulong)thread_id);
|
commented ? "# " : "", (ulong)thread_id,
|
||||||
|
print_event_info->delimiter);
|
||||||
my_b_printf(&cache, "%sLOAD DATA ",
|
my_b_printf(&cache, "%sLOAD DATA ",
|
||||||
commented ? "# " : "");
|
commented ? "# " : "");
|
||||||
if (check_fname_outside_temp_buf())
|
if (check_fname_outside_temp_buf())
|
||||||
my_b_printf(&cache, "LOCAL ");
|
my_b_printf(&cache, "LOCAL ");
|
||||||
my_b_printf(&cache, "INFILE '%-*s' ", fname_len, fname);
|
my_b_printf(&cache, "INFILE '%-*s' ", fname_len, fname);
|
||||||
@ -3003,7 +3051,7 @@ void Load_log_event::print(FILE* file_arg, PRINT_EVENT_INFO* print_event_info,
|
|||||||
my_b_printf(&cache, ")");
|
my_b_printf(&cache, ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
my_b_printf(&cache, ";\n");
|
my_b_printf(&cache, "%s\n", print_event_info->delimiter);
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
#endif /* MYSQL_CLIENT */
|
#endif /* MYSQL_CLIENT */
|
||||||
@ -3582,7 +3630,8 @@ void Intvar_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
|||||||
msg="INVALID_INT";
|
msg="INVALID_INT";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
my_b_printf(&cache, "%s=%s;\n", msg, llstr(val,llbuff));
|
my_b_printf(&cache, "%s=%s%s\n",
|
||||||
|
msg, llstr(val,llbuff), print_event_info->delimiter);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -3660,8 +3709,9 @@ void Rand_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
|||||||
print_header(&cache, print_event_info, FALSE);
|
print_header(&cache, print_event_info, FALSE);
|
||||||
my_b_printf(&cache, "\tRand\n");
|
my_b_printf(&cache, "\tRand\n");
|
||||||
}
|
}
|
||||||
my_b_printf(&cache, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n",
|
my_b_printf(&cache, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s%s\n",
|
||||||
llstr(seed1, llbuff),llstr(seed2, llbuff2));
|
llstr(seed1, llbuff),llstr(seed2, llbuff2),
|
||||||
|
print_event_info->delimiter);
|
||||||
}
|
}
|
||||||
#endif /* MYSQL_CLIENT */
|
#endif /* MYSQL_CLIENT */
|
||||||
|
|
||||||
@ -3734,7 +3784,7 @@ void Xid_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
|||||||
print_header(&cache, print_event_info, FALSE);
|
print_header(&cache, print_event_info, FALSE);
|
||||||
my_b_printf(&cache, "\tXid = %s\n", buf);
|
my_b_printf(&cache, "\tXid = %s\n", buf);
|
||||||
}
|
}
|
||||||
my_b_printf(&cache, "COMMIT;\n");
|
my_b_printf(&cache, "COMMIT%s\n", print_event_info->delimiter);
|
||||||
}
|
}
|
||||||
#endif /* MYSQL_CLIENT */
|
#endif /* MYSQL_CLIENT */
|
||||||
|
|
||||||
@ -3939,7 +3989,7 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
|||||||
|
|
||||||
if (is_null)
|
if (is_null)
|
||||||
{
|
{
|
||||||
my_b_printf(&cache, ":=NULL;\n");
|
my_b_printf(&cache, ":=NULL%s\n", print_event_info->delimiter);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3947,12 +3997,12 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
|||||||
case REAL_RESULT:
|
case REAL_RESULT:
|
||||||
double real_val;
|
double real_val;
|
||||||
float8get(real_val, val);
|
float8get(real_val, val);
|
||||||
my_b_printf(&cache, ":=%.14g;\n", real_val);
|
my_b_printf(&cache, ":=%.14g%s\n", real_val, print_event_info->delimiter);
|
||||||
break;
|
break;
|
||||||
case INT_RESULT:
|
case INT_RESULT:
|
||||||
char int_buf[22];
|
char int_buf[22];
|
||||||
longlong10_to_str(uint8korr(val), int_buf, -10);
|
longlong10_to_str(uint8korr(val), int_buf, -10);
|
||||||
my_b_printf(&cache, ":=%s;\n", int_buf);
|
my_b_printf(&cache, ":=%s%s\n", int_buf, print_event_info->delimiter);
|
||||||
break;
|
break;
|
||||||
case DECIMAL_RESULT:
|
case DECIMAL_RESULT:
|
||||||
{
|
{
|
||||||
@ -3968,7 +4018,7 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
|||||||
bin2decimal(val+2, &dec, precision, scale);
|
bin2decimal(val+2, &dec, precision, scale);
|
||||||
decimal2string(&dec, str_buf, &str_len, 0, 0, 0);
|
decimal2string(&dec, str_buf, &str_len, 0, 0, 0);
|
||||||
str_buf[str_len]= 0;
|
str_buf[str_len]= 0;
|
||||||
my_b_printf(&cache, ":=%s;\n",str_buf);
|
my_b_printf(&cache, ":=%s%s\n", str_buf, print_event_info->delimiter);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
@ -4004,9 +4054,11 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
|||||||
Generate an unusable command (=> syntax error) is probably the best
|
Generate an unusable command (=> syntax error) is probably the best
|
||||||
thing we can do here.
|
thing we can do here.
|
||||||
*/
|
*/
|
||||||
my_b_printf(&cache, ":=???;\n");
|
my_b_printf(&cache, ":=???%s\n", print_event_info->delimiter);
|
||||||
else
|
else
|
||||||
my_b_printf(&cache, ":=_%s %s COLLATE `%s`;\n", cs->csname, hex_str, cs->name);
|
my_b_printf(&cache, ":=_%s %s COLLATE `%s`%s\n",
|
||||||
|
cs->csname, hex_str, cs->name,
|
||||||
|
print_event_info->delimiter);
|
||||||
my_afree(hex_str);
|
my_afree(hex_str);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -5108,12 +5160,12 @@ void Execute_load_query_log_event::print(FILE* file,
|
|||||||
my_b_printf(&cache, " REPLACE");
|
my_b_printf(&cache, " REPLACE");
|
||||||
my_b_printf(&cache, " INTO");
|
my_b_printf(&cache, " INTO");
|
||||||
my_b_write(&cache, (byte*) query + fn_pos_end, q_len-fn_pos_end);
|
my_b_write(&cache, (byte*) query + fn_pos_end, q_len-fn_pos_end);
|
||||||
my_b_printf(&cache, ";\n");
|
my_b_printf(&cache, "%s\n", print_event_info->delimiter);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
my_b_write(&cache, (byte*) query, q_len);
|
my_b_write(&cache, (byte*) query, q_len);
|
||||||
my_b_printf(&cache, ";\n");
|
my_b_printf(&cache, "%s\n", print_event_info->delimiter);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!print_event_info->short_form)
|
if (!print_event_info->short_form)
|
||||||
@ -5287,8 +5339,6 @@ char* sql_ex_info::init(char* buf,char* buf_end,bool use_new_format)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
Rows_log_event member functions
|
Rows_log_event member functions
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
@ -6582,10 +6632,13 @@ copy_extra_record_fields(TABLE *table,
|
|||||||
|
|
||||||
case MYSQL_TYPE_BIT:
|
case MYSQL_TYPE_BIT:
|
||||||
Field_bit *f= static_cast<Field_bit*>(*field_ptr);
|
Field_bit *f= static_cast<Field_bit*>(*field_ptr);
|
||||||
my_ptrdiff_t const offset= table->record[1] - table->record[0];
|
if (f->bit_len > 0)
|
||||||
uchar const bits=
|
{
|
||||||
get_rec_bits(f->bit_ptr + offset, f->bit_ofs, f->bit_len);
|
my_ptrdiff_t const offset= table->record[1] - table->record[0];
|
||||||
set_rec_bits(bits, f->bit_ptr, f->bit_ofs, f->bit_len);
|
uchar const bits=
|
||||||
|
get_rec_bits(f->bit_ptr + offset, f->bit_ofs, f->bit_len);
|
||||||
|
set_rec_bits(bits, f->bit_ptr, f->bit_ofs, f->bit_len);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7286,4 +7339,3 @@ void Update_rows_log_event::print(FILE *file,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* defined(HAVE_ROW_BASED_REPLICATION) */
|
|
||||||
|
@ -270,6 +270,8 @@ struct sql_ex_info
|
|||||||
*/
|
*/
|
||||||
#define Q_CATALOG_NZ_CODE 6
|
#define Q_CATALOG_NZ_CODE 6
|
||||||
|
|
||||||
|
#define Q_LC_TIME_NAMES_CODE 7
|
||||||
|
|
||||||
/* Intvar event post-header */
|
/* Intvar event post-header */
|
||||||
|
|
||||||
#define I_TYPE_OFFSET 0
|
#define I_TYPE_OFFSET 0
|
||||||
@ -422,12 +424,18 @@ struct sql_ex_info
|
|||||||
either, as the manual says (because a too big in-memory temp table is
|
either, as the manual says (because a too big in-memory temp table is
|
||||||
automatically written to disk).
|
automatically written to disk).
|
||||||
*/
|
*/
|
||||||
#define OPTIONS_WRITTEN_TO_BIN_LOG (OPTION_AUTO_IS_NULL | \
|
#define OPTIONS_WRITTEN_TO_BIN_LOG \
|
||||||
OPTION_NO_FOREIGN_KEY_CHECKS | OPTION_RELAXED_UNIQUE_CHECKS)
|
(OPTION_AUTO_IS_NULL | OPTION_NO_FOREIGN_KEY_CHECKS | \
|
||||||
|
OPTION_RELAXED_UNIQUE_CHECKS | OPTION_NOT_AUTOCOMMIT)
|
||||||
|
|
||||||
#if OPTIONS_WRITTEN_TO_BIN_LOG != ((1L << 14) | (1L << 26) | (1L << 27))
|
/* Shouldn't be defined before */
|
||||||
|
#define EXPECTED_OPTIONS \
|
||||||
|
((ULL(1) << 14) | (ULL(1) << 26) | (ULL(1) << 27) | (ULL(1) << 19))
|
||||||
|
|
||||||
|
#if OPTIONS_WRITTEN_TO_BIN_LOG != EXPECTED_OPTIONS
|
||||||
#error OPTIONS_WRITTEN_TO_BIN_LOG must NOT change their values!
|
#error OPTIONS_WRITTEN_TO_BIN_LOG must NOT change their values!
|
||||||
#endif
|
#endif
|
||||||
|
#undef EXPECTED_OPTIONS /* You shouldn't use this one */
|
||||||
|
|
||||||
enum Log_event_type
|
enum Log_event_type
|
||||||
{
|
{
|
||||||
@ -524,9 +532,11 @@ typedef struct st_print_event_info
|
|||||||
bool charset_inited;
|
bool charset_inited;
|
||||||
char charset[6]; // 3 variables, each of them storable in 2 bytes
|
char charset[6]; // 3 variables, each of them storable in 2 bytes
|
||||||
char time_zone_str[MAX_TIME_ZONE_NAME_LENGTH];
|
char time_zone_str[MAX_TIME_ZONE_NAME_LENGTH];
|
||||||
|
uint lc_time_names_number;
|
||||||
st_print_event_info()
|
st_print_event_info()
|
||||||
:flags2_inited(0), sql_mode_inited(0),
|
:flags2_inited(0), sql_mode_inited(0),
|
||||||
auto_increment_increment(1),auto_increment_offset(1), charset_inited(0)
|
auto_increment_increment(1),auto_increment_offset(1), charset_inited(0),
|
||||||
|
lc_time_names_number(0)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Currently we only use static PRINT_EVENT_INFO objects, so zeroed at
|
Currently we only use static PRINT_EVENT_INFO objects, so zeroed at
|
||||||
@ -536,6 +546,7 @@ typedef struct st_print_event_info
|
|||||||
bzero(db, sizeof(db));
|
bzero(db, sizeof(db));
|
||||||
bzero(charset, sizeof(charset));
|
bzero(charset, sizeof(charset));
|
||||||
bzero(time_zone_str, sizeof(time_zone_str));
|
bzero(time_zone_str, sizeof(time_zone_str));
|
||||||
|
strcpy(delimiter, ";");
|
||||||
uint const flags = MYF(MY_WME | MY_NABP);
|
uint const flags = MYF(MY_WME | MY_NABP);
|
||||||
init_io_cache(&head_cache, -1, 0, WRITE_CACHE, 0L, FALSE, flags);
|
init_io_cache(&head_cache, -1, 0, WRITE_CACHE, 0L, FALSE, flags);
|
||||||
init_io_cache(&body_cache, -1, 0, WRITE_CACHE, 0L, FALSE, flags);
|
init_io_cache(&body_cache, -1, 0, WRITE_CACHE, 0L, FALSE, flags);
|
||||||
@ -552,6 +563,7 @@ typedef struct st_print_event_info
|
|||||||
bool base64_output;
|
bool base64_output;
|
||||||
my_off_t hexdump_from;
|
my_off_t hexdump_from;
|
||||||
uint8 common_header_len;
|
uint8 common_header_len;
|
||||||
|
char delimiter[16];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
These two caches are used by the row-based replication events to
|
These two caches are used by the row-based replication events to
|
||||||
@ -574,6 +586,13 @@ typedef struct st_print_event_info
|
|||||||
class Log_event
|
class Log_event
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/*
|
||||||
|
The following type definition is to be used whenever data is placed
|
||||||
|
and manipulated in a common buffer. Use this typedef for buffers
|
||||||
|
that contain data containing binary and character data.
|
||||||
|
*/
|
||||||
|
typedef unsigned char Byte;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The offset in the log where this event originally appeared (it is
|
The offset in the log where this event originally appeared (it is
|
||||||
preserved in relay logs, making SHOW SLAVE STATUS able to print
|
preserved in relay logs, making SHOW SLAVE STATUS able to print
|
||||||
@ -755,7 +774,7 @@ public:
|
|||||||
class Query_log_event: public Log_event
|
class Query_log_event: public Log_event
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
char* data_buf;
|
Log_event::Byte* data_buf;
|
||||||
public:
|
public:
|
||||||
const char* query;
|
const char* query;
|
||||||
const char* catalog;
|
const char* catalog;
|
||||||
@ -826,6 +845,7 @@ public:
|
|||||||
char charset[6];
|
char charset[6];
|
||||||
uint time_zone_len; /* 0 means uninited */
|
uint time_zone_len; /* 0 means uninited */
|
||||||
const char *time_zone_str;
|
const char *time_zone_str;
|
||||||
|
uint lc_time_names_number; /* 0 means en_US */
|
||||||
|
|
||||||
#ifndef MYSQL_CLIENT
|
#ifndef MYSQL_CLIENT
|
||||||
|
|
||||||
@ -1690,8 +1710,6 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
char *str_to_hex(char *to, const char *from, uint len);
|
char *str_to_hex(char *to, const char *from, uint len);
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Table map log event class
|
Table map log event class
|
||||||
@ -2020,7 +2038,7 @@ public:
|
|||||||
Write_rows_log_event(const char *buf, uint event_len,
|
Write_rows_log_event(const char *buf, uint event_len,
|
||||||
const Format_description_log_event *description_event);
|
const Format_description_log_event *description_event);
|
||||||
#endif
|
#endif
|
||||||
#if !defined(MYSQL_CLIENT) && defined(HAVE_ROW_BASED_REPLICATION)
|
#if !defined(MYSQL_CLIENT)
|
||||||
static bool binlog_row_logging_function(THD *thd, TABLE *table,
|
static bool binlog_row_logging_function(THD *thd, TABLE *table,
|
||||||
bool is_transactional,
|
bool is_transactional,
|
||||||
MY_BITMAP *cols,
|
MY_BITMAP *cols,
|
||||||
@ -2085,7 +2103,7 @@ public:
|
|||||||
const Format_description_log_event *description_event);
|
const Format_description_log_event *description_event);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(MYSQL_CLIENT) && defined(HAVE_ROW_BASED_REPLICATION)
|
#if !defined(MYSQL_CLIENT)
|
||||||
static bool binlog_row_logging_function(THD *thd, TABLE *table,
|
static bool binlog_row_logging_function(THD *thd, TABLE *table,
|
||||||
bool is_transactional,
|
bool is_transactional,
|
||||||
MY_BITMAP *cols,
|
MY_BITMAP *cols,
|
||||||
@ -2155,7 +2173,7 @@ public:
|
|||||||
Delete_rows_log_event(const char *buf, uint event_len,
|
Delete_rows_log_event(const char *buf, uint event_len,
|
||||||
const Format_description_log_event *description_event);
|
const Format_description_log_event *description_event);
|
||||||
#endif
|
#endif
|
||||||
#if !defined(MYSQL_CLIENT) && defined(HAVE_ROW_BASED_REPLICATION)
|
#if !defined(MYSQL_CLIENT)
|
||||||
static bool binlog_row_logging_function(THD *thd, TABLE *table,
|
static bool binlog_row_logging_function(THD *thd, TABLE *table,
|
||||||
bool is_transactional,
|
bool is_transactional,
|
||||||
MY_BITMAP *cols,
|
MY_BITMAP *cols,
|
||||||
@ -2189,6 +2207,4 @@ private:
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* HAVE_ROW_BASED_REPLICATION */
|
|
||||||
|
|
||||||
#endif /* _log_event_h */
|
#endif /* _log_event_h */
|
||||||
|
@ -117,6 +117,7 @@ enum Derivation
|
|||||||
|
|
||||||
typedef struct my_locale_st
|
typedef struct my_locale_st
|
||||||
{
|
{
|
||||||
|
uint number;
|
||||||
const char *name;
|
const char *name;
|
||||||
const char *description;
|
const char *description;
|
||||||
const bool is_ascii;
|
const bool is_ascii;
|
||||||
@ -125,9 +126,11 @@ typedef struct my_locale_st
|
|||||||
TYPELIB *day_names;
|
TYPELIB *day_names;
|
||||||
TYPELIB *ab_day_names;
|
TYPELIB *ab_day_names;
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
my_locale_st(const char *name_par, const char *descr_par, bool is_ascii_par,
|
my_locale_st(uint number_par,
|
||||||
|
const char *name_par, const char *descr_par, bool is_ascii_par,
|
||||||
TYPELIB *month_names_par, TYPELIB *ab_month_names_par,
|
TYPELIB *month_names_par, TYPELIB *ab_month_names_par,
|
||||||
TYPELIB *day_names_par, TYPELIB *ab_day_names_par) :
|
TYPELIB *day_names_par, TYPELIB *ab_day_names_par) :
|
||||||
|
number(number_par),
|
||||||
name(name_par), description(descr_par), is_ascii(is_ascii_par),
|
name(name_par), description(descr_par), is_ascii(is_ascii_par),
|
||||||
month_names(month_names_par), ab_month_names(ab_month_names_par),
|
month_names(month_names_par), ab_month_names(ab_month_names_par),
|
||||||
day_names(day_names_par), ab_day_names(ab_day_names_par)
|
day_names(day_names_par), ab_day_names(ab_day_names_par)
|
||||||
@ -139,6 +142,7 @@ extern MY_LOCALE my_locale_en_US;
|
|||||||
extern MY_LOCALE *my_locales[];
|
extern MY_LOCALE *my_locales[];
|
||||||
|
|
||||||
MY_LOCALE *my_locale_by_name(const char *name);
|
MY_LOCALE *my_locale_by_name(const char *name);
|
||||||
|
MY_LOCALE *my_locale_by_number(uint number);
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
Configuration parameters
|
Configuration parameters
|
||||||
@ -302,54 +306,54 @@ MY_LOCALE *my_locale_by_name(const char *name);
|
|||||||
TODO: separate three contexts above, move them to separate bitfields.
|
TODO: separate three contexts above, move them to separate bitfields.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define SELECT_DISTINCT (LL(1) << 0) // SELECT, user
|
#define SELECT_DISTINCT (ULL(1) << 0) // SELECT, user
|
||||||
#define SELECT_STRAIGHT_JOIN (LL(1) << 1) // SELECT, user
|
#define SELECT_STRAIGHT_JOIN (ULL(1) << 1) // SELECT, user
|
||||||
#define SELECT_DESCRIBE (LL(1) << 2) // SELECT, user
|
#define SELECT_DESCRIBE (ULL(1) << 2) // SELECT, user
|
||||||
#define SELECT_SMALL_RESULT (LL(1) << 3) // SELECT, user
|
#define SELECT_SMALL_RESULT (ULL(1) << 3) // SELECT, user
|
||||||
#define SELECT_BIG_RESULT (LL(1) << 4) // SELECT, user
|
#define SELECT_BIG_RESULT (ULL(1) << 4) // SELECT, user
|
||||||
#define OPTION_FOUND_ROWS (LL(1) << 5) // SELECT, user
|
#define OPTION_FOUND_ROWS (ULL(1) << 5) // SELECT, user
|
||||||
#define OPTION_TO_QUERY_CACHE (LL(1) << 6) // SELECT, user
|
#define OPTION_TO_QUERY_CACHE (ULL(1) << 6) // SELECT, user
|
||||||
#define SELECT_NO_JOIN_CACHE (LL(1) << 7) // intern
|
#define SELECT_NO_JOIN_CACHE (ULL(1) << 7) // intern
|
||||||
#define OPTION_BIG_TABLES (LL(1) << 8) // THD, user
|
#define OPTION_BIG_TABLES (ULL(1) << 8) // THD, user
|
||||||
#define OPTION_BIG_SELECTS (LL(1) << 9) // THD, user
|
#define OPTION_BIG_SELECTS (ULL(1) << 9) // THD, user
|
||||||
#define OPTION_LOG_OFF (LL(1) << 10) // THD, user
|
#define OPTION_LOG_OFF (ULL(1) << 10) // THD, user
|
||||||
#define OPTION_QUOTE_SHOW_CREATE (LL(1) << 11) // THD, user
|
#define OPTION_QUOTE_SHOW_CREATE (ULL(1) << 11) // THD, user
|
||||||
#define TMP_TABLE_ALL_COLUMNS (LL(1) << 12) // SELECT, intern
|
#define TMP_TABLE_ALL_COLUMNS (ULL(1) << 12) // SELECT, intern
|
||||||
#define OPTION_WARNINGS (LL(1) << 13) // THD, user
|
#define OPTION_WARNINGS (ULL(1) << 13) // THD, user
|
||||||
#define OPTION_AUTO_IS_NULL (LL(1) << 14) // THD, user, binlog
|
#define OPTION_AUTO_IS_NULL (ULL(1) << 14) // THD, user, binlog
|
||||||
#define OPTION_FOUND_COMMENT (LL(1) << 15) // SELECT, intern, parser
|
#define OPTION_FOUND_COMMENT (ULL(1) << 15) // SELECT, intern, parser
|
||||||
#define OPTION_SAFE_UPDATES (LL(1) << 16) // THD, user
|
#define OPTION_SAFE_UPDATES (ULL(1) << 16) // THD, user
|
||||||
#define OPTION_BUFFER_RESULT (LL(1) << 17) // SELECT, user
|
#define OPTION_BUFFER_RESULT (ULL(1) << 17) // SELECT, user
|
||||||
#define OPTION_BIN_LOG (LL(1) << 18) // THD, user
|
#define OPTION_BIN_LOG (ULL(1) << 18) // THD, user
|
||||||
#define OPTION_NOT_AUTOCOMMIT (LL(1) << 19) // THD, user
|
#define OPTION_NOT_AUTOCOMMIT (ULL(1) << 19) // THD, user
|
||||||
#define OPTION_BEGIN (LL(1) << 20) // THD, intern
|
#define OPTION_BEGIN (ULL(1) << 20) // THD, intern
|
||||||
#define OPTION_TABLE_LOCK (LL(1) << 21) // THD, intern
|
#define OPTION_TABLE_LOCK (ULL(1) << 21) // THD, intern
|
||||||
#define OPTION_QUICK (LL(1) << 22) // SELECT (for DELETE)
|
#define OPTION_QUICK (ULL(1) << 22) // SELECT (for DELETE)
|
||||||
#define OPTION_KEEP_LOG (LL(1) << 23) // Keep binlog on rollback
|
#define OPTION_KEEP_LOG (ULL(1) << 23) // Keep binlog on rollback
|
||||||
|
|
||||||
/* The following is used to detect a conflict with DISTINCT */
|
/* The following is used to detect a conflict with DISTINCT */
|
||||||
#define SELECT_ALL (LL(1) << 24) // SELECT, user, parser
|
#define SELECT_ALL (ULL(1) << 24) // SELECT, user, parser
|
||||||
|
|
||||||
/* Set if we are updating a non-transaction safe table */
|
/* Set if we are updating a non-transaction safe table */
|
||||||
#define OPTION_STATUS_NO_TRANS_UPDATE (LL(1) << 25) // THD, intern
|
#define OPTION_STATUS_NO_TRANS_UPDATE (ULL(1) << 25) // THD, intern
|
||||||
|
|
||||||
/* The following can be set when importing tables in a 'wrong order'
|
/* The following can be set when importing tables in a 'wrong order'
|
||||||
to suppress foreign key checks */
|
to suppress foreign key checks */
|
||||||
#define OPTION_NO_FOREIGN_KEY_CHECKS (LL(1) << 26) // THD, user, binlog
|
#define OPTION_NO_FOREIGN_KEY_CHECKS (ULL(1) << 26) // THD, user, binlog
|
||||||
/* The following speeds up inserts to InnoDB tables by suppressing unique
|
/* The following speeds up inserts to InnoDB tables by suppressing unique
|
||||||
key checks in some cases */
|
key checks in some cases */
|
||||||
#define OPTION_RELAXED_UNIQUE_CHECKS (LL(1) << 27) // THD, user, binlog
|
#define OPTION_RELAXED_UNIQUE_CHECKS (ULL(1) << 27) // THD, user, binlog
|
||||||
#define SELECT_NO_UNLOCK (LL(1) << 28) // SELECT, intern
|
#define SELECT_NO_UNLOCK (ULL(1) << 28) // SELECT, intern
|
||||||
#define OPTION_SCHEMA_TABLE (LL(1) << 29) // SELECT, intern
|
#define OPTION_SCHEMA_TABLE (ULL(1) << 29) // SELECT, intern
|
||||||
/* Flag set if setup_tables already done */
|
/* Flag set if setup_tables already done */
|
||||||
#define OPTION_SETUP_TABLES_DONE (LL(1) << 30) // intern
|
#define OPTION_SETUP_TABLES_DONE (ULL(1) << 30) // intern
|
||||||
/* If not set then the thread will ignore all warnings with level notes. */
|
/* If not set then the thread will ignore all warnings with level notes. */
|
||||||
#define OPTION_SQL_NOTES (LL(1) << 31) // THD, user
|
#define OPTION_SQL_NOTES (ULL(1) << 31) // THD, user
|
||||||
/*
|
/*
|
||||||
Force the used temporary table to be a MyISAM table (because we will use
|
Force the used temporary table to be a MyISAM table (because we will use
|
||||||
fulltext functions when reading from it.
|
fulltext functions when reading from it.
|
||||||
*/
|
*/
|
||||||
#define TMP_TABLE_FORCE_MYISAM (LL(1) << 32)
|
#define TMP_TABLE_FORCE_MYISAM (ULL(1) << 32)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Maximum length of time zone name that we support
|
Maximum length of time zone name that we support
|
||||||
@ -1559,9 +1563,7 @@ extern ulong query_buff_size, thread_stack;
|
|||||||
extern ulong max_prepared_stmt_count, prepared_stmt_count;
|
extern ulong max_prepared_stmt_count, prepared_stmt_count;
|
||||||
extern ulong binlog_cache_size, max_binlog_cache_size, open_files_limit;
|
extern ulong binlog_cache_size, max_binlog_cache_size, open_files_limit;
|
||||||
extern ulong max_binlog_size, max_relay_log_size;
|
extern ulong max_binlog_size, max_relay_log_size;
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
extern ulong opt_binlog_rows_event_max_size;
|
extern ulong opt_binlog_rows_event_max_size;
|
||||||
#endif
|
|
||||||
extern ulong rpl_recovery_rank, thread_cache_size;
|
extern ulong rpl_recovery_rank, thread_cache_size;
|
||||||
extern ulong back_log;
|
extern ulong back_log;
|
||||||
extern ulong specialflag, current_pid;
|
extern ulong specialflag, current_pid;
|
||||||
@ -1661,7 +1663,6 @@ extern handlerton *partition_hton;
|
|||||||
extern handlerton *myisam_hton;
|
extern handlerton *myisam_hton;
|
||||||
extern handlerton *heap_hton;
|
extern handlerton *heap_hton;
|
||||||
|
|
||||||
extern SHOW_COMP_OPTION have_row_based_replication;
|
|
||||||
extern SHOW_COMP_OPTION have_openssl, have_symlink, have_dlopen;
|
extern SHOW_COMP_OPTION have_openssl, have_symlink, have_dlopen;
|
||||||
extern SHOW_COMP_OPTION have_query_cache;
|
extern SHOW_COMP_OPTION have_query_cache;
|
||||||
extern SHOW_COMP_OPTION have_geometry, have_rtree_keys;
|
extern SHOW_COMP_OPTION have_geometry, have_rtree_keys;
|
||||||
|
@ -27,9 +27,7 @@
|
|||||||
|
|
||||||
#include "../storage/myisam/ha_myisam.h"
|
#include "../storage/myisam/ha_myisam.h"
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
#include "rpl_injector.h"
|
#include "rpl_injector.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WITH_INNOBASE_STORAGE_ENGINE
|
#ifdef WITH_INNOBASE_STORAGE_ENGINE
|
||||||
#define OPT_INNODB_DEFAULT 1
|
#define OPT_INNODB_DEFAULT 1
|
||||||
@ -447,12 +445,8 @@ volatile bool mqh_used = 0;
|
|||||||
my_bool opt_noacl;
|
my_bool opt_noacl;
|
||||||
my_bool sp_automatic_privileges= 1;
|
my_bool sp_automatic_privileges= 1;
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
ulong opt_binlog_rows_event_max_size;
|
ulong opt_binlog_rows_event_max_size;
|
||||||
const char *binlog_format_names[]= {"STATEMENT", "ROW", "MIXED", NullS};
|
const char *binlog_format_names[]= {"STATEMENT", "ROW", "MIXED", NullS};
|
||||||
#else
|
|
||||||
const char *binlog_format_names[]= {"STATEMENT", NullS};
|
|
||||||
#endif
|
|
||||||
TYPELIB binlog_format_typelib=
|
TYPELIB binlog_format_typelib=
|
||||||
{ array_elements(binlog_format_names)-1,"",
|
{ array_elements(binlog_format_names)-1,"",
|
||||||
binlog_format_names, NULL };
|
binlog_format_names, NULL };
|
||||||
@ -564,7 +558,6 @@ CHARSET_INFO *system_charset_info, *files_charset_info ;
|
|||||||
CHARSET_INFO *national_charset_info, *table_alias_charset;
|
CHARSET_INFO *national_charset_info, *table_alias_charset;
|
||||||
CHARSET_INFO *character_set_filesystem;
|
CHARSET_INFO *character_set_filesystem;
|
||||||
|
|
||||||
SHOW_COMP_OPTION have_row_based_replication;
|
|
||||||
SHOW_COMP_OPTION have_openssl, have_symlink, have_dlopen, have_query_cache;
|
SHOW_COMP_OPTION have_openssl, have_symlink, have_dlopen, have_query_cache;
|
||||||
SHOW_COMP_OPTION have_geometry, have_rtree_keys;
|
SHOW_COMP_OPTION have_geometry, have_rtree_keys;
|
||||||
SHOW_COMP_OPTION have_crypt, have_compress;
|
SHOW_COMP_OPTION have_crypt, have_compress;
|
||||||
@ -1172,9 +1165,7 @@ void clean_up(bool print_message)
|
|||||||
what they have that is dependent on the binlog
|
what they have that is dependent on the binlog
|
||||||
*/
|
*/
|
||||||
ha_binlog_end(current_thd);
|
ha_binlog_end(current_thd);
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
injector::free_instance();
|
injector::free_instance();
|
||||||
#endif
|
|
||||||
mysql_bin_log.cleanup();
|
mysql_bin_log.cleanup();
|
||||||
|
|
||||||
#ifdef HAVE_REPLICATION
|
#ifdef HAVE_REPLICATION
|
||||||
@ -3171,11 +3162,7 @@ with --log-bin instead.");
|
|||||||
}
|
}
|
||||||
if (global_system_variables.binlog_format == BINLOG_FORMAT_UNSPEC)
|
if (global_system_variables.binlog_format == BINLOG_FORMAT_UNSPEC)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_ROW_BASED_REPLICATION)
|
|
||||||
global_system_variables.binlog_format= BINLOG_FORMAT_MIXED;
|
global_system_variables.binlog_format= BINLOG_FORMAT_MIXED;
|
||||||
#else
|
|
||||||
global_system_variables.binlog_format= BINLOG_FORMAT_STMT;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check that we have not let the format to unspecified at this point */
|
/* Check that we have not let the format to unspecified at this point */
|
||||||
@ -4716,9 +4703,7 @@ enum options_mysqld
|
|||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
OPT_BINLOG_SHOW_XID,
|
OPT_BINLOG_SHOW_XID,
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
OPT_BINLOG_ROWS_EVENT_MAX_SIZE,
|
OPT_BINLOG_ROWS_EVENT_MAX_SIZE,
|
||||||
#endif
|
|
||||||
OPT_WANT_CORE, OPT_CONCURRENT_INSERT,
|
OPT_WANT_CORE, OPT_CONCURRENT_INSERT,
|
||||||
OPT_MEMLOCK, OPT_MYISAM_RECOVER,
|
OPT_MEMLOCK, OPT_MYISAM_RECOVER,
|
||||||
OPT_REPLICATE_REWRITE_DB, OPT_SERVER_ID,
|
OPT_REPLICATE_REWRITE_DB, OPT_SERVER_ID,
|
||||||
@ -4929,7 +4914,6 @@ struct my_option my_long_options[] =
|
|||||||
(gptr*) &my_bind_addr_str, (gptr*) &my_bind_addr_str, 0, GET_STR,
|
(gptr*) &my_bind_addr_str, (gptr*) &my_bind_addr_str, 0, GET_STR,
|
||||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"binlog_format", OPT_BINLOG_FORMAT,
|
{"binlog_format", OPT_BINLOG_FORMAT,
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
"Tell the master the form of binary logging to use: either 'row' for "
|
"Tell the master the form of binary logging to use: either 'row' for "
|
||||||
"row-based binary logging, or 'statement' for statement-based binary "
|
"row-based binary logging, or 'statement' for statement-based binary "
|
||||||
"logging, or 'mixed'. 'mixed' is statement-based binary logging except "
|
"logging, or 'mixed'. 'mixed' is statement-based binary logging except "
|
||||||
@ -4938,18 +4922,9 @@ struct my_option my_long_options[] =
|
|||||||
"those, row-based binary logging is automatically used. "
|
"those, row-based binary logging is automatically used. "
|
||||||
#ifdef HAVE_NDB_BINLOG
|
#ifdef HAVE_NDB_BINLOG
|
||||||
"If ndbcluster is enabled, the default is 'row'."
|
"If ndbcluster is enabled, the default is 'row'."
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
"Tell the master the form of binary logging to use: this build "
|
|
||||||
"supports only statement-based binary logging, so only 'statement' is "
|
|
||||||
"a legal value."
|
|
||||||
#endif
|
#endif
|
||||||
, 0, 0, 0, GET_STR, REQUIRED_ARG,
|
, 0, 0, 0, GET_STR, REQUIRED_ARG,
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
BINLOG_FORMAT_MIXED
|
BINLOG_FORMAT_MIXED
|
||||||
#else
|
|
||||||
BINLOG_FORMAT_STMT
|
|
||||||
#endif
|
|
||||||
, 0, 0, 0, 0, 0 },
|
, 0, 0, 0, 0, 0 },
|
||||||
{"binlog-do-db", OPT_BINLOG_DO_DB,
|
{"binlog-do-db", OPT_BINLOG_DO_DB,
|
||||||
"Tells the master it should log updates for the specified database, and exclude all others not explicitly mentioned.",
|
"Tells the master it should log updates for the specified database, and exclude all others not explicitly mentioned.",
|
||||||
@ -4957,7 +4932,6 @@ struct my_option my_long_options[] =
|
|||||||
{"binlog-ignore-db", OPT_BINLOG_IGNORE_DB,
|
{"binlog-ignore-db", OPT_BINLOG_IGNORE_DB,
|
||||||
"Tells the master that updates to the given database should not be logged tothe binary log.",
|
"Tells the master that updates to the given database should not be logged tothe binary log.",
|
||||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
{"binlog-row-event-max-size", OPT_BINLOG_ROWS_EVENT_MAX_SIZE,
|
{"binlog-row-event-max-size", OPT_BINLOG_ROWS_EVENT_MAX_SIZE,
|
||||||
"The maximum size of a row-based binary log event in bytes. Rows will be "
|
"The maximum size of a row-based binary log event in bytes. Rows will be "
|
||||||
"grouped into events smaller than this size if possible. "
|
"grouped into events smaller than this size if possible. "
|
||||||
@ -4969,7 +4943,6 @@ struct my_option my_long_options[] =
|
|||||||
/* sub_size */ 0, /* block_size */ 256,
|
/* sub_size */ 0, /* block_size */ 256,
|
||||||
/* app_type */ 0
|
/* app_type */ 0
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
#ifndef DISABLE_GRANT_OPTIONS
|
#ifndef DISABLE_GRANT_OPTIONS
|
||||||
{"bootstrap", OPT_BOOTSTRAP, "Used by mysql installation scripts.", 0, 0, 0,
|
{"bootstrap", OPT_BOOTSTRAP, "Used by mysql installation scripts.", 0, 0, 0,
|
||||||
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
@ -5235,11 +5208,9 @@ Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite,
|
|||||||
"If equal to 0 (the default), then when --log-bin is used, creation of "
|
"If equal to 0 (the default), then when --log-bin is used, creation of "
|
||||||
"a stored function (or trigger) is allowed only to users having the SUPER privilege "
|
"a stored function (or trigger) is allowed only to users having the SUPER privilege "
|
||||||
"and only if this stored function (trigger) may not break binary logging."
|
"and only if this stored function (trigger) may not break binary logging."
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
"Note that if ALL connections to this server ALWAYS use row-based binary "
|
"Note that if ALL connections to this server ALWAYS use row-based binary "
|
||||||
"logging, the security issues do not exist and the binary logging cannot "
|
"logging, the security issues do not exist and the binary logging cannot "
|
||||||
"break, so you can safely set this to 1."
|
"break, so you can safely set this to 1."
|
||||||
#endif
|
|
||||||
,(gptr*) &trust_function_creators, (gptr*) &trust_function_creators, 0,
|
,(gptr*) &trust_function_creators, (gptr*) &trust_function_creators, 0,
|
||||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"log-error", OPT_ERROR_LOG_FILE, "Error log file.",
|
{"log-error", OPT_ERROR_LOG_FILE, "Error log file.",
|
||||||
@ -7077,11 +7048,6 @@ static void mysql_init_variables(void)
|
|||||||
#else
|
#else
|
||||||
have_partition_db= SHOW_OPTION_NO;
|
have_partition_db= SHOW_OPTION_NO;
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
have_row_based_replication= SHOW_OPTION_YES;
|
|
||||||
#else
|
|
||||||
have_row_based_replication= SHOW_OPTION_NO;
|
|
||||||
#endif
|
|
||||||
#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
|
#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
|
||||||
have_ndbcluster=SHOW_OPTION_DISABLED;
|
have_ndbcluster=SHOW_OPTION_DISABLED;
|
||||||
global_system_variables.ndb_index_stat_enable=FALSE;
|
global_system_variables.ndb_index_stat_enable=FALSE;
|
||||||
@ -7311,7 +7277,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
int id;
|
int id;
|
||||||
if ((id= find_type(argument, &binlog_format_typelib, 2)) <= 0)
|
if ((id= find_type(argument, &binlog_format_typelib, 2)) <= 0)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Unknown binary log format: '%s' "
|
"Unknown binary log format: '%s' "
|
||||||
"(should be one of '%s', '%s', '%s')\n",
|
"(should be one of '%s', '%s', '%s')\n",
|
||||||
@ -7319,11 +7284,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
binlog_format_names[BINLOG_FORMAT_STMT],
|
binlog_format_names[BINLOG_FORMAT_STMT],
|
||||||
binlog_format_names[BINLOG_FORMAT_ROW],
|
binlog_format_names[BINLOG_FORMAT_ROW],
|
||||||
binlog_format_names[BINLOG_FORMAT_MIXED]);
|
binlog_format_names[BINLOG_FORMAT_MIXED]);
|
||||||
#else
|
|
||||||
fprintf(stderr,
|
|
||||||
"Unknown binary log format: '%s' (only legal value is '%s')\n",
|
|
||||||
argument, binlog_format_names[BINLOG_FORMAT_STMT]);
|
|
||||||
#endif
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
global_system_variables.binlog_format= id-1;
|
global_system_variables.binlog_format= id-1;
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
#include "mysql_priv.h"
|
#include "mysql_priv.h"
|
||||||
#include "rpl_injector.h"
|
#include "rpl_injector.h"
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
injector::transaction - member definitions
|
injector::transaction - member definitions
|
||||||
@ -189,5 +188,3 @@ void injector::new_trans(THD *thd, injector::transaction *ptr)
|
|||||||
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
/* Pull in 'byte', 'my_off_t', and 'uint32' */
|
/* Pull in 'byte', 'my_off_t', and 'uint32' */
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
#include <my_bitmap.h>
|
#include <my_bitmap.h>
|
||||||
|
|
||||||
/* Forward declarations */
|
/* Forward declarations */
|
||||||
@ -329,5 +328,4 @@ private:
|
|||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* HAVE_ROW_BASED_REPLICATION */
|
|
||||||
#endif /* INJECTOR_H */
|
#endif /* INJECTOR_H */
|
||||||
|
@ -670,7 +670,6 @@ sys_var_have_variable sys_have_query_cache("have_query_cache",
|
|||||||
&have_query_cache);
|
&have_query_cache);
|
||||||
sys_var_have_variable sys_have_rtree_keys("have_rtree_keys", &have_rtree_keys);
|
sys_var_have_variable sys_have_rtree_keys("have_rtree_keys", &have_rtree_keys);
|
||||||
sys_var_have_variable sys_have_symlink("have_symlink", &have_symlink);
|
sys_var_have_variable sys_have_symlink("have_symlink", &have_symlink);
|
||||||
sys_var_have_variable sys_have_row_based_replication("have_row_based_replication",&have_row_based_replication);
|
|
||||||
/* Global read-only variable describing server license */
|
/* Global read-only variable describing server license */
|
||||||
sys_var_const_str sys_license("license", STRINGIFY_ARG(LICENSE));
|
sys_var_const_str sys_license("license", STRINGIFY_ARG(LICENSE));
|
||||||
|
|
||||||
@ -792,7 +791,6 @@ SHOW_VAR init_vars[]= {
|
|||||||
{sys_have_openssl.name, (char*) &have_openssl, SHOW_HAVE},
|
{sys_have_openssl.name, (char*) &have_openssl, SHOW_HAVE},
|
||||||
{sys_have_partition_db.name,(char*) &have_partition_db, SHOW_HAVE},
|
{sys_have_partition_db.name,(char*) &have_partition_db, SHOW_HAVE},
|
||||||
{sys_have_query_cache.name, (char*) &have_query_cache, SHOW_HAVE},
|
{sys_have_query_cache.name, (char*) &have_query_cache, SHOW_HAVE},
|
||||||
{sys_have_row_based_replication.name, (char*) &have_row_based_replication, SHOW_HAVE},
|
|
||||||
{sys_have_rtree_keys.name, (char*) &have_rtree_keys, SHOW_HAVE},
|
{sys_have_rtree_keys.name, (char*) &have_rtree_keys, SHOW_HAVE},
|
||||||
{sys_have_symlink.name, (char*) &have_symlink, SHOW_HAVE},
|
{sys_have_symlink.name, (char*) &have_symlink, SHOW_HAVE},
|
||||||
{"init_connect", (char*) &sys_init_connect, SHOW_SYS},
|
{"init_connect", (char*) &sys_init_connect, SHOW_SYS},
|
||||||
@ -1307,10 +1305,6 @@ bool sys_var_thd_binlog_format::is_readonly() const
|
|||||||
If we don't have row-based replication compiled in, the variable
|
If we don't have row-based replication compiled in, the variable
|
||||||
is always read-only.
|
is always read-only.
|
||||||
*/
|
*/
|
||||||
#ifndef HAVE_ROW_BASED_REPLICATION
|
|
||||||
my_error(ER_RBR_NOT_AVAILABLE, MYF(0));
|
|
||||||
return 1;
|
|
||||||
#else
|
|
||||||
if ((thd->variables.binlog_format == BINLOG_FORMAT_ROW) &&
|
if ((thd->variables.binlog_format == BINLOG_FORMAT_ROW) &&
|
||||||
thd->temporary_tables)
|
thd->temporary_tables)
|
||||||
{
|
{
|
||||||
@ -1335,16 +1329,13 @@ bool sys_var_thd_binlog_format::is_readonly() const
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_NDB_BINLOG */
|
#endif /* HAVE_NDB_BINLOG */
|
||||||
#endif /* HAVE_ROW_BASED_REPLICATION */
|
|
||||||
return sys_var_thd_enum::is_readonly();
|
return sys_var_thd_enum::is_readonly();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void fix_binlog_format_after_update(THD *thd, enum_var_type type)
|
void fix_binlog_format_after_update(THD *thd, enum_var_type type)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
thd->reset_current_stmt_binlog_row_based();
|
thd->reset_current_stmt_binlog_row_based();
|
||||||
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2986,17 +2977,39 @@ byte *sys_var_max_user_conn::value_ptr(THD *thd, enum_var_type type,
|
|||||||
return (byte*) &(max_user_connections);
|
return (byte*) &(max_user_connections);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool sys_var_thd_lc_time_names::check(THD *thd, set_var *var)
|
bool sys_var_thd_lc_time_names::check(THD *thd, set_var *var)
|
||||||
{
|
{
|
||||||
char *locale_str =var->value->str_value.c_ptr();
|
MY_LOCALE *locale_match;
|
||||||
MY_LOCALE *locale_match= my_locale_by_name(locale_str);
|
|
||||||
|
|
||||||
if (locale_match == NULL)
|
if (var->value->result_type() == INT_RESULT)
|
||||||
{
|
{
|
||||||
my_printf_error(ER_UNKNOWN_ERROR,
|
if (!(locale_match= my_locale_by_number((uint) var->value->val_int())))
|
||||||
"Unknown locale: '%s'", MYF(0), locale_str);
|
{
|
||||||
return 1;
|
char buf[20];
|
||||||
|
int10_to_str((int) var->value->val_int(), buf, -10);
|
||||||
|
my_printf_error(ER_UNKNOWN_ERROR, "Unknown locale: '%s'", MYF(0), buf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else // STRING_RESULT
|
||||||
|
{
|
||||||
|
char buff[6];
|
||||||
|
String str(buff, sizeof(buff), &my_charset_latin1), *res;
|
||||||
|
if (!(res=var->value->val_str(&str)))
|
||||||
|
{
|
||||||
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name, "NULL");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
const char *locale_str= res->c_ptr();
|
||||||
|
if (!(locale_match= my_locale_by_name(locale_str)))
|
||||||
|
{
|
||||||
|
my_printf_error(ER_UNKNOWN_ERROR,
|
||||||
|
"Unknown locale: '%s'", MYF(0), locale_str);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var->save_result.locale_value= locale_match;
|
var->save_result.locale_value= locale_match;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -908,13 +908,17 @@ class sys_var_thd_lc_time_names :public sys_var_thd
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
sys_var_thd_lc_time_names(const char *name_arg):
|
sys_var_thd_lc_time_names(const char *name_arg):
|
||||||
sys_var_thd(name_arg)
|
sys_var_thd(name_arg)
|
||||||
{}
|
{
|
||||||
|
#if MYSQL_VERSION_ID < 50000
|
||||||
|
no_support_one_shot= 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
bool check(THD *thd, set_var *var);
|
bool check(THD *thd, set_var *var);
|
||||||
SHOW_TYPE type() { return SHOW_CHAR; }
|
SHOW_TYPE type() { return SHOW_CHAR; }
|
||||||
bool check_update_type(Item_result type)
|
bool check_update_type(Item_result type)
|
||||||
{
|
{
|
||||||
return type != STRING_RESULT; /* Only accept strings */
|
return ((type != STRING_RESULT) && (type != INT_RESULT));
|
||||||
}
|
}
|
||||||
bool check_default(enum_var_type type) { return 0; }
|
bool check_default(enum_var_type type) { return 0; }
|
||||||
bool update(THD *thd, set_var *var);
|
bool update(THD *thd, set_var *var);
|
||||||
@ -939,9 +943,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
extern void fix_binlog_format_after_update(THD *thd, enum_var_type type);
|
extern void fix_binlog_format_after_update(THD *thd, enum_var_type type);
|
||||||
#endif
|
|
||||||
|
|
||||||
class sys_var_thd_binlog_format :public sys_var_thd_enum
|
class sys_var_thd_binlog_format :public sys_var_thd_enum
|
||||||
{
|
{
|
||||||
@ -949,9 +951,7 @@ public:
|
|||||||
sys_var_thd_binlog_format(const char *name_arg, ulong SV::*offset_arg)
|
sys_var_thd_binlog_format(const char *name_arg, ulong SV::*offset_arg)
|
||||||
:sys_var_thd_enum(name_arg, offset_arg,
|
:sys_var_thd_enum(name_arg, offset_arg,
|
||||||
&binlog_format_typelib
|
&binlog_format_typelib
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
, fix_binlog_format_after_update
|
, fix_binlog_format_after_update
|
||||||
#endif
|
|
||||||
)
|
)
|
||||||
{};
|
{};
|
||||||
bool is_readonly() const;
|
bool is_readonly() const;
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
int queue_event(MASTER_INFO* mi,const char* buf,ulong event_len);
|
int queue_event(MASTER_INFO* mi,const char* buf,ulong event_len);
|
||||||
|
|
||||||
|
#define FLAGSTR(V,F) ((V)&(F)?#F" ":"")
|
||||||
|
|
||||||
#define MAX_SLAVE_RETRY_PAUSE 5
|
#define MAX_SLAVE_RETRY_PAUSE 5
|
||||||
bool use_slave_mask = 0;
|
bool use_slave_mask = 0;
|
||||||
@ -1798,6 +1799,10 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli)
|
|||||||
if (!ev->when)
|
if (!ev->when)
|
||||||
ev->when = time(NULL);
|
ev->when = time(NULL);
|
||||||
ev->thd = thd; // because up to this point, ev->thd == 0
|
ev->thd = thd; // because up to this point, ev->thd == 0
|
||||||
|
DBUG_PRINT("info", ("thd->options={ %s%s}",
|
||||||
|
FLAGSTR(thd->options, OPTION_NOT_AUTOCOMMIT),
|
||||||
|
FLAGSTR(thd->options, OPTION_BEGIN)));
|
||||||
|
|
||||||
exec_res = ev->exec_event(rli);
|
exec_res = ev->exec_event(rli);
|
||||||
DBUG_PRINT("info", ("exec_event result: %d", exec_res));
|
DBUG_PRINT("info", ("exec_event result: %d", exec_res));
|
||||||
DBUG_ASSERT(rli->sql_thd==thd);
|
DBUG_ASSERT(rli->sql_thd==thd);
|
||||||
|
@ -92,7 +92,7 @@ sp_map_item_type(enum enum_field_types type)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static String *
|
static String *
|
||||||
sp_get_item_value(Item *item, String *str)
|
sp_get_item_value(THD *thd, Item *item, String *str)
|
||||||
{
|
{
|
||||||
Item_result result_type= item->result_type();
|
Item_result result_type= item->result_type();
|
||||||
|
|
||||||
@ -112,15 +112,16 @@ sp_get_item_value(Item *item, String *str)
|
|||||||
{
|
{
|
||||||
char buf_holder[STRING_BUFFER_USUAL_SIZE];
|
char buf_holder[STRING_BUFFER_USUAL_SIZE];
|
||||||
String buf(buf_holder, sizeof(buf_holder), result->charset());
|
String buf(buf_holder, sizeof(buf_holder), result->charset());
|
||||||
|
CHARSET_INFO *cs= thd->variables.character_set_client;
|
||||||
|
|
||||||
/* We must reset length of the buffer, because of String specificity. */
|
/* We must reset length of the buffer, because of String specificity. */
|
||||||
buf.length(0);
|
buf.length(0);
|
||||||
|
|
||||||
buf.append('_');
|
buf.append('_');
|
||||||
buf.append(result->charset()->csname);
|
buf.append(result->charset()->csname);
|
||||||
if (result->charset()->escape_with_backslash_is_dangerous)
|
if (cs->escape_with_backslash_is_dangerous)
|
||||||
buf.append(' ');
|
buf.append(' ');
|
||||||
append_query_string(result->charset(), result, &buf);
|
append_query_string(cs, result, &buf);
|
||||||
str->copy(buf);
|
str->copy(buf);
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
@ -903,7 +904,7 @@ subst_spvars(THD *thd, sp_instr *instr, LEX_STRING *query_str)
|
|||||||
|
|
||||||
val= (*splocal)->this_item();
|
val= (*splocal)->this_item();
|
||||||
DBUG_PRINT("info", ("print 0x%lx", (long) val));
|
DBUG_PRINT("info", ("print 0x%lx", (long) val));
|
||||||
str_value= sp_get_item_value(val, &str_value_holder);
|
str_value= sp_get_item_value(thd, val, &str_value_holder);
|
||||||
if (str_value)
|
if (str_value)
|
||||||
res|= qbuf.append(*str_value);
|
res|= qbuf.append(*str_value);
|
||||||
else
|
else
|
||||||
@ -1470,6 +1471,8 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount,
|
|||||||
{
|
{
|
||||||
binlog_buf.length(0);
|
binlog_buf.length(0);
|
||||||
binlog_buf.append(STRING_WITH_LEN("SELECT "));
|
binlog_buf.append(STRING_WITH_LEN("SELECT "));
|
||||||
|
append_identifier(thd, &binlog_buf, m_db.str, m_db.length);
|
||||||
|
binlog_buf.append('.');
|
||||||
append_identifier(thd, &binlog_buf, m_name.str, m_name.length);
|
append_identifier(thd, &binlog_buf, m_name.str, m_name.length);
|
||||||
binlog_buf.append('(');
|
binlog_buf.append('(');
|
||||||
for (arg_no= 0; arg_no < argcount; arg_no++)
|
for (arg_no= 0; arg_no < argcount; arg_no++)
|
||||||
@ -1480,7 +1483,7 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount,
|
|||||||
if (arg_no)
|
if (arg_no)
|
||||||
binlog_buf.append(',');
|
binlog_buf.append(',');
|
||||||
|
|
||||||
str_value= sp_get_item_value(nctx->get_item(arg_no),
|
str_value= sp_get_item_value(thd, nctx->get_item(arg_no),
|
||||||
&str_value_holder);
|
&str_value_holder);
|
||||||
|
|
||||||
if (str_value)
|
if (str_value)
|
||||||
@ -1852,7 +1855,6 @@ sp_head::restore_lex(THD *thd)
|
|||||||
oldlex->next_state= sublex->next_state;
|
oldlex->next_state= sublex->next_state;
|
||||||
oldlex->trg_table_fields.push_back(&sublex->trg_table_fields);
|
oldlex->trg_table_fields.push_back(&sublex->trg_table_fields);
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
If this substatement needs row-based, the entire routine does too (we
|
If this substatement needs row-based, the entire routine does too (we
|
||||||
cannot switch from statement-based to row-based only for this
|
cannot switch from statement-based to row-based only for this
|
||||||
@ -1860,7 +1862,6 @@ sp_head::restore_lex(THD *thd)
|
|||||||
*/
|
*/
|
||||||
if (sublex->binlog_row_based_if_mixed)
|
if (sublex->binlog_row_based_if_mixed)
|
||||||
m_flags|= BINLOG_ROW_BASED_IF_MIXED;
|
m_flags|= BINLOG_ROW_BASED_IF_MIXED;
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Add routines which are used by statement to respective set for
|
Add routines which are used by statement to respective set for
|
||||||
|
@ -361,7 +361,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
void propagate_attributes(LEX *lex)
|
void propagate_attributes(LEX *lex)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
If this routine needs row-based binary logging, the entire top statement
|
If this routine needs row-based binary logging, the entire top statement
|
||||||
too (we cannot switch from statement-based to row-based only for this
|
too (we cannot switch from statement-based to row-based only for this
|
||||||
@ -370,7 +369,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
if (m_flags & BINLOG_ROW_BASED_IF_MIXED)
|
if (m_flags & BINLOG_ROW_BASED_IF_MIXED)
|
||||||
lex->binlog_row_based_if_mixed= TRUE;
|
lex->binlog_row_based_if_mixed= TRUE;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1629,7 +1629,7 @@ bool change_password(THD *thd, const char *host, const char *user,
|
|||||||
{
|
{
|
||||||
query_length=
|
query_length=
|
||||||
my_sprintf(buff,
|
my_sprintf(buff,
|
||||||
(buff,"SET PASSWORD FOR \"%-.120s\"@\"%-.120s\"=\"%-.120s\"",
|
(buff,"SET PASSWORD FOR '%-.120s'@'%-.120s'='%-.120s'",
|
||||||
acl_user->user ? acl_user->user : "",
|
acl_user->user ? acl_user->user : "",
|
||||||
acl_user->host.hostname ? acl_user->host.hostname : "",
|
acl_user->host.hostname ? acl_user->host.hostname : "",
|
||||||
new_password));
|
new_password));
|
||||||
|
@ -1063,9 +1063,7 @@ void close_thread_tables(THD *thd, bool lock_in_use, bool skip_derived)
|
|||||||
handled either before writing a query log event (inside
|
handled either before writing a query log event (inside
|
||||||
binlog_query()) or when preparing a pending event.
|
binlog_query()) or when preparing a pending event.
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
thd->binlog_flush_pending_rows_event(TRUE);
|
thd->binlog_flush_pending_rows_event(TRUE);
|
||||||
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
||||||
mysql_unlock_tables(thd, thd->lock);
|
mysql_unlock_tables(thd, thd->lock);
|
||||||
thd->lock=0;
|
thd->lock=0;
|
||||||
}
|
}
|
||||||
@ -3324,13 +3322,11 @@ int lock_tables(THD *thd, TABLE_LIST *tables, uint count, bool *need_reopen)
|
|||||||
|
|
||||||
*need_reopen= FALSE;
|
*need_reopen= FALSE;
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
CREATE ... SELECT UUID() locks no tables, we have to test here.
|
CREATE ... SELECT UUID() locks no tables, we have to test here.
|
||||||
*/
|
*/
|
||||||
if (thd->lex->binlog_row_based_if_mixed)
|
if (thd->lex->binlog_row_based_if_mixed)
|
||||||
thd->set_current_stmt_binlog_row_based_if_mixed();
|
thd->set_current_stmt_binlog_row_based_if_mixed();
|
||||||
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
||||||
|
|
||||||
if (!tables && !thd->lex->requires_prelocking())
|
if (!tables && !thd->lex->requires_prelocking())
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
@ -3362,7 +3358,6 @@ int lock_tables(THD *thd, TABLE_LIST *tables, uint count, bool *need_reopen)
|
|||||||
{
|
{
|
||||||
thd->in_lock_tables=1;
|
thd->in_lock_tables=1;
|
||||||
thd->options|= OPTION_TABLE_LOCK;
|
thd->options|= OPTION_TABLE_LOCK;
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
If we have >= 2 different tables to update with auto_inc columns,
|
If we have >= 2 different tables to update with auto_inc columns,
|
||||||
statement-based binlogging won't work. We can solve this problem in
|
statement-based binlogging won't work. We can solve this problem in
|
||||||
@ -3374,7 +3369,6 @@ int lock_tables(THD *thd, TABLE_LIST *tables, uint count, bool *need_reopen)
|
|||||||
thd->lex->binlog_row_based_if_mixed= TRUE;
|
thd->lex->binlog_row_based_if_mixed= TRUE;
|
||||||
thd->set_current_stmt_binlog_row_based_if_mixed();
|
thd->set_current_stmt_binlog_row_based_if_mixed();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! (thd->lock= mysql_lock_tables(thd, start, (uint) (ptr - start),
|
if (! (thd->lock= mysql_lock_tables(thd, start, (uint) (ptr - start),
|
||||||
|
@ -203,9 +203,7 @@ THD::THD()
|
|||||||
Open_tables_state(refresh_version), rli_fake(0),
|
Open_tables_state(refresh_version), rli_fake(0),
|
||||||
lock_id(&main_lock_id),
|
lock_id(&main_lock_id),
|
||||||
user_time(0), in_sub_stmt(0),
|
user_time(0), in_sub_stmt(0),
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
binlog_table_maps(0),
|
binlog_table_maps(0),
|
||||||
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
||||||
global_read_lock(0), is_fatal_error(0),
|
global_read_lock(0), is_fatal_error(0),
|
||||||
rand_used(0), time_zone_used(0),
|
rand_used(0), time_zone_used(0),
|
||||||
arg_of_last_insert_id_function(FALSE),
|
arg_of_last_insert_id_function(FALSE),
|
||||||
@ -266,9 +264,7 @@ THD::THD()
|
|||||||
system_thread= NON_SYSTEM_THREAD;
|
system_thread= NON_SYSTEM_THREAD;
|
||||||
cleanup_done= abort_on_warning= no_warnings_for_error= 0;
|
cleanup_done= abort_on_warning= no_warnings_for_error= 0;
|
||||||
peer_port= 0; // For SHOW PROCESSLIST
|
peer_port= 0; // For SHOW PROCESSLIST
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
transaction.m_pending_rows_event= 0;
|
transaction.m_pending_rows_event= 0;
|
||||||
#endif
|
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
real_id = 0;
|
real_id = 0;
|
||||||
#endif
|
#endif
|
||||||
@ -348,9 +344,7 @@ void THD::init(void)
|
|||||||
bzero((char*) warn_count, sizeof(warn_count));
|
bzero((char*) warn_count, sizeof(warn_count));
|
||||||
total_warn_count= 0;
|
total_warn_count= 0;
|
||||||
update_charset();
|
update_charset();
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
reset_current_stmt_binlog_row_based();
|
reset_current_stmt_binlog_row_based();
|
||||||
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
||||||
bzero((char *) &status_var, sizeof(status_var));
|
bzero((char *) &status_var, sizeof(status_var));
|
||||||
variables.lc_time_names = &my_locale_en_US;
|
variables.lc_time_names = &my_locale_en_US;
|
||||||
}
|
}
|
||||||
@ -2293,7 +2287,6 @@ void xid_cache_delete(XID_STATE *xid_state)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MYSQL_CLIENT
|
#ifndef MYSQL_CLIENT
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Template member function for ensuring that there is an rows log
|
Template member function for ensuring that there is an rows log
|
||||||
@ -2786,8 +2779,6 @@ void THD::binlog_delete_pending_rows_event()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_ROW_BASED_REPLICATION */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Member function that will log query, either row-based or
|
Member function that will log query, either row-based or
|
||||||
statement-based depending on the value of the 'current_stmt_binlog_row_based'
|
statement-based depending on the value of the 'current_stmt_binlog_row_based'
|
||||||
@ -2828,18 +2819,14 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype,
|
|||||||
If we are in prelocked mode, the flushing will be done inside the
|
If we are in prelocked mode, the flushing will be done inside the
|
||||||
top-most close_thread_tables().
|
top-most close_thread_tables().
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
if (this->prelocked_mode == NON_PRELOCKED)
|
if (this->prelocked_mode == NON_PRELOCKED)
|
||||||
if (int error= binlog_flush_pending_rows_event(TRUE))
|
if (int error= binlog_flush_pending_rows_event(TRUE))
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
||||||
|
|
||||||
switch (qtype) {
|
switch (qtype) {
|
||||||
case THD::ROW_QUERY_TYPE:
|
case THD::ROW_QUERY_TYPE:
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
if (current_stmt_binlog_row_based)
|
if (current_stmt_binlog_row_based)
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
#endif
|
|
||||||
/* Otherwise, we fall through */
|
/* Otherwise, we fall through */
|
||||||
case THD::MYSQL_QUERY_TYPE:
|
case THD::MYSQL_QUERY_TYPE:
|
||||||
/*
|
/*
|
||||||
@ -2857,9 +2844,7 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype,
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
Query_log_event qinfo(this, query, query_len, is_trans, suppress_use);
|
Query_log_event qinfo(this, query, query_len, is_trans, suppress_use);
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
qinfo.flags|= LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F;
|
qinfo.flags|= LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F;
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
Binlog table maps will be irrelevant after a Query_log_event
|
Binlog table maps will be irrelevant after a Query_log_event
|
||||||
(they are just removed on the slave side) so after the query
|
(they are just removed on the slave side) so after the query
|
||||||
@ -2867,9 +2852,7 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype,
|
|||||||
table maps were written.
|
table maps were written.
|
||||||
*/
|
*/
|
||||||
int error= mysql_bin_log.write(&qinfo);
|
int error= mysql_bin_log.write(&qinfo);
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
binlog_table_maps= 0;
|
binlog_table_maps= 0;
|
||||||
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -941,12 +941,12 @@ public:
|
|||||||
#ifndef MYSQL_CLIENT
|
#ifndef MYSQL_CLIENT
|
||||||
int binlog_setup_trx_data();
|
int binlog_setup_trx_data();
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Public interface to write RBR events to the binlog
|
Public interface to write RBR events to the binlog
|
||||||
*/
|
*/
|
||||||
void binlog_start_trans_and_stmt();
|
void binlog_start_trans_and_stmt();
|
||||||
|
int binlog_flush_transaction_cache();
|
||||||
|
void binlog_set_stmt_begin();
|
||||||
int binlog_write_table_map(TABLE *table, bool is_transactional);
|
int binlog_write_table_map(TABLE *table, bool is_transactional);
|
||||||
int binlog_write_row(TABLE* table, bool is_transactional,
|
int binlog_write_row(TABLE* table, bool is_transactional,
|
||||||
MY_BITMAP const* cols, my_size_t colcnt,
|
MY_BITMAP const* cols, my_size_t colcnt,
|
||||||
@ -996,7 +996,6 @@ public:
|
|||||||
uint get_binlog_table_maps() const {
|
uint get_binlog_table_maps() const {
|
||||||
return binlog_table_maps;
|
return binlog_table_maps;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_ROW_BASED_REPLICATION */
|
|
||||||
#endif /* MYSQL_CLIENT */
|
#endif /* MYSQL_CLIENT */
|
||||||
|
|
||||||
#ifndef MYSQL_CLIENT
|
#ifndef MYSQL_CLIENT
|
||||||
@ -1035,9 +1034,7 @@ public:
|
|||||||
XID xid; // transaction identifier
|
XID xid; // transaction identifier
|
||||||
enum xa_states xa_state; // used by external XA only
|
enum xa_states xa_state; // used by external XA only
|
||||||
XID_STATE xid_state;
|
XID_STATE xid_state;
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
Rows_log_event *m_pending_rows_event;
|
Rows_log_event *m_pending_rows_event;
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Tables changed in transaction (that must be invalidated in query cache).
|
Tables changed in transaction (that must be invalidated in query cache).
|
||||||
@ -1544,7 +1541,6 @@ public:
|
|||||||
void restore_active_arena(Query_arena *set, Query_arena *backup);
|
void restore_active_arena(Query_arena *set, Query_arena *backup);
|
||||||
inline void set_current_stmt_binlog_row_based_if_mixed()
|
inline void set_current_stmt_binlog_row_based_if_mixed()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
If in a stored/function trigger, the caller should already have done the
|
If in a stored/function trigger, the caller should already have done the
|
||||||
change. We test in_sub_stmt to prevent introducing bugs where people
|
change. We test in_sub_stmt to prevent introducing bugs where people
|
||||||
@ -1557,23 +1553,17 @@ public:
|
|||||||
if ((variables.binlog_format == BINLOG_FORMAT_MIXED) &&
|
if ((variables.binlog_format == BINLOG_FORMAT_MIXED) &&
|
||||||
(in_sub_stmt == 0))
|
(in_sub_stmt == 0))
|
||||||
current_stmt_binlog_row_based= TRUE;
|
current_stmt_binlog_row_based= TRUE;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
inline void set_current_stmt_binlog_row_based()
|
inline void set_current_stmt_binlog_row_based()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
current_stmt_binlog_row_based= TRUE;
|
current_stmt_binlog_row_based= TRUE;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
inline void clear_current_stmt_binlog_row_based()
|
inline void clear_current_stmt_binlog_row_based()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
current_stmt_binlog_row_based= FALSE;
|
current_stmt_binlog_row_based= FALSE;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
inline void reset_current_stmt_binlog_row_based()
|
inline void reset_current_stmt_binlog_row_based()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
If there are temporary tables, don't reset back to
|
If there are temporary tables, don't reset back to
|
||||||
statement-based. Indeed it could be that:
|
statement-based. Indeed it could be that:
|
||||||
@ -1597,9 +1587,6 @@ public:
|
|||||||
current_stmt_binlog_row_based=
|
current_stmt_binlog_row_based=
|
||||||
test(variables.binlog_format == BINLOG_FORMAT_ROW);
|
test(variables.binlog_format == BINLOG_FORMAT_ROW);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
current_stmt_binlog_row_based= FALSE;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2277,7 +2277,6 @@ bool delayed_insert::handle_inserts(void)
|
|||||||
thd.proc_info=0;
|
thd.proc_info=0;
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
We need to flush the pending event when using row-based
|
We need to flush the pending event when using row-based
|
||||||
replication since the flushing normally done in binlog_query() is
|
replication since the flushing normally done in binlog_query() is
|
||||||
@ -2292,7 +2291,6 @@ bool delayed_insert::handle_inserts(void)
|
|||||||
*/
|
*/
|
||||||
if (thd.current_stmt_binlog_row_based)
|
if (thd.current_stmt_binlog_row_based)
|
||||||
thd.binlog_flush_pending_rows_event(TRUE);
|
thd.binlog_flush_pending_rows_event(TRUE);
|
||||||
#endif /* HAVE_ROW_BASED_REPLICATION */
|
|
||||||
|
|
||||||
if ((error=table->file->extra(HA_EXTRA_NO_CACHE)))
|
if ((error=table->file->extra(HA_EXTRA_NO_CACHE)))
|
||||||
{ // This shouldn't happen
|
{ // This shouldn't happen
|
||||||
@ -2644,8 +2642,7 @@ void select_insert::send_error(uint errcode,const char *err)
|
|||||||
If the creation of the table failed (due to a syntax error, for
|
If the creation of the table failed (due to a syntax error, for
|
||||||
example), no table will have been opened and therefore 'table'
|
example), no table will have been opened and therefore 'table'
|
||||||
will be NULL. In that case, we still need to execute the rollback
|
will be NULL. In that case, we still need to execute the rollback
|
||||||
and the end of the function to truncate the binary log, but we can
|
and the end of the function.
|
||||||
skip all the intermediate steps.
|
|
||||||
*/
|
*/
|
||||||
if (table)
|
if (table)
|
||||||
{
|
{
|
||||||
@ -2676,10 +2673,8 @@ void select_insert::send_error(uint errcode,const char *err)
|
|||||||
if (!table->file->has_transactions())
|
if (!table->file->has_transactions())
|
||||||
{
|
{
|
||||||
if (mysql_bin_log.is_open())
|
if (mysql_bin_log.is_open())
|
||||||
{
|
|
||||||
thd->binlog_query(THD::ROW_QUERY_TYPE, thd->query, thd->query_length,
|
thd->binlog_query(THD::ROW_QUERY_TYPE, thd->query, thd->query_length,
|
||||||
table->file->has_transactions(), FALSE);
|
table->file->has_transactions(), FALSE);
|
||||||
}
|
|
||||||
if (!thd->current_stmt_binlog_row_based && !table->s->tmp_table &&
|
if (!thd->current_stmt_binlog_row_based && !table->s->tmp_table &&
|
||||||
!can_rollback_data())
|
!can_rollback_data())
|
||||||
thd->options|= OPTION_STATUS_NO_TRANS_UPDATE;
|
thd->options|= OPTION_STATUS_NO_TRANS_UPDATE;
|
||||||
@ -2948,7 +2943,24 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
|
|||||||
DBUG_ENTER("select_create::prepare");
|
DBUG_ENTER("select_create::prepare");
|
||||||
|
|
||||||
TABLEOP_HOOKS *hook_ptr= NULL;
|
TABLEOP_HOOKS *hook_ptr= NULL;
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
/*
|
||||||
|
For row-based replication, the CREATE-SELECT statement is written
|
||||||
|
in two pieces: the first one contain the CREATE TABLE statement
|
||||||
|
necessary to create the table and the second part contain the rows
|
||||||
|
that should go into the table.
|
||||||
|
|
||||||
|
For non-temporary tables, the start of the CREATE-SELECT
|
||||||
|
implicitly commits the previous transaction, and all events
|
||||||
|
forming the statement will be stored the transaction cache. At end
|
||||||
|
of the statement, the entire statement is committed as a
|
||||||
|
transaction, and all events are written to the binary log.
|
||||||
|
|
||||||
|
On the master, the table is locked for the duration of the
|
||||||
|
statement, but since the CREATE part is replicated as a simple
|
||||||
|
statement, there is no way to lock the table for accesses on the
|
||||||
|
slave. Hence, we have to hold on to the CREATE part of the
|
||||||
|
statement until the statement has finished.
|
||||||
|
*/
|
||||||
class MY_HOOKS : public TABLEOP_HOOKS {
|
class MY_HOOKS : public TABLEOP_HOOKS {
|
||||||
public:
|
public:
|
||||||
MY_HOOKS(select_create *x) : ptr(x) { }
|
MY_HOOKS(select_create *x) : ptr(x) { }
|
||||||
@ -2958,7 +2970,7 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
|
|||||||
{
|
{
|
||||||
TABLE const *const table = *tables;
|
TABLE const *const table = *tables;
|
||||||
if (ptr->get_thd()->current_stmt_binlog_row_based &&
|
if (ptr->get_thd()->current_stmt_binlog_row_based &&
|
||||||
table->s->tmp_table == NO_TMP_TABLE &&
|
!table->s->tmp_table &&
|
||||||
!ptr->get_create_info()->table_existed)
|
!ptr->get_create_info()->table_existed)
|
||||||
{
|
{
|
||||||
ptr->binlog_show_create_table(tables, count);
|
ptr->binlog_show_create_table(tables, count);
|
||||||
@ -2970,22 +2982,19 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
|
|||||||
|
|
||||||
MY_HOOKS hooks(this);
|
MY_HOOKS hooks(this);
|
||||||
hook_ptr= &hooks;
|
hook_ptr= &hooks;
|
||||||
#endif
|
|
||||||
|
|
||||||
unit= u;
|
unit= u;
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
Start a statement transaction before the create if we are creating
|
Start a statement transaction before the create if we are using
|
||||||
a non-temporary table and are using row-based replication for the
|
row-based replication for the statement. If we are creating a
|
||||||
statement.
|
temporary table, we need to start a statement transaction.
|
||||||
*/
|
*/
|
||||||
if ((thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) == 0 &&
|
if ((thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) == 0 &&
|
||||||
thd->current_stmt_binlog_row_based)
|
thd->current_stmt_binlog_row_based)
|
||||||
{
|
{
|
||||||
thd->binlog_start_trans_and_stmt();
|
thd->binlog_start_trans_and_stmt();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!(table= create_table_from_items(thd, create_info, create_table,
|
if (!(table= create_table_from_items(thd, create_info, create_table,
|
||||||
extra_fields, keys, &values,
|
extra_fields, keys, &values,
|
||||||
@ -3029,8 +3038,6 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
void
|
void
|
||||||
select_create::binlog_show_create_table(TABLE **tables, uint count)
|
select_create::binlog_show_create_table(TABLE **tables, uint count)
|
||||||
{
|
{
|
||||||
@ -3071,7 +3078,6 @@ select_create::binlog_show_create_table(TABLE **tables, uint count)
|
|||||||
/* is_trans */ TRUE,
|
/* is_trans */ TRUE,
|
||||||
/* suppress_use */ FALSE);
|
/* suppress_use */ FALSE);
|
||||||
}
|
}
|
||||||
#endif // HAVE_ROW_BASED_REPLICATION
|
|
||||||
|
|
||||||
void select_create::store_values(List<Item> &values)
|
void select_create::store_values(List<Item> &values)
|
||||||
{
|
{
|
||||||
@ -3082,13 +3088,35 @@ void select_create::store_values(List<Item> &values)
|
|||||||
|
|
||||||
void select_create::send_error(uint errcode,const char *err)
|
void select_create::send_error(uint errcode,const char *err)
|
||||||
{
|
{
|
||||||
|
DBUG_ENTER("select_create::send_error");
|
||||||
|
|
||||||
|
DBUG_PRINT("info",
|
||||||
|
("Current statement %s row-based",
|
||||||
|
thd->current_stmt_binlog_row_based ? "is" : "is NOT"));
|
||||||
|
DBUG_PRINT("info",
|
||||||
|
("Current table (at 0x%lu) %s a temporary (or non-existant) table",
|
||||||
|
table,
|
||||||
|
table && !table->s->tmp_table ? "is NOT" : "is"));
|
||||||
|
DBUG_PRINT("info",
|
||||||
|
("Table %s prior to executing this statement",
|
||||||
|
get_create_info()->table_existed ? "existed" : "did not exist"));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Disable binlog, because we "roll back" partial inserts in ::abort
|
This will execute any rollbacks that are necessary before writing
|
||||||
by removing the table, even for non-transactional tables.
|
the transcation cache.
|
||||||
|
|
||||||
|
We disable the binary log since nothing should be written to the
|
||||||
|
binary log. This disabling is important, since we potentially do
|
||||||
|
a "roll back" of non-transactional tables by removing the table,
|
||||||
|
and the actual rollback might generate events that should not be
|
||||||
|
written to the binary log.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
tmp_disable_binlog(thd);
|
tmp_disable_binlog(thd);
|
||||||
select_insert::send_error(errcode, err);
|
select_insert::send_error(errcode, err);
|
||||||
reenable_binlog(thd);
|
reenable_binlog(thd);
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3099,6 +3127,14 @@ bool select_create::send_eof()
|
|||||||
abort();
|
abort();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
Do an implicit commit at end of statement for non-temporary
|
||||||
|
tables. This can fail, but we should unlock the table
|
||||||
|
nevertheless.
|
||||||
|
*/
|
||||||
|
if (!table->s->tmp_table)
|
||||||
|
ha_commit(thd); // Can fail, but we proceed anyway
|
||||||
|
|
||||||
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
||||||
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
|
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
|
||||||
VOID(pthread_mutex_lock(&LOCK_open));
|
VOID(pthread_mutex_lock(&LOCK_open));
|
||||||
@ -3117,12 +3153,31 @@ bool select_create::send_eof()
|
|||||||
|
|
||||||
void select_create::abort()
|
void select_create::abort()
|
||||||
{
|
{
|
||||||
|
DBUG_ENTER("select_create::abort");
|
||||||
VOID(pthread_mutex_lock(&LOCK_open));
|
VOID(pthread_mutex_lock(&LOCK_open));
|
||||||
|
|
||||||
|
/*
|
||||||
|
We roll back the statement, including truncating the transaction
|
||||||
|
cache of the binary log, if the statement failed.
|
||||||
|
|
||||||
|
We roll back the statement prior to deleting the table and prior
|
||||||
|
to releasing the lock on the table, since there might be potential
|
||||||
|
for failure if the rollback is executed after the drop or after
|
||||||
|
unlocking the table.
|
||||||
|
|
||||||
|
We also roll back the statement regardless of whether the creation
|
||||||
|
of the table succeeded or not, since we need to reset the binary
|
||||||
|
log state.
|
||||||
|
*/
|
||||||
|
if (thd->current_stmt_binlog_row_based)
|
||||||
|
ha_rollback_stmt(thd);
|
||||||
|
|
||||||
if (thd->extra_lock)
|
if (thd->extra_lock)
|
||||||
{
|
{
|
||||||
mysql_unlock_tables(thd, thd->extra_lock);
|
mysql_unlock_tables(thd, thd->extra_lock);
|
||||||
thd->extra_lock=0;
|
thd->extra_lock=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (table)
|
if (table)
|
||||||
{
|
{
|
||||||
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
||||||
@ -3134,17 +3189,8 @@ void select_create::abort()
|
|||||||
table->s->version= 0;
|
table->s->version= 0;
|
||||||
hash_delete(&open_cache,(byte*) table);
|
hash_delete(&open_cache,(byte*) table);
|
||||||
if (!create_info->table_existed)
|
if (!create_info->table_existed)
|
||||||
{
|
|
||||||
quick_rm_table(table_type, create_table->db,
|
quick_rm_table(table_type, create_table->db,
|
||||||
create_table->table_name, 0);
|
create_table->table_name, 0);
|
||||||
/*
|
|
||||||
We roll back the statement, including truncating the
|
|
||||||
transaction cache of the binary log, if the statement
|
|
||||||
failed.
|
|
||||||
*/
|
|
||||||
if (thd->current_stmt_binlog_row_based)
|
|
||||||
ha_rollback_stmt(thd);
|
|
||||||
}
|
|
||||||
/* Tell threads waiting for refresh that something has happened */
|
/* Tell threads waiting for refresh that something has happened */
|
||||||
if (version != refresh_version)
|
if (version != refresh_version)
|
||||||
broadcast_refresh();
|
broadcast_refresh();
|
||||||
@ -3154,6 +3200,7 @@ void select_create::abort()
|
|||||||
table=0; // Safety
|
table=0; // Safety
|
||||||
}
|
}
|
||||||
VOID(pthread_mutex_unlock(&LOCK_open));
|
VOID(pthread_mutex_unlock(&LOCK_open));
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1681,9 +1681,7 @@ void Query_tables_list::reset_query_tables_list(bool init)
|
|||||||
sroutines_list.empty();
|
sroutines_list.empty();
|
||||||
sroutines_list_own_last= sroutines_list.next;
|
sroutines_list_own_last= sroutines_list.next;
|
||||||
sroutines_list_own_elements= 0;
|
sroutines_list_own_elements= 0;
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
binlog_row_based_if_mixed= FALSE;
|
binlog_row_based_if_mixed= FALSE;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -821,7 +821,6 @@ public:
|
|||||||
byte **sroutines_list_own_last;
|
byte **sroutines_list_own_last;
|
||||||
uint sroutines_list_own_elements;
|
uint sroutines_list_own_elements;
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
Tells if the parsing stage detected that some items require row-based
|
Tells if the parsing stage detected that some items require row-based
|
||||||
binlogging to give a reliable binlog/replication, or if we will use
|
binlogging to give a reliable binlog/replication, or if we will use
|
||||||
@ -829,7 +828,6 @@ public:
|
|||||||
binlogging.
|
binlogging.
|
||||||
*/
|
*/
|
||||||
bool binlog_row_based_if_mixed;
|
bool binlog_row_based_if_mixed;
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
These constructor and destructor serve for creation/destruction
|
These constructor and destructor serve for creation/destruction
|
||||||
|
@ -464,7 +464,6 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
|||||||
#ifndef EMBEDDED_LIBRARY
|
#ifndef EMBEDDED_LIBRARY
|
||||||
if (mysql_bin_log.is_open())
|
if (mysql_bin_log.is_open())
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
We need to do the job that is normally done inside
|
We need to do the job that is normally done inside
|
||||||
binlog_query() here, which is to ensure that the pending event
|
binlog_query() here, which is to ensure that the pending event
|
||||||
@ -476,7 +475,6 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
|||||||
if (thd->current_stmt_binlog_row_based)
|
if (thd->current_stmt_binlog_row_based)
|
||||||
thd->binlog_flush_pending_rows_event(true);
|
thd->binlog_flush_pending_rows_event(true);
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
As already explained above, we need to call end_io_cache() or the last
|
As already explained above, we need to call end_io_cache() or the last
|
||||||
|
1354
sql/sql_locale.cc
1354
sql/sql_locale.cc
File diff suppressed because it is too large
Load Diff
@ -2487,6 +2487,7 @@ static void reset_one_shot_variables(THD *thd)
|
|||||||
thd->update_charset();
|
thd->update_charset();
|
||||||
thd->variables.time_zone=
|
thd->variables.time_zone=
|
||||||
global_system_variables.time_zone;
|
global_system_variables.time_zone;
|
||||||
|
thd->variables.lc_time_names= &my_locale_en_US;
|
||||||
thd->one_shot_set= 0;
|
thd->one_shot_set= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1089,14 +1089,12 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
|
|||||||
table->next_global= view_tables;
|
table->next_global= view_tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
If the view's body needs row-based binlogging (e.g. the VIEW is created
|
If the view's body needs row-based binlogging (e.g. the VIEW is created
|
||||||
from SELECT UUID()), the top statement also needs it.
|
from SELECT UUID()), the top statement also needs it.
|
||||||
*/
|
*/
|
||||||
if (lex->binlog_row_based_if_mixed)
|
if (lex->binlog_row_based_if_mixed)
|
||||||
old_lex->binlog_row_based_if_mixed= TRUE;
|
old_lex->binlog_row_based_if_mixed= TRUE;
|
||||||
#endif
|
|
||||||
bool view_is_mergeable= (table->algorithm != VIEW_ALGORITHM_TMPTABLE &&
|
bool view_is_mergeable= (table->algorithm != VIEW_ALGORITHM_TMPTABLE &&
|
||||||
lex->can_be_merged());
|
lex->can_be_merged());
|
||||||
TABLE_LIST *view_main_select_tables;
|
TABLE_LIST *view_main_select_tables;
|
||||||
|
@ -122,7 +122,6 @@ TABLE_SHARE *alloc_table_share(TABLE_LIST *table_list, char *key,
|
|||||||
share->version= refresh_version;
|
share->version= refresh_version;
|
||||||
share->flush_version= flush_version;
|
share->flush_version= flush_version;
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
This constant is used to mark that no table map version has been
|
This constant is used to mark that no table map version has been
|
||||||
assigned. No arithmetic is done on the value: it will be
|
assigned. No arithmetic is done on the value: it will be
|
||||||
@ -140,8 +139,6 @@ TABLE_SHARE *alloc_table_share(TABLE_LIST *table_list, char *key,
|
|||||||
share->table_map_id= ~0UL;
|
share->table_map_id= ~0UL;
|
||||||
share->cached_row_logging_check= -1;
|
share->cached_row_logging_check= -1;
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
memcpy((char*) &share->mem_root, (char*) &mem_root, sizeof(mem_root));
|
memcpy((char*) &share->mem_root, (char*) &mem_root, sizeof(mem_root));
|
||||||
pthread_mutex_init(&share->mutex, MY_MUTEX_INIT_FAST);
|
pthread_mutex_init(&share->mutex, MY_MUTEX_INIT_FAST);
|
||||||
pthread_cond_init(&share->cond, NULL);
|
pthread_cond_init(&share->cond, NULL);
|
||||||
@ -193,7 +190,6 @@ void init_tmp_table_share(TABLE_SHARE *share, const char *key,
|
|||||||
share->path.length= share->normalized_path.length= strlen(path);
|
share->path.length= share->normalized_path.length= strlen(path);
|
||||||
share->frm_version= FRM_VER_TRUE_VARCHAR;
|
share->frm_version= FRM_VER_TRUE_VARCHAR;
|
||||||
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
/*
|
/*
|
||||||
Temporary tables are not replicated, but we set up these fields
|
Temporary tables are not replicated, but we set up these fields
|
||||||
anyway to be able to catch errors.
|
anyway to be able to catch errors.
|
||||||
@ -201,7 +197,6 @@ void init_tmp_table_share(TABLE_SHARE *share, const char *key,
|
|||||||
share->table_map_version= ~(ulonglong)0;
|
share->table_map_version= ~(ulonglong)0;
|
||||||
share->table_map_id= ~0UL;
|
share->table_map_id= ~0UL;
|
||||||
share->cached_row_logging_check= -1;
|
share->cached_row_logging_check= -1;
|
||||||
#endif
|
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
@ -173,9 +173,15 @@ int main()
|
|||||||
pthread_cond_init(&cond, 0);
|
pthread_cond_init(&cond, 0);
|
||||||
my_atomic_rwlock_init(&rwl);
|
my_atomic_rwlock_init(&rwl);
|
||||||
|
|
||||||
test_atomic("my_atomic_add32", test_atomic_add_handler, 100,10000);
|
#ifdef HPUX11
|
||||||
test_atomic("my_atomic_swap32", test_atomic_swap_handler, 100,10000);
|
#define CYCLES 1000
|
||||||
test_atomic("my_atomic_cas32", test_atomic_cas_handler, 100,10000);
|
#else
|
||||||
|
#define CYCLES 10000
|
||||||
|
#endif
|
||||||
|
#define THREADS 100
|
||||||
|
test_atomic("my_atomic_add32", test_atomic_add_handler, THREADS, CYCLES);
|
||||||
|
test_atomic("my_atomic_swap32", test_atomic_swap_handler, THREADS, CYCLES);
|
||||||
|
test_atomic("my_atomic_cas32", test_atomic_cas_handler, THREADS, CYCLES);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
workaround until we know why it crashes randomly on some machine
|
workaround until we know why it crashes randomly on some machine
|
||||||
|
Loading…
x
Reference in New Issue
Block a user