From: Marc Alff Date: June 2 2010 8:46am Subject: bzr commit into mysql-next-mr-wl4895 branch (marc.alff:3154) List-Archive: http://lists.mysql.com/commits/109883 Message-Id: <201006020848.o527oAQU004849@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5169090510587356889==" --===============5169090510587356889== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/malff/BZR_TREE/mysql-next-mr-wl4895/ based on revid:marc.alff@stripped 3154 Marc Alff 2010-06-02 [merge] merge mysql-next-mr --> mysql-next-mr-wl4895 added: mysql-test/include/mysqlbinlog_raw_mode.inc mysql-test/r/mysqlbinlog_raw_mode.result mysql-test/r/mysqlbinlog_raw_mode_win.result mysql-test/t/mysqlbinlog_raw_mode.test mysql-test/t/mysqlbinlog_raw_mode_win.test modified: client/Makefile.am client/client_priv.h client/mysqlbinlog.cc === modified file 'client/Makefile.am' --- a/client/Makefile.am 2010-05-19 13:00:23 +0000 +++ b/client/Makefile.am 2010-05-20 17:20:23 +0000 @@ -57,14 +57,10 @@ mysql_LDADD = @readline_link@ @TERMCAP $(LDADD) $(CXXLDFLAGS) mysqladmin_SOURCES = mysqladmin.cc -mysqlbinlog_SOURCES = mysqlbinlog.cc \ - $(top_srcdir)/mysys/mf_tempdir.c \ - $(top_srcdir)/mysys/my_new.cc \ - $(top_srcdir)/mysys/my_bit.c \ - $(top_srcdir)/mysys/my_bitmap.c \ - $(top_srcdir)/mysys/my_vle.c \ - $(top_srcdir)/mysys/base64.c -mysqlbinlog_LDADD = $(LDADD) $(CXXLDFLAGS) +mysqlbinlog_SOURCES = mysqlbinlog.cc +mysqlbinlog_LDADD = $(LDADD) $(CXXLDFLAGS) $(CLIENT_THREAD_LIBS) \ + $(LIBMYSQLCLIENT_LA) @CLIENT_EXTRA_LDFLAGS@ \ + $(top_builddir)/mysys/libmysys.a mysqldump_SOURCES= mysqldump.c \ my_user.c \ === modified file 'client/client_priv.h' --- a/client/client_priv.h 2010-03-31 14:05:33 +0000 +++ b/client/client_priv.h 2010-05-11 10:37:34 +0000 @@ -84,6 +84,7 @@ enum options_client OPT_DEBUG_INFO, OPT_DEBUG_CHECK, OPT_COLUMN_TYPES, OPT_ERROR_LOG_FILE, OPT_WRITE_BINLOG, OPT_DUMP_DATE, OPT_INIT_COMMAND, + OPT_RAW_OUTPUT, OPT_WAIT_SERVER_ID, OPT_STOP_NEVER, OPT_MAX_CLIENT_OPTION }; === modified file 'client/mysqlbinlog.cc' --- a/client/mysqlbinlog.cc 2010-04-22 15:07:50 +0000 +++ b/client/mysqlbinlog.cc 2010-05-28 07:26:32 +0000 @@ -32,6 +32,8 @@ #include /* That one is necessary for defines of OPTION_NO_FOREIGN_KEY_CHECKS etc */ #include "sql_priv.h" +#include +#include #include "log_event.h" #include "sql_common.h" @@ -51,6 +53,7 @@ ulong open_files_limit; uint test_flags = 0; static uint opt_protocol= 0; static FILE *result_file; +char **defaults_argv; #ifndef DBUG_OFF static const char* default_dbug_option = "d:t:o,/tmp/mysqlbinlog.trace"; @@ -60,7 +63,7 @@ static const char *load_default_groups[] static void error(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2); static void warning(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2); -static bool one_database=0, to_last_remote_log= 0, disable_log_bin= 0; +static bool one_database=0, disable_log_bin= 0; static bool opt_hexdump= 0; const char *base64_output_mode_names[]= {"NEVER", "AUTO", "ALWAYS", "UNSPEC", "DECODE-ROWS", NullS}; @@ -70,10 +73,13 @@ TYPELIB base64_output_mode_typelib= static enum_base64_output_mode opt_base64_output_mode= BASE64_OUTPUT_UNSPEC; static const char *opt_base64_output_mode_str= NullS; static const char* database= 0; +static const char* output_file= 0; static my_bool force_opt= 0, short_form= 0, remote_opt= 0; static my_bool debug_info_flag, debug_check_flag; -static my_bool force_if_open_opt= 1; +static my_bool force_if_open_opt= 1, raw_mode= 0; +static my_bool to_last_remote_log= 0, stop_never= 0; static ulonglong offset = 0; +static ulonglong stop_never_server_id= 1; static const char* host = 0; static int port= 0; static uint my_end_arg; @@ -125,6 +131,10 @@ static Exit_status dump_remote_log_entri static Exit_status dump_log_entries(const char* logname); static Exit_status safe_connect(); +static void force_quit(int param); +static void quit(Exit_status retval); +static void init_signals(void); +static int args_post_process(void); class Load_log_processor { @@ -1081,6 +1091,14 @@ static struct my_option my_long_options[ {"read-from-remote-server", 'R', "Read binary logs from a MySQL server.", (uchar**) &remote_opt, (uchar**) &remote_opt, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"raw", OPT_RAW_OUTPUT, "Requires -R. Output raw binlog data instead of SQL \ +statements, output is to log files.", + (uchar**) &raw_mode, (uchar**) &raw_mode, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, + 0, 0}, + {"result-file", 'r', "Direct output to a given file. With --raw this is a \ +prefix for the file names. Cannot use with --result-dir.", + (uchar**) &output_file, (uchar**) &output_file, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, {"result-file", 'r', "Direct output to a given file.", 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"server-id", OPT_SERVER_ID, @@ -1128,6 +1146,15 @@ static struct my_option my_long_options[ "(you should probably use quotes for your shell to set it properly).", (uchar**) &stop_datetime_str, (uchar**) &stop_datetime_str, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"stop-never", OPT_STOP_NEVER, "Wait for more data from the server \ +instead of stopping at the end of the last log. Implicitly sets \ +--to-last-log but instead of stopping at the end of the last log it continues \ +to wait till the server disconnects.", + (uchar**) &stop_never, (uchar**) &stop_never, 0, + GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"stop-never-slave-server-id", OPT_WAIT_SERVER_ID, + "The slave server ID used for stop-never", (uchar**) &stop_never_server_id, + (uchar**) &stop_never_server_id, 0, GET_ULONG, REQUIRED_ARG, 65535, 1, 65535, 0, 0, 0}, {"stop-position", OPT_STOP_POSITION, "Stop reading the binlog at position N. Applies to the last binlog " "passed on the command line.", @@ -1317,10 +1344,6 @@ get_one_option(int optid, const struct m else tty_password=1; break; - case 'r': - if (!(result_file = my_fopen(argument, O_WRONLY | O_BINARY, MYF(MY_WME)))) - exit(1); - break; case 'R': remote_opt= 1; break; @@ -1352,6 +1375,10 @@ get_one_option(int optid, const struct m case 'V': print_version(); exit(0); + case OPT_STOP_NEVER: + /* wait-for-data implicitly sets to-last-log */ + to_last_remote_log= 1; + break; case '?': usage(); exit(0); @@ -1436,7 +1463,10 @@ static Exit_status dump_log_entries(cons Set safe delimiter, to dump things like CREATE PROCEDURE safely */ - fprintf(result_file, "DELIMITER /*!*/;\n"); + if (!raw_mode) + { + fprintf(result_file, "DELIMITER /*!*/;\n"); + } strmov(print_event_info.delimiter, "/*!*/;"); print_event_info.verbose= short_form ? 0 : verbose; @@ -1445,8 +1475,11 @@ static Exit_status dump_log_entries(cons dump_local_log_entries(&print_event_info, logname)); /* Set delimiter back to semicolon */ - fprintf(result_file, "DELIMITER ;\n"); - strmov(print_event_info.delimiter, ";"); + if (!raw_mode) + { + fprintf(result_file, "DELIMITER ;\n"); + strmov(print_event_info.delimiter, ";"); + } return rc; } @@ -1546,9 +1579,11 @@ static Exit_status dump_remote_log_entri uchar buf[128]; ulong len; uint logname_len; + uint server_id; NET* net; my_off_t old_off= start_position_mot; char fname[FN_REFLEN+1]; + char log_file_name[FN_REFLEN+1]; Exit_status retval= OK_CONTINUE; DBUG_ENTER("dump_remote_log_entries"); @@ -1578,7 +1613,14 @@ static Exit_status dump_remote_log_entri DBUG_RETURN(ERROR_STOP); } logname_len = (uint) tlen; - int4store(buf + 6, 0); + /* + Fake a server ID to log continously. + This will show as a slave on the mysql server. + */ + server_id= ((to_last_remote_log && stop_never) ? + stop_never_server_id : 0); + + int4store(buf + 6, server_id); memcpy(buf + 10, logname, logname_len); if (simple_command(mysql, COM_BINLOG_DUMP, buf, logname_len + 10, 1)) { @@ -1601,20 +1643,28 @@ static Exit_status dump_remote_log_entri break; // end of data DBUG_PRINT("info",( "len: %lu net->read_pos[5]: %d\n", len, net->read_pos[5])); - if (!(ev= Log_event::read_log_event((const char*) net->read_pos + 1 , - len - 1, &error_msg, - glob_description_event))) - { - error("Could not construct log event object: %s", error_msg); - DBUG_RETURN(ERROR_STOP); - } /* - If reading from a remote host, ensure the temp_buf for the - Log_event class is pointing to the incoming stream. + In raw mode We only need the full event details if it is a + ROTATE_EVENT or FORMAT_DESCRIPTION_EVENT */ - ev->register_temp_buf((char *) net->read_pos + 1); - Log_event_type type= ev->get_type_code(); + Log_event_type type= (Log_event_type) *(((const char*) net->read_pos + 1) + EVENT_TYPE_OFFSET); + if (!raw_mode || (type == ROTATE_EVENT) || + (type == FORMAT_DESCRIPTION_EVENT)) + { + if (!(ev= Log_event::read_log_event((const char*) net->read_pos + 1 , + len - 1, &error_msg, + glob_description_event))) + { + error("Could not construct log event object: %s", error_msg); + DBUG_RETURN(ERROR_STOP); + } + /* + If reading from a remote host, ensure the temp_buf for the + Log_event class is pointing to the incoming stream. + */ + ev->register_temp_buf((char *) net->read_pos + 1); + } if (glob_description_event->binlog_version >= 3 || (type != LOAD_EVENT && type != CREATE_FILE_EVENT)) { @@ -1637,6 +1687,19 @@ static Exit_status dump_remote_log_entri part of our log) and then we will stop when we receive the fake one soon. */ + if (raw_mode) + { + if (output_file != 0) + { + my_snprintf(log_file_name, sizeof(log_file_name), "%s%s", + output_file, rev->new_log_ident); + } + else + { + strmov(log_file_name, rev->new_log_ident); + } + } + if (rev->when == 0) { if (!to_last_remote_log) @@ -1666,10 +1729,45 @@ static Exit_status dump_remote_log_entri don't increment old_off. Real Format_description_log_event always starts from BIN_LOG_HEADER_SIZE position. */ - if (old_off != BIN_LOG_HEADER_SIZE) - len= 1; // fake event, don't increment old_off + // fake event when not in raw mode, don't increment old_off + if ((old_off != BIN_LOG_HEADER_SIZE) && (!raw_mode)) + len= 1; + if (raw_mode) + { + my_fclose(result_file, MYF(0)); + if (!(result_file = my_fopen(log_file_name, O_WRONLY | O_BINARY, + MYF(MY_WME)))) + { + error("Could not create log file '%s'", log_file_name); + DBUG_RETURN(ERROR_STOP); + } + fprintf(result_file,"%s", BINLOG_MAGIC); + /* + Need to handle these events correctly in raw mode too + or this could get messy + */ + delete glob_description_event; + glob_description_event= (Format_description_log_event*) ev; + print_event_info->common_header_len= glob_description_event->common_header_len; + ev->temp_buf= 0; + ev= 0; + } + } + + if (raw_mode) + { + my_fwrite(result_file, net->read_pos + 1 , len - 1, MYF(0)); + if (ev) + { + ev->temp_buf=0; + delete ev; + } } - Exit_status retval= process_event(print_event_info, ev, old_off, logname); + else + { + retval= process_event(print_event_info, ev, old_off, logname); + } + if (retval != OK_CONTINUE) DBUG_RETURN(retval); } @@ -1679,7 +1777,6 @@ static Exit_status dump_remote_log_entri const char *old_fname= le->fname; uint old_len= le->fname_len; File file; - Exit_status retval; if ((file= load_processor.prepare_new_file_for_old_format(le,fname)) < 0) DBUG_RETURN(ERROR_STOP); @@ -2012,16 +2109,61 @@ end: return retval; } +/* Post processing of arguments to check for conflicts and other setups */ +static int args_post_process(void) +{ + DBUG_ENTER("args_post_process"); + MY_STAT stat_info; + int err; + + if ((raw_mode != 0) && (one_database != 0)) + { + warning("The --database option is ignored with --raw mode"); + } + + if ((remote_opt == 0) && (raw_mode != 0)) + { + error("You need to set --read-from-remote-server for --raw mode"); + DBUG_RETURN(ERROR_STOP); + } + + if ((raw_mode) && (stop_position != (ulonglong)(~(my_off_t)0))) + { + warning("The --stop-position option is ignored in raw mode"); + } + + if ((raw_mode) && (stop_datetime != MY_TIME_T_MAX)) + { + warning("The --stop-datetime option is ignored in raw mode"); + } + + /* + Make this last of the post-option tests so we don't exit with a + file open + */ + + if ((output_file != 0) && (!raw_mode)) + { + if (!(result_file = my_fopen(output_file, O_WRONLY | O_BINARY, MYF(MY_WME)))) + { + error("Could not create log file '%s'", output_file); + DBUG_RETURN(ERROR_STOP); + } + } + DBUG_RETURN(OK_CONTINUE); +} + int main(int argc, char** argv) { - char **defaults_argv; - Exit_status retval= OK_CONTINUE; + Exit_status retval= OK_STOP; ulonglong save_stop_position; MY_INIT(argv[0]); DBUG_ENTER("main"); DBUG_PROCESS(argv[0]); + init_signals(); + my_init_time(); // for time functions if (load_defaults("my", load_default_groups, &argc, &argv)) @@ -2032,10 +2174,14 @@ int main(int argc, char** argv) if (!argc) { usage(); - free_defaults(defaults_argv); - exit(1); + quit(ERROR_STOP); } + /* Check for argument conflicts and do any post-processing */ + if (args_post_process() == ERROR_STOP) + quit(ERROR_STOP); + + if (opt_base64_output_mode == BASE64_OUTPUT_UNSPEC) opt_base64_output_mode= BASE64_OUTPUT_AUTO; @@ -2057,27 +2203,30 @@ int main(int argc, char** argv) else load_processor.init_by_cur_dir(); - fprintf(result_file, - "/*!40019 SET @@session.max_insert_delayed_threads=0*/;\n"); - - if (disable_log_bin) + if (!raw_mode) + { fprintf(result_file, - "/*!32316 SET @OLD_SQL_LOG_BIN=@@SQL_LOG_BIN, SQL_LOG_BIN=0*/;\n"); + "/*!40019 SET @@session.max_insert_delayed_threads=0*/;\n"); - /* - In mysqlbinlog|mysql, don't want mysql to be disconnected after each - transaction (which would be the case with GLOBAL.COMPLETION_TYPE==2). - */ - fprintf(result_file, - "/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE," - "COMPLETION_TYPE=0*/;\n"); + if (disable_log_bin) + fprintf(result_file, + "/*!32316 SET @OLD_SQL_LOG_BIN=@@SQL_LOG_BIN, SQL_LOG_BIN=0*/;\n"); - if (charset) + /* + In mysqlbinlog|mysql, don't want mysql to be disconnected after each + transaction (which would be the case with GLOBAL.COMPLETION_TYPE==2). + */ fprintf(result_file, - "\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;" - "\n/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;" - "\n/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;" - "\n/*!40101 SET NAMES %s */;\n", charset); + "/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE," + "COMPLETION_TYPE=0*/;\n"); + + if (charset) + fprintf(result_file, + "\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;" + "\n/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;" + "\n/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;" + "\n/*!40101 SET NAMES %s */;\n", charset); + } for (save_stop_position= stop_position, stop_position= ~(my_off_t)0 ; (--argc >= 0) ; ) @@ -2091,36 +2240,57 @@ int main(int argc, char** argv) start_position= BIN_LOG_HEADER_SIZE; } - /* - Issue a ROLLBACK in case the last printed binlog was crashed and had half - of transaction. - */ - fprintf(result_file, + if (!raw_mode) + { + /* + Issue a ROLLBACK in case the last printed binlog was crashed and had half + of transaction. + */ + fprintf(result_file, "# End of log file\nROLLBACK /* added by mysqlbinlog */;\n" "/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;\n"); - if (disable_log_bin) - fprintf(result_file, "/*!32316 SET SQL_LOG_BIN=@OLD_SQL_LOG_BIN*/;\n"); + if (disable_log_bin) + fprintf(result_file, "/*!32316 SET SQL_LOG_BIN=@OLD_SQL_LOG_BIN*/;\n"); - if (charset) - fprintf(result_file, - "/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;\n" - "/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;\n" - "/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;\n"); + if (charset) + fprintf(result_file, + "/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;\n" + "/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;\n" + "/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;\n"); + } if (tmpdir.list) free_tmpdir(&tmpdir); + quit(retval); +} + +/* Catch all these signals so that we can close files safely when exiting */ +static void init_signals(void) +{ + int signals[] = {SIGINT,SIGTERM}; + + for (uint i=0 ; i < sizeof(signals)/sizeof(int) ; i++) + signal(signals[i], force_quit); +} + +static void force_quit(int param) +{ + quit(OK_STOP); +} + +static void quit(Exit_status retval) +{ if (result_file != stdout) my_fclose(result_file, MYF(0)); cleanup(); - free_defaults(defaults_argv); + if (defaults_argv) + free_defaults(defaults_argv); my_free_open_file_info(); load_processor.destroy(); /* We cannot free DBUG, it is used in global destructors after exit(). */ my_end(my_end_arg | MY_DONT_FREE_DBUG); exit(retval == ERROR_STOP ? 1 : 0); - /* Keep compilers happy. */ - DBUG_RETURN(retval == ERROR_STOP ? 1 : 0); } /* === added file 'mysql-test/include/mysqlbinlog_raw_mode.inc' --- a/mysql-test/include/mysqlbinlog_raw_mode.inc 1970-01-01 00:00:00 +0000 +++ b/mysql-test/include/mysqlbinlog_raw_mode.inc 2010-05-21 21:48:20 +0000 @@ -0,0 +1,388 @@ +# Tests for new raw mode features in mysqlbinlog, row mode +# TODO: Test --wait-for-data + +# Delete all the binary logs +reset master; + +# we need this for getting fixed timestamps inside of this test +set timestamp=1000000000; + +--disable_warnings +drop table if exists t1; +--enable_warnings +CREATE TABLE t1 (c01 BIT); +INSERT INTO t1 VALUES (0); +INSERT INTO t1 VALUES (1); +DROP TABLE t1; + +CREATE TABLE t1 (c01 BIT(7)); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (8); +INSERT INTO t1 VALUES (16); +INSERT INTO t1 VALUES (32); +INSERT INTO t1 VALUES (64); +INSERT INTO t1 VALUES (127); +DELETE FROM t1 WHERE c01=127; +UPDATE t1 SET c01=15 WHERE c01=16; +DROP TABLE t1; + +CREATE TABLE t1 (a BIT(20), b CHAR(2)); +INSERT INTO t1 VALUES (b'00010010010010001001', 'ab'); +DROP TABLE t1; + +CREATE TABLE t1 (c02 BIT(64)); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (128); +INSERT INTO t1 VALUES (b'1111111111111111111111111111111111111111111111111111111111111111'); +DROP TABLE t1; + + +CREATE TABLE t1 (c03 TINYINT); +INSERT INTO t1 VALUES (1),(2),(3); +INSERT INTO t1 VALUES (-128); +UPDATE t1 SET c03=2 WHERE c03=1; +DELETE FROM t1 WHERE c03=-128; +DROP TABLE t1; + +CREATE TABLE t1 (c04 TINYINT UNSIGNED); +INSERT INTO t1 VALUES (128), (255); +UPDATE t1 SET c04=2 WHERE c04=1; +DELETE FROM t1 WHERE c04=255; +DROP TABLE t1; + +CREATE TABLE t1 (c06 BOOL); +INSERT INTO t1 VALUES (TRUE); +DELETE FROM t1 WHERE c06=TRUE; +DROP TABLE t1; + +CREATE TABLE t1 (c07 SMALLINT); +INSERT INTO t1 VALUES (1234); +DELETE FROM t1 WHERE c07=1234; +DROP TABLE t1; + +CREATE TABLE t1 (c08 SMALLINT UNSIGNED); +INSERT INTO t1 VALUES (32768), (65535); +UPDATE t1 SET c08=2 WHERE c08=32768; +DELETE FROM t1 WHERE c08=65535; +DROP TABLE t1; + +CREATE TABLE t1 (c10 MEDIUMINT); +INSERT INTO t1 VALUES (12345); +DELETE FROM t1 WHERE c10=12345; +DROP TABLE t1; + +CREATE TABLE t1 (c11 MEDIUMINT UNSIGNED); +INSERT INTO t1 VALUES (8388608), (16777215); +UPDATE t1 SET c11=2 WHERE c11=8388608; +DELETE FROM t1 WHERE c11=16777215; +DROP TABLE t1; + +CREATE TABLE t1 (c13 INT); +INSERT INTO t1 VALUES (123456); +DELETE FROM t1 WHERE c13=123456; +DROP TABLE t1; + +CREATE TABLE t1 (c14 INT UNSIGNED); +INSERT INTO t1 VALUES (2147483648), (4294967295); +UPDATE t1 SET c14=2 WHERE c14=2147483648; +DELETE FROM t1 WHERE c14=4294967295; +DROP TABLE t1; + +CREATE TABLE t1 (c16 BIGINT); +INSERT INTO t1 VALUES (1234567890); +DELETE FROM t1 WHERE c16=1234567890; +DROP TABLE t1; + +CREATE TABLE t1 (c17 BIGINT UNSIGNED); +INSERT INTO t1 VALUES (9223372036854775808), (18446744073709551615); +UPDATE t1 SET c17=2 WHERE c17=9223372036854775808; +DELETE FROM t1 WHERE c17=18446744073709551615; +DROP TABLE t1; + +CREATE TABLE t1 (c19 FLOAT); +INSERT INTO t1 VALUES (123.2234); +DELETE FROM t1 WHERE c19>123; +DROP TABLE t1; + +CREATE TABLE t1 (c22 DOUBLE); +INSERT INTO t1 VALUES (123434.22344545); +DELETE FROM t1 WHERE c22>123434; +DROP TABLE t1; + +# + +CREATE TABLE t1 (c25 DECIMAL(10,5)); +INSERT INTO t1 VALUES (124.45); +INSERT INTO t1 VALUES (-543.21); +DELETE FROM t1 WHERE c25=124.45; +DROP TABLE t1; + +# + +CREATE TABLE t1 (c28 DATE); +INSERT INTO t1 VALUES ('2001-02-03'); +DELETE FROM t1 WHERE c28='2001-02-03'; +DROP TABLE t1; + +CREATE TABLE t1 (c29 DATETIME); +INSERT INTO t1 VALUES ('2001-02-03 10:20:30'); +DELETE FROM t1 WHERE c29='2001-02-03 10:20:30'; +DROP TABLE t1; + +CREATE TABLE t1 (c30 TIMESTAMP); +INSERT INTO t1 VALUES ('2001-02-03 10:20:30'); +DELETE FROM t1 WHERE c30='2001-02-03 10:20:30'; +DROP TABLE t1; + +CREATE TABLE t1 (c31 TIME); +INSERT INTO t1 VALUES ('11:22:33'); +DELETE FROM t1 WHERE c31='11:22:33'; +DROP TABLE t1; + +CREATE TABLE t1 (c32 YEAR); +INSERT INTO t1 VALUES ('2001'); +DELETE FROM t1 WHERE c32=2001; +DROP TABLE t1; + +# + +CREATE TABLE t1 (c33 CHAR); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c33='a'; +DROP TABLE t1; + +CREATE TABLE t1 (c34 CHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c34=''; +DROP TABLE t1; + +CREATE TABLE t1 (c35 CHAR(1)); +INSERT INTO t1 VALUES ('b'); +DELETE FROM t1 WHERE c35='b'; +DROP TABLE t1; + +CREATE TABLE t1 (c36 CHAR(255)); +INSERT INTO t1 VALUES (repeat('c',255)); +DELETE FROM t1 WHERE c36>'c'; +DROP TABLE t1; + +# + +CREATE TABLE t1 (c37 NATIONAL CHAR); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c37='a'; +DROP TABLE t1; + +CREATE TABLE t1 (c38 NATIONAL CHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c38=''; +DROP TABLE t1; + +CREATE TABLE t1 (c39 NATIONAL CHAR(1)); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c39='a'; +DROP TABLE t1; + +CREATE TABLE t1 (c40 NATIONAL CHAR(255)); +INSERT INTO t1 VALUES (repeat('a', 255)); +INSERT INTO t1 VALUES (repeat(_latin1 0xDF, 255)); +DELETE FROM t1 WHERE c40>'a'; +DROP TABLE t1; + +# + +CREATE TABLE t1 (c45 VARCHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c45=''; +DROP TABLE t1; + +CREATE TABLE t1 (c46 VARCHAR(1)); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c46='a'; +DROP TABLE t1; + +CREATE TABLE t1 (c47 VARCHAR(255)); +INSERT INTO t1 VALUES (repeat('a',255)); +DELETE FROM t1 WHERE c47>'a'; +DROP TABLE t1; + +CREATE TABLE t1 (c48 VARCHAR(261)); +INSERT INTO t1 VALUES (repeat('a',261)); +DELETE FROM t1 WHERE c48>'a'; +DROP TABLE t1; + +# + +CREATE TABLE t1 (c49 NATIONAL VARCHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c49=''; +DROP TABLE t1; + +CREATE TABLE t1 (c50 NATIONAL VARCHAR(1)); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c50='a'; +DROP TABLE t1; + +CREATE TABLE t1 (c51 NATIONAL VARCHAR(255)); +INSERT INTO t1 VALUES (repeat('a',255)); +INSERT INTO t1 VALUES (repeat(_latin1 0xDF, 255)); +DELETE FROM t1 WHERE c51>'a'; +DROP TABLE t1; + +CREATE TABLE t1 (c52 NATIONAL VARCHAR(261)); +INSERT INTO t1 VALUES (repeat('a',261)); +INSERT INTO t1 VALUES (repeat(_latin1 0xDF, 261)); +DELETE FROM t1 WHERE c52>'a'; +DROP TABLE t1; + +# + +CREATE TABLE t1 (c57 BINARY); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c57='a'; +DROP TABLE t1; + +CREATE TABLE t1 (c58 BINARY(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c58=''; +DROP TABLE t1; + +CREATE TABLE t1 (c59 BINARY(1)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c59='a'; +DROP TABLE t1; + +CREATE TABLE t1 (c60 BINARY(255)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES (repeat('a\0',120)); +DELETE FROM t1 WHERE c60<0x02; +DROP TABLE t1; + +# + +CREATE TABLE t1 (c61 VARBINARY(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c61=''; +DROP TABLE t1; + +CREATE TABLE t1 (c62 VARBINARY(1)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c62=0x02; +DROP TABLE t1; + +CREATE TABLE t1 (c63 VARBINARY(255)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES (repeat('a\0',120)); +DELETE FROM t1 WHERE c63=0x02; +DROP TABLE t1; + +# +flush logs; + +CREATE TABLE t1 (c65 TINYBLOB); +INSERT INTO t1 VALUES ('tinyblob1'); +DELETE FROM t1 WHERE c65='tinyblob1'; +DROP TABLE t1; + +CREATE TABLE t1 (c68 BLOB); +INSERT INTO t1 VALUES ('blob1'); +DELETE FROM t1 WHERE c68='blob1'; +DROP TABLE t1; + +CREATE TABLE t1 (c71 MEDIUMBLOB); +INSERT INTO t1 VALUES ('mediumblob1'); +DELETE FROM t1 WHERE c71='mediumblob1'; +DROP TABLE t1; + +CREATE TABLE t1 (c74 LONGBLOB); +INSERT INTO t1 VALUES ('longblob1'); +DELETE FROM t1 WHERE c74='longblob1'; +DROP TABLE t1; + +CREATE TABLE t1 (c66 TINYTEXT); +INSERT INTO t1 VALUES ('tinytext1'); +DELETE FROM t1 WHERE c66='tinytext1'; +DROP TABLE t1; + +CREATE TABLE t1 (c69 TEXT); +INSERT INTO t1 VALUES ('text1'); +DELETE FROM t1 WHERE c69='text1'; +DROP TABLE t1; + +CREATE TABLE t1 (c72 MEDIUMTEXT); +INSERT INTO t1 VALUES ('mediumtext1'); +DELETE FROM t1 WHERE c72='mediumtext1'; +DROP TABLE t1; + +CREATE TABLE t1 (c75 LONGTEXT); +INSERT INTO t1 VALUES ('longtext1'); +DELETE FROM t1 WHERE c75='longtext1'; +DROP TABLE t1; + +# + +CREATE TABLE t1 (c77 ENUM('a','b','c')); +INSERT INTO t1 VALUES ('b'); +DELETE FROM t1 WHERE c77='b'; +DROP TABLE t1; + +# + +CREATE TABLE t1 (c78 SET('a','b','c','d','e','f')); +INSERT INTO t1 VALUES ('a,b'); +INSERT INTO t1 VALUES ('a,c'); +INSERT INTO t1 VALUES ('b,c'); +INSERT INTO t1 VALUES ('a,b,c'); +INSERT INTO t1 VALUES ('a,b,c,d'); +INSERT INTO t1 VALUES ('a,b,c,d,e'); +INSERT INTO t1 VALUES ('a,b,c,d,e,f'); +DELETE FROM t1 WHERE c78='a,b'; +DROP TABLE t1; + +# +# Check multi-table update +# +CREATE TABLE t1 (a int NOT NULL DEFAULT 0, b int NOT NULL DEFAULT 0); +CREATE TABLE t2 (a int NOT NULL DEFAULT 0, b int NOT NULL DEFAULT 0); +INSERT INTO t1 SET a=1; +INSERT INTO t1 SET b=1; +INSERT INTO t2 SET a=1; +INSERT INTO t2 SET b=1; +UPDATE t1, t2 SET t1.a=10, t2.a=20; +DROP TABLE t1,t2; + +flush logs; + +let $MYSQLD_DATADIR= `select @@datadir`; + +# Test reading one file in raw mode +--exec $MYSQL_BINLOG --raw --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --result-file=$MYSQLTEST_VARDIR/tmp/ master-bin.000001 +--diff_files $MYSQLTEST_VARDIR/tmp/master-bin.000001 $MYSQLD_DATADIR/master-bin.000001 +--remove_file $MYSQLTEST_VARDIR/tmp/master-bin.000001 + +# Test reading all files in raw mode +# Don't test the end file since this is still open with mysqld so will be different +--exec $MYSQL_BINLOG --raw --read-from-remote-server --to-last-log --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --result-file=$MYSQLTEST_VARDIR/tmp/ master-bin.000001 +--diff_files $MYSQLTEST_VARDIR/tmp/master-bin.000001 $MYSQLD_DATADIR/master-bin.000001 +--diff_files $MYSQLTEST_VARDIR/tmp/master-bin.000002 $MYSQLD_DATADIR/master-bin.000002 + +--remove_file $MYSQLTEST_VARDIR/tmp/master-bin.000001 +--remove_file $MYSQLTEST_VARDIR/tmp/master-bin.000002 +--remove_file $MYSQLTEST_VARDIR/tmp/master-bin.000003 + + +# Test output to different filename +--exec $MYSQL_BINLOG --raw --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --result-file=$MYSQLTEST_VARDIR/tmp/server1- master-bin.000001 +--diff_files $MYSQLTEST_VARDIR/tmp/server1-master-bin.000001 $MYSQLD_DATADIR/master-bin.000001 +--remove_file $MYSQLTEST_VARDIR/tmp/server1-master-bin.000001 === added file 'mysql-test/r/mysqlbinlog_raw_mode.result' --- a/mysql-test/r/mysqlbinlog_raw_mode.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/mysqlbinlog_raw_mode.result 2010-05-21 21:48:20 +0000 @@ -0,0 +1,280 @@ +reset master; +set timestamp=1000000000; +drop table if exists t1; +CREATE TABLE t1 (c01 BIT); +INSERT INTO t1 VALUES (0); +INSERT INTO t1 VALUES (1); +DROP TABLE t1; +CREATE TABLE t1 (c01 BIT(7)); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (8); +INSERT INTO t1 VALUES (16); +INSERT INTO t1 VALUES (32); +INSERT INTO t1 VALUES (64); +INSERT INTO t1 VALUES (127); +DELETE FROM t1 WHERE c01=127; +UPDATE t1 SET c01=15 WHERE c01=16; +DROP TABLE t1; +CREATE TABLE t1 (a BIT(20), b CHAR(2)); +INSERT INTO t1 VALUES (b'00010010010010001001', 'ab'); +DROP TABLE t1; +CREATE TABLE t1 (c02 BIT(64)); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (128); +INSERT INTO t1 VALUES (b'1111111111111111111111111111111111111111111111111111111111111111'); +DROP TABLE t1; +CREATE TABLE t1 (c03 TINYINT); +INSERT INTO t1 VALUES (1),(2),(3); +INSERT INTO t1 VALUES (-128); +UPDATE t1 SET c03=2 WHERE c03=1; +DELETE FROM t1 WHERE c03=-128; +DROP TABLE t1; +CREATE TABLE t1 (c04 TINYINT UNSIGNED); +INSERT INTO t1 VALUES (128), (255); +UPDATE t1 SET c04=2 WHERE c04=1; +DELETE FROM t1 WHERE c04=255; +DROP TABLE t1; +CREATE TABLE t1 (c06 BOOL); +INSERT INTO t1 VALUES (TRUE); +DELETE FROM t1 WHERE c06=TRUE; +DROP TABLE t1; +CREATE TABLE t1 (c07 SMALLINT); +INSERT INTO t1 VALUES (1234); +DELETE FROM t1 WHERE c07=1234; +DROP TABLE t1; +CREATE TABLE t1 (c08 SMALLINT UNSIGNED); +INSERT INTO t1 VALUES (32768), (65535); +UPDATE t1 SET c08=2 WHERE c08=32768; +DELETE FROM t1 WHERE c08=65535; +DROP TABLE t1; +CREATE TABLE t1 (c10 MEDIUMINT); +INSERT INTO t1 VALUES (12345); +DELETE FROM t1 WHERE c10=12345; +DROP TABLE t1; +CREATE TABLE t1 (c11 MEDIUMINT UNSIGNED); +INSERT INTO t1 VALUES (8388608), (16777215); +UPDATE t1 SET c11=2 WHERE c11=8388608; +DELETE FROM t1 WHERE c11=16777215; +DROP TABLE t1; +CREATE TABLE t1 (c13 INT); +INSERT INTO t1 VALUES (123456); +DELETE FROM t1 WHERE c13=123456; +DROP TABLE t1; +CREATE TABLE t1 (c14 INT UNSIGNED); +INSERT INTO t1 VALUES (2147483648), (4294967295); +UPDATE t1 SET c14=2 WHERE c14=2147483648; +DELETE FROM t1 WHERE c14=4294967295; +DROP TABLE t1; +CREATE TABLE t1 (c16 BIGINT); +INSERT INTO t1 VALUES (1234567890); +DELETE FROM t1 WHERE c16=1234567890; +DROP TABLE t1; +CREATE TABLE t1 (c17 BIGINT UNSIGNED); +INSERT INTO t1 VALUES (9223372036854775808), (18446744073709551615); +UPDATE t1 SET c17=2 WHERE c17=9223372036854775808; +DELETE FROM t1 WHERE c17=18446744073709551615; +DROP TABLE t1; +CREATE TABLE t1 (c19 FLOAT); +INSERT INTO t1 VALUES (123.2234); +DELETE FROM t1 WHERE c19>123; +DROP TABLE t1; +CREATE TABLE t1 (c22 DOUBLE); +INSERT INTO t1 VALUES (123434.22344545); +DELETE FROM t1 WHERE c22>123434; +DROP TABLE t1; +CREATE TABLE t1 (c25 DECIMAL(10,5)); +INSERT INTO t1 VALUES (124.45); +INSERT INTO t1 VALUES (-543.21); +DELETE FROM t1 WHERE c25=124.45; +DROP TABLE t1; +CREATE TABLE t1 (c28 DATE); +INSERT INTO t1 VALUES ('2001-02-03'); +DELETE FROM t1 WHERE c28='2001-02-03'; +DROP TABLE t1; +CREATE TABLE t1 (c29 DATETIME); +INSERT INTO t1 VALUES ('2001-02-03 10:20:30'); +DELETE FROM t1 WHERE c29='2001-02-03 10:20:30'; +DROP TABLE t1; +CREATE TABLE t1 (c30 TIMESTAMP); +INSERT INTO t1 VALUES ('2001-02-03 10:20:30'); +DELETE FROM t1 WHERE c30='2001-02-03 10:20:30'; +DROP TABLE t1; +CREATE TABLE t1 (c31 TIME); +INSERT INTO t1 VALUES ('11:22:33'); +DELETE FROM t1 WHERE c31='11:22:33'; +DROP TABLE t1; +CREATE TABLE t1 (c32 YEAR); +INSERT INTO t1 VALUES ('2001'); +DELETE FROM t1 WHERE c32=2001; +DROP TABLE t1; +CREATE TABLE t1 (c33 CHAR); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c33='a'; +DROP TABLE t1; +CREATE TABLE t1 (c34 CHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c34=''; +DROP TABLE t1; +CREATE TABLE t1 (c35 CHAR(1)); +INSERT INTO t1 VALUES ('b'); +DELETE FROM t1 WHERE c35='b'; +DROP TABLE t1; +CREATE TABLE t1 (c36 CHAR(255)); +INSERT INTO t1 VALUES (repeat('c',255)); +DELETE FROM t1 WHERE c36>'c'; +DROP TABLE t1; +CREATE TABLE t1 (c37 NATIONAL CHAR); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c37='a'; +DROP TABLE t1; +CREATE TABLE t1 (c38 NATIONAL CHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c38=''; +DROP TABLE t1; +CREATE TABLE t1 (c39 NATIONAL CHAR(1)); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c39='a'; +DROP TABLE t1; +CREATE TABLE t1 (c40 NATIONAL CHAR(255)); +INSERT INTO t1 VALUES (repeat('a', 255)); +INSERT INTO t1 VALUES (repeat(_latin1 0xDF, 255)); +DELETE FROM t1 WHERE c40>'a'; +DROP TABLE t1; +CREATE TABLE t1 (c45 VARCHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c45=''; +DROP TABLE t1; +CREATE TABLE t1 (c46 VARCHAR(1)); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c46='a'; +DROP TABLE t1; +CREATE TABLE t1 (c47 VARCHAR(255)); +INSERT INTO t1 VALUES (repeat('a',255)); +DELETE FROM t1 WHERE c47>'a'; +DROP TABLE t1; +CREATE TABLE t1 (c48 VARCHAR(261)); +INSERT INTO t1 VALUES (repeat('a',261)); +DELETE FROM t1 WHERE c48>'a'; +DROP TABLE t1; +CREATE TABLE t1 (c49 NATIONAL VARCHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c49=''; +DROP TABLE t1; +CREATE TABLE t1 (c50 NATIONAL VARCHAR(1)); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c50='a'; +DROP TABLE t1; +CREATE TABLE t1 (c51 NATIONAL VARCHAR(255)); +INSERT INTO t1 VALUES (repeat('a',255)); +INSERT INTO t1 VALUES (repeat(_latin1 0xDF, 255)); +DELETE FROM t1 WHERE c51>'a'; +DROP TABLE t1; +CREATE TABLE t1 (c52 NATIONAL VARCHAR(261)); +INSERT INTO t1 VALUES (repeat('a',261)); +INSERT INTO t1 VALUES (repeat(_latin1 0xDF, 261)); +DELETE FROM t1 WHERE c52>'a'; +DROP TABLE t1; +CREATE TABLE t1 (c57 BINARY); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c57='a'; +DROP TABLE t1; +CREATE TABLE t1 (c58 BINARY(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c58=''; +DROP TABLE t1; +CREATE TABLE t1 (c59 BINARY(1)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c59='a'; +DROP TABLE t1; +CREATE TABLE t1 (c60 BINARY(255)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES (repeat('a\0',120)); +DELETE FROM t1 WHERE c60<0x02; +DROP TABLE t1; +CREATE TABLE t1 (c61 VARBINARY(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c61=''; +DROP TABLE t1; +CREATE TABLE t1 (c62 VARBINARY(1)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c62=0x02; +DROP TABLE t1; +CREATE TABLE t1 (c63 VARBINARY(255)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES (repeat('a\0',120)); +DELETE FROM t1 WHERE c63=0x02; +DROP TABLE t1; +flush logs; +CREATE TABLE t1 (c65 TINYBLOB); +INSERT INTO t1 VALUES ('tinyblob1'); +DELETE FROM t1 WHERE c65='tinyblob1'; +DROP TABLE t1; +CREATE TABLE t1 (c68 BLOB); +INSERT INTO t1 VALUES ('blob1'); +DELETE FROM t1 WHERE c68='blob1'; +DROP TABLE t1; +CREATE TABLE t1 (c71 MEDIUMBLOB); +INSERT INTO t1 VALUES ('mediumblob1'); +DELETE FROM t1 WHERE c71='mediumblob1'; +DROP TABLE t1; +CREATE TABLE t1 (c74 LONGBLOB); +INSERT INTO t1 VALUES ('longblob1'); +DELETE FROM t1 WHERE c74='longblob1'; +DROP TABLE t1; +CREATE TABLE t1 (c66 TINYTEXT); +INSERT INTO t1 VALUES ('tinytext1'); +DELETE FROM t1 WHERE c66='tinytext1'; +DROP TABLE t1; +CREATE TABLE t1 (c69 TEXT); +INSERT INTO t1 VALUES ('text1'); +DELETE FROM t1 WHERE c69='text1'; +DROP TABLE t1; +CREATE TABLE t1 (c72 MEDIUMTEXT); +INSERT INTO t1 VALUES ('mediumtext1'); +DELETE FROM t1 WHERE c72='mediumtext1'; +DROP TABLE t1; +CREATE TABLE t1 (c75 LONGTEXT); +INSERT INTO t1 VALUES ('longtext1'); +DELETE FROM t1 WHERE c75='longtext1'; +DROP TABLE t1; +CREATE TABLE t1 (c77 ENUM('a','b','c')); +INSERT INTO t1 VALUES ('b'); +DELETE FROM t1 WHERE c77='b'; +DROP TABLE t1; +CREATE TABLE t1 (c78 SET('a','b','c','d','e','f')); +INSERT INTO t1 VALUES ('a,b'); +INSERT INTO t1 VALUES ('a,c'); +INSERT INTO t1 VALUES ('b,c'); +INSERT INTO t1 VALUES ('a,b,c'); +INSERT INTO t1 VALUES ('a,b,c,d'); +INSERT INTO t1 VALUES ('a,b,c,d,e'); +INSERT INTO t1 VALUES ('a,b,c,d,e,f'); +DELETE FROM t1 WHERE c78='a,b'; +DROP TABLE t1; +CREATE TABLE t1 (a int NOT NULL DEFAULT 0, b int NOT NULL DEFAULT 0); +CREATE TABLE t2 (a int NOT NULL DEFAULT 0, b int NOT NULL DEFAULT 0); +INSERT INTO t1 SET a=1; +INSERT INTO t1 SET b=1; +INSERT INTO t2 SET a=1; +INSERT INTO t2 SET b=1; +UPDATE t1, t2 SET t1.a=10, t2.a=20; +DROP TABLE t1,t2; +flush logs; +CREATE TABLE raw_mode_exit (exit_code INT); +SELECT ((@id := id) - id) from information_schema.processlist where processlist.command like '%Binlog%' and state like '%Master has sent%'; +((@id := id) - id) +0 +kill @id; +DROP TABLE raw_mode_exit; +End of tests === added file 'mysql-test/r/mysqlbinlog_raw_mode_win.result' --- a/mysql-test/r/mysqlbinlog_raw_mode_win.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/mysqlbinlog_raw_mode_win.result 2010-05-21 21:48:20 +0000 @@ -0,0 +1,274 @@ +reset master; +set timestamp=1000000000; +drop table if exists t1; +CREATE TABLE t1 (c01 BIT); +INSERT INTO t1 VALUES (0); +INSERT INTO t1 VALUES (1); +DROP TABLE t1; +CREATE TABLE t1 (c01 BIT(7)); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (8); +INSERT INTO t1 VALUES (16); +INSERT INTO t1 VALUES (32); +INSERT INTO t1 VALUES (64); +INSERT INTO t1 VALUES (127); +DELETE FROM t1 WHERE c01=127; +UPDATE t1 SET c01=15 WHERE c01=16; +DROP TABLE t1; +CREATE TABLE t1 (a BIT(20), b CHAR(2)); +INSERT INTO t1 VALUES (b'00010010010010001001', 'ab'); +DROP TABLE t1; +CREATE TABLE t1 (c02 BIT(64)); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (128); +INSERT INTO t1 VALUES (b'1111111111111111111111111111111111111111111111111111111111111111'); +DROP TABLE t1; +CREATE TABLE t1 (c03 TINYINT); +INSERT INTO t1 VALUES (1),(2),(3); +INSERT INTO t1 VALUES (-128); +UPDATE t1 SET c03=2 WHERE c03=1; +DELETE FROM t1 WHERE c03=-128; +DROP TABLE t1; +CREATE TABLE t1 (c04 TINYINT UNSIGNED); +INSERT INTO t1 VALUES (128), (255); +UPDATE t1 SET c04=2 WHERE c04=1; +DELETE FROM t1 WHERE c04=255; +DROP TABLE t1; +CREATE TABLE t1 (c06 BOOL); +INSERT INTO t1 VALUES (TRUE); +DELETE FROM t1 WHERE c06=TRUE; +DROP TABLE t1; +CREATE TABLE t1 (c07 SMALLINT); +INSERT INTO t1 VALUES (1234); +DELETE FROM t1 WHERE c07=1234; +DROP TABLE t1; +CREATE TABLE t1 (c08 SMALLINT UNSIGNED); +INSERT INTO t1 VALUES (32768), (65535); +UPDATE t1 SET c08=2 WHERE c08=32768; +DELETE FROM t1 WHERE c08=65535; +DROP TABLE t1; +CREATE TABLE t1 (c10 MEDIUMINT); +INSERT INTO t1 VALUES (12345); +DELETE FROM t1 WHERE c10=12345; +DROP TABLE t1; +CREATE TABLE t1 (c11 MEDIUMINT UNSIGNED); +INSERT INTO t1 VALUES (8388608), (16777215); +UPDATE t1 SET c11=2 WHERE c11=8388608; +DELETE FROM t1 WHERE c11=16777215; +DROP TABLE t1; +CREATE TABLE t1 (c13 INT); +INSERT INTO t1 VALUES (123456); +DELETE FROM t1 WHERE c13=123456; +DROP TABLE t1; +CREATE TABLE t1 (c14 INT UNSIGNED); +INSERT INTO t1 VALUES (2147483648), (4294967295); +UPDATE t1 SET c14=2 WHERE c14=2147483648; +DELETE FROM t1 WHERE c14=4294967295; +DROP TABLE t1; +CREATE TABLE t1 (c16 BIGINT); +INSERT INTO t1 VALUES (1234567890); +DELETE FROM t1 WHERE c16=1234567890; +DROP TABLE t1; +CREATE TABLE t1 (c17 BIGINT UNSIGNED); +INSERT INTO t1 VALUES (9223372036854775808), (18446744073709551615); +UPDATE t1 SET c17=2 WHERE c17=9223372036854775808; +DELETE FROM t1 WHERE c17=18446744073709551615; +DROP TABLE t1; +CREATE TABLE t1 (c19 FLOAT); +INSERT INTO t1 VALUES (123.2234); +DELETE FROM t1 WHERE c19>123; +DROP TABLE t1; +CREATE TABLE t1 (c22 DOUBLE); +INSERT INTO t1 VALUES (123434.22344545); +DELETE FROM t1 WHERE c22>123434; +DROP TABLE t1; +CREATE TABLE t1 (c25 DECIMAL(10,5)); +INSERT INTO t1 VALUES (124.45); +INSERT INTO t1 VALUES (-543.21); +DELETE FROM t1 WHERE c25=124.45; +DROP TABLE t1; +CREATE TABLE t1 (c28 DATE); +INSERT INTO t1 VALUES ('2001-02-03'); +DELETE FROM t1 WHERE c28='2001-02-03'; +DROP TABLE t1; +CREATE TABLE t1 (c29 DATETIME); +INSERT INTO t1 VALUES ('2001-02-03 10:20:30'); +DELETE FROM t1 WHERE c29='2001-02-03 10:20:30'; +DROP TABLE t1; +CREATE TABLE t1 (c30 TIMESTAMP); +INSERT INTO t1 VALUES ('2001-02-03 10:20:30'); +DELETE FROM t1 WHERE c30='2001-02-03 10:20:30'; +DROP TABLE t1; +CREATE TABLE t1 (c31 TIME); +INSERT INTO t1 VALUES ('11:22:33'); +DELETE FROM t1 WHERE c31='11:22:33'; +DROP TABLE t1; +CREATE TABLE t1 (c32 YEAR); +INSERT INTO t1 VALUES ('2001'); +DELETE FROM t1 WHERE c32=2001; +DROP TABLE t1; +CREATE TABLE t1 (c33 CHAR); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c33='a'; +DROP TABLE t1; +CREATE TABLE t1 (c34 CHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c34=''; +DROP TABLE t1; +CREATE TABLE t1 (c35 CHAR(1)); +INSERT INTO t1 VALUES ('b'); +DELETE FROM t1 WHERE c35='b'; +DROP TABLE t1; +CREATE TABLE t1 (c36 CHAR(255)); +INSERT INTO t1 VALUES (repeat('c',255)); +DELETE FROM t1 WHERE c36>'c'; +DROP TABLE t1; +CREATE TABLE t1 (c37 NATIONAL CHAR); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c37='a'; +DROP TABLE t1; +CREATE TABLE t1 (c38 NATIONAL CHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c38=''; +DROP TABLE t1; +CREATE TABLE t1 (c39 NATIONAL CHAR(1)); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c39='a'; +DROP TABLE t1; +CREATE TABLE t1 (c40 NATIONAL CHAR(255)); +INSERT INTO t1 VALUES (repeat('a', 255)); +INSERT INTO t1 VALUES (repeat(_latin1 0xDF, 255)); +DELETE FROM t1 WHERE c40>'a'; +DROP TABLE t1; +CREATE TABLE t1 (c45 VARCHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c45=''; +DROP TABLE t1; +CREATE TABLE t1 (c46 VARCHAR(1)); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c46='a'; +DROP TABLE t1; +CREATE TABLE t1 (c47 VARCHAR(255)); +INSERT INTO t1 VALUES (repeat('a',255)); +DELETE FROM t1 WHERE c47>'a'; +DROP TABLE t1; +CREATE TABLE t1 (c48 VARCHAR(261)); +INSERT INTO t1 VALUES (repeat('a',261)); +DELETE FROM t1 WHERE c48>'a'; +DROP TABLE t1; +CREATE TABLE t1 (c49 NATIONAL VARCHAR(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c49=''; +DROP TABLE t1; +CREATE TABLE t1 (c50 NATIONAL VARCHAR(1)); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c50='a'; +DROP TABLE t1; +CREATE TABLE t1 (c51 NATIONAL VARCHAR(255)); +INSERT INTO t1 VALUES (repeat('a',255)); +INSERT INTO t1 VALUES (repeat(_latin1 0xDF, 255)); +DELETE FROM t1 WHERE c51>'a'; +DROP TABLE t1; +CREATE TABLE t1 (c52 NATIONAL VARCHAR(261)); +INSERT INTO t1 VALUES (repeat('a',261)); +INSERT INTO t1 VALUES (repeat(_latin1 0xDF, 261)); +DELETE FROM t1 WHERE c52>'a'; +DROP TABLE t1; +CREATE TABLE t1 (c57 BINARY); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c57='a'; +DROP TABLE t1; +CREATE TABLE t1 (c58 BINARY(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c58=''; +DROP TABLE t1; +CREATE TABLE t1 (c59 BINARY(1)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c59='a'; +DROP TABLE t1; +CREATE TABLE t1 (c60 BINARY(255)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES (repeat('a\0',120)); +DELETE FROM t1 WHERE c60<0x02; +DROP TABLE t1; +CREATE TABLE t1 (c61 VARBINARY(0)); +INSERT INTO t1 VALUES (''); +DELETE FROM t1 WHERE c61=''; +DROP TABLE t1; +CREATE TABLE t1 (c62 VARBINARY(1)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES ('a'); +DELETE FROM t1 WHERE c62=0x02; +DROP TABLE t1; +CREATE TABLE t1 (c63 VARBINARY(255)); +INSERT INTO t1 VALUES (0x00); +INSERT INTO t1 VALUES (0x02); +INSERT INTO t1 VALUES (repeat('a\0',120)); +DELETE FROM t1 WHERE c63=0x02; +DROP TABLE t1; +flush logs; +CREATE TABLE t1 (c65 TINYBLOB); +INSERT INTO t1 VALUES ('tinyblob1'); +DELETE FROM t1 WHERE c65='tinyblob1'; +DROP TABLE t1; +CREATE TABLE t1 (c68 BLOB); +INSERT INTO t1 VALUES ('blob1'); +DELETE FROM t1 WHERE c68='blob1'; +DROP TABLE t1; +CREATE TABLE t1 (c71 MEDIUMBLOB); +INSERT INTO t1 VALUES ('mediumblob1'); +DELETE FROM t1 WHERE c71='mediumblob1'; +DROP TABLE t1; +CREATE TABLE t1 (c74 LONGBLOB); +INSERT INTO t1 VALUES ('longblob1'); +DELETE FROM t1 WHERE c74='longblob1'; +DROP TABLE t1; +CREATE TABLE t1 (c66 TINYTEXT); +INSERT INTO t1 VALUES ('tinytext1'); +DELETE FROM t1 WHERE c66='tinytext1'; +DROP TABLE t1; +CREATE TABLE t1 (c69 TEXT); +INSERT INTO t1 VALUES ('text1'); +DELETE FROM t1 WHERE c69='text1'; +DROP TABLE t1; +CREATE TABLE t1 (c72 MEDIUMTEXT); +INSERT INTO t1 VALUES ('mediumtext1'); +DELETE FROM t1 WHERE c72='mediumtext1'; +DROP TABLE t1; +CREATE TABLE t1 (c75 LONGTEXT); +INSERT INTO t1 VALUES ('longtext1'); +DELETE FROM t1 WHERE c75='longtext1'; +DROP TABLE t1; +CREATE TABLE t1 (c77 ENUM('a','b','c')); +INSERT INTO t1 VALUES ('b'); +DELETE FROM t1 WHERE c77='b'; +DROP TABLE t1; +CREATE TABLE t1 (c78 SET('a','b','c','d','e','f')); +INSERT INTO t1 VALUES ('a,b'); +INSERT INTO t1 VALUES ('a,c'); +INSERT INTO t1 VALUES ('b,c'); +INSERT INTO t1 VALUES ('a,b,c'); +INSERT INTO t1 VALUES ('a,b,c,d'); +INSERT INTO t1 VALUES ('a,b,c,d,e'); +INSERT INTO t1 VALUES ('a,b,c,d,e,f'); +DELETE FROM t1 WHERE c78='a,b'; +DROP TABLE t1; +CREATE TABLE t1 (a int NOT NULL DEFAULT 0, b int NOT NULL DEFAULT 0); +CREATE TABLE t2 (a int NOT NULL DEFAULT 0, b int NOT NULL DEFAULT 0); +INSERT INTO t1 SET a=1; +INSERT INTO t1 SET b=1; +INSERT INTO t2 SET a=1; +INSERT INTO t2 SET b=1; +UPDATE t1, t2 SET t1.a=10, t2.a=20; +DROP TABLE t1,t2; +flush logs; +End of tests === added file 'mysql-test/t/mysqlbinlog_raw_mode.test' --- a/mysql-test/t/mysqlbinlog_raw_mode.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/mysqlbinlog_raw_mode.test 2010-05-21 21:48:20 +0000 @@ -0,0 +1,28 @@ +--source include/have_log_bin.inc +--source include/not_windows.inc + +-- source include/mysqlbinlog_raw_mode.inc + +# Test --stop-never +# If exit code is good or bad then entry in raw_mode_exit table will be created +# Anything above exit code 1 is bad. We wait for this +CREATE TABLE raw_mode_exit (exit_code INT); +--system `$MYSQL_BINLOG --raw --read-from-remote-server --stop-never --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --result-file=$MYSQLTEST_VARDIR/tmp/ master-bin.000001 ; [ \$? -le 1 ]` && $MYSQL -e "use test; INSERT INTO raw_mode_exit VALUES (1);" & + +let $wait_condition= SELECT id from information_schema.processlist where processlist.command like '%Binlog%' and state like '%Master has sent%'; +--source include/wait_condition.inc +--diff_files $MYSQLTEST_VARDIR/tmp/master-bin.000001 $MYSQLD_DATADIR/master-bin.000001 +--diff_files $MYSQLTEST_VARDIR/tmp/master-bin.000002 $MYSQLD_DATADIR/master-bin.000002 + +SELECT ((@id := id) - id) from information_schema.processlist where processlist.command like '%Binlog%' and state like '%Master has sent%'; +# Test killing from mysql server +kill @id; +--let $wait_condition= SELECT count(*) = 1 FROM raw_mode_exit WHERE exit_code = 1; +--source include/wait_condition.inc + +DROP TABLE raw_mode_exit; +--remove_file $MYSQLTEST_VARDIR/tmp/master-bin.000001 +--remove_file $MYSQLTEST_VARDIR/tmp/master-bin.000002 +--remove_file $MYSQLTEST_VARDIR/tmp/master-bin.000003 + +--echo End of tests === added file 'mysql-test/t/mysqlbinlog_raw_mode_win.test' --- a/mysql-test/t/mysqlbinlog_raw_mode_win.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/mysqlbinlog_raw_mode_win.test 2010-05-21 21:48:20 +0000 @@ -0,0 +1,10 @@ +-- source include/have_log_bin.inc +-- source include/windows.inc + +# +# WL#4783 +# + +-- source include/mysqlbinlog_raw_mode.inc + +-- echo End of tests --===============5169090510587356889== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///Users/malff/BZR_TREE/mysql-next-mr-wl4895/ # testament_sha1: 60425007e7ff422d7257a24ca88d37a41e828643 # timestamp: 2010-06-02 02:46:58 -0600 # source_branch: file:///Users/malff/BZR_TREE/mysql-next-mr/ # base_revision_id: marc.alff@stripped\ # zsqty7a8698m6oza # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWSw2dswAO+j/gHfwBAB///// /+///v////9gPB94888cD73q9z596I+n3gFtdDkuxvT54cgTs+gz6300VnvtcG+1VXQAyUPtgAta gVUgtaUK2aG2pF9YUU6sfQb5h1JoAAAyCQB9ZNPV2k32NAGh97w6r76+49rD7tztbfWHvZbKPdum vbDrE1tUducHWbPr3vQ92T1W976+99eg+Tz2OtFhJIQNCNDI0yQwICaaGqej1NNE0bUAyZGjJoD1 A0CUJkAQRE9NI0p4FJsoyG2lAAAAAANA0aASmSBKntVPyepqfqTUaaYhppoBkaZAMjIaaBoMmgA0 aCTUhCTCDQlPyMmSntKbR6ieiYTTQepoNB5QA9QAABEkRJkp40GmSngU8Jk1RmT0U/UajPU0mmNE 9T1GnqAADQBUkQEAEAjQBNNDRNBNJ4qbQ9TQbUZP1J6T0mjUHqNPTsat0fw9KSyb6RLQipEUVAwS 75rFfQJ5/IJ/2II9rUZIetPWeXu0KLmEfC/pscH6NDg/pq4512qLVaE2CBNgICJESIkRIiREIIez z7stZt4PbTv92/wd5tOMsVPotxFyFRKat/6yu0bFCOW4tJtRH6eE4O/1WreA2eDfZVseEp+4qC65 yMcwpxWmNCZV6rlWVVLsezb3PKwrPbxnlnn5/qZ9e/6VHnHzZVPrV/K5tGyxSiflu5e7Ysstq2qD Y7etyl6ity1/nez+SyLJaR+RTUmhWUaFbiVsucfFd50wyxJmkJBmH/I9DmTMf2nfbjz0WX1tzNNi 8mei3ApnjI2uErRuQV2StQBkmAvpSRpGOjrHDzPucPQVSOOnPVlMOzdNvY5NZcgoemXvMoOfAYe5 VJjlWeRve/TxcXHJwQ1K1KoGTAoeLLntWtoy6a522hWOCsxxzeaxuPAJQlxKERERERERERERERER ERERERERERERERERERERERERERERERERERERERERERERERERERERERJ8VFQhBkRBd3LQAqW1q74A E4bg7c2JniVt61o4E1FUAbkA0D0bQYWiBlHE4pStVdgIcGhfO9TAZGSVR2ew+JdDBgO+1Vte6bYo rPK94sybzLbzzylWiLWYld2bmhlJcmtL8jVViized8XPWqByazyNTC6kunv3OC0HtlRZZtDyXM0o 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 nE5ExlhsFJmlFrmcvi/UHHzf/F3JFOFCQLDZ2zA= --===============5169090510587356889==--