RESET MASTER; SET GLOBAL binlog_row_metadata = MINIMAL; # # Temporal types can be printed correctly # CREATE TABLE t1(c_year YEAR, c_date DATE, c_time TIME, c_time_f TIME(3), c_datetime DATETIME, c_datetime_f DATETIME(3), c_timestamp TIMESTAMP, c_timestamp_f TIMESTAMP(3) DEFAULT "2017-1-1 10:10:10"); INSERT INTO t1(c_year) VALUES(2017); # Columns(YEAR, # DATE, # TIME, # TIME(3), # DATETIME, # DATETIME(3), # TIMESTAMP NOT NULL, # TIMESTAMP(3) NOT NULL) DROP TABLE t1; RESET MASTER; # # Geometry types can be printed correctly # CREATE TABLE t1 (c_geo GEOMETRY, c_point POINT, c_linestring LINESTRING, c_polygon POLYGON, c_multi_point MULTIPOINT, c_multi_linestring MULTILINESTRING, c_multi_polygon MULTIPOLYGON, c_geometrycollection GEOMETRYCOLLECTION, c_char CHAR(100)); INSERT INTO t1(c_point) VALUES(ST_PointFromText('POINT(10 10)')); # Columns(GEOMETRY, # POINT, # LINESTRING, # POLYGON, # MULTIPOINT, # MULTILINESTRING, # MULTIPOLYGON, # GEOMETRYCOLLECTION, # CHAR(100) CHARSET latin1 COLLATE latin1_swedish_ci) RESET MASTER; SET GLOBAL binlog_row_metadata = FULL; INSERT INTO t1(c_point) VALUES(ST_PointFromText('POINT(10 10)')); # Columns(`c_geo` GEOMETRY, # `c_point` POINT, # `c_linestring` LINESTRING, # `c_polygon` POLYGON, # `c_multi_point` MULTIPOINT, # `c_multi_linestring` MULTILINESTRING, # `c_multi_polygon` MULTIPOLYGON, # `c_geometrycollection` GEOMETRYCOLLECTION, # `c_char` CHAR(100) CHARSET latin1 COLLATE latin1_swedish_ci) DROP TABLE t1; RESET MASTER; # # Numeric types can be printed correctly # CREATE TABLE t1(c_bit BIT(10), c_bool BOOL, c_smallint SMALLINT, c_mediumint MEDIUMINT, c_int INT UNSIGNED, c_bigint BIGINT, c_float FLOAT UNSIGNED, c_double DOUBLE, c_decimal DECIMAL(10, 2)); SET GLOBAL binlog_row_metadata = MINIMAL; INSERT INTO t1(c_bool) VALUES(1); # UNSIGNED flag should be printed # Columns(BIT(10), # TINYINT, # SMALLINT, # MEDIUMINT, # INT UNSIGNED, # BIGINT, # FLOAT UNSIGNED, # DOUBLE, # DECIMAL(10,2)) RESET MASTER; SET GLOBAL binlog_row_metadata = FULL; INSERT INTO t1(c_bool) VALUES(1); # Columns(`c_bit` BIT(10), # `c_bool` TINYINT, # `c_smallint` SMALLINT, # `c_mediumint` MEDIUMINT, # `c_int` INT UNSIGNED, # `c_bigint` BIGINT, # `c_float` FLOAT UNSIGNED, # `c_double` DOUBLE, # `c_decimal` DECIMAL(10,2)) DROP TABLE t1; RESET MASTER; # # Character types can be printed correctly # CREATE TABLE t1(c_char CHAR(10), c_varchar VARCHAR(500), c_tinytext TINYTEXT, c_text TEXT, c_mediumtext MEDIUMTEXT, c_longtext LONGTEXT CHARSET utf8); SET GLOBAL binlog_row_metadata = MINIMAL; INSERT INTO t1(c_char) VALUES("1"); # Columns(CHAR(10) CHARSET latin1 COLLATE latin1_swedish_ci, # VARCHAR(500) CHARSET latin1 COLLATE latin1_swedish_ci, # TINYTEXT CHARSET latin1 COLLATE latin1_swedish_ci, # TEXT CHARSET latin1 COLLATE latin1_swedish_ci, # MEDIUMTEXT CHARSET latin1 COLLATE latin1_swedish_ci, # LONGTEXT CHARSET utf8 COLLATE utf8_general_ci) RESET MASTER; SET GLOBAL binlog_row_metadata = FULL; INSERT INTO t1(c_char) VALUES("1"); # Columns(`c_char` CHAR(10) CHARSET latin1 COLLATE latin1_swedish_ci, # `c_varchar` VARCHAR(500) CHARSET latin1 COLLATE latin1_swedish_ci, # `c_tinytext` TINYTEXT CHARSET latin1 COLLATE latin1_swedish_ci, # `c_text` TEXT CHARSET latin1 COLLATE latin1_swedish_ci, # `c_mediumtext` MEDIUMTEXT CHARSET latin1 COLLATE latin1_swedish_ci, # `c_longtext` LONGTEXT CHARSET utf8 COLLATE utf8_general_ci) DROP TABLE t1; RESET MASTER; # # Column names with non-ascii characters and escape characters can be printed correctly # set names utf8; CREATE TABLE t1(`åäö表\a'``"` INT); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `åäö表\a'``"` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 INSERT INTO t1 VALUES(1); # Columns(`åäö表\\a\'`"` INT) DROP TABLE t1; RESET MASTER; # # Charsets can be printed correctly # CREATE TABLE t1(c_char_utf8 CHAR(10) CHARSET utf8, c_varchar_utf8 VARCHAR(10) CHARSET utf8, c_text_utf8 TEXT CHARSET utf8); INSERT INTO t1 VALUES("1", "2", "3"); # Columns(`c_char_utf8` CHAR(10) CHARSET utf8 COLLATE utf8_general_ci, # `c_varchar_utf8` VARCHAR(10) CHARSET utf8 COLLATE utf8_general_ci, # `c_text_utf8` TEXT CHARSET utf8 COLLATE utf8_general_ci) DROP TABLE t1; RESET MASTER; CREATE TABLE t1(c_utf8mb4_520 CHAR(10) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci, c_utf8mb4_0900 VARCHAR(10) CHARSET utf8mb4 COLLATE utf8mb4_polish_ci, c_utf8mb4_def TEXT CHARSET utf8mb4); INSERT INTO t1 VALUES("1", "2", "3"); # Columns(`c_utf8mb4_520` CHAR(10) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci, # `c_utf8mb4_0900` VARCHAR(10) CHARSET utf8mb4 COLLATE utf8mb4_polish_ci, # `c_utf8mb4_def` TEXT CHARSET utf8mb4 COLLATE utf8mb4_general_ci) DROP TABLE t1; RESET MASTER; # # Blob and binary columns can be printed correctly # CREATE TABLE t1(c_binary BINARY(10), c_varbinary VARBINARY(10), c_tinyblob TINYBLOB, c_blob BLOB, c_mediumblob MEDIUMBLOB, c_longblob LONGBLOB); INSERT INTO t1 VALUES("1", "2", "3", "4", "5", "6"); # Columns(`c_binary` BINARY(10), # `c_varbinary` VARBINARY(10), # `c_tinyblob` TINYBLOB, # `c_blob` BLOB, # `c_mediumblob` MEDIUMBLOB, # `c_longblob` LONGBLOB) DROP TABLE t1; RESET MASTER; # # Verify that SET string values and character sets can be printed correctly # set names utf8; CREATE TABLE t1( c_set_1 SET("set1_v1_Ã¥", "set1_v2_ä", "set1_v3_ö"), c_set_2 SET("set2_v1_Ã¥", "set2_v2_ä", "set2_v3_ö") CHARACTER SET latin1, c_set_4 SET("set3_v1_Ã¥", "set3_v2_ä", "set3_v3_ö") CHARACTER SET swe7 COLLATE swe7_bin); SET GLOBAL binlog_row_metadata = MINIMAL; INSERT INTO t1 VALUES("set1_v1_Ã¥", "set2_v3_ö", "set3_v1_Ã¥"); # Columns(SET, # SET, # SET) RESET MASTER; SET GLOBAL binlog_row_metadata = FULL; INSERT INTO t1 VALUES("set1_v1_Ã¥", "set2_v3_ö", "set3_v1_Ã¥"); # Columns(`c_set_1` SET('set1_v1_å','set1_v2_ä','set1_v3_ö') CHARSET latin1 COLLATE latin1_swedish_ci, # `c_set_2` SET('set2_v1_å','set2_v2_ä','set2_v3_ö') CHARSET latin1 COLLATE latin1_swedish_ci, # `c_set_4` SET('set3_v1_}','set3_v2_{','set3_v3_|') CHARSET swe7 COLLATE swe7_bin) DROP TABLE t1; RESET MASTER; # # Verify that ENUM string values and character sets can be printed correctly # CREATE TABLE t1( c_enum_1 ENUM("enum1_v1_Ã¥", "enum1_v2_ä", "enum1_v3_ö"), c_enum_3 ENUM("enum2_v1_Ã¥", "enum2_v2_ä", "enum2_v3_ö") CHARACTER SET latin1, c_enum_4 ENUM("enum3_v1_Ã¥", "enum3_v2_ä", "enum3_v3_ö") CHARACTER SET swe7 COLLATE swe7_bin); SET GLOBAL binlog_row_metadata = MINIMAL; INSERT INTO t1 VALUES("enum1_v1_Ã¥", "enum2_v3_ö", "enum3_v1_Ã¥"); # Columns(ENUM, # ENUM, # ENUM) RESET MASTER; SET GLOBAL binlog_row_metadata = FULL; INSERT INTO t1 VALUES("enum1_v1_Ã¥", "enum2_v3_ö", "enum3_v1_Ã¥"); # Columns(`c_enum_1` ENUM('enum1_v1_å','enum1_v2_ä','enum1_v3_ö') CHARSET latin1 COLLATE latin1_swedish_ci, # `c_enum_3` ENUM('enum2_v1_å','enum2_v2_ä','enum2_v3_ö') CHARSET latin1 COLLATE latin1_swedish_ci, # `c_enum_4` ENUM('enum3_v1_}','enum3_v2_{','enum3_v3_|') CHARSET swe7 COLLATE swe7_bin) DROP TABLE t1; RESET MASTER; # # Verify that explicit NOT NULL can be printed correctly # CREATE TABLE t1(c_not_null1 INT NOT NULL, c_null1 INT, c_not_null2 INT NOT NULL, c_null2 INT); INSERT INTO t1 VALUES(1, 2, 3, 4); # Columns(`c_not_null1` INT NOT NULL, # `c_null1` INT, # `c_not_null2` INT NOT NULL, # `c_null2` INT) DROP TABLE t1; RESET MASTER; # # Verify that primary key can be printed correctly # CREATE TABLE t1(c_key1 INT, c_key3 INT, c_not_key INT, c_key2 INT, PRIMARY KEY(c_key1, c_key2, c_key3)); INSERT INTO t1 VALUES(1, 2, 3, 4); # Columns(`c_key1` INT NOT NULL, # `c_key3` INT NOT NULL, # `c_not_key` INT, # `c_key2` INT NOT NULL) # Primary Key DROP TABLE t1; RESET MASTER; CREATE TABLE t1(c_key1 CHAR(100), c_key3 CHAR(100), c_not_key INT, c_key2 CHAR(10), PRIMARY KEY(c_key1(5), c_key2, c_key3(10))); INSERT INTO t1 VALUES("1", "2", 3, "4"); # Columns(`c_key1` CHAR(100) NOT NULL CHARSET latin1 COLLATE latin1_swedish_ci, # `c_key3` CHAR(100) NOT NULL CHARSET latin1 COLLATE latin1_swedish_ci, # `c_not_key` INT, # `c_key2` CHAR(10) NOT NULL CHARSET latin1 COLLATE latin1_swedish_ci) # Primary Key RESET MASTER; SET GLOBAL binlog_row_metadata = MINIMAL; INSERT INTO t1 VALUES("2", "2", 3, "4"); # Columns(CHAR(100) NOT NULL CHARSET latin1 COLLATE latin1_swedish_ci, # CHAR(100) NOT NULL CHARSET latin1 COLLATE latin1_swedish_ci, # INT, # CHAR(10) NOT NULL CHARSET latin1 COLLATE latin1_swedish_ci) RESET MASTER; # # Coverage test: Print column index instead of column name if column name # is not binlogged. # SET GLOBAL binlog_row_metadata = FULL; SET SESSION debug_dbug = 'd, dont_log_column_name'; INSERT INTO t1 VALUES("3", "2", 3, "4"); # Columns(`c_key1` CHAR(100) NOT NULL CHARSET latin1 COLLATE latin1_swedish_ci, # `c_key3` CHAR(100) NOT NULL CHARSET latin1 COLLATE latin1_swedish_ci, # `c_not_key` INT, # `c_key2` CHAR(10) NOT NULL CHARSET latin1 COLLATE latin1_swedish_ci) # Primary Key DROP TABLE t1; RESET MASTER; # # Coverage test: Inject an invalid column type # CREATE TABLE t1(c1 int, c2 BLOB); SET SESSION debug_dbug = 'd,inject_invalid_column_type'; INSERT INTO t1 VALUES(1, "a"); # Columns(`c1` INT, # `c2` INVALID_TYPE(230)) RESET MASTER; # # Coverage test: Inject an invalid BLOB metadata # SET SESSION debug_dbug = 'd,inject_invalid_blob_size'; INSERT INTO t1 VALUES(2, "b"); # Columns(`c1` INT, # `c2` INVALID_BLOB(5)) # # Coverage test: Inject an invalid Geometry type # DROP TABLE t1; CREATE TABLE t1(c_geometry GEOMETRY, c_point POINT, c_multilinestring MULTILINESTRING); RESET MASTER; SET SESSION debug_dbug = 'd,inject_invalid_geometry_type'; INSERT INTO t1(c_point) VALUES(ST_PointFromText('POINT(10 10)')); # Columns(`c_geometry` INVALID_GEOMETRY_TYPE(100), # `c_point` INVALID_GEOMETRY_TYPE(100), # `c_multilinestring` INVALID_GEOMETRY_TYPE(100)) DROP TABLE t1; RESET MASTER; # # Comptibility Test: Verify mysqlbinlog can print OLD table_map_log_event # without any optional metadata # CREATE TABLE t1(c_int INT, c_tiny_int_unsigned TINYINT UNSIGNED, c_binary BINARY(10), c_text TEXT, c_point POINT); SET session debug_dbug='d,simulate_no_optional_metadata'; INSERT INTO t1(c_int) VALUES(1); # Columns(INT, # TINYINT, # BINARY(10), # BLOB, # GEOMETRY) DROP TABLE t1; RESET MASTER; # # Simulate error on initializing charset and primary key metadata # CREATE TABLE t1(c1 char(10) PRIMARY KEY); SET session debug_dbug='d,simulate_init_charset_field_error'; INSERT INTO t1 VALUES("a"); SET GLOBAL binlog_row_metadata = FULL; SET session debug_dbug='d,simulate_init_primary_key_field_error'; INSERT INTO t1 VALUES("b"); # Columns(BINARY(10) NOT NULL) # Columns(BINARY(10) NOT NULL) SET SESSION debug_dbug = ''; SET GLOBAL binlog_row_metadata = NO_LOG; DROP TABLE t1; RESET MASTER;