Commit 33338db8 authored by Davi Arnaut's avatar Davi Arnaut

Merge of mysql-5.1 branch.

parents 9ecf9c30 0ddea7b3
...@@ -389,6 +389,9 @@ client/readline.cpp ...@@ -389,6 +389,9 @@ client/readline.cpp
client/rpl_constants.h client/rpl_constants.h
client/rpl_record_old.cc client/rpl_record_old.cc
client/rpl_record_old.h client/rpl_record_old.h
client/rpl_tblmap.h
client/rpl_tblmap.cc
client/rpl_utility.h
client/select_test client/select_test
client/sql_string.cpp client/sql_string.cpp
client/ssl_test client/ssl_test
......
...@@ -104,6 +104,7 @@ DEFS = -DUNDEF_THREADS_HACK \ ...@@ -104,6 +104,7 @@ DEFS = -DUNDEF_THREADS_HACK \
-DDATADIR="\"$(localstatedir)\"" -DDATADIR="\"$(localstatedir)\""
sql_src=log_event.h mysql_priv.h rpl_constants.h \ sql_src=log_event.h mysql_priv.h rpl_constants.h \
rpl_utility.h rpl_tblmap.h rpl_tblmap.cc \
log_event.cc my_decimal.h my_decimal.cc \ log_event.cc my_decimal.h my_decimal.cc \
log_event_old.h log_event_old.cc \ log_event_old.h log_event_old.cc \
rpl_record_old.h rpl_record_old.cc rpl_record_old.h rpl_record_old.cc
......
...@@ -64,7 +64,8 @@ static void warning(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2); ...@@ -64,7 +64,8 @@ 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, to_last_remote_log= 0, disable_log_bin= 0;
static bool opt_hexdump= 0; static bool opt_hexdump= 0;
const char *base64_output_mode_names[]= {"NEVER", "AUTO", "ALWAYS", NullS}; const char *base64_output_mode_names[]=
{"NEVER", "AUTO", "ALWAYS", "UNSPEC", "DECODE-ROWS", NullS};
TYPELIB base64_output_mode_typelib= TYPELIB base64_output_mode_typelib=
{ array_elements(base64_output_mode_names) - 1, "", { array_elements(base64_output_mode_names) - 1, "",
base64_output_mode_names, NULL }; base64_output_mode_names, NULL };
...@@ -83,6 +84,8 @@ static const char* user = 0; ...@@ -83,6 +84,8 @@ static const char* user = 0;
static char* pass = 0; static char* pass = 0;
static char *charset= 0; static char *charset= 0;
static uint verbose= 0;
static ulonglong start_position, stop_position; static ulonglong start_position, stop_position;
#define start_position_mot ((my_off_t)start_position) #define start_position_mot ((my_off_t)start_position)
#define stop_position_mot ((my_off_t)stop_position) #define stop_position_mot ((my_off_t)stop_position)
...@@ -1063,6 +1066,9 @@ that may lead to an endless loop.", ...@@ -1063,6 +1066,9 @@ that may lead to an endless loop.",
{"user", 'u', "Connect to the remote server as username.", {"user", 'u', "Connect to the remote server as username.",
(uchar**) &user, (uchar**) &user, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, (uchar**) &user, (uchar**) &user, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0,
0, 0}, 0, 0},
{"verbose", 'v', "Reconstruct SQL statements out of row events. "
"-v -v adds comments on column data types",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"version", 'V', "Print version and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, {"version", 'V', "Print version and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0,
0, 0, 0, 0, 0}, 0, 0, 0, 0, 0},
{"open_files_limit", OPT_OPEN_FILES_LIMIT, {"open_files_limit", OPT_OPEN_FILES_LIMIT,
...@@ -1258,6 +1264,12 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -1258,6 +1264,12 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
(find_type_or_exit(argument, &base64_output_mode_typelib, opt->name)-1); (find_type_or_exit(argument, &base64_output_mode_typelib, opt->name)-1);
} }
break; break;
case 'v':
if (argument == disabled_my_option)
verbose= 0;
else
verbose++;
break;
case 'V': case 'V':
print_version(); print_version();
exit(0); exit(0);
...@@ -1343,6 +1355,8 @@ static Exit_status dump_log_entries(const char* logname) ...@@ -1343,6 +1355,8 @@ static Exit_status dump_log_entries(const char* logname)
*/ */
fprintf(result_file, "DELIMITER /*!*/;\n"); fprintf(result_file, "DELIMITER /*!*/;\n");
strmov(print_event_info.delimiter, "/*!*/;"); strmov(print_event_info.delimiter, "/*!*/;");
print_event_info.verbose= short_form ? 0 : verbose;
rc= (remote_opt ? dump_remote_log_entries(&print_event_info, logname) : rc= (remote_opt ? dump_remote_log_entries(&print_event_info, logname) :
dump_local_log_entries(&print_event_info, logname)); dump_local_log_entries(&print_event_info, logname));
......
# mysqlbinlog_row.test
#
# Show that mysqlbinlog displays human readable comments to
# row-based log events.
#
# Procedure:
# Create a table that represents all-known types in 5.1.
# Write rows that contain the mins, maxes, and NULL for each type.
# Write a random or "problematic" value (i.e. one that might require
# escaping if it's represented as a string-y type) for each type.
# Update each of these rows.
# Delete each of these rows.
# Inspect the binlog.
#
# Bug#31455 - mysqlbinlog don't print user readable info about RBR events
#
--source include/have_log_bin.inc
SET NAMES 'utf8';
#SHOW VARIABLES LIKE 'character_set%';
--echo #
--echo # Preparatory cleanup.
--echo #
--disable_warnings
DROP TABLE IF EXISTS t1, t2, t3;
--enable_warnings
--echo #
--echo # We need a fixed timestamp to avoid varying results.
--echo #
SET timestamp=1000000000;
--echo #
--echo # ===================================================
--echo # Test #1 - Insert/update/delete with all data types.
--echo # ===================================================
--echo #
--echo # Delete all existing binary logs.
--echo #
RESET MASTER;
--echo #
--echo # Create a test table with all data types.
--echo #
eval CREATE TABLE t1 (
c01 BIT,
c02 BIT(64),
c03 TINYINT,
c04 TINYINT UNSIGNED,
c05 TINYINT ZEROFILL,
c06 BOOL,
c07 SMALLINT,
c08 SMALLINT UNSIGNED,
c09 SMALLINT ZEROFILL,
c10 MEDIUMINT,
c11 MEDIUMINT UNSIGNED,
c12 MEDIUMINT ZEROFILL,
c13 INT,
c14 INT UNSIGNED,
c15 INT ZEROFILL,
c16 BIGINT,
c17 BIGINT UNSIGNED,
c18 BIGINT ZEROFILL,
c19 FLOAT,
c20 FLOAT UNSIGNED,
c21 FLOAT ZEROFILL,
c22 DOUBLE,
c23 DOUBLE UNSIGNED,
c24 DOUBLE ZEROFILL,
c25 DECIMAL,
c26 DECIMAL UNSIGNED,
c27 DECIMAL ZEROFILL,
#
c28 DATE,
c29 DATETIME,
c30 TIMESTAMP,
c31 TIME,
c32 YEAR,
#
c33 CHAR,
c34 CHAR(0),
c35 CHAR(1),
c36 CHAR(255),
c37 NATIONAL CHAR,
c38 NATIONAL CHAR(0),
c39 NATIONAL CHAR(1),
c40 NATIONAL CHAR(255),
c41 CHAR CHARACTER SET UCS2,
c42 CHAR(0) CHARACTER SET UCS2,
c43 CHAR(1) CHARACTER SET UCS2,
c44 CHAR(255) CHARACTER SET UCS2,
#
c45 VARCHAR(0),
c46 VARCHAR(1),
c47 VARCHAR(255),
c48 VARCHAR(261),
c49 NATIONAL VARCHAR(0),
c50 NATIONAL VARCHAR(1),
c51 NATIONAL VARCHAR(255),
c52 NATIONAL VARCHAR(261),
c53 VARCHAR(0) CHARACTER SET UCS2,
c54 VARCHAR(1) CHARACTER SET UCS2,
c55 VARCHAR(255) CHARACTER SET UCS2,
c56 VARCHAR(261) CHARACTER SET UCS2,
#
c57 BINARY,
c58 BINARY(0),
c59 BINARY(1),
c60 BINARY(255),
#
c61 VARBINARY(0),
c62 VARBINARY(1),
c63 VARBINARY(255),
c64 VARBINARY(261),
#
c65 TINYBLOB,
c66 TINYTEXT,
c67 TINYTEXT CHARACTER SET UCS2,
c68 BLOB,
c69 TEXT,
c70 TEXT CHARACTER SET UCS2,
c71 MEDIUMBLOB,
c72 MEDIUMTEXT,
c73 MEDIUMTEXT CHARACTER SET UCS2,
c74 LONGBLOB,
c75 LONGTEXT,
c76 LONGTEXT CHARACTER SET UCS2,
#
c77 ENUM('a','b','c'),
c78 SET('a','b','c'),
#
crn INT -- row number
) ENGINE=$engine_type DEFAULT CHARSET latin1;
--echo #
--echo # Insert minimum values.
--echo #
INSERT INTO t1 VALUES (
b'0', -- c01
b'0000000000000000000000000000000000000000000000000000000000000000', -- c02
-128, -- c03
0, -- c04
000, -- c05
false, -- c06
-32768, -- c07
0, -- c08
00000, -- c09
-8388608, -- c10
0, -- c11
00000000, -- c12
-2147483648, -- c13
0, -- c14
0000000000, -- c15
-9223372036854775808, -- c16
0, -- c17
00000000000000000000, -- c18
-3.402823466E+38, -- c19
1.175494351E-38, -- c20
000000000000, -- c21
-1.7976931348623E+308, -- c22 three digits cut for ps-protocol
2.2250738585072E-308, -- c23 three digits cut for ps-protocol
0000000000000000000000, -- c24
-9999999999, -- c25
0, -- c26
0000000000, -- c27
#
'1000-01-01', -- c28
'1000-01-01 00:00:00', -- c29
'1970-01-02 00:00:01', -- c30 one day later due to timezone issues
'-838:59:59', -- c31
'1901', -- c32
#
'', -- c33
'', -- c34
'', -- c35
'', -- c36
'', -- c37
'', -- c38
'', -- c39
'', -- c40
'', -- c41
'', -- c42
'', -- c43
'', -- c44
#
'', -- c45
'', -- c46
'', -- c47
'', -- c48
'', -- c49
'', -- c50
'', -- c51
'', -- c52
'', -- c53
'', -- c54
'', -- c55
'', -- c56
#
'', -- c57
'', -- c58
'', -- c59
'', -- c60
#
'', -- c61
'', -- c62
'', -- c63
'', -- c64
#
'', -- c65
'', -- c66
'', -- c67
'', -- c68
'', -- c69
'', -- c70
'', -- c71
'', -- c72
'', -- c73
'', -- c74
'', -- c75
'', -- c76
#
'a', -- c77
'', -- c78
#
1 -- crn -- row number
);
--echo #
--echo # Insert maximum values.
--echo #
INSERT INTO t1 VALUES (
b'1', -- c01
b'1111111111111111111111111111111111111111111111111111111111111111', -- c02
127, -- c03
255, -- c04
255, -- c05
true, -- c06
32767, -- c07
65535, -- c08
65535, -- c09
8388607, -- c10
16777215, -- c11
16777215, -- c12
2147483647, -- c13
4294967295, -- c14
4294967295, -- c15
9223372036854775807, -- c16
18446744073709551615, -- c17
18446744073709551615, -- c18
3.402823466E+38, -- c19
3.402823466E+38, -- c20
3.402823466E+38, -- c21
1.7976931348623E+308, -- c22 three digits cut for ps-protocol
1.7976931348623E+308, -- c23 three digits cut for ps-protocol
1.7976931348623E+308, -- c24 three digits cut for ps-protocol
9999999999, -- c25
9999999999, -- c26
9999999999, -- c27
#
'9999-12-31', -- c28
'9999-12-31 23:59:59', -- c29
'2038-01-08 03:14:07', -- c30 one day earlier due to timezone issues
'838:59:59', -- c31
'2155', -- c32
#
x'ff', -- c33
'', -- c34
x'ff', -- c35
REPEAT(x'ff',255), -- c36
_utf8 x'efbfbf', -- c37
'', -- c38
_utf8 x'efbfbf', -- c39
REPEAT(_utf8 x'efbfbf',255), -- c40
_ucs2 x'ffff', -- c41
'', -- c42
_ucs2 x'ffff', -- c43
REPEAT(_ucs2 x'ffff',255), -- c44
#
'', -- c45
x'ff', -- c46
REPEAT(x'ff',255), -- c47
REPEAT(x'ff',261), -- c48
'', -- c49
_utf8 x'efbfbf', -- c50
REPEAT(_utf8 x'efbfbf',255), -- c51
REPEAT(_utf8 x'efbfbf',261), -- c52
'', -- c53
_ucs2 x'ffff', -- c54
REPEAT(_ucs2 x'ffff',255), -- c55
REPEAT(_ucs2 x'ffff',261), -- c56
#
x'ff', -- c57
'', -- c58
x'ff', -- c59
REPEAT(x'ff',255), -- c60
#
'', -- c61
x'ff', -- c62
REPEAT(x'ff',255), -- c63
REPEAT(x'ff',261), -- c64
#
'tinyblob', -- c65 not using maximum value here
'tinytext', -- c66 not using maximum value here
'tinytext-ucs2', -- c67 not using maximum value here
'blob', -- c68 not using maximum value here
'text', -- c69 not using maximum value here
'text-ucs2', -- c70 not using maximum value here
'mediumblob', -- c71 not using maximum value here
'mediumtext', -- c72 not using maximum value here
'mediumtext-ucs2', -- c73 not using maximum value here
'longblob', -- c74 not using maximum value here
'longtext', -- c75 not using maximum value here
'longtext-ucs2', -- c76 not using maximum value here
#
'c', -- c77
'a,b,c', -- c78
#
2 -- crn -- row number
);
--echo #
--echo # Insert a row with NULL values and one with arbitrary values.
--echo #
INSERT INTO t1 VALUES (
NULL, -- c01
NULL, -- c02
NULL, -- c03
NULL, -- c04
NULL, -- c05
NULL, -- c06
NULL, -- c07
NULL, -- c08
NULL, -- c09
NULL, -- c10
NULL, -- c11
NULL, -- c12
NULL, -- c13
NULL, -- c14
NULL, -- c15
NULL, -- c16
NULL, -- c17
NULL, -- c18
NULL, -- c19
NULL, -- c20
NULL, -- c21
NULL, -- c22
NULL, -- c23
NULL, -- c24
NULL, -- c25
NULL, -- c26
NULL, -- c27
#
NULL, -- c28
NULL, -- c29
NULL, -- c30
NULL, -- c31
NULL, -- c32
#
NULL, -- c33
NULL, -- c34
NULL, -- c35
NULL, -- c36
NULL, -- c37
NULL, -- c38
NULL, -- c39
NULL, -- c40
NULL, -- c41
NULL, -- c42
NULL, -- c43
NULL, -- c44
#
NULL, -- c45
NULL, -- c46
NULL, -- c47
NULL, -- c48
NULL, -- c49
NULL, -- c50
NULL, -- c51
NULL, -- c52
NULL, -- c53
NULL, -- c54
NULL, -- c55
NULL, -- c56
#
NULL, -- c57
NULL, -- c58
NULL, -- c59
NULL, -- c60
#
NULL, -- c61
NULL, -- c62
NULL, -- c63
NULL, -- c64
#
NULL, -- c65
NULL, -- c66
NULL, -- c67
NULL, -- c68
NULL, -- c69
NULL, -- c70
NULL, -- c71
NULL, -- c72
NULL, -- c73
NULL, -- c74
NULL, -- c75
NULL, -- c76
#
NULL, -- c77
NULL, -- c78
#
3 -- crn -- row number
), (
b'1', -- c01
b'1111111111111111111111111111111111111111111111111111111111111111', -- c02
127, -- c03
0, -- c04
001, -- c05
true, -- c06
32767, -- c07
0, -- c08
00001, -- c09
8388607, -- c10
0, -- c11
00000001, -- c12
2147483647, -- c13
0, -- c14
0000000001, -- c15
9223372036854775807, -- c16
0, -- c17
00000000000000000001, -- c18
-1.175494351E-38, -- c19
1.175494351E-38, -- c20
000000000000001, -- c21
-2.2250738585072E-308, -- c22
2.2250738585072E-308, -- c23
00000000000000000000001, -- c24
-9999999999, -- c25
9999999999, -- c26
0000000001, -- c27
#
'2008-08-04', -- c28
'2008-08-04 16:18:06', -- c29
'2008-08-04 16:18:24', -- c30
'16:18:47', -- c31
'2008', -- c32
#
'a', -- c33
'', -- c34
'e', -- c35
REPEAT('i',255), -- c36
_utf8 x'c3a4', -- c37
'', -- c38
_utf8 x'c3b6', -- c39
REPEAT(_utf8 x'c3bc',255), -- c40
_ucs2 x'00e4', -- c41
'', -- c42
_ucs2 x'00f6', -- c43
REPEAT(_ucs2 x'00fc',255), -- c44
#
'', -- c45
'a', -- c46
REPEAT('e',255), -- c47
REPEAT('i',261), -- c48
'', -- c49
_utf8 x'c3a4', -- c50
REPEAT(_utf8 x'c3b6',255), -- c51
REPEAT(_utf8 x'c3bc',261), -- c52
'', -- c53
_ucs2 x'00e4', -- c54
REPEAT(_ucs2 x'00f6',255), -- c55
REPEAT(_ucs2 x'00fc',261), -- c56
#
'0', -- c57
'', -- c58
'1', -- c59
REPEAT('1',255), -- c60
#
'', -- c61
'b', -- c62
REPEAT('c',255), -- c63
REPEAT('\'',261), -- c64
#
'tinyblob', -- c65
'tinytext', -- c66
'tinytext-ucs2', -- c67
'blob', -- c68
'text', -- c69
'text-ucs2', -- c70
'mediumblob', -- c71
'mediumtext', -- c72
'mediumtext-ucs2', -- c73
'longblob', -- c74
'longtext', -- c75
'longtext-ucs2', -- c76
#
'b', -- c77
'b,c', -- c78
#
4 -- crn -- row number
);
--echo #
--echo # Show what we have in the table.
--echo # Do not display bit type output. It's binary and confuses diff.
--echo # Also BINARY with nul-bytes should be avoided.
--echo #
--replace_column 1 # 2 # 57 # 58 # 59 # 60 #
query_vertical SELECT * FROM t1;
--echo #
--echo # NOTE: For matching FLOAT and DOUBLE values in WHERE conditions,
--echo # don't use exact match, but < or > and tweak the numbers a bit.
--echo #
--echo # Show how much rows are affected by each statement.
--echo #
--enable_info
--echo #
--echo # Update min values to max values.
--echo #
UPDATE t1 SET
c01 = b'1',
c02 = b'1111111111111111111111111111111111111111111111111111111111111111',
c03 = 127,
c04 = 255,
c05 = 255,
c06 = true,
c07 = 32767,
c08 = 65535,
c09 = 65535,
c10 = 8388607,
c11 = 16777215,
c12 = 16777215,
c13 = 2147483647,
c14 = 4294967295,
c15 = 4294967295,
c16 = 9223372036854775807,
c17 = 18446744073709551615,
c18 = 18446744073709551615,
c19 = 3.402823466E+38,
c20 = 3.402823466E+38,
c21 = 3.402823466E+38,
c22 = 1.7976931348623E+308,
c23 = 1.7976931348623E+308,
c24 = 1.7976931348623E+308,
c25 = 9999999999,
c26 = 9999999999,
c27 = 9999999999,
#
c28 = '9999-12-31',
c29 = '9999-12-31 23:59:59',
c30 = '2038-01-08 03:14:07',
c31 = '838:59:59',
c32 = '2155',
#
c33 = x'ff',
c34 = '',
c35 = x'ff',
c36 = REPEAT(x'ff',255),
c37 = _utf8 x'efbfbf',
c38 = '',
c39 = _utf8 x'efbfbf',
c40 = REPEAT(_utf8 x'efbfbf',255),
c41 = _ucs2 x'ffff',
c42 = '',
c43 = _ucs2 x'ffff',
c44 = REPEAT(_ucs2 x'ffff',255),
#
c45 = '',
c46 = x'ff',
c47 = REPEAT(x'ff',255),
c48 = REPEAT(x'ff',261),
c49 = '',
c50 = _utf8 x'efbfbf',
c51 = REPEAT(_utf8 x'efbfbf',255),
c52 = REPEAT(_utf8 x'efbfbf',261),
c53 = '',
c54 = _ucs2 x'ffff',
c55 = REPEAT(_ucs2 x'ffff',255),
c56 = REPEAT(_ucs2 x'ffff',261),
#
c57 = x'ff',
c58 = '',
c59 = x'ff',
c60 = REPEAT(x'ff',255),
#
c61 = '',
c62 = x'ff',
c63 = REPEAT(x'ff',255),
c64 = REPEAT(x'ff',261),
#
c65 = 'tinyblob',
c66 = 'tinytext',
c67 = 'tinytext-ucs2',
c68 = 'blob',
c69 = 'text',
c70 = 'text-ucs2',
c71 = 'mediumblob',
c72 = 'mediumtext',
c73 = 'mediumtext-ucs2',
c74 = 'longblob',
c75 = 'longtext',
c76 = 'longtext-ucs2',
#
c77 = 'c',
c78 = 'a,b,c',
#
crn = crn
#
WHERE
#
c01 = b'0' AND
c02 = b'0000000000000000000000000000000000000000000000000000000000000000' AND
c03 = -128 AND
c04 = 0 AND
c05 = 000 AND
c06 = false AND
c07 = -32768 AND
c08 = 0 AND
c09 = 00000 AND
c10 = -8388608 AND
c11 = 0 AND
c12 = 00000000 AND
c13 = -2147483648 AND
c14 = 0 AND
c15 = 0000000000 AND
c16 = -9223372036854775808 AND
c17 = 0 AND
c18 = 00000000000000000000 AND
c19 < -3.402823465E+38 AND
c20 < 1.175494352E-38 AND
c21 = 000000000000 AND
c22 < -1.7976931348622E+308 AND
c23 < 2.2250738585073E-308 AND
c24 = 0000000000000000000000 AND
c25 = -9999999999 AND
c26 = 0 AND
c27 = 0000000000 AND
#
c28 = '1000-01-01' AND
c29 = '1000-01-01 00:00:00' AND
c30 = '1970-01-02 00:00:01' AND
c31 = '-838:59:59' AND
c32 = '1901' AND
#
c33 = '' AND
c34 = '' AND
c35 = '' AND
c36 = '' AND
c37 = '' AND
c38 = '' AND
c39 = '' AND
c40 = '' AND
c41 = '' AND
c42 = '' AND
c43 = '' AND
c44 = '' AND
#
c45 = '' AND
c46 = '' AND
c47 = '' AND
c48 = '' AND
c49 = '' AND
c50 = '' AND
c51 = '' AND
c52 = '' AND
c53 = '' AND
c54 = '' AND
c55 = '' AND
c56 = '' AND
#
# this does not reproduce the inserted value: c57 = '' AND
c58 = '' AND
# this does not reproduce the inserted value: c59 = '' AND
# this does not reproduce the inserted value: c60 = '' AND
#
c61 = '' AND
c62 = '' AND
c63 = '' AND
c64 = '' AND
#
c65 = '' AND
c66 = '' AND
c67 = '' AND
c68 = '' AND
c69 = '' AND
c70 = '' AND
c71 = '' AND
c72 = '' AND
c73 = '' AND
c74 = '' AND
c75 = '' AND
c76 = '' AND
#
c77 = 'a' AND
c78 = '' AND
#
crn = 1;
--echo #
--echo # Update max values to min values.
--echo #
UPDATE t1 SET
c01 = b'0',
c02 = b'0000000000000000000000000000000000000000000000000000000000000000',
c03 = -128,
c04 = 0,
c05 = 000,
c06 = false,
c07 = -32768,
c08 = 0,
c09 = 00000,
c10 = -8388608,
c11 = 0,
c12 = 00000000,
c13 = -2147483648,
c14 = 0,
c15 = 0000000000,
c16 = -9223372036854775808,
c17 = 0,
c18 = 00000000000000000000,
c19 = -3.402823466E+38,
c20 = 1.175494351E-38,
c21 = 000000000000,
c22 = -1.7976931348623E+308,
c23 = 2.2250738585072E-308,
c24 = 0000000000000000000000,
c25 = -9999999999,
c26 = 0,
c27 = 0000000000,
#
c28 = '1000-01-01',
c29 = '1000-01-01 00:00:00',
c30 = '1970-01-02 00:00:01',
c31 = '-838:59:59',
c32 = '1901',
#
c33 = '',
c34 = '',
c35 = '',
c36 = '',
c37 = '',
c38 = '',
c39 = '',
c40 = '',
c41 = '',
c42 = '',
c43 = '',
c44 = '',
#
c45 = '',
c46 = '',
c47 = '',
c48 = '',
c49 = '',
c50 = '',
c51 = '',
c52 = '',
c53 = '',
c54 = '',
c55 = '',
c56 = '',
#
c57 = '',
c58 = '',
c59 = '',
c60 = '',
#
c61 = '',
c62 = '',
c63 = '',
c64 = '',
#
c65 = '',
c66 = '',
c67 = '',
c68 = '',
c69 = '',
c70 = '',
c71 = '',
c72 = '',
c73 = '',
c74 = '',
c75 = '',
c76 = '',
#
c77 = 'a',
c78 = '',
#
crn = crn
#
WHERE
#
c01 = b'1' AND
# the below does not reproduce the inserted value:
#c02 = b'1111111111111111111111111111111111111111111111111111111111111111' AND
c03 = 127 AND
c04 = 255 AND
c05 = 255 AND
c06 = true AND
c07 = 32767 AND
c08 = 65535 AND
c09 = 65535 AND
c10 = 8388607 AND
c11 = 16777215 AND
c12 = 16777215 AND
c13 = 2147483647 AND
c14 = 4294967295 AND
c15 = 4294967295 AND
c16 = 9223372036854775807 AND
c17 = 18446744073709551615 AND
c18 = 18446744073709551615 AND
c19 > 3.402823465E+38 AND
c20 > 3.402823465E+38 AND
c21 > 3.402823465E+38 AND
c22 > 1.7976931348622E+308 AND
c23 > 1.7976931348622E+308 AND
c24 > 1.7976931348622E+308 AND
c25 = 9999999999 AND
c26 = 9999999999 AND
c27 = 9999999999 AND
#
c28 = '9999-12-31' AND
c29 = '9999-12-31 23:59:59' AND
c30 = '2038-01-08 03:14:07' AND
c31 = '838:59:59' AND
c32 = '2155' AND
#
c33 = x'ff' AND
c34 = '' AND
c35 = x'ff' AND
c36 = REPEAT(x'ff',255) AND
c37 = _utf8 x'efbfbf' AND
c38 = '' AND
c39 = _utf8 x'efbfbf' AND
c40 = REPEAT(_utf8 x'efbfbf',255) AND
c41 = _ucs2 x'ffff' AND
c42 = '' AND
c43 = _ucs2 x'ffff' AND
c44 = REPEAT(_ucs2 x'ffff',255) AND
#
c45 = '' AND
c46 = x'ff' AND
c47 = REPEAT(x'ff',255) AND
c48 = REPEAT(x'ff',261) AND
c49 = '' AND
c50 = _utf8 x'efbfbf' AND
c51 = REPEAT(_utf8 x'efbfbf',255) AND
c52 = REPEAT(_utf8 x'efbfbf',261) AND
c53 = '' AND
c54 = _ucs2 x'ffff' AND
c55 = REPEAT(_ucs2 x'ffff',255) AND
c56 = REPEAT(_ucs2 x'ffff',261) AND
#
c57 = x'ff' AND
c58 = '' AND
c59 = x'ff' AND
c60 = REPEAT(x'ff',255) AND
#
c61 = '' AND
c62 = x'ff' AND
c63 = REPEAT(x'ff',255) AND
c64 = REPEAT(x'ff',261) AND
#
c65 = 'tinyblob' AND
c66 = 'tinytext' AND
c67 = 'tinytext-ucs2' AND
c68 = 'blob' AND
c69 = 'text' AND
c70 = 'text-ucs2' AND
c71 = 'mediumblob' AND
c72 = 'mediumtext' AND
c73 = 'mediumtext-ucs2' AND
c74 = 'longblob' AND
c75 = 'longtext' AND
c76 = 'longtext-ucs2' AND
#
c77 = 'c' AND
c78 = 'a,b,c' AND
#
crn = 2;
--echo #
--echo # Update NULL values to arbitrary values.
--echo #
UPDATE t1 SET
c01 = b'1',
c02 = b'1111111111111111111111111111111111111111111111111111111111111111',
c03 = 127,
c04 = 0,
c05 = 001,
c06 = true,
c07 = 32767,
c08 = 0,
c09 = 00001,
c10 = 8388607,
c11 = 0,
c12 = 00000001,
c13 = 2147483647,
c14 = 0,
c15 = 0000000001,
c16 = 9223372036854775807,
c17 = 0,
c18 = 00000000000000000001,
c19 = -1.175494351E-38,
c20 = 1.175494351E-38,
c21 = 000000000000001,
c22 = -2.2250738585072E-308,
c23 = 2.2250738585072E-308,
c24 = 00000000000000000000001,
c25 = -9999999999,
c26 = 9999999999,
c27 = 0000000001,
#
c28 = '2008-08-04',
c29 = '2008-08-04 16:18:06',
c30 = '2008-08-04 16:18:24',
c31 = '16:18:47',
c32 = '2008',
#
c33 = 'a',
c34 = '',
c35 = 'e',
c36 = REPEAT('i',255),
c37 = _utf8 x'c3a4',
c38 = '',
c39 = _utf8 x'c3b6',
c40 = REPEAT(_utf8 x'c3bc',255),
c41 = _ucs2 x'00e4',
c42 = '',
c43 = _ucs2 x'00f6',
c44 = REPEAT(_ucs2 x'00fc',255),
#
c45 = '',
c46 = 'a',
c47 = REPEAT('e',255),
c48 = REPEAT('i',261),
c49 = '',
c50 = _utf8 x'c3a4',
c51 = REPEAT(_utf8 x'c3b6',255),
c52 = REPEAT(_utf8 x'c3bc',261),
c53 = '',
c54 = _ucs2 x'00e4',
c55 = REPEAT(_ucs2 x'00f6',255),
c56 = REPEAT(_ucs2 x'00fc',261),
#
c57 = '0',
c58 = '',
c59 = '1',
c60 = REPEAT('1',255),
#
c61 = '',
c62 = 'b',
c63 = REPEAT('c',255),
c64 = REPEAT('\'',261),
#
c65 = 'tinyblob',
c66 = 'tinytext',
c67 = 'tinytext-ucs2',
c68 = 'blob',
c69 = 'text',
c70 = 'text-ucs2',
c71 = 'mediumblob',
c72 = 'mediumtext',
c73 = 'mediumtext-ucs2',
c74 = 'longblob',
c75 = 'longtext',
c76 = 'longtext-ucs2',
#
c77 = 'b',
c78 = 'b,c',
#
crn = crn
#
WHERE
#
c01 IS NULL AND
c02 IS NULL AND
c03 IS NULL AND
c04 IS NULL AND
c05 IS NULL AND
c06 IS NULL AND
c07 IS NULL AND
c08 IS NULL AND
c09 IS NULL AND
c10 IS NULL AND
c11 IS NULL AND
c12 IS NULL AND
c13 IS NULL AND
c14 IS NULL AND
c15 IS NULL AND
c16 IS NULL AND
c17 IS NULL AND
c18 IS NULL AND
c19 IS NULL AND
c20 IS NULL AND
c21 IS NULL AND
c22 IS NULL AND
c23 IS NULL AND
c24 IS NULL AND
c25 IS NULL AND
c26 IS NULL AND
c27 IS NULL AND
#
c28 IS NULL AND
c29 IS NULL AND
# this got a timestamp instead of NULL: c30 IS NULL AND
c31 IS NULL AND
c32 IS NULL AND
#
c33 IS NULL AND
c34 IS NULL AND
c35 IS NULL AND
c36 IS NULL AND
c37 IS NULL AND
c38 IS NULL AND
c39 IS NULL AND
c40 IS NULL AND
c41 IS NULL AND
c42 IS NULL AND
c43 IS NULL AND
c44 IS NULL AND
#
c45 IS NULL AND
c46 IS NULL AND
c47 IS NULL AND
c48 IS NULL AND
c49 IS NULL AND
c50 IS NULL AND
c51 IS NULL AND
c52 IS NULL AND
c53 IS NULL AND
c54 IS NULL AND
c55 IS NULL AND
c56 IS NULL AND
#
c57 IS NULL AND
c58 IS NULL AND
c59 IS NULL AND
c60 IS NULL AND
#
c61 IS NULL AND
c62 IS NULL AND
c63 IS NULL AND
c64 IS NULL AND
#
c65 IS NULL AND
c66 IS NULL AND
c67 IS NULL AND
c68 IS NULL AND
c69 IS NULL AND
c70 IS NULL AND
c71 IS NULL AND
c72 IS NULL AND
c73 IS NULL AND
c74 IS NULL AND
c75 IS NULL AND
c76 IS NULL AND
#
c77 IS NULL AND
c78 IS NULL AND
#
crn = 3;
--echo #
--echo # Update arbitrary values to NULL values.
--echo #
UPDATE t1 SET
c01 = NULL,
c02 = NULL,
c03 = NULL,
c04 = NULL,
c05 = NULL,
c06 = NULL,
c07 = NULL,
c08 = NULL,
c09 = NULL,
c10 = NULL,
c11 = NULL,
c12 = NULL,
c13 = NULL,
c14 = NULL,
c15 = NULL,
c16 = NULL,
c17 = NULL,
c18 = NULL,
c19 = NULL,
c20 = NULL,
c21 = NULL,
c22 = NULL,
c23 = NULL,
c24 = NULL,
c25 = NULL,
c26 = NULL,
c27 = NULL,
#
c28 = NULL,
c29 = NULL,
c30 = NULL,
c31 = NULL,
c32 = NULL,
#
c33 = NULL,
c34 = NULL,
c35 = NULL,
c36 = NULL,
c37 = NULL,
c38 = NULL,
c39 = NULL,
c40 = NULL,
c41 = NULL,
c42 = NULL,
c43 = NULL,
c44 = NULL,
#
c45 = NULL,
c46 = NULL,
c47 = NULL,
c48 = NULL,
c49 = NULL,
c50 = NULL,
c51 = NULL,
c52 = NULL,
c53 = NULL,
c54 = NULL,
c55 = NULL,
c56 = NULL,
#
c57 = NULL,
c58 = NULL,
c59 = NULL,
c60 = NULL,
#
c61 = NULL,
c62 = NULL,
c63 = NULL,
c64 = NULL,
#
c65 = NULL,
c66 = NULL,
c67 = NULL,
c68 = NULL,
c69 = NULL,
c70 = NULL,
c71 = NULL,
c72 = NULL,
c73 = NULL,
c74 = NULL,
c75 = NULL,
c76 = NULL,
#
c77 = NULL,
c78 = NULL,
#
crn = crn
#
WHERE
#
c01 = b'1' AND
# the below does not reproduce the inserted value:
#c02 = b'1111111111111111111111111111111111111111111111111111111111111111' AND
c03 = 127 AND
c04 = 0 AND
c05 = 001 AND
c06 = true AND
c07 = 32767 AND
c08 = 0 AND
c09 = 00001 AND
c10 = 8388607 AND
c11 = 0 AND
c12 = 00000001 AND
c13 = 2147483647 AND
c14 = 0 AND
c15 = 0000000001 AND
c16 = 9223372036854775807 AND
c17 = 0 AND
c18 = 00000000000000000001 AND
c19 > -1.175494352E-38 AND
c20 < 1.175494352E-38 AND
c21 = 000000000000001 AND
c22 > -2.2250738585073E-308 AND
c23 < 2.2250738585073E-308 AND
c24 = 00000000000000000000001 AND
c25 = -9999999999 AND
c26 = 9999999999 AND
c27 = 0000000001 AND
#
c28 = '2008-08-04' AND
c29 = '2008-08-04 16:18:06' AND
c30 = '2008-08-04 16:18:24' AND
c31 = '16:18:47' AND
c32 = '2008' AND
#
c33 = 'a' AND
c34 = '' AND
c35 = 'e' AND
c36 = REPEAT('i',255) AND
c37 = _utf8 x'c3a4' AND
c38 = '' AND
c39 = _utf8 x'c3b6' AND
c40 = REPEAT(_utf8 x'c3bc',255) AND
c41 = _ucs2 x'00e4' AND
c42 = '' AND
c43 = _ucs2 x'00f6' AND
c44 = REPEAT(_ucs2 x'00fc',255) AND
#
c45 = '' AND
c46 = 'a' AND
c47 = REPEAT('e',255) AND
c48 = REPEAT('i',261) AND
c49 = '' AND
c50 = _utf8 x'c3a4' AND
c51 = REPEAT(_utf8 x'c3b6',255) AND
c52 = REPEAT(_utf8 x'c3bc',261) AND
c53 = '' AND
c54 = _ucs2 x'00e4' AND
c55 = REPEAT(_ucs2 x'00f6',255) AND
c56 = REPEAT(_ucs2 x'00fc',261) AND
#
c57 = '0' AND
c58 = '' AND
c59 = '1' AND
c60 = REPEAT('1',255) AND
#
c61 = '' AND
c62 = 'b' AND
c63 = REPEAT('c',255) AND
c64 = REPEAT('\'',261) AND
#
c65 = 'tinyblob' AND
c66 = 'tinytext' AND
c67 = 'tinytext-ucs2' AND
c68 = 'blob' AND
c69 = 'text' AND
c70 = 'text-ucs2' AND
c71 = 'mediumblob' AND
c72 = 'mediumtext' AND
c73 = 'mediumtext-ucs2' AND
c74 = 'longblob' AND
c75 = 'longtext' AND
c76 = 'longtext-ucs2' AND
#
c77 = 'b' AND
c78 = 'b,c' AND
#
crn = 4;
--echo #
--echo # Show what we have in the table.
--echo # Do not display bit type output. It's binary and confuses diff.
--echo # Also BINARY with nul-bytes should be avoided.
--echo #
--replace_column 1 # 2 # 57 # 58 # 59 # 60 #
query_vertical SELECT * FROM t1;
--echo #
--echo # Delete the row that has max values now.
--echo #
DELETE FROM t1 WHERE
#
c01 = b'1' AND
# the below does not reproduce the inserted value:
#c02 = b'1111111111111111111111111111111111111111111111111111111111111111' AND
c03 = 127 AND
c04 = 255 AND
c05 = 255 AND
c06 = true AND
c07 = 32767 AND
c08 = 65535 AND
c09 = 65535 AND
c10 = 8388607 AND
c11 = 16777215 AND
c12 = 16777215 AND
c13 = 2147483647 AND
c14 = 4294967295 AND
c15 = 4294967295 AND
c16 = 9223372036854775807 AND
c17 = 18446744073709551615 AND
c18 = 18446744073709551615 AND
c19 > 3.402823465E+38 AND
c20 > 3.402823465E+38 AND
c21 > 3.402823465E+38 AND
c22 > 1.7976931348622E+308 AND
c23 > 1.7976931348622E+308 AND
c24 > 1.7976931348622E+308 AND
c25 = 9999999999 AND
c26 = 9999999999 AND
c27 = 9999999999 AND
#
c28 = '9999-12-31' AND
c29 = '9999-12-31 23:59:59' AND
c30 = '2038-01-08 03:14:07' AND
c31 = '838:59:59' AND
c32 = '2155' AND
#
c33 = x'ff' AND
c34 = '' AND
c35 = x'ff' AND
c36 = REPEAT(x'ff',255) AND
c37 = _utf8 x'efbfbf' AND
c38 = '' AND
c39 = _utf8 x'efbfbf' AND
c40 = REPEAT(_utf8 x'efbfbf',255) AND
c41 = _ucs2 x'ffff' AND
c42 = '' AND
c43 = _ucs2 x'ffff' AND
c44 = REPEAT(_ucs2 x'ffff',255) AND
#
c45 = '' AND
c46 = x'ff' AND
c47 = REPEAT(x'ff',255) AND
c48 = REPEAT(x'ff',261) AND
c49 = '' AND
c50 = _utf8 x'efbfbf' AND
c51 = REPEAT(_utf8 x'efbfbf',255) AND
c52 = REPEAT(_utf8 x'efbfbf',261) AND
c53 = '' AND
c54 = _ucs2 x'ffff' AND
c55 = REPEAT(_ucs2 x'ffff',255) AND
c56 = REPEAT(_ucs2 x'ffff',261) AND
#
c57 = x'ff' AND
c58 = '' AND
c59 = x'ff' AND
c60 = REPEAT(x'ff',255) AND
#
c61 = '' AND
c62 = x'ff' AND
c63 = REPEAT(x'ff',255) AND
c64 = REPEAT(x'ff',261) AND
#
c65 = 'tinyblob' AND
c66 = 'tinytext' AND
c67 = 'tinytext-ucs2' AND
c68 = 'blob' AND
c69 = 'text' AND
c70 = 'text-ucs2' AND
c71 = 'mediumblob' AND
c72 = 'mediumtext' AND
c73 = 'mediumtext-ucs2' AND
c74 = 'longblob' AND
c75 = 'longtext' AND
c76 = 'longtext-ucs2' AND
#
c77 = 'c' AND
c78 = 'a,b,c' AND
#
crn = 1;
--echo #
--echo # Delete the row that has min values now.
--echo #
DELETE FROM t1 WHERE
#
c01 = b'0' AND
c02 = b'0000000000000000000000000000000000000000000000000000000000000000' AND
c03 = -128 AND
c04 = 0 AND
c05 = 000 AND
c06 = false AND
c07 = -32768 AND
c08 = 0 AND
c09 = 00000 AND
c10 = -8388608 AND
c11 = 0 AND
c12 = 00000000 AND
c13 = -2147483648 AND
c14 = 0 AND
c15 = 0000000000 AND
c16 = -9223372036854775808 AND
c17 = 0 AND
c18 = 00000000000000000000 AND
c19 < -3.402823465E+38 AND
c20 < 1.175494352E-38 AND
c21 = 000000000000 AND
c22 < -1.7976931348622E+308 AND
c23 < 2.2250738585073E-308 AND
c24 = 0000000000000000000000 AND
c25 = -9999999999 AND
c26 = 0 AND
c27 = 0000000000 AND
#
c28 = '1000-01-01' AND
c29 = '1000-01-01 00:00:00' AND
c30 = '1970-01-02 00:00:01' AND
c31 = '-838:59:59' AND
c32 = '1901' AND
#
c33 = '' AND
c34 = '' AND
c35 = '' AND
c36 = '' AND
c37 = '' AND
c38 = '' AND
c39 = '' AND
c40 = '' AND
c41 = '' AND
c42 = '' AND
c43 = '' AND
c44 = '' AND
#
c45 = '' AND
c46 = '' AND
c47 = '' AND
c48 = '' AND
c49 = '' AND
c50 = '' AND
c51 = '' AND
c52 = '' AND
c53 = '' AND
c54 = '' AND
c55 = '' AND
c56 = '' AND
#
# this does not reproduce the inserted value: c57 = '' AND
c58 = '' AND
# this does not reproduce the inserted value: c59 = '' AND
# this does not reproduce the inserted value: c60 = '' AND
#
c61 = '' AND
c62 = '' AND
c63 = '' AND
c64 = '' AND
#
c65 = '' AND
c66 = '' AND
c67 = '' AND
c68 = '' AND
c69 = '' AND
c70 = '' AND
c71 = '' AND
c72 = '' AND
c73 = '' AND
c74 = '' AND
c75 = '' AND
c76 = '' AND
#
c77 = 'a' AND
c78 = '' AND
#
crn = 2;
--echo #
--echo # Delete the row that has arbitrary values now.
--echo #
DELETE FROM t1 WHERE
#
c01 = b'1' AND
# the below does not reproduce the inserted value:
#c02 = b'1111111111111111111111111111111111111111111111111111111111111111' AND
c03 = 127 AND
c04 = 0 AND
c05 = 001 AND
c06 = true AND
c07 = 32767 AND
c08 = 0 AND
c09 = 00001 AND
c10 = 8388607 AND
c11 = 0 AND
c12 = 00000001 AND
c13 = 2147483647 AND
c14 = 0 AND
c15 = 0000000001 AND
c16 = 9223372036854775807 AND
c17 = 0 AND
c18 = 00000000000000000001 AND
c19 > -1.175494352E-38 AND
c20 < 1.175494352E-38 AND
c21 = 000000000000001 AND
c22 > -2.2250738585073E-308 AND
c23 < 2.2250738585073E-308 AND
c24 = 00000000000000000000001 AND
c25 = -9999999999 AND
c26 = 9999999999 AND
c27 = 0000000001 AND
#
c28 = '2008-08-04' AND
c29 = '2008-08-04 16:18:06' AND
c30 = '2008-08-04 16:18:24' AND
c31 = '16:18:47' AND
c32 = '2008' AND
#
c33 = 'a' AND
c34 = '' AND
c35 = 'e' AND
c36 = REPEAT('i',255) AND
c37 = _utf8 x'c3a4' AND
c38 = '' AND
c39 = _utf8 x'c3b6' AND
c40 = REPEAT(_utf8 x'c3bc',255) AND
c41 = _ucs2 x'00e4' AND
c42 = '' AND
c43 = _ucs2 x'00f6' AND
c44 = REPEAT(_ucs2 x'00fc',255) AND
#
c45 = '' AND
c46 = 'a' AND
c47 = REPEAT('e',255) AND
c48 = REPEAT('i',261) AND
c49 = '' AND
c50 = _utf8 x'c3a4' AND
c51 = REPEAT(_utf8 x'c3b6',255) AND
c52 = REPEAT(_utf8 x'c3bc',261) AND
c53 = '' AND
c54 = _ucs2 x'00e4' AND
c55 = REPEAT(_ucs2 x'00f6',255) AND
c56 = REPEAT(_ucs2 x'00fc',261) AND
#
c57 = '0' AND
c58 = '' AND
c59 = '1' AND
c60 = REPEAT('1',255) AND
#
c61 = '' AND
c62 = 'b' AND
c63 = REPEAT('c',255) AND
c64 = REPEAT('\'',261) AND
#
c65 = 'tinyblob' AND
c66 = 'tinytext' AND
c67 = 'tinytext-ucs2' AND
c68 = 'blob' AND
c69 = 'text' AND
c70 = 'text-ucs2' AND
c71 = 'mediumblob' AND
c72 = 'mediumtext' AND
c73 = 'mediumtext-ucs2' AND
c74 = 'longblob' AND
c75 = 'longtext' AND
c76 = 'longtext-ucs2' AND
#
c77 = 'b' AND
c78 = 'b,c' AND
#
crn = 3;
--echo #
--echo # Delete the row that has NULL values now.
--echo #
DELETE FROM t1 WHERE
#
c01 IS NULL AND
c02 IS NULL AND
c03 IS NULL AND
c04 IS NULL AND
c05 IS NULL AND
c06 IS NULL AND
c07 IS NULL AND
c08 IS NULL AND
c09 IS NULL AND
c10 IS NULL AND
c11 IS NULL AND
c12 IS NULL AND
c13 IS NULL AND
c14 IS NULL AND
c15 IS NULL AND
c16 IS NULL AND
c17 IS NULL AND
c18 IS NULL AND
c19 IS NULL AND
c20 IS NULL AND
c21 IS NULL AND
c22 IS NULL AND
c23 IS NULL AND
c24 IS NULL AND
c25 IS NULL AND
c26 IS NULL AND
c27 IS NULL AND
#
c28 IS NULL AND
c29 IS NULL AND
# this got a timestamp instead of NULL: c30 IS NULL AND
c31 IS NULL AND
c32 IS NULL AND
#
c33 IS NULL AND
c34 IS NULL AND
c35 IS NULL AND
c36 IS NULL AND
c37 IS NULL AND
c38 IS NULL AND
c39 IS NULL AND
c40 IS NULL AND
c41 IS NULL AND
c42 IS NULL AND
c43 IS NULL AND
c44 IS NULL AND
#
c45 IS NULL AND
c46 IS NULL AND
c47 IS NULL AND
c48 IS NULL AND
c49 IS NULL AND
c50 IS NULL AND
c51 IS NULL AND
c52 IS NULL AND
c53 IS NULL AND
c54 IS NULL AND
c55 IS NULL AND
c56 IS NULL AND
#
c57 IS NULL AND
c58 IS NULL AND
c59 IS NULL AND
c60 IS NULL AND
#
c61 IS NULL AND
c62 IS NULL AND
c63 IS NULL AND
c64 IS NULL AND
#
c65 IS NULL AND
c66 IS NULL AND
c67 IS NULL AND
c68 IS NULL AND
c69 IS NULL AND
c70 IS NULL AND
c71 IS NULL AND
c72 IS NULL AND
c73 IS NULL AND
c74 IS NULL AND
c75 IS NULL AND
c76 IS NULL AND
#
c77 IS NULL AND
c78 IS NULL AND
#
crn = 4;
--echo #
--echo # Show what we have in the table. Should be empty now.
--echo #
query_vertical SELECT * FROM t1;
--echo #
--echo # Hide how much rows are affected by each statement.
--echo #
--disable_info
--echo #
--echo # Flush all log buffers to the log file.
--echo #
FLUSH LOGS;
--echo #
--echo # Call mysqlbinlog to display the log file contents.
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLTEST_VARDIR/log/master-bin.000001
--echo #
--echo # Cleanup.
--echo #
DROP TABLE t1;
--echo #
--echo # =========================================
--echo # Test #2 - Multi-row insert/update/delete.
--echo # =========================================
--echo #
--echo # Delete all existing binary logs.
--echo #
RESET MASTER;
--echo #
--echo # Create a test table with selected data types.
--echo #
eval CREATE TABLE t1 (
c28 DATE,
c47 VARCHAR(24),
crn INT -- row number
) ENGINE=$engine_type DEFAULT CHARSET latin1;
--echo #
--echo # Show how much rows are affected by each statement.
--echo #
--enable_info
--echo #
--echo # Multi-row insert.
--echo #
INSERT INTO t1 VALUES
('2008-08-01','VARCHAR-01',1),
('2008-08-02','VARCHAR-02',2),
('2008-08-03','VARCHAR-03',3),
('2008-08-04','VARCHAR-04',4),
('2008-08-05','VARCHAR-05',5),
('2008-08-06','VARCHAR-06',6),
('2008-08-07','VARCHAR-07',7),
('2008-08-08','VARCHAR-08',8),
('2008-08-09','VARCHAR-09',9);
--echo #
--echo # Multi-row update.
--echo #
UPDATE t1 SET c28 = ADDDATE(c28,10) WHERE crn < 8;
--echo #
--echo # Show what we have in the table.
--echo #
SELECT * FROM t1;
--echo #
--echo # Multi-row delete.
--echo #
DELETE FROM t1 WHERE crn < 8;
--echo #
--echo # Show what we have in the table.
--echo #
SELECT * FROM t1;
--echo #
--echo # Hide how much rows are affected by each statement.
--echo #
--disable_info
--echo #
--echo # Flush all log buffers to the log file.
--echo #
FLUSH LOGS;
--echo #
--echo # Call mysqlbinlog to display the log file contents.
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLTEST_VARDIR/log/master-bin.000001
--echo #
--echo # Cleanup.
--echo #
DROP TABLE t1;
--echo #
--echo # ====================================
--echo # Test #3 - Multi-table update/delete.
--echo # ====================================
--echo #
--echo # Delete all existing binary logs.
--echo #
RESET MASTER;
--echo #
--echo # Create test tables with selected data types.
--echo #
eval CREATE TABLE t1 (
c_1_1 DATE,
c_1_2 VARCHAR(255),
c_1_n INT -- row number
) ENGINE=$engine_type DEFAULT CHARSET latin1;
#
eval CREATE TABLE t2 (
c_2_1 DATE,
c_2_2 VARCHAR(255),
c_2_n INT -- row number
) ENGINE=$engine_type DEFAULT CHARSET latin1;
#
eval CREATE TABLE t3 (
c_3_1 DATE,
c_3_2 VARCHAR(255),
c_3_n INT -- row number
) ENGINE=$engine_type DEFAULT CHARSET latin1;
--echo #
--echo # Show how much rows are affected by each statement.
--echo #
--enable_info
--echo #
--echo # Insert data.
--echo #
INSERT INTO t1 VALUES
('2008-01-01','VARCHAR-01-01',11),
('2008-01-02','VARCHAR-01-02',2),
('2008-01-03','VARCHAR-01-03',3),
('2008-01-04','VARCHAR-01-04',4),
('2008-01-05','VARCHAR-01-05',5),
('2008-01-06','VARCHAR-01-06',6),
('2008-01-07','VARCHAR-01-07',7),
('2008-01-08','VARCHAR-01-08',18),
('2008-01-09','VARCHAR-01-09',19);
#
INSERT INTO t2 VALUES
('2008-02-01','VARCHAR-02-01',21),
('2008-02-02','VARCHAR-02-02',2),
('2008-02-03','VARCHAR-02-03',3),
('2008-02-04','VARCHAR-02-04',4),
('2008-02-05','VARCHAR-02-05',5),
('2008-02-06','VARCHAR-02-06',6),
('2008-02-07','VARCHAR-02-07',7),
('2008-02-08','VARCHAR-02-08',28),
('2008-02-09','VARCHAR-02-09',29);
#
INSERT INTO t3 VALUES
('2008-03-01','VARCHAR-03-01',31),
('2008-03-02','VARCHAR-03-02',2),
('2008-03-03','VARCHAR-03-03',3),
('2008-03-04','VARCHAR-03-04',4),
('2008-03-05','VARCHAR-03-05',5),
('2008-03-06','VARCHAR-03-06',6),
('2008-03-07','VARCHAR-03-07',7),
('2008-03-08','VARCHAR-03-08',38),
('2008-03-09','VARCHAR-03-09',39);
--echo #
--echo # Multi-table update.
--echo #
UPDATE t1,t2,t3 SET
c_1_1 = ADDDATE(c_1_1,INTERVAL 10 YEAR),
c_2_1 = ADDDATE(c_2_1,INTERVAL 20 YEAR),
c_3_1 = ADDDATE(c_3_1,INTERVAL 30 YEAR)
WHERE c_1_n = c_2_n AND c_2_n = c_3_n;
--echo #
--echo # Show what we have in the tables.
--echo #
SELECT * FROM t1;
SELECT * FROM t2;
SELECT * FROM t3;
--echo #
--echo # Multi-table delete.
--echo #
DELETE FROM t1,t2,t3 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE c_1_n = c_2_n AND c_2_n = c_3_n;
--echo #
--echo # Show what we have in the tables.
--echo #
SELECT * FROM t1;
SELECT * FROM t2;
SELECT * FROM t3;
--echo #
--echo # Hide how much rows are affected by each statement.
--echo #
--disable_info
--echo #
--echo # Flush all log buffers to the log file.
--echo #
FLUSH LOGS;
--echo #
--echo # Call mysqlbinlog to display the log file contents.
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLTEST_VARDIR/log/master-bin.000001
--echo #
--echo # Cleanup.
--echo #
DROP TABLE t1, t2, t3;
--echo #
--echo # ===========================
--echo # Test #4 - LOAD DATA INFILE.
--echo # ===========================
--echo #
--echo # Delete all existing binary logs.
--echo #
RESET MASTER;
--echo #
--echo # Create a test table with selected data types.
--echo #
eval CREATE TABLE t1 (
c1 INT DEFAULT 100,
c2 INT,
c3 VARCHAR(60)
) ENGINE=$engine_type DEFAULT CHARSET latin1;
--echo #
--echo # Show how much rows are affected by each statement.
--echo #
--enable_info
--echo #
--echo # Load data.
--echo #
LOAD DATA INFILE '../std_data_ln/loaddata5.dat'
INTO TABLE t1 FIELDS TERMINATED BY '' ENCLOSED BY '' (c1,c2)
SET c3 = 'Wow';
--echo #
--echo # Show what we have in the table.
--echo #
SELECT * FROM t1;
--echo #
--echo # Hide how much rows are affected by each statement.
--echo #
--disable_info
--echo #
--echo # Flush all log buffers to the log file.
--echo #
FLUSH LOGS;
--echo #
--echo # Call mysqlbinlog to display the log file contents.
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLTEST_VARDIR/log/master-bin.000001
--echo #
--echo # Cleanup.
--echo #
DROP TABLE t1;
This source diff could not be displayed because it is too large. You can view the blob instead.
#
# Preparatory cleanup.
#
DROP TABLE IF EXISTS t1;
#
# We need a fixed timestamp to avoid varying results.
#
SET timestamp=1000000000;
#
# We need big packets.
#
SET @@session.max_allowed_packet= 1024*1024*1024;
#
# Delete all existing binary logs.
#
RESET MASTER;
#
# Create a test table.
#
CREATE TABLE t1 (
c1 LONGTEXT
) ENGINE=MyISAM DEFAULT CHARSET latin1;
#
# Show how much rows are affected by each statement.
#
#
# Insert a big row.
#
INSERT INTO t1 VALUES (REPEAT('ManyMegaByteBlck', 2097152));
affected rows: 1
#
# Show what we have in the table.
# Do not display the column value itself, just its length.
#
SELECT LENGTH(c1) FROM t1;
LENGTH(c1) 33554432
affected rows: 1
#
# Grow the row by updating.
#
UPDATE t1 SET c1 = CONCAT(c1, c1);
affected rows: 1
info: Rows matched: 1 Changed: 1 Warnings: 0
#
# Show what we have in the table.
# Do not display the column value itself, just its length.
#
SELECT LENGTH(c1) FROM t1;
LENGTH(c1) 67108864
affected rows: 1
#
# Delete the row.
#
DELETE FROM t1 WHERE c1 >= 'ManyMegaByteBlck';
affected rows: 1
#
# Hide how much rows are affected by each statement.
#
#
# Flush all log buffers to the log file.
#
FLUSH LOGS;
#
# Call mysqlbinlog to display the log file contents.
# NOTE: The output of mysqlbinlog is redirected to
# $MYSQLTEST_VARDIR/tmp/mysqlbinlog_big_1.out
# If you want to examine it, disable remove_file
# at the bottom of the test script.
#
#
# Cleanup.
#
DROP TABLE t1;
remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_big_1.out
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
#
# Preparatory cleanup.
#
DROP TABLE IF EXISTS t1, t2;
#
# We need a fixed timestamp to avoid varying results.
#
SET timestamp=1000000000;
#
# Delete all existing binary logs.
#
RESET MASTER;
#
# Create test tables.
#
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(20)
) ENGINE=InnoDB DEFAULT CHARSET latin1;
CREATE TABLE t2 (
c1 INT,
c2 VARCHAR(20)
) ENGINE=MyISAM DEFAULT CHARSET latin1;
#
# Start transaction #1, transactional table only, commit.
#
START TRANSACTION;
#
# Do some statements.
#
INSERT INTO t1 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t1 SET c1 = c1 + 10;
DELETE FROM t1 WHERE c1 = 12;
#
# Commit transaction.
#
COMMIT;
SELECT * FROM t1;
c1 c2
11 varchar-1
13 varchar-3
TRUNCATE TABLE t1;
#
# Start transaction #2, transactional table only, rollback.
#
START TRANSACTION;
#
# Do some statements.
#
INSERT INTO t1 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t1 SET c1 = c1 + 10;
DELETE FROM t1 WHERE c1 = 12;
#
# Rollback transaction.
#
ROLLBACK;
SELECT * FROM t1;
c1 c2
TRUNCATE TABLE t1;
#
# Start transaction #3, both tables, commit.
#
START TRANSACTION;
#
# Do some statements on the transactional table.
#
INSERT INTO t1 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t1 SET c1 = c1 + 10;
DELETE FROM t1 WHERE c1 = 12;
#
# Do some statements on the non-transactional table.
#
INSERT INTO t2 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t2 SET c1 = c1 + 10;
DELETE FROM t2 WHERE c1 = 12;
#
# Commit transaction.
#
COMMIT;
SELECT * FROM t1;
c1 c2
11 varchar-1
13 varchar-3
SELECT * FROM t2;
c1 c2
11 varchar-1
13 varchar-3
TRUNCATE TABLE t1;
TRUNCATE TABLE t2;
#
# Start transaction #4, both tables, rollback.
#
START TRANSACTION;
#
# Do some statements on the transactional table.
#
INSERT INTO t1 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t1 SET c1 = c1 + 10;
DELETE FROM t1 WHERE c1 = 12;
#
# Do some statements on the non-transactional table.
#
INSERT INTO t2 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t2 SET c1 = c1 + 10;
DELETE FROM t2 WHERE c1 = 12;
#
# Rollback transaction.
#
ROLLBACK;
Warnings:
Warning 1196 Some non-transactional changed tables couldn't be rolled back
SELECT * FROM t1;
c1 c2
SELECT * FROM t2;
c1 c2
11 varchar-1
13 varchar-3
TRUNCATE TABLE t1;
TRUNCATE TABLE t2;
#
# Flush all log buffers to the log file.
#
FLUSH LOGS;
#
# Call mysqlbinlog to display the log file contents.
#
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Start: binlog v 4, server v #.##.## created 010909 4:46:40 at startup
ROLLBACK/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
use test/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(20)
) ENGINE=InnoDB DEFAULT CHARSET latin1
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t2 (
c1 INT,
c2 VARCHAR(20)
) ENGINE=MyISAM DEFAULT CHARSET latin1
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
BEGIN
/*!*/;
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F
### INSERT INTO test.t1
### SET
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### INSERT INTO test.t1
### SET
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### INSERT INTO test.t1
### SET
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Update_rows: table id # flags: STMT_END_F
### UPDATE test.t1
### WHERE
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=11 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### UPDATE test.t1
### WHERE
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=12 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### UPDATE test.t1
### WHERE
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=13 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Delete_rows: table id # flags: STMT_END_F
### DELETE FROM test.t1
### WHERE
### @1=12 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
#010909 4:46:40 server id 1 end_log_pos # Xid = #
COMMIT/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
BEGIN
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t1
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Xid = #
COMMIT/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
BEGIN
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t1
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Xid = #
COMMIT/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
BEGIN
/*!*/;
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F
### INSERT INTO test.t1
### SET
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### INSERT INTO test.t1
### SET
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### INSERT INTO test.t1
### SET
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Update_rows: table id # flags: STMT_END_F
### UPDATE test.t1
### WHERE
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=11 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### UPDATE test.t1
### WHERE
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=12 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### UPDATE test.t1
### WHERE
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=13 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Delete_rows: table id # flags: STMT_END_F
### DELETE FROM test.t1
### WHERE
### @1=12 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t2` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F
### INSERT INTO test.t2
### SET
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### INSERT INTO test.t2
### SET
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### INSERT INTO test.t2
### SET
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t2` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Update_rows: table id # flags: STMT_END_F
### UPDATE test.t2
### WHERE
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=11 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### UPDATE test.t2
### WHERE
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=12 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### UPDATE test.t2
### WHERE
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=13 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t2` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Delete_rows: table id # flags: STMT_END_F
### DELETE FROM test.t2
### WHERE
### @1=12 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
#010909 4:46:40 server id 1 end_log_pos # Xid = #
COMMIT/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
BEGIN
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t1
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Xid = #
COMMIT/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t2
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
BEGIN
/*!*/;
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F
### INSERT INTO test.t1
### SET
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### INSERT INTO test.t1
### SET
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### INSERT INTO test.t1
### SET
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Update_rows: table id # flags: STMT_END_F
### UPDATE test.t1
### WHERE
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=11 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### UPDATE test.t1
### WHERE
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=12 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### UPDATE test.t1
### WHERE
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=13 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Delete_rows: table id # flags: STMT_END_F
### DELETE FROM test.t1
### WHERE
### @1=12 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t2` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F
### INSERT INTO test.t2
### SET
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### INSERT INTO test.t2
### SET
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### INSERT INTO test.t2
### SET
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t2` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Update_rows: table id # flags: STMT_END_F
### UPDATE test.t2
### WHERE
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=11 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-1' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### UPDATE test.t2
### WHERE
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=12 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### UPDATE test.t2
### WHERE
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
### @1=13 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
# at #
#010909 4:46:40 server id 1 end_log_pos # Table_map: `test`.`t2` mapped to number #
#010909 4:46:40 server id 1 end_log_pos # Delete_rows: table id # flags: STMT_END_F
### DELETE FROM test.t2
### WHERE
### @1=12 /* INT meta=0 nullable=1 is_null=0 */
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
ROLLBACK
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
BEGIN
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t1
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Xid = #
COMMIT/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t2
/*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # Rotate to master-bin.000002 pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
#
# Cleanup.
#
DROP TABLE t1, t2;
--source include/have_log_bin.inc
--source include/have_binlog_format_row.inc
--source include/have_ucs2.inc
--echo #
--echo # Preparatory cleanup.
--echo #
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
--echo #
--echo # We need a fixed timestamp to avoid varying results.
--echo #
SET timestamp=1000000000;
--echo #
--echo # Delete all existing binary logs.
--echo #
RESET MASTER;
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 (c41 CHAR CHARACTER SET UCS2);
INSERT INTO t1 VALUES ('a');
DELETE FROM t1 WHERE c41='a';
DROP TABLE t1;
CREATE TABLE t1 (c42 CHAR(0) CHARACTER SET UCS2);
INSERT INTO t1 VALUES ('');
DELETE FROM t1 WHERE c42='';
DROP TABLE t1;
CREATE TABLE t1 (c43 CHAR(1) CHARACTER SET UCS2);
INSERT INTO t1 VALUES ('a');
DELETE FROM t1 WHERE c43='a';
DROP TABLE t1;
CREATE TABLE t1 (c44 CHAR(255) CHARACTER SET UCS2);
INSERT INTO t1 VALUES (repeat('a', 255));
INSERT INTO t1 VALUES (repeat(_latin1 0xDF, 255));
DELETE FROM t1 WHERE c44>'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 (c53 VARCHAR(0) CHARACTER SET ucs2);
INSERT INTO t1 VALUES ('');
DELETE FROM t1 WHERE c53='';
DROP TABLE t1;
CREATE TABLE t1 (c54 VARCHAR(1) CHARACTER SET ucs2);
INSERT INTO t1 VALUES ('a');
DELETE FROM t1 WHERE c54='a';
DROP TABLE t1;
CREATE TABLE t1 (c55 VARCHAR(255) CHARACTER SET ucs2);
INSERT INTO t1 VALUES (repeat('ab', 127));
DELETE FROM t1 WHERE c55>'a';
DROP TABLE t1;
CREATE TABLE t1 (c56 VARCHAR(261) CHARACTER SET ucs2);
INSERT INTO t1 VALUES (repeat('ab', 130));
DELETE FROM t1 WHERE c56>'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;
#
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 (c67 TINYTEXT CHARACTER SET UCS2);
INSERT INTO t1 VALUES ('tinytext1');
DELETE FROM t1 WHERE c67='tinytext1';
DROP TABLE t1;
CREATE TABLE t1 (c70 TEXT CHARACTER SET UCS2);
INSERT INTO t1 VALUES ('text1');
DELETE FROM t1 WHERE c70='text1';
DROP TABLE t1;
CREATE TABLE t1 (c73 MEDIUMTEXT CHARACTER SET UCS2);
INSERT INTO t1 VALUES ('mediumtext1');
DELETE FROM t1 WHERE c73='mediumtext1';
DROP TABLE t1;
CREATE TABLE t1 (c76 LONGTEXT CHARACTER SET UCS2);
INSERT INTO t1 VALUES ('longtext1');
DELETE FROM t1 WHERE c76='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`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9]*[.][0-9]{1,3})[0-9e+-]*[^ ]*(.*(FLOAT|DOUBLE).*[*].)/\1...\2/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLTEST_VARDIR/log/master-bin.000001
# mysqlbinlog_big.test
#
# Show that mysqlbinlog can handle big rows.
#
#
# The *huge* output of mysqlbinlog will be redirected to
# $MYSQLTEST_VARDIR/$mysqlbinlog_output
#
--let $mysqlbinlog_output= tmp/mysqlbinlog_big_1.out
#--source include/have_myisam.inc
--let $engine_type= MyISAM
#
# This test case is insensitive to the binlog format
# because we don't display the output of mysqlbinlog.
#
#--source include/have_binlog_format_row.inc
--source include/have_log_bin.inc
# This is a big test.
--source include/big_test.inc
--echo #
--echo # Preparatory cleanup.
--echo #
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
--echo #
--echo # We need a fixed timestamp to avoid varying results.
--echo #
SET timestamp=1000000000;
--echo #
--echo # We need big packets.
--echo #
SET @@session.max_allowed_packet= 1024*1024*1024;
--echo #
--echo # Delete all existing binary logs.
--echo #
RESET MASTER;
--echo #
--echo # Create a test table.
--echo #
eval CREATE TABLE t1 (
c1 LONGTEXT
) ENGINE=$engine_type DEFAULT CHARSET latin1;
--echo #
--echo # Show how much rows are affected by each statement.
--echo #
--enable_info
--echo #
--echo # Insert a big row.
--echo #
#
# 256MB
#INSERT INTO t1 VALUES (REPEAT('ManyMegaByteBlck', 16777216));
#
# 32MB
INSERT INTO t1 VALUES (REPEAT('ManyMegaByteBlck', 2097152));
#
# 4MB
#INSERT INTO t1 VALUES (REPEAT('ManyMegaByteBlck', 262144));
#
# 512KB
#INSERT INTO t1 VALUES (REPEAT('ManyMegaByteBlck', 32768));
--echo #
--echo # Show what we have in the table.
--echo # Do not display the column value itself, just its length.
--echo #
query_vertical SELECT LENGTH(c1) FROM t1;
--echo #
--echo # Grow the row by updating.
--echo #
UPDATE t1 SET c1 = CONCAT(c1, c1);
--echo #
--echo # Show what we have in the table.
--echo # Do not display the column value itself, just its length.
--echo #
query_vertical SELECT LENGTH(c1) FROM t1;
--echo #
--echo # Delete the row.
--echo #
DELETE FROM t1 WHERE c1 >= 'ManyMegaByteBlck';
--echo #
--echo # Hide how much rows are affected by each statement.
--echo #
--disable_info
--echo #
--echo # Flush all log buffers to the log file.
--echo #
FLUSH LOGS;
--echo #
--echo # Call mysqlbinlog to display the log file contents.
--echo # NOTE: The output of mysqlbinlog is redirected to
--echo # \$MYSQLTEST_VARDIR/$mysqlbinlog_output
--echo # If you want to examine it, disable remove_file
--echo # at the bottom of the test script.
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/
--exec $MYSQL_BINLOG -v -v $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/$mysqlbinlog_output
--echo #
--echo # Cleanup.
--echo #
DROP TABLE t1;
--echo remove_file \$MYSQLTEST_VARDIR/$mysqlbinlog_output
#
# NOTE: If you want to see the *huge* mysqlbinlog output, disable next line:
#
--remove_file $MYSQLTEST_VARDIR/$mysqlbinlog_output
# mysqlbinlog_row_innodb.test
#
# Show that mysqlbinlog displays human readable comments to
# row-based log events.
#
# Main module for the InnoDB storage engine.
#
# Calls include/mysqlbinlog_row.inc
# See there for more informaton.
#
--source include/have_innodb.inc
let $engine_type=InnoDB;
#
# The test case would also work with statement based or mixed mode logging.
# But this would require different result files. To handle this with the
# current test suite, new main test cases are required.
#
--source include/have_binlog_format_row.inc
--source include/have_ucs2.inc
--source include/mysqlbinlog_row_engine.inc
# mysqlbinlog_row.test
#
# Show that mysqlbinlog displays human readable comments to
# row-based log events.
#
# Main module for the MyISAM storage engine.
#
# Calls include/mysqlbinlog_row.inc
# See there for more informaton.
#
#--source include/have_myisam.inc
let $engine_type=MyISAM;
#
# The test case would also work with statement based or mixed mode logging.
# But this would require different result files. To handle this with the
# current test suite, new main test cases are required.
#
--source include/have_binlog_format_row.inc
--source include/have_ucs2.inc
--source include/mysqlbinlog_row_engine.inc
# mysqlbinlog_trans.test
#
# Show that mysqlbinlog work correctly with transactions.
#
#--source include/have_myisam.inc
--let $engine_type_nontrans= MyISAM
--source include/have_innodb.inc
--let $engine_type= InnoDB
#
# The test case would also work with statement based or mixed mode logging.
# But this would require different result files. To handle this with the
# current test suite, new main test cases are required.
#
--source include/have_binlog_format_row.inc
--source include/have_log_bin.inc
--echo #
--echo # Preparatory cleanup.
--echo #
--disable_warnings
DROP TABLE IF EXISTS t1, t2;
--enable_warnings
--echo #
--echo # We need a fixed timestamp to avoid varying results.
--echo #
SET timestamp=1000000000;
--echo #
--echo # Delete all existing binary logs.
--echo #
RESET MASTER;
--echo #
--echo # Create test tables.
--echo #
eval CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(20)
) ENGINE=$engine_type DEFAULT CHARSET latin1;
eval CREATE TABLE t2 (
c1 INT,
c2 VARCHAR(20)
) ENGINE=$engine_type_nontrans DEFAULT CHARSET latin1;
--echo #
--echo # Start transaction #1, transactional table only, commit.
--echo #
START TRANSACTION;
--echo #
--echo # Do some statements.
--echo #
INSERT INTO t1 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t1 SET c1 = c1 + 10;
DELETE FROM t1 WHERE c1 = 12;
--echo #
--echo # Commit transaction.
--echo #
COMMIT;
SELECT * FROM t1;
TRUNCATE TABLE t1;
--echo #
--echo # Start transaction #2, transactional table only, rollback.
--echo #
START TRANSACTION;
--echo #
--echo # Do some statements.
--echo #
INSERT INTO t1 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t1 SET c1 = c1 + 10;
DELETE FROM t1 WHERE c1 = 12;
--echo #
--echo # Rollback transaction.
--echo #
ROLLBACK;
SELECT * FROM t1;
TRUNCATE TABLE t1;
--echo #
--echo # Start transaction #3, both tables, commit.
--echo #
START TRANSACTION;
--echo #
--echo # Do some statements on the transactional table.
--echo #
INSERT INTO t1 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t1 SET c1 = c1 + 10;
DELETE FROM t1 WHERE c1 = 12;
--echo #
--echo # Do some statements on the non-transactional table.
--echo #
INSERT INTO t2 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t2 SET c1 = c1 + 10;
DELETE FROM t2 WHERE c1 = 12;
--echo #
--echo # Commit transaction.
--echo #
COMMIT;
SELECT * FROM t1;
SELECT * FROM t2;
TRUNCATE TABLE t1;
TRUNCATE TABLE t2;
--echo #
--echo # Start transaction #4, both tables, rollback.
--echo #
START TRANSACTION;
--echo #
--echo # Do some statements on the transactional table.
--echo #
INSERT INTO t1 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t1 SET c1 = c1 + 10;
DELETE FROM t1 WHERE c1 = 12;
--echo #
--echo # Do some statements on the non-transactional table.
--echo #
INSERT INTO t2 VALUES (1,'varchar-1'), (2,'varchar-2'), (3,'varchar-3');
UPDATE t2 SET c1 = c1 + 10;
DELETE FROM t2 WHERE c1 = 12;
--echo #
--echo # Rollback transaction.
--echo #
ROLLBACK;
SELECT * FROM t1;
SELECT * FROM t2;
TRUNCATE TABLE t1;
TRUNCATE TABLE t2;
--echo #
--echo # Flush all log buffers to the log file.
--echo #
FLUSH LOGS;
--echo #
--echo # Call mysqlbinlog to display the log file contents.
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLTEST_VARDIR/log/master-bin.000001
--echo #
--echo # Cleanup.
--echo #
DROP TABLE t1, t2;
...@@ -1353,6 +1353,542 @@ void Log_event::print_header(IO_CACHE* file, ...@@ -1353,6 +1353,542 @@ void Log_event::print_header(IO_CACHE* file,
} }
/**
Prints a quoted string to io cache.
Control characters are displayed as hex sequence, e.g. \x00
@param[in] file IO cache
@param[in] prt Pointer to string
@param[in] length String length
*/
static void
my_b_write_quoted(IO_CACHE *file, const uchar *ptr, uint length)
{
const uchar *s;
my_b_printf(file, "'");
for (s= ptr; length > 0 ; s++, length--)
{
if (*s > 0x1F)
my_b_write(file, s, 1);
else
{
uchar hex[10];
size_t len= my_snprintf((char*) hex, sizeof(hex), "%s%02x", "\\x", *s);
my_b_write(file, hex, len);
}
}
my_b_printf(file, "'");
}
/**
Prints a bit string to io cache in format b'1010'.
@param[in] file IO cache
@param[in] ptr Pointer to string
@param[in] nbits Number of bits
*/
static void
my_b_write_bit(IO_CACHE *file, const uchar *ptr, uint nbits)
{
uint bitnum, nbits8= ((nbits + 7) / 8) * 8, skip_bits= nbits8 - nbits;
my_b_printf(file, "b'");
for (bitnum= skip_bits ; bitnum < nbits8; bitnum++)
{
int is_set= (ptr[(bitnum) / 8] >> (7 - bitnum % 8)) & 0x01;
my_b_write(file, (const uchar*) (is_set ? "1" : "0"), 1);
}
my_b_printf(file, "'");
}
/**
Prints a packed string to io cache.
The string consists of length packed to 1 or 2 bytes,
followed by string data itself.
@param[in] file IO cache
@param[in] ptr Pointer to string
@param[in] length String size
@retval - number of bytes scanned.
*/
static size_t
my_b_write_quoted_with_length(IO_CACHE *file, const uchar *ptr, uint length)
{
if (length < 256)
{
length= *ptr;
my_b_write_quoted(file, ptr + 1, length);
return length + 1;
}
else
{
length= uint2korr(ptr);
my_b_write_quoted(file, ptr + 2, length);
return length + 2;
}
}
/**
Prints a 32-bit number in both signed and unsigned representation
@param[in] file IO cache
@param[in] sl Signed number
@param[in] ul Unsigned number
*/
static void
my_b_write_sint32_and_uint32(IO_CACHE *file, int32 si, uint32 ui)
{
my_b_printf(file, "%d", si);
if (si < 0)
my_b_printf(file, " (%u)", ui);
}
/**
Print a packed value of the given SQL type into IO cache
@param[in] file IO cache
@param[in] ptr Pointer to string
@param[in] type Column type
@param[in] meta Column meta information
@param[out] typestr SQL type string buffer (for verbose output)
@param[out] typestr_length Size of typestr
@retval - number of bytes scanned from ptr.
*/
static size_t
log_event_print_value(IO_CACHE *file, const uchar *ptr,
uint type, uint meta,
char *typestr, size_t typestr_length)
{
uint32 length= 0;
if (type == MYSQL_TYPE_STRING)
{
if (meta >= 256)
{
uint byte0= meta >> 8;
uint byte1= meta & 0xFF;
if ((byte0 & 0x30) != 0x30)
{
/* a long CHAR() field: see #37426 */
length= byte1 | (((byte0 & 0x30) ^ 0x30) << 4);
type= byte0 | 0x30;
goto beg;
}
switch (byte0)
{
case MYSQL_TYPE_SET:
case MYSQL_TYPE_ENUM:
case MYSQL_TYPE_STRING:
type= byte0;
length= byte1;
break;
default:
{
char tmp[5];
my_snprintf(tmp, sizeof(tmp), "%04X", meta);
my_b_printf(file,
"!! Don't know how to handle column type=%d meta=%d (%s)",
type, meta, tmp);
return 0;
}
}
}
else
length= meta;
}
beg:
switch (type) {
case MYSQL_TYPE_LONG:
{
int32 si= sint4korr(ptr);
uint32 ui= uint4korr(ptr);
my_b_write_sint32_and_uint32(file, si, ui);
my_snprintf(typestr, typestr_length, "INT");
return 4;
}
case MYSQL_TYPE_TINY:
{
my_b_write_sint32_and_uint32(file, (int) (signed char) *ptr,
(uint) (unsigned char) *ptr);
my_snprintf(typestr, typestr_length, "TINYINT");
return 1;
}
case MYSQL_TYPE_SHORT:
{
int32 si= (int32) sint2korr(ptr);
uint32 ui= (uint32) uint2korr(ptr);
my_b_write_sint32_and_uint32(file, si, ui);
my_snprintf(typestr, typestr_length, "SHORTINT");
return 2;
}
case MYSQL_TYPE_INT24:
{
int32 si= sint3korr(ptr);
uint32 ui= uint3korr(ptr);
my_b_write_sint32_and_uint32(file, si, ui);
my_snprintf(typestr, typestr_length, "MEDIUMINT");
return 3;
}
case MYSQL_TYPE_LONGLONG:
{
char tmp[64];
longlong si= sint8korr(ptr);
longlong10_to_str(si, tmp, -10);
my_b_printf(file, "%s", tmp);
if (si < 0)
{
ulonglong ui= uint8korr(ptr);
longlong10_to_str((longlong) ui, tmp, 10);
my_b_printf(file, " (%s)", tmp);
}
my_snprintf(typestr, typestr_length, "LONGINT");
return 8;
}
case MYSQL_TYPE_NEWDECIMAL:
{
uint precision= meta >> 8;
uint decimals= meta & 0xFF;
uint bin_size= my_decimal_get_binary_size(precision, decimals);
my_decimal dec;
binary2my_decimal(E_DEC_FATAL_ERROR, (uchar*) ptr, &dec,
precision, decimals);
int i, end;
char buff[512], *pos;
pos= buff;
pos+= my_sprintf(buff, (buff, "%s", dec.sign() ? "-" : ""));
end= ROUND_UP(dec.frac) + ROUND_UP(dec.intg)-1;
for (i=0; i < end; i++)
pos+= my_sprintf(pos, (pos, "%09d.", dec.buf[i]));
pos+= my_sprintf(pos, (pos, "%09d", dec.buf[i]));
my_b_printf(file, "%s", buff);
my_snprintf(typestr, typestr_length, "DECIMAL(%d,%d)",
precision, decimals);
return bin_size;
}
case MYSQL_TYPE_FLOAT:
{
float fl;
float4get(fl, ptr);
char tmp[320];
sprintf(tmp, "%-20g", (double) fl);
my_b_printf(file, "%s", tmp); /* my_snprintf doesn't support %-20g */
my_snprintf(typestr, typestr_length, "FLOAT");
return 4;
}
case MYSQL_TYPE_DOUBLE:
{
double dbl;
float8get(dbl, ptr);
char tmp[320];
sprintf(tmp, "%-.20g", dbl); /* my_snprintf doesn't support %-20g */
my_b_printf(file, "%s", tmp);
strcpy(typestr, "DOUBLE");
return 8;
}
case MYSQL_TYPE_BIT:
{
/* Meta-data: bit_len, bytes_in_rec, 2 bytes */
uint nbits= ((meta >> 8) * 8) + (meta & 0xFF);
length= (nbits + 7) / 8;
my_b_write_bit(file, ptr, nbits);
my_snprintf(typestr, typestr_length, "BIT(%d)", nbits);
return length;
}
case MYSQL_TYPE_TIMESTAMP:
{
uint32 i32= uint4korr(ptr);
my_b_printf(file, "%d", i32);
my_snprintf(typestr, typestr_length, "TIMESTAMP");
return 4;
}
case MYSQL_TYPE_DATETIME:
{
uint d, t;
uint64 i64= uint8korr(ptr); /* YYYYMMDDhhmmss */
d= i64 / 1000000;
t= i64 % 1000000;
my_b_printf(file, "%04d-%02d-%02d %02d:%02d:%02d",
d / 10000, (d % 10000) / 100, d % 100,
t / 10000, (t % 10000) / 100, t % 100);
my_snprintf(typestr, typestr_length, "DATETIME");
return 8;
}
case MYSQL_TYPE_TIME:
{
uint32 i32= uint3korr(ptr);
my_b_printf(file, "'%02d:%02d:%02d'",
i32 / 10000, (i32 % 10000) / 100, i32 % 100);
my_snprintf(typestr, typestr_length, "TIME");
return 3;
}
case MYSQL_TYPE_DATE:
{
uint i32= uint3korr(ptr);
my_b_printf(file , "'%04d:%02d:%02d'",
(i32 / (16L * 32L)), (i32 / 32L % 16L), (i32 % 32L));
my_snprintf(typestr, typestr_length, "DATE");
return 3;
}
case MYSQL_TYPE_YEAR:
{
uint32 i32= *ptr;
my_b_printf(file, "%04d", i32+ 1900);
my_snprintf(typestr, typestr_length, "YEAR");
return 1;
}
case MYSQL_TYPE_ENUM:
switch (length) {
case 1:
my_b_printf(file, "%d", (int) *ptr);
my_snprintf(typestr, typestr_length, "ENUM(1 byte)");
return 1;
case 2:
{
int32 i32= uint2korr(ptr);
my_b_printf(file, "%d", i32);
my_snprintf(typestr, typestr_length, "ENUM(2 bytes)");
return 2;
}
default:
my_b_printf(file, "!! Unknown ENUM packlen=%d", length);
return 0;
}
break;
case MYSQL_TYPE_SET:
my_b_write_bit(file, ptr , length * 8);
my_snprintf(typestr, typestr_length, "SET(%d bytes)", length);
return length;
case MYSQL_TYPE_BLOB:
switch (meta) {
case 1:
length= *ptr;
my_b_write_quoted(file, ptr + 1, length);
my_snprintf(typestr, typestr_length, "TINYBLOB/TINYTEXT");
return length + 1;
case 2:
length= uint2korr(ptr);
my_b_write_quoted(file, ptr + 2, length);
my_snprintf(typestr, typestr_length, "BLOB/TEXT");
return length + 2;
case 3:
length= uint3korr(ptr);
my_b_write_quoted(file, ptr + 3, length);
my_snprintf(typestr, typestr_length, "MEDIUMBLOB/MEDIUMTEXT");
return length + 3;
case 4:
length= uint4korr(ptr);
my_b_write_quoted(file, ptr + 4, length);
my_snprintf(typestr, typestr_length, "LONGBLOB/LONGTEXT");
return length + 4;
default:
my_b_printf(file, "!! Unknown BLOB packlen=%d", length);
return 0;
}
case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_VAR_STRING:
length= meta;
my_snprintf(typestr, typestr_length, "VARSTRING(%d)", length);
return my_b_write_quoted_with_length(file, ptr, length);
case MYSQL_TYPE_STRING:
my_snprintf(typestr, typestr_length, "STRING(%d)", length);
return my_b_write_quoted_with_length(file, ptr, length);
default:
{
char tmp[5];
my_snprintf(tmp, sizeof(tmp), "%04x", meta);
my_b_printf(file,
"!! Don't know how to handle column type=%d meta=%d (%s)",
type, meta, tmp);
}
break;
}
*typestr= 0;
return 0;
}
/**
Print a packed row into IO cache
@param[in] file IO cache
@param[in] td Table definition
@param[in] print_event_into Print parameters
@param[in] cols_bitmap Column bitmaps.
@param[in] value Pointer to packed row
@param[in] prefix Row's SQL clause ("SET", "WHERE", etc)
@retval - number of bytes scanned.
*/
size_t
Rows_log_event::print_verbose_one_row(IO_CACHE *file, table_def *td,
PRINT_EVENT_INFO *print_event_info,
MY_BITMAP *cols_bitmap,
const uchar *value, const uchar *prefix)
{
const uchar *value0= value;
const uchar *null_bits= value;
char typestr[64]= "";
value+= (m_width + 7) / 8;
my_b_printf(file, "%s", prefix);
for (size_t i= 0; i < td->size(); i ++)
{
int is_null= (null_bits[i / 8] >> (i % 8)) & 0x01;
if (bitmap_is_set(cols_bitmap, i) == 0)
continue;
if (is_null)
{
my_b_printf(file, "### @%d=NULL", i + 1);
}
else
{
my_b_printf(file, "### @%d=", i + 1);
size_t size= log_event_print_value(file, value,
td->type(i), td->field_metadata(i),
typestr, sizeof(typestr));
if (!size)
return 0;
value+= size;
}
if (print_event_info->verbose > 1)
{
my_b_printf(file, " /* ");
if (typestr[0])
my_b_printf(file, "%s ", typestr);
else
my_b_printf(file, "type=%d ", td->type(i));
my_b_printf(file, "meta=%d nullable=%d is_null=%d ",
td->field_metadata(i),
td->maybe_null(i), is_null);
my_b_printf(file, "*/");
}
my_b_printf(file, "\n");
}
return value - value0;
}
/**
Print a row event into IO cache in human readable form (in SQL format)
@param[in] file IO cache
@param[in] print_event_into Print parameters
*/
void Rows_log_event::print_verbose(IO_CACHE *file,
PRINT_EVENT_INFO *print_event_info)
{
Table_map_log_event *map;
table_def *td;
const char *sql_command, *sql_clause1, *sql_clause2;
Log_event_type type_code= get_type_code();
switch (type_code) {
case WRITE_ROWS_EVENT:
sql_command= "INSERT INTO";
sql_clause1= "### SET\n";
sql_clause2= NULL;
break;
case DELETE_ROWS_EVENT:
sql_command= "DELETE FROM";
sql_clause1= "### WHERE\n";
sql_clause2= NULL;
break;
case UPDATE_ROWS_EVENT:
sql_command= "UPDATE";
sql_clause1= "### WHERE\n";
sql_clause2= "### SET\n";
break;
default:
sql_command= sql_clause1= sql_clause2= NULL;
DBUG_ASSERT(0); /* Not possible */
}
if (!(map= print_event_info->m_table_map.get_table(m_table_id)) ||
!(td= map->create_table_def()))
{
my_b_printf(file, "### Row event for unknown table #%d", m_table_id);
return;
}
for (const uchar *value= m_rows_buf; value < m_rows_end; )
{
size_t length;
my_b_printf(file, "### %s %s.%s\n",
sql_command,
map->get_db_name(), map->get_table_name());
/* Print the first image */
if (!(length= print_verbose_one_row(file, td, print_event_info,
&m_cols, value,
(const uchar*) sql_clause1)))
goto end;
value+= length;
/* Print the second image (for UPDATE only) */
if (sql_clause2)
{
if (!(length= print_verbose_one_row(file, td, print_event_info,
&m_cols_ai, value,
(const uchar*) sql_clause2)))
goto end;
value+= length;
}
}
end:
delete td;
}
#ifdef MYSQL_CLIENT
void free_table_map_log_event(Table_map_log_event *event)
{
delete event;
}
#endif
void Log_event::print_base64(IO_CACHE* file, void Log_event::print_base64(IO_CACHE* file,
PRINT_EVENT_INFO* print_event_info, PRINT_EVENT_INFO* print_event_info,
bool more) bool more)
...@@ -1374,14 +1910,51 @@ void Log_event::print_base64(IO_CACHE* file, ...@@ -1374,14 +1910,51 @@ void Log_event::print_base64(IO_CACHE* file,
DBUG_ASSERT(0); DBUG_ASSERT(0);
} }
if (my_b_tell(file) == 0) if (print_event_info->base64_output_mode != BASE64_OUTPUT_DECODE_ROWS)
my_b_printf(file, "\nBINLOG '\n"); {
if (my_b_tell(file) == 0)
my_b_printf(file, "%s\n", tmp_str); my_b_printf(file, "\nBINLOG '\n");
if (!more) my_b_printf(file, "%s\n", tmp_str);
my_b_printf(file, "'%s\n", print_event_info->delimiter);
if (!more)
my_b_printf(file, "'%s\n", print_event_info->delimiter);
}
if (print_event_info->verbose)
{
Rows_log_event *ev= NULL;
if (ptr[4] == TABLE_MAP_EVENT)
{
Table_map_log_event *map;
map= new Table_map_log_event((const char*) ptr, size,
glob_description_event);
print_event_info->m_table_map.set_table(map->get_table_id(), map);
}
else if (ptr[4] == WRITE_ROWS_EVENT)
{
ev= new Write_rows_log_event((const char*) ptr, size,
glob_description_event);
}
else if (ptr[4] == DELETE_ROWS_EVENT)
{
ev= new Delete_rows_log_event((const char*) ptr, size,
glob_description_event);
}
else if (ptr[4] == UPDATE_ROWS_EVENT)
{
ev= new Update_rows_log_event((const char*) ptr, size,
glob_description_event);
}
if (ev)
{
ev->print_verbose(file, print_event_info);
delete ev;
}
}
my_free(tmp_str, MYF(0)); my_free(tmp_str, MYF(0));
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
...@@ -2679,7 +3252,8 @@ void Start_log_event_v3::print(FILE* file, PRINT_EVENT_INFO* print_event_info) ...@@ -2679,7 +3252,8 @@ void Start_log_event_v3::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
print_event_info->base64_output_mode != BASE64_OUTPUT_NEVER && print_event_info->base64_output_mode != BASE64_OUTPUT_NEVER &&
!print_event_info->short_form) !print_event_info->short_form)
{ {
my_b_printf(&cache, "BINLOG '\n"); if (print_event_info->base64_output_mode != BASE64_OUTPUT_DECODE_ROWS)
my_b_printf(&cache, "BINLOG '\n");
print_base64(&cache, print_event_info, FALSE); print_base64(&cache, print_event_info, FALSE);
print_event_info->printed_fd_event= TRUE; print_event_info->printed_fd_event= TRUE;
} }
......
...@@ -34,6 +34,14 @@ ...@@ -34,6 +34,14 @@
#include <my_bitmap.h> #include <my_bitmap.h>
#include "rpl_constants.h" #include "rpl_constants.h"
#ifdef MYSQL_CLIENT
#include "rpl_utility.h"
#include "hash.h"
#include "rpl_tblmap.h"
#include "rpl_tblmap.cc"
#endif
#ifndef MYSQL_CLIENT #ifndef MYSQL_CLIENT
#include "rpl_record.h" #include "rpl_record.h"
#include "rpl_reporting.h" #include "rpl_reporting.h"
...@@ -572,6 +580,7 @@ enum enum_base64_output_mode { ...@@ -572,6 +580,7 @@ enum enum_base64_output_mode {
BASE64_OUTPUT_AUTO= 1, BASE64_OUTPUT_AUTO= 1,
BASE64_OUTPUT_ALWAYS= 2, BASE64_OUTPUT_ALWAYS= 2,
BASE64_OUTPUT_UNSPEC= 3, BASE64_OUTPUT_UNSPEC= 3,
BASE64_OUTPUT_DECODE_ROWS= 4,
/* insert new output modes here */ /* insert new output modes here */
BASE64_OUTPUT_MODE_COUNT BASE64_OUTPUT_MODE_COUNT
}; };
...@@ -634,6 +643,11 @@ typedef struct st_print_event_info ...@@ -634,6 +643,11 @@ typedef struct st_print_event_info
uint8 common_header_len; uint8 common_header_len;
char delimiter[16]; char delimiter[16];
#ifdef MYSQL_CLIENT
uint verbose;
table_mapping m_table_map;
#endif
/* /*
These two caches are used by the row-based replication events to These two caches are used by the row-based replication events to
collect the header information and the main body of the events collect the header information and the main body of the events
...@@ -3235,6 +3249,17 @@ class Table_map_log_event : public Log_event ...@@ -3235,6 +3249,17 @@ class Table_map_log_event : public Log_event
~Table_map_log_event(); ~Table_map_log_event();
#ifdef MYSQL_CLIENT
table_def *create_table_def()
{
return new table_def(m_coltype, m_colcnt, m_field_metadata,
m_field_metadata_size, m_null_bits);
}
ulong get_table_id() const { return m_table_id; }
const char *get_table_name() const { return m_tblnam; }
const char *get_db_name() const { return m_dbnam; }
#endif
virtual Log_event_type get_type_code() { return TABLE_MAP_EVENT; } virtual Log_event_type get_type_code() { return TABLE_MAP_EVENT; }
virtual bool is_valid() const { return m_memory != NULL; /* we check malloc */ } virtual bool is_valid() const { return m_memory != NULL; /* we check malloc */ }
...@@ -3365,6 +3390,12 @@ class Rows_log_event : public Log_event ...@@ -3365,6 +3390,12 @@ class Rows_log_event : public Log_event
#ifdef MYSQL_CLIENT #ifdef MYSQL_CLIENT
/* not for direct call, each derived has its own ::print() */ /* not for direct call, each derived has its own ::print() */
virtual void print(FILE *file, PRINT_EVENT_INFO *print_event_info)= 0; virtual void print(FILE *file, PRINT_EVENT_INFO *print_event_info)= 0;
void print_verbose(IO_CACHE *file,
PRINT_EVENT_INFO *print_event_info);
size_t print_verbose_one_row(IO_CACHE *file, table_def *td,
PRINT_EVENT_INFO *print_event_info,
MY_BITMAP *cols_bitmap,
const uchar *ptr, const uchar *prefix);
#endif #endif
#ifndef MYSQL_CLIENT #ifndef MYSQL_CLIENT
......
...@@ -19,7 +19,11 @@ ...@@ -19,7 +19,11 @@
#include "rpl_tblmap.h" #include "rpl_tblmap.h"
#ifdef MYSQL_CLIENT
#define MAYBE_TABLE_NAME(T) ("")
#else
#define MAYBE_TABLE_NAME(T) ((T) ? (T)->s->table_name.str : "<>") #define MAYBE_TABLE_NAME(T) ((T) ? (T)->s->table_name.str : "<>")
#endif
#define TABLE_ID_HASH_SIZE 32 #define TABLE_ID_HASH_SIZE 32
#define TABLE_ID_CHUNK 256 #define TABLE_ID_CHUNK 256
...@@ -42,11 +46,14 @@ table_mapping::table_mapping() ...@@ -42,11 +46,14 @@ table_mapping::table_mapping()
table_mapping::~table_mapping() table_mapping::~table_mapping()
{ {
#ifdef MYSQL_CLIENT
clear_tables();
#endif
hash_free(&m_table_ids); hash_free(&m_table_ids);
free_root(&m_mem_root, MYF(0)); free_root(&m_mem_root, MYF(0));
} }
st_table* table_mapping::get_table(ulong table_id) TABLE* table_mapping::get_table(ulong table_id)
{ {
DBUG_ENTER("table_mapping::get_table(ulong)"); DBUG_ENTER("table_mapping::get_table(ulong)");
DBUG_PRINT("enter", ("table_id: %lu", table_id)); DBUG_PRINT("enter", ("table_id: %lu", table_id));
...@@ -104,8 +111,12 @@ int table_mapping::set_table(ulong table_id, TABLE* table) ...@@ -104,8 +111,12 @@ int table_mapping::set_table(ulong table_id, TABLE* table)
m_free= m_free->next; m_free= m_free->next;
} }
else else
{
#ifdef MYSQL_CLIENT
free_table_map_log_event(e->table);
#endif
hash_delete(&m_table_ids,(uchar *)e); hash_delete(&m_table_ids,(uchar *)e);
}
e->table_id= table_id; e->table_id= table_id;
e->table= table; e->table= table;
my_hash_insert(&m_table_ids,(uchar *)e); my_hash_insert(&m_table_ids,(uchar *)e);
...@@ -140,6 +151,9 @@ void table_mapping::clear_tables() ...@@ -140,6 +151,9 @@ void table_mapping::clear_tables()
for (uint i= 0; i < m_table_ids.records; i++) for (uint i= 0; i < m_table_ids.records; i++)
{ {
entry *e= (entry *)hash_element(&m_table_ids, i); entry *e= (entry *)hash_element(&m_table_ids, i);
#ifdef MYSQL_CLIENT
free_table_map_log_event(e->table);
#endif
e->next= m_free; e->next= m_free;
m_free= e; m_free= e;
} }
......
...@@ -17,8 +17,15 @@ ...@@ -17,8 +17,15 @@
#define TABLE_MAPPING_H #define TABLE_MAPPING_H
/* Forward declarations */ /* Forward declarations */
#ifndef MYSQL_CLIENT
struct st_table; struct st_table;
typedef st_table TABLE; typedef st_table TABLE;
#else
class Table_map_log_event;
typedef Table_map_log_event TABLE;
void free_table_map_log_event(TABLE *table);
#endif
/* /*
CLASS table_mapping CLASS table_mapping
......
...@@ -236,7 +236,9 @@ class table_def ...@@ -236,7 +236,9 @@ class table_def
@retval 1 if the table definition is not compatible with @c table @retval 1 if the table definition is not compatible with @c table
@retval 0 if the table definition is compatible with @c table @retval 0 if the table definition is compatible with @c table
*/ */
#ifndef MYSQL_CLIENT
int compatible_with(Relay_log_info const *rli, TABLE *table) const; int compatible_with(Relay_log_info const *rli, TABLE *table) const;
#endif
private: private:
ulong m_size; // Number of elements in the types array ulong m_size; // Number of elements in the types array
...@@ -247,6 +249,8 @@ class table_def ...@@ -247,6 +249,8 @@ class table_def
uchar *m_memory; uchar *m_memory;
}; };
#ifndef MYSQL_CLIENT
/** /**
Extend the normal table list with a few new fields needed by the Extend the normal table list with a few new fields needed by the
slave thread, but nowhere else. slave thread, but nowhere else.
...@@ -288,6 +292,7 @@ namespace { ...@@ -288,6 +292,7 @@ namespace {
}; };
} }
#endif
#define DBUG_PRINT_BITSET(N,FRM,BS) \ #define DBUG_PRINT_BITSET(N,FRM,BS) \
do { \ do { \
......
...@@ -3693,9 +3693,10 @@ void abort_locked_tables(THD *thd,const char *db, const char *table_name) ...@@ -3693,9 +3693,10 @@ void abort_locked_tables(THD *thd,const char *db, const char *table_name)
share->table_map_id is not ~0UL. share->table_map_id is not ~0UL.
*/ */
static ulong last_table_id= ~0UL;
void assign_new_table_id(TABLE_SHARE *share) void assign_new_table_id(TABLE_SHARE *share)
{ {
static ulong last_table_id= ~0UL;
DBUG_ENTER("assign_new_table_id"); DBUG_ENTER("assign_new_table_id");
...@@ -3719,7 +3720,6 @@ void assign_new_table_id(TABLE_SHARE *share) ...@@ -3719,7 +3720,6 @@ void assign_new_table_id(TABLE_SHARE *share)
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
/** /**
Compare metadata versions of an element obtained from the table Compare metadata versions of an element obtained from the table
definition cache and its corresponding node in the parse tree. definition cache and its corresponding node in the parse tree.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment