diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns.result index 887563e53533..a74394cf778a 100644 --- a/mysql-test/suite/innodb/r/xtradb_compressed_columns.result +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns.result @@ -319,3 +319,12 @@ CREATE TABLE t1 (c1 VARBINARY(5) COLUMN_FORMAT COMPRESSED) ENGINE=InnoDB; ALTER TABLE t1 ADD c2 CHAR(10) FIRST; INSERT INTO t1 VALUES(0,11111); DROP TABLE t1; +# +# Bug PS-7657 crash seen with update query on a partition table having compressed column +# +CREATE TABLE t1 (ip_col INT, i0 INT, v1 VARCHAR(29), v2 VARCHAR(23), lt3 LONGTEXT COLUMN_FORMAT COMPRESSED, b4 BLOB , v5 VARCHAR(10), g6 CHAR(9) AS (CONCAT(SUBSTRING(ip_col,1,1),SUBSTRING(i0,1,3),SUBSTRING(lt3,1,3),SUBSTRING(v1,1,2))), INDEX tt_47_pi1(i0, v2 ASC, ip_col, v5 DESC, g6, v1) ) ENGINE=INNODB PARTITION BY KEY (ip_col) PARTITIONS 13; +INSERT INTO t1 ( ip_col ,i0 ,v1 ,v2 ,lt3 ,b4 ,v5 ,g6 ) VALUES( 23486, 49601, 'OQ7LVj1N0RhGn2EUxVHO9qD', 'oCwtfvdUs3', 'S6GaiUP5cMt7uS38D6B31KSJW0mkt7EQBu7sbK7G7LgYcQ3p6EE9HbTSGI9bMU4vQ8bJABIUbsjp0hIDtwgZOpSkc9xHvYPCx99DK6IDkEqioZu4808QqFCrtcGJWFceOMVyfG8f2NOQT58WAYPKBq5jkuHOtHBSIXyA1DFvWhifC0u0xXCULBrd9EF0Te0l5NcaQZTvJeKjoDjpRA4zfR7Z0t04QOhwVcad2ZbBWOfFiKiEz5DzOKzImrRLmcOtmgbPpTdBU8lND8r2FKSn0VwT7aYyyJHHJwvTlo8qepdbi4zdN1GPUAKeRtPLECGUkqQwLHacNWB2ZNlSDg788CXMsUgYpzB7TNqCB897PmOOPse0N', 'YAEFg2tZrqDiCF6CDpnZsIAf1VVnb0OSNToflk0970II8D04zLbXuL9w0l5eWvzXzaOlgqQwnWQHP547QM2cQuP2DTMkoEAWhghCXAgTTDrKcCspo0MrJ3L3BXmqvkdOXzVnro0I385cegV1U1sRuqp8lbtjoEtRmhZP3AzYIwJHR42Hny4KCmoPr6opoUtGoCrJxKCOyRKaWkEEinXAdEEkUpF9WhpasEc50fKENiHhXzidUm0vBLLurLsAcIkkf74YSIvQl30sM2a6eHK8x1dZUHvm50KvKBem21QkwKHlseYAqnaXoyckMN4PnAyRarRoFdVEA88Gwahc2wqRwC7Y2DFOijSvuwbbCVJhpO6G5DDLJotJpwdgyOotKyxWJmhWJFrRTOerNuNhK6kbaEmZAYXpHvi64JM0CK3slKNZ8CH1WgpRKcU3GSYRNulxECpei76HhY3jcBCG3diORUhjuWwLAc40jSmxVYlLCCaKOJJRukalTZ35XhSPRTqS8E8xuTzf5JUQDQLAJQW95GkOns2xbhctxuNv0nU1f6CvnPtMvbcY9DDaRW62uqzkMZP1rfsKc8J7cT6C4M0WxjHc1RkFmzAEexW1QYj2agnzb4UjEvUwWUWU6Z6gnqHr3Npo2EeEZVHsphaTMzM6pk09g9rBrV0ss8FJ1BZWnLopnsXDulc9a51cn51QNkkExx61PxEla6o2J9wzObCvAXfqAbcV8ovqt1SHXixvIUxN8dkTN6Em2idc5s1QJooc9TXAnPQlpGh3Vnc1EYLp05Hnl6phiIZuYtbY9qSsAd5bAojNhX70v7RjPDn5KAk3qgypDw9qXyJjKD3ICsr1IcOK3xiXlFe1dzs7d1ObjSBtGn0qUSyRBJKG86ZoNWRF4RC9juaQuHO14ha6dQFZ2c56LER60ptaYBhOMKBpfICkoHWZJWEmFxua36s2SYWdUVd3Z8JbtGuhv77h4TqP', 'x966Fv9V', default ); +UPDATE t1 SET ip_col=2680 WHERE ip_col = 23486; +UPDATE t1 SET ip_col=23486 WHERE ip_col = 2680; +include/assert.inc ['value inside lt3 compressed column should be valid'] +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns.test index 2ccd8317e4dc..0f10374e54bf 100644 --- a/mysql-test/suite/innodb/t/xtradb_compressed_columns.test +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns.test @@ -220,3 +220,20 @@ CREATE TABLE t1 (c1 VARBINARY(5) COLUMN_FORMAT COMPRESSED) ENGINE=InnoDB; ALTER TABLE t1 ADD c2 CHAR(10) FIRST; INSERT INTO t1 VALUES(0,11111); DROP TABLE t1; + +--echo # +--echo # Bug PS-7657 crash seen with update query on a partition table having compressed column +--echo # +CREATE TABLE t1 (ip_col INT, i0 INT, v1 VARCHAR(29), v2 VARCHAR(23), lt3 LONGTEXT COLUMN_FORMAT COMPRESSED, b4 BLOB , v5 VARCHAR(10), g6 CHAR(9) AS (CONCAT(SUBSTRING(ip_col,1,1),SUBSTRING(i0,1,3),SUBSTRING(lt3,1,3),SUBSTRING(v1,1,2))), INDEX tt_47_pi1(i0, v2 ASC, ip_col, v5 DESC, g6, v1) ) ENGINE=INNODB PARTITION BY KEY (ip_col) PARTITIONS 13; + +INSERT INTO t1 ( ip_col ,i0 ,v1 ,v2 ,lt3 ,b4 ,v5 ,g6 ) VALUES( 23486, 49601, 'OQ7LVj1N0RhGn2EUxVHO9qD', 'oCwtfvdUs3', 'S6GaiUP5cMt7uS38D6B31KSJW0mkt7EQBu7sbK7G7LgYcQ3p6EE9HbTSGI9bMU4vQ8bJABIUbsjp0hIDtwgZOpSkc9xHvYPCx99DK6IDkEqioZu4808QqFCrtcGJWFceOMVyfG8f2NOQT58WAYPKBq5jkuHOtHBSIXyA1DFvWhifC0u0xXCULBrd9EF0Te0l5NcaQZTvJeKjoDjpRA4zfR7Z0t04QOhwVcad2ZbBWOfFiKiEz5DzOKzImrRLmcOtmgbPpTdBU8lND8r2FKSn0VwT7aYyyJHHJwvTlo8qepdbi4zdN1GPUAKeRtPLECGUkqQwLHacNWB2ZNlSDg788CXMsUgYpzB7TNqCB897PmOOPse0N', 'YAEFg2tZrqDiCF6CDpnZsIAf1VVnb0OSNToflk0970II8D04zLbXuL9w0l5eWvzXzaOlgqQwnWQHP547QM2cQuP2DTMkoEAWhghCXAgTTDrKcCspo0MrJ3L3BXmqvkdOXzVnro0I385cegV1U1sRuqp8lbtjoEtRmhZP3AzYIwJHR42Hny4KCmoPr6opoUtGoCrJxKCOyRKaWkEEinXAdEEkUpF9WhpasEc50fKENiHhXzidUm0vBLLurLsAcIkkf74YSIvQl30sM2a6eHK8x1dZUHvm50KvKBem21QkwKHlseYAqnaXoyckMN4PnAyRarRoFdVEA88Gwahc2wqRwC7Y2DFOijSvuwbbCVJhpO6G5DDLJotJpwdgyOotKyxWJmhWJFrRTOerNuNhK6kbaEmZAYXpHvi64JM0CK3slKNZ8CH1WgpRKcU3GSYRNulxECpei76HhY3jcBCG3diORUhjuWwLAc40jSmxVYlLCCaKOJJRukalTZ35XhSPRTqS8E8xuTzf5JUQDQLAJQW95GkOns2xbhctxuNv0nU1f6CvnPtMvbcY9DDaRW62uqzkMZP1rfsKc8J7cT6C4M0WxjHc1RkFmzAEexW1QYj2agnzb4UjEvUwWUWU6Z6gnqHr3Npo2EeEZVHsphaTMzM6pk09g9rBrV0ss8FJ1BZWnLopnsXDulc9a51cn51QNkkExx61PxEla6o2J9wzObCvAXfqAbcV8ovqt1SHXixvIUxN8dkTN6Em2idc5s1QJooc9TXAnPQlpGh3Vnc1EYLp05Hnl6phiIZuYtbY9qSsAd5bAojNhX70v7RjPDn5KAk3qgypDw9qXyJjKD3ICsr1IcOK3xiXlFe1dzs7d1ObjSBtGn0qUSyRBJKG86ZoNWRF4RC9juaQuHO14ha6dQFZ2c56LER60ptaYBhOMKBpfICkoHWZJWEmFxua36s2SYWdUVd3Z8JbtGuhv77h4TqP', 'x966Fv9V', default ); + +UPDATE t1 SET ip_col=2680 WHERE ip_col = 23486; +UPDATE t1 SET ip_col=23486 WHERE ip_col = 2680; + +--let $query_out=`SELECT COUNT(*) FROM t1 WHERE lt3='S6GaiUP5cMt7uS38D6B31KSJW0mkt7EQBu7sbK7G7LgYcQ3p6EE9HbTSGI9bMU4vQ8bJABIUbsjp0hIDtwgZOpSkc9xHvYPCx99DK6IDkEqioZu4808QqFCrtcGJWFceOMVyfG8f2NOQT58WAYPKBq5jkuHOtHBSIXyA1DFvWhifC0u0xXCULBrd9EF0Te0l5NcaQZTvJeKjoDjpRA4zfR7Z0t04QOhwVcad2ZbBWOfFiKiEz5DzOKzImrRLmcOtmgbPpTdBU8lND8r2FKSn0VwT7aYyyJHHJwvTlo8qepdbi4zdN1GPUAKeRtPLECGUkqQwLHacNWB2ZNlSDg788CXMsUgYpzB7TNqCB897PmOOPse0N'` +--let $assert_text= 'value inside lt3 compressed column should be valid' +--let $assert_cond= "$query_out" = 1 +--source include/assert.inc + +DROP TABLE t1; diff --git a/mysql-test/suite/rpl/r/rpl_update_partitioned_table_with_compressed_column.result b/mysql-test/suite/rpl/r/rpl_update_partitioned_table_with_compressed_column.result new file mode 100644 index 000000000000..6d834fb81a18 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_update_partitioned_table_with_compressed_column.result @@ -0,0 +1,13 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1 (f1 INT, f2 BLOB COLUMN_FORMAT COMPRESSED) ENGINE=INNODB PARTITION BY HASH (f1) PARTITIONS 2; +REPLACE INTO t1 (f1,f2)VALUES(0,'123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456'); +UPDATE t1 SET f1=1 WHERE f1 = 0; +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1,slave:t1] +[connection master] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_update_partitioned_table_with_compressed_column.test b/mysql-test/suite/rpl/t/rpl_update_partitioned_table_with_compressed_column.test new file mode 100644 index 000000000000..c2036f09bbf3 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_update_partitioned_table_with_compressed_column.test @@ -0,0 +1,22 @@ +# +# PS-7599 : Node inconsistency seen in PS during update on compressed column table +# +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +CREATE TABLE t1 (f1 INT, f2 BLOB COLUMN_FORMAT COMPRESSED) ENGINE=INNODB PARTITION BY HASH (f1) PARTITIONS 2; + +REPLACE INTO t1 (f1,f2)VALUES(0,'123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456'); + +UPDATE t1 SET f1=1 WHERE f1 = 0; + +--source include/sync_slave_sql_with_master.inc + +--let $diff_tables= master:t1,slave:t1 +--source include/diff_tables.inc + +--source include/rpl_connection_master.inc + +DROP TABLE t1; + +--source include/rpl_end.inc diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index bef77171d1d6..4c009adddd83 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -2299,9 +2299,6 @@ row_insert_for_mysql_using_ins_graph( return(DB_TABLE_CORRUPT); } - if (UNIV_LIKELY_NULL(prebuilt->compress_heap)) - mem_heap_empty(prebuilt->compress_heap); - trx->op_info = "inserting"; row_mysql_delay_if_needed(); diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index e5a10d5beafb..815d3e954ef5 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -3319,7 +3319,7 @@ row_sel_store_mysql_rec( } if (UNIV_LIKELY_NULL(prebuilt->compress_heap)) - mem_heap_empty(prebuilt->compress_heap); + row_mysql_prebuilt_free_compress_heap(prebuilt); if (clust_templ_for_sec) { /* Store all clustered index column of