From 4e5cf34819f80b5184cce371d2ec95f83e597ef8 Mon Sep 17 00:00:00 2001 From: Alice Sherepa Date: Wed, 27 Oct 2021 17:50:12 +0200 Subject: [PATCH 01/26] rpl_get_master_version_and_clock and rpl_row_big_table_id tests are slow, so let's not run them under valgrind --- mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test | 1 + mysql-test/suite/rpl/t/rpl_row_big_table_id.test | 1 + 2 files changed, 2 insertions(+) diff --git a/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test b/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test index a61c06a92e5..0e37ac631ec 100644 --- a/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test +++ b/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test @@ -8,6 +8,7 @@ # Finish the following tests by calling its common test script: # extra/rpl_tests/rpl_get_master_version_and_clock.test. +source include/not_valgrind.inc; source include/have_debug.inc; source include/have_debug_sync.inc; source include/master-slave.inc; diff --git a/mysql-test/suite/rpl/t/rpl_row_big_table_id.test b/mysql-test/suite/rpl/t/rpl_row_big_table_id.test index abf22cc876e..d898e894bc6 100644 --- a/mysql-test/suite/rpl/t/rpl_row_big_table_id.test +++ b/mysql-test/suite/rpl/t/rpl_row_big_table_id.test @@ -7,6 +7,7 @@ # Verify row-based events applying when table map id value is about and greater # than 1 << 32. ################################################################## +--source include/not_valgrind.inc --source include/word_size.inc --source include/have_debug.inc --source include/have_binlog_format_row.inc From fcca0c67b65ba9b869f545b94a4e287a5ec1152d Mon Sep 17 00:00:00 2001 From: Sergei Krivonos Date: Thu, 28 Oct 2021 18:35:33 +0300 Subject: [PATCH 02/26] MDEV-26929: fixed opt_trace test for --mysqld=--optimizer_trace=enabled=on --- mysql-test/main/opt_trace.result | 6 +++--- mysql-test/main/opt_trace.test | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mysql-test/main/opt_trace.result b/mysql-test/main/opt_trace.result index c16df0da0b2..f2b69fb1eaa 100644 --- a/mysql-test/main/opt_trace.result +++ b/mysql-test/main/opt_trace.result @@ -4,14 +4,14 @@ OPTIMIZER_TRACE QUERY OPTIMIZER_TRACE TRACE OPTIMIZER_TRACE MISSING_BYTES_BEYOND_MAX_MEM_SIZE OPTIMIZER_TRACE INSUFFICIENT_PRIVILEGES -show variables like 'optimizer_trace'; -Variable_name Value -optimizer_trace enabled=off set optimizer_trace="enabled=on"; show variables like 'optimizer_trace'; Variable_name Value optimizer_trace enabled=on set optimizer_trace="enabled=off"; +show variables like 'optimizer_trace'; +Variable_name Value +optimizer_trace enabled=off create table t1 (a int, b int); insert into t1 values (1,2),(2,3); create table t2 (b int); diff --git a/mysql-test/main/opt_trace.test b/mysql-test/main/opt_trace.test index 1dfb7e5ce8a..2084940fbc5 100644 --- a/mysql-test/main/opt_trace.test +++ b/mysql-test/main/opt_trace.test @@ -1,10 +1,10 @@ --source include/not_embedded.inc --source include/have_sequence.inc SELECT table_name, column_name FROM information_schema.columns where table_name="OPTIMIZER_TRACE"; -show variables like 'optimizer_trace'; set optimizer_trace="enabled=on"; show variables like 'optimizer_trace'; set optimizer_trace="enabled=off"; +show variables like 'optimizer_trace'; create table t1 (a int, b int); insert into t1 values (1,2),(2,3); From 42ae765960869a7ce381341d7b98c1e8aa157b29 Mon Sep 17 00:00:00 2001 From: Andrei Elkin Date: Mon, 25 Oct 2021 18:25:03 +0300 Subject: [PATCH 03/26] MDEV-26833 Missed statement rollback in case transaction drops or create temporary table When transaction creates or drops temporary tables and afterward its statement faces an error even the transactional table statement's cached ROW format events get involved into binlog and are visible after the transaction's commit. Fixed with proper analysis of whether the errored-out statement needs to be rolled back in binlog. For instance a fact of already cached CREATE or DROP for temporary tables by previous statements alone does not cause to retain the being errored-out statement events in the cache. Conversely, if the statement creates or drops a temporary table itself it can't be rolled back - this rule remains. --- .../rpl_tests/rpl_drop_create_temp_table.inc | 2 +- .../rpl_tests/rpl_drop_create_temp_table.test | 62 ++- .../r/rpl_mixed_drop_create_temp_table.result | 368 +++++++++++++++++ .../r/rpl_row_drop_create_temp_table.result | 386 +++++++++++++++++- .../r/rpl_stm_drop_create_temp_table.result | 382 +++++++++++++++++ sql/handler.h | 11 + sql/log.cc | 40 +- sql/sp_head.cc | 8 +- sql/sql_class.h | 3 +- 9 files changed, 1211 insertions(+), 51 deletions(-) diff --git a/mysql-test/extra/rpl_tests/rpl_drop_create_temp_table.inc b/mysql-test/extra/rpl_tests/rpl_drop_create_temp_table.inc index a7ee54658f8..bbc7209e57f 100644 --- a/mysql-test/extra/rpl_tests/rpl_drop_create_temp_table.inc +++ b/mysql-test/extra/rpl_tests/rpl_drop_create_temp_table.inc @@ -58,7 +58,7 @@ if (`SELECT HEX(@commands) = HEX('configure')`) --eval CREATE TEMPORARY TABLE nt_tmp_xx_1 ( id INT ) ENGINE = MyIsam # - # Creates a Temporary N-table that is never dropped. + # Creates a Temporary T-table that is never dropped. # --eval CREATE TEMPORARY TABLE tt_tmp_xx_1 ( id INT ) ENGINE = Innodb diff --git a/mysql-test/extra/rpl_tests/rpl_drop_create_temp_table.test b/mysql-test/extra/rpl_tests/rpl_drop_create_temp_table.test index f8b521e3abf..1e13e9fd991 100644 --- a/mysql-test/extra/rpl_tests/rpl_drop_create_temp_table.test +++ b/mysql-test/extra/rpl_tests/rpl_drop_create_temp_table.test @@ -483,6 +483,65 @@ SET @commands= 'B N N-Temp T-SELECT-T-Temp N-Temp Te R'; SET @commands= 'B N N-Temp T-SELECT-T-Temp N-Temp NeT-trig R'; --source extra/rpl_tests/rpl_drop_create_temp_table.inc +--echo # > MDEV-26833 +--echo # Errored out and rolled back Te statement should not produce any event to binlog +--echo # in the following cases: + +SET @sav_var = @@session.binlog_direct_non_transactional_updates; + +SET @@session.binlog_direct_non_transactional_updates = ON; +SET @commands= 'B T Drop-Temp-TT-Temp Te C'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'B T Drop-Temp-TN-Temp Te C'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'B T N-Temp Te C'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc + +SET @commands= 'B T Drop-Temp-TT-Temp Te R'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'B T Drop-Temp-TN-Temp Te R'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'B T N-Temp Te R'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc + +--echo # Non-transactional side effects. +SET @commands= 'B T N-Temp Te Ne C'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'B T N-Temp Te Ne R'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc + +SET @@session.binlog_direct_non_transactional_updates = OFF; +SET @commands= 'B T Drop-Temp-TT-Temp Te C'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'B T Drop-Temp-TN-Temp Te C'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'B T N-Temp Te C'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc + +SET @commands= 'B T Drop-Temp-TT-Temp Te R'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'B T Drop-Temp-TN-Temp Te R'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'B T N-Temp Te R'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc + +--echo # Non-transactional side effects. +SET @commands= 'B T N-Temp Te Ne C'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc +SET @commands= 'B T N-Temp Te Ne R'; +--source extra/rpl_tests/rpl_drop_create_temp_table.inc + +SET @@session.binlog_direct_non_transactional_updates = @sav_var; +--echo # < MDEV-26833 + --echo ################################################################################### --echo # CHECK CONSISTENCY --echo ################################################################################### @@ -495,8 +554,7 @@ if (`select @@session.binlog_format != 'STATEMENT'`) { --exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLD_DATADIR/test-temporary-master.sql --exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLD_DATADIR/test-temporary-slave.sql - # uncomment when anders.song@greatopensource.com-20110105052107-zoab0bsf5a6xxk2y from mysql-5.6 is merged - #--diff_files $MYSQLD_DATADIR/test-temporary-master.sql $MYSQLD_DATADIR/test-temporary-slave.sql + --diff_files $MYSQLD_DATADIR/test-temporary-master.sql $MYSQLD_DATADIR/test-temporary-slave.sql } --echo ######################################################################### diff --git a/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result b/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result index d2f590ad136..f8af2d439eb 100644 --- a/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result +++ b/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result @@ -2119,6 +2119,374 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B N N-Temp T-SELECT-T-Temp N-Temp NeT-trig R << -e-e-e-e-e-e-e-e-e-e-e- +# > MDEV-26833 +# Errored out and rolled back Te statement should not produce any event to binlog +# in the following cases: +SET @sav_var = @@session.binlog_direct_non_transactional_updates; +SET @@session.binlog_direct_non_transactional_updates = ON; +SET @commands= 'B T Drop-Temp-TT-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (7), (7); +ERROR 23000: Duplicate entry '7' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (8), (8); +ERROR 23000: Duplicate entry '8' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (9), (9); +ERROR 23000: Duplicate entry '9' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (10), (10); +ERROR 23000: Duplicate entry '10' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TT-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (11), (11); +ERROR 23000: Duplicate entry '11' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (12), (12); +ERROR 23000: Duplicate entry '12' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (13), (13); +ERROR 23000: Duplicate entry '13' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (14), (14); +ERROR 23000: Duplicate entry '14' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +# Non-transactional side effects. +SET @commands= 'B T N-Temp Te Ne C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (15), (15); +ERROR 23000: Duplicate entry '15' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (13), (13); +ERROR 23000: Duplicate entry '13' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (13), (13) +master-bin.000001 # Table_map # # table_id: # (test.nt_error_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te Ne R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (16), (16); +ERROR 23000: Duplicate entry '16' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (14), (14); +ERROR 23000: Duplicate entry '14' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (14), (14) +master-bin.000001 # Table_map # # table_id: # (test.nt_error_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @@session.binlog_direct_non_transactional_updates = OFF; +SET @commands= 'B T Drop-Temp-TT-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (17), (17); +ERROR 23000: Duplicate entry '17' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (18), (18); +ERROR 23000: Duplicate entry '18' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (19), (19); +ERROR 23000: Duplicate entry '19' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (20), (20); +ERROR 23000: Duplicate entry '20' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TT-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (21), (21); +ERROR 23000: Duplicate entry '21' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (22), (22); +ERROR 23000: Duplicate entry '22' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (23), (23); +ERROR 23000: Duplicate entry '23' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (24), (24); +ERROR 23000: Duplicate entry '24' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +# Non-transactional side effects. +SET @commands= 'B T N-Temp Te Ne C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (25), (25); +ERROR 23000: Duplicate entry '25' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (15), (15); +ERROR 23000: Duplicate entry '15' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (15), (15) +master-bin.000001 # Table_map # # table_id: # (test.nt_error_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te Ne R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (26), (26); +ERROR 23000: Duplicate entry '26' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (16), (16); +ERROR 23000: Duplicate entry '16' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (16), (16) +master-bin.000001 # Table_map # # table_id: # (test.nt_error_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @@session.binlog_direct_non_transactional_updates = @sav_var; +# < MDEV-26833 ################################################################################### # CHECK CONSISTENCY ################################################################################### diff --git a/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result b/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result index f6e04b950d8..3be043eb8af 100644 --- a/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result +++ b/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result @@ -619,9 +619,6 @@ master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F -master-bin.000001 # Annotate_rows # # INSERT INTO tt_error_1() VALUES (1), (1) -master-bin.000001 # Table_map # # table_id: # (test.tt_error_1) -master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-NN-Temp N Drop-Temp-NN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- @@ -1163,9 +1160,6 @@ master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F -master-bin.000001 # Annotate_rows # # INSERT INTO tt_error_1() VALUES (2), (2) -master-bin.000001 # Table_map # # table_id: # (test.tt_error_1) -master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-NN-Temp N Drop-Temp-NN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1633,12 +1627,6 @@ ERROR 23000: Duplicate entry '3' for key 'PRIMARY' COMMIT; -b-b-b-b-b-b-b-b-b-b-b- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc -Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Gtid # # BEGIN GTID #-#-# -master-bin.000001 # Annotate_rows # # INSERT INTO tt_error_1() VALUES (3), (3) -master-bin.000001 # Table_map # # table_id: # (test.tt_error_1) -master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp NeT-trig C'; @@ -1725,12 +1713,6 @@ ERROR 23000: Duplicate entry '4' for key 'PRIMARY' ROLLBACK; -b-b-b-b-b-b-b-b-b-b-b- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc -Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Gtid # # BEGIN GTID #-#-# -master-bin.000001 # Annotate_rows # # INSERT INTO tt_error_1() VALUES (4), (4) -master-bin.000001 # Table_map # # table_id: # (test.tt_error_1) -master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp NeT-trig R'; @@ -2066,6 +2048,374 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B N N-Temp T-SELECT-T-Temp N-Temp NeT-trig R << -e-e-e-e-e-e-e-e-e-e-e- +# > MDEV-26833 +# Errored out and rolled back Te statement should not produce any event to binlog +# in the following cases: +SET @sav_var = @@session.binlog_direct_non_transactional_updates; +SET @@session.binlog_direct_non_transactional_updates = ON; +SET @commands= 'B T Drop-Temp-TT-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (7), (7); +ERROR 23000: Duplicate entry '7' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (8), (8); +ERROR 23000: Duplicate entry '8' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (9), (9); +ERROR 23000: Duplicate entry '9' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (10), (10); +ERROR 23000: Duplicate entry '10' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TT-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (11), (11); +ERROR 23000: Duplicate entry '11' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (12), (12); +ERROR 23000: Duplicate entry '12' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (13), (13); +ERROR 23000: Duplicate entry '13' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (14), (14); +ERROR 23000: Duplicate entry '14' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +# Non-transactional side effects. +SET @commands= 'B T N-Temp Te Ne C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (15), (15); +ERROR 23000: Duplicate entry '15' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (13), (13); +ERROR 23000: Duplicate entry '13' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (13), (13) +master-bin.000001 # Table_map # # table_id: # (test.nt_error_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te Ne R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (16), (16); +ERROR 23000: Duplicate entry '16' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (14), (14); +ERROR 23000: Duplicate entry '14' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (14), (14) +master-bin.000001 # Table_map # # table_id: # (test.nt_error_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @@session.binlog_direct_non_transactional_updates = OFF; +SET @commands= 'B T Drop-Temp-TT-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (17), (17); +ERROR 23000: Duplicate entry '17' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (18), (18); +ERROR 23000: Duplicate entry '18' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (19), (19); +ERROR 23000: Duplicate entry '19' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (20), (20); +ERROR 23000: Duplicate entry '20' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TT-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (21), (21); +ERROR 23000: Duplicate entry '21' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (22), (22); +ERROR 23000: Duplicate entry '22' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (23), (23); +ERROR 23000: Duplicate entry '23' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (24), (24); +ERROR 23000: Duplicate entry '24' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +# Non-transactional side effects. +SET @commands= 'B T N-Temp Te Ne C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (25), (25); +ERROR 23000: Duplicate entry '25' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (15), (15); +ERROR 23000: Duplicate entry '15' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (15), (15) +master-bin.000001 # Table_map # # table_id: # (test.nt_error_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te Ne R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (26), (26); +ERROR 23000: Duplicate entry '26' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (16), (16); +ERROR 23000: Duplicate entry '16' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (16), (16) +master-bin.000001 # Table_map # # table_id: # (test.nt_error_1) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @@session.binlog_direct_non_transactional_updates = @sav_var; +# < MDEV-26833 ################################################################################### # CHECK CONSISTENCY ################################################################################### diff --git a/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result b/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result index d4250159866..976097fb4ec 100644 --- a/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result +++ b/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result @@ -2195,6 +2195,388 @@ master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1 SELECT * FROM tt_t master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B N N-Temp T-SELECT-T-Temp N-Temp NeT-trig R << -e-e-e-e-e-e-e-e-e-e-e- +# > MDEV-26833 +# Errored out and rolled back Te statement should not produce any event to binlog +# in the following cases: +SET @sav_var = @@session.binlog_direct_non_transactional_updates; +SET @@session.binlog_direct_non_transactional_updates = ON; +SET @commands= 'B T Drop-Temp-TT-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (7), (7); +ERROR 23000: Duplicate entry '7' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_1`,`tt_tmp_2` /* generated by server */ +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (8), (8); +ERROR 23000: Duplicate entry '8' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */ +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (9), (9); +ERROR 23000: Duplicate entry '9' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */ +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (10), (10); +ERROR 23000: Duplicate entry '10' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TT-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (11), (11); +ERROR 23000: Duplicate entry '11' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_1`,`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (12), (12); +ERROR 23000: Duplicate entry '12' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */ +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (13), (13); +ERROR 23000: Duplicate entry '13' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (14), (14); +ERROR 23000: Duplicate entry '14' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +# Non-transactional side effects. +SET @commands= 'B T N-Temp Te Ne C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (15), (15); +ERROR 23000: Duplicate entry '15' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (13), (13); +ERROR 23000: Duplicate entry '13' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO nt_error_1() VALUES (13), (13) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te Ne R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (16), (16); +ERROR 23000: Duplicate entry '16' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (14), (14); +ERROR 23000: Duplicate entry '14' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO nt_error_1() VALUES (14), (14) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @@session.binlog_direct_non_transactional_updates = OFF; +SET @commands= 'B T Drop-Temp-TT-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (17), (17); +ERROR 23000: Duplicate entry '17' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_1`,`tt_tmp_2` /* generated by server */ +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (18), (18); +ERROR 23000: Duplicate entry '18' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */ +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (19), (19); +ERROR 23000: Duplicate entry '19' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */ +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (20), (20); +ERROR 23000: Duplicate entry '20' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TT-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2; +INSERT INTO tt_error_1() VALUES (21), (21); +ERROR 23000: Duplicate entry '21' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_1`,`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R'; +DROP TEMPORARY TABLE tt_tmp_2; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb; +INSERT INTO tt_error_1() VALUES (22), (22); +ERROR 23000: Duplicate entry '22' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */ +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T Drop-Temp-TN-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2; +INSERT INTO tt_error_1() VALUES (23), (23); +ERROR 23000: Duplicate entry '23' for key 'PRIMARY' +ROLLBACK; +-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (24), (24); +ERROR 23000: Duplicate entry '24' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1) +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- + +# Non-transactional side effects. +SET @commands= 'B T N-Temp Te Ne C'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (25), (25); +ERROR 23000: Duplicate entry '25' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (15), (15); +ERROR 23000: Duplicate entry '15' for key 'PRIMARY' +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; INSERT INTO nt_error_1() VALUES (15), (15) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e- + +SET @commands= 'B T N-Temp Te Ne R'; +BEGIN; +INSERT INTO tt_xx_1() VALUES (1); +INSERT INTO nt_tmp_xx_1() VALUES (1); +INSERT INTO tt_error_1() VALUES (26), (26); +ERROR 23000: Duplicate entry '26' for key 'PRIMARY' +INSERT INTO nt_error_1() VALUES (16), (16); +ERROR 23000: Duplicate entry '16' for key 'PRIMARY' +ROLLBACK; +Warnings: +Warning # Some non-transactional changed tables couldn't be rolled back +-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b- +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1) +master-bin.000001 # Query # # use `test`; INSERT INTO nt_error_1() VALUES (16), (16) +master-bin.000001 # Query # # ROLLBACK +-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e- + +SET @@session.binlog_direct_non_transactional_updates = @sav_var; +# < MDEV-26833 ################################################################################### # CHECK CONSISTENCY ################################################################################### diff --git a/sql/handler.h b/sql/handler.h index 542b91c570d..02a4a76c6c1 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -1477,6 +1477,9 @@ struct THD_TRANS /* Define the type of statemens which cannot be rolled back safely. Each type occupies one bit in m_unsafe_rollback_flags. + MODIFIED_NON_TRANS_TABLE is limited to mark only the temporary + non-transactional table *when* it's cached along with the transactional + events; the regular table is covered by the "namesake" bool var. */ static unsigned int const MODIFIED_NON_TRANS_TABLE= 0x01; static unsigned int const CREATED_TEMP_TABLE= 0x02; @@ -1485,6 +1488,14 @@ struct THD_TRANS static unsigned int const DID_DDL= 0x10; static unsigned int const EXECUTED_TABLE_ADMIN_CMD= 0x20; + void mark_modified_non_trans_temp_table() + { + m_unsafe_rollback_flags|= MODIFIED_NON_TRANS_TABLE; + } + bool has_modified_non_trans_temp_table() const + { + return (m_unsafe_rollback_flags & MODIFIED_NON_TRANS_TABLE) != 0; + } void mark_executed_table_admin_cmd() { DBUG_PRINT("debug", ("mark_executed_table_admin_cmd")); diff --git a/sql/log.cc b/sql/log.cc index 1d9b4645421..895eeec454b 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -252,8 +252,9 @@ void make_default_log_name(char **out, const char* log_ext, bool once) class binlog_cache_data { public: - binlog_cache_data(): m_pending(0), before_stmt_pos(MY_OFF_T_UNDEF), - incident(FALSE), changes_to_non_trans_temp_table_flag(FALSE), + binlog_cache_data(): m_pending(0), + before_stmt_pos(MY_OFF_T_UNDEF), + incident(FALSE), saved_max_binlog_cache_size(0), ptr_binlog_cache_use(0), ptr_binlog_cache_disk_use(0) { } @@ -289,16 +290,6 @@ public: return(incident); } - void set_changes_to_non_trans_temp_table() - { - changes_to_non_trans_temp_table_flag= TRUE; - } - - bool changes_to_non_trans_temp_table() - { - return (changes_to_non_trans_temp_table_flag); - } - void reset() { compute_statistics(); @@ -306,7 +297,6 @@ public: if(cache_log.file != -1) my_chsize(cache_log.file, 0, 0, MYF(MY_WME)); - changes_to_non_trans_temp_table_flag= FALSE; incident= FALSE; before_stmt_pos= MY_OFF_T_UNDEF; /* @@ -401,12 +391,6 @@ private: */ bool incident; - /* - This flag indicates if the cache has changes to temporary tables. - @TODO This a temporary fix and should be removed after BUG#54562. - */ - bool changes_to_non_trans_temp_table_flag; - /** This function computes binlog cache and disk usage. */ @@ -1942,13 +1926,12 @@ static int binlog_prepare(handlerton *hton, THD *thd, bool all) */ static bool trans_cannot_safely_rollback(THD *thd, bool all) { - binlog_cache_mngr *const cache_mngr= - (binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton); + DBUG_ASSERT(ending_trans(thd, all)); return ((thd->variables.option_bits & OPTION_KEEP_LOG) || (trans_has_updated_non_trans_table(thd) && thd->wsrep_binlog_format() == BINLOG_FORMAT_STMT) || - (cache_mngr->trx_cache.changes_to_non_trans_temp_table() && + (thd->transaction.all.has_modified_non_trans_temp_table() && thd->wsrep_binlog_format() == BINLOG_FORMAT_MIXED) || (trans_has_updated_non_trans_table(thd) && ending_single_stmt_trans(thd,all) && @@ -2092,17 +2075,19 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all) /* Truncate the cache if: . aborting a single or multi-statement transaction or; - . the OPTION_KEEP_LOG is not active and; + . the current statement created or dropped a temporary table + while having actual STATEMENT format; . the format is not STMT or no non-trans table was updated and; . the format is not MIXED or no temporary non-trans table was updated. */ else if (ending_trans(thd, all) || - (!(thd->variables.option_bits & OPTION_KEEP_LOG) && + (!(thd->transaction.stmt.has_created_dropped_temp_table() && + !thd->is_current_stmt_binlog_format_row()) && (!stmt_has_updated_non_trans_table(thd) || thd->wsrep_binlog_format() != BINLOG_FORMAT_STMT) && - (!cache_mngr->trx_cache.changes_to_non_trans_temp_table() || + (!thd->transaction.stmt.has_modified_non_trans_temp_table() || thd->wsrep_binlog_format() != BINLOG_FORMAT_MIXED))) error= binlog_truncate_trx_cache(thd, cache_mngr, all); } @@ -6276,9 +6261,8 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate) file= cache_mngr->get_binlog_cache_log(is_trans_cache); cache_data= cache_mngr->get_binlog_cache_data(is_trans_cache); - if (thd->lex->stmt_accessed_non_trans_temp_table()) - cache_data->set_changes_to_non_trans_temp_table(); - + if (thd->lex->stmt_accessed_non_trans_temp_table() && is_trans_cache) + thd->transaction.stmt.mark_modified_non_trans_temp_table(); thd->binlog_start_trans_and_stmt(); } DBUG_PRINT("info",("event type: %d",event_info->get_type_code())); diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 6a6bdf8fe09..cb5348cd110 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -3040,8 +3040,13 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp, It's reset further in the common code part. It's merged with the saved parent's value at the exit of this func. */ - bool parent_modified_non_trans_table= thd->transaction.stmt.modified_non_trans_table; + bool parent_modified_non_trans_table= + thd->transaction.stmt.modified_non_trans_table; + unsigned int parent_unsafe_rollback_flags= + thd->transaction.stmt.m_unsafe_rollback_flags; thd->transaction.stmt.modified_non_trans_table= FALSE; + thd->transaction.stmt.m_unsafe_rollback_flags= 0; + DBUG_ASSERT(!thd->derived_tables); DBUG_ASSERT(thd->Item_change_list::is_empty()); /* @@ -3162,6 +3167,7 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp, what is needed from the substatement gained */ thd->transaction.stmt.modified_non_trans_table |= parent_modified_non_trans_table; + thd->transaction.stmt.m_unsafe_rollback_flags |= parent_unsafe_rollback_flags; TRANSACT_TRACKER(add_trx_state_from_thd(thd)); diff --git a/sql/sql_class.h b/sql/sql_class.h index 5f871f9caf6..a767a34d869 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -4524,7 +4524,8 @@ public: transaction.all.modified_non_trans_table= TRUE; transaction.all.m_unsafe_rollback_flags|= (transaction.stmt.m_unsafe_rollback_flags & - (THD_TRANS::DID_WAIT | THD_TRANS::CREATED_TEMP_TABLE | + (THD_TRANS::MODIFIED_NON_TRANS_TABLE | + THD_TRANS::DID_WAIT | THD_TRANS::CREATED_TEMP_TABLE | THD_TRANS::DROPPED_TEMP_TABLE | THD_TRANS::DID_DDL | THD_TRANS::EXECUTED_TABLE_ADMIN_CMD)); } From 1fdac574470a5103dde689c8ce65041487e77f2c Mon Sep 17 00:00:00 2001 From: Nikita Malyavin Date: Thu, 28 Oct 2021 03:37:23 +0300 Subject: [PATCH 04/26] MDEV-26453 Assertion `0' failed in row_upd_sec_index_entry & corruption Long UNIQUE HASH index silently creates virtual column index, which should be impossible for base columns featuring AUTO_INCREMENT. Fix: add a relevant check; add new vcol type for a prettier error message. --- mysql-test/main/long_unique_bugs.result | 14 ++++++++++++++ mysql-test/main/long_unique_bugs.test | 16 ++++++++++++++++ sql/field.h | 3 +++ sql/table.cc | 5 +++++ 4 files changed, 38 insertions(+) diff --git a/mysql-test/main/long_unique_bugs.result b/mysql-test/main/long_unique_bugs.result index 5d6c0562c8a..738744867c0 100644 --- a/mysql-test/main/long_unique_bugs.result +++ b/mysql-test/main/long_unique_bugs.result @@ -288,3 +288,17 @@ Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_par t2 0 a 1 a A NULL NULL NULL YES HASH t2 0 a 2 b A NULL NULL NULL YES HASH DROP TABLE t1,t2; +# +# MDEV-26453 Assertion `0' failed in row_upd_sec_index_entry & corruption +# +CREATE TABLE t (c INT AUTO_INCREMENT KEY, UNIQUE USING HASH(c)); +ERROR HY000: Function or expression 'AUTO_INCREMENT' cannot be used in the USING HASH clause of `c` +CREATE TABLE t (c INT AUTO_INCREMENT KEY); +CREATE UNIQUE INDEX i USING HASH ON t (c); +ERROR HY000: Function or expression 'AUTO_INCREMENT' cannot be used in the USING HASH clause of `c` +INSERT INTO t VALUES (0); +SELECT * FROM t; +c +1 +DELETE FROM t; +DROP TABLE t; diff --git a/mysql-test/main/long_unique_bugs.test b/mysql-test/main/long_unique_bugs.test index 34d02b1c8f4..319940690ea 100644 --- a/mysql-test/main/long_unique_bugs.test +++ b/mysql-test/main/long_unique_bugs.test @@ -368,3 +368,19 @@ show index from t2; # Cleanup DROP TABLE t1,t2; + +--echo # +--echo # MDEV-26453 Assertion `0' failed in row_upd_sec_index_entry & corruption +--echo # + +--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED +CREATE TABLE t (c INT AUTO_INCREMENT KEY, UNIQUE USING HASH(c)); + +CREATE TABLE t (c INT AUTO_INCREMENT KEY); +--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED +CREATE UNIQUE INDEX i USING HASH ON t (c); +INSERT INTO t VALUES (0); +SELECT * FROM t; +DELETE FROM t; + +DROP TABLE t; diff --git a/sql/field.h b/sql/field.h index a51f279e59b..c19a501f1f9 100644 --- a/sql/field.h +++ b/sql/field.h @@ -475,6 +475,7 @@ enum enum_vcol_info_type { VCOL_GENERATED_VIRTUAL, VCOL_GENERATED_STORED, VCOL_DEFAULT, VCOL_CHECK_FIELD, VCOL_CHECK_TABLE, + VCOL_USING_HASH, /* Additional types should be added here */ /* Following is the highest value last */ VCOL_TYPE_NONE = 127 // Since the 0 value is already in use @@ -492,6 +493,8 @@ static inline const char *vcol_type_name(enum_vcol_info_type type) case VCOL_CHECK_FIELD: case VCOL_CHECK_TABLE: return "CHECK"; + case VCOL_USING_HASH: + return "USING HASH"; case VCOL_TYPE_NONE: return "UNTYPED"; } diff --git a/sql/table.cc b/sql/table.cc index 9a2b2819455..4df5af7a6c3 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1065,6 +1065,8 @@ static void mysql57_calculate_null_position(TABLE_SHARE *share, } } +static bool fix_and_check_vcol_expr(THD *thd, TABLE *table, + Virtual_column_info *vcol); /** Parse TABLE_SHARE::vcol_defs @@ -1256,6 +1258,9 @@ bool parse_vcol_defs(THD *thd, MEM_ROOT *mem_root, TABLE *table, Virtual_column_info *v= new (mem_root) Virtual_column_info(); field->vcol_info= v; field->vcol_info->expr= hash_item; + field->vcol_info->set_vcol_type(VCOL_USING_HASH); + if (fix_and_check_vcol_expr(thd, table, v)) + goto end; key->user_defined_key_parts= key->ext_key_parts= key->usable_key_parts= 1; key->key_part+= parts; From 059797ed44007fe954cf47f6f09db78e60df16fd Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Fri, 29 Oct 2021 12:24:47 +0400 Subject: [PATCH 05/26] MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing strmake() puts one extra 0x00 byte at the end of the string. The code in my_strnxfrm_tis620[_nopad] did not take this into account, so in the reported scenario the 0x00 byte was put outside of a stack variable, which made ASAN crash. This problem is already fixed in in MySQL: commit 19bd66fe43c41f0bde5f36bc6b455a46693069fb Author: bin.x.su@oracle.com <> Date: Fri Apr 4 11:35:27 2014 +0800 But the fix does not seem to be correct, as it breaks when finds a zero byte in the source string. Using memcpy() instead of strmake(). - Unlike strmake(), memcpy() it does not write beyond the destination size passed. - Unlike the MySQL fix, memcpy() does not break on the first 0x00 byte found in the source string. --- mysql-test/r/ctype_tis620.result | 9 ++++++ .../suite/innodb/r/innodb_ctype_tis620.result | 32 +++++++++++++++++++ .../suite/innodb/t/innodb_ctype_tis620.test | 29 +++++++++++++++++ mysql-test/t/ctype_tis620.test | 7 ++++ strings/ctype-tis620.c | 8 ++--- 5 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 mysql-test/suite/innodb/r/innodb_ctype_tis620.result create mode 100644 mysql-test/suite/innodb/t/innodb_ctype_tis620.test diff --git a/mysql-test/r/ctype_tis620.result b/mysql-test/r/ctype_tis620.result index ee333e751e4..d8432c4ca0c 100644 --- a/mysql-test/r/ctype_tis620.result +++ b/mysql-test/r/ctype_tis620.result @@ -4421,5 +4421,14 @@ DROP TABLE t1; # SET STORAGE_ENGINE=Default; # +# MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing +# +SELECT HEX(WEIGHT_STRING(_tis620 'a\0b')); +HEX(WEIGHT_STRING(_tis620 'a\0b')) +610062 +SELECT HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci)); +HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci)) +610062 +# # End of 10.2 tests # diff --git a/mysql-test/suite/innodb/r/innodb_ctype_tis620.result b/mysql-test/suite/innodb/r/innodb_ctype_tis620.result new file mode 100644 index 00000000000..6b291f2d359 --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_ctype_tis620.result @@ -0,0 +1,32 @@ +SET STORAGE_ENGINE=InnoDB; +# +# Start of 10.2 tests +# +# +# MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing Export +# +CREATE TABLE t1(c TEXT CHARACTER SET tis620); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c` text CHARACTER SET tis620 DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES('100'); +ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE; +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +DROP TABLE t1; +CREATE TABLE t1(c TEXT CHARACTER SET tis620 COLLATE tis620_thai_nopad_ci); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c` text CHARACTER SET tis620 COLLATE tis620_thai_nopad_ci DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES('100'); +ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE; +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +DROP TABLE t1; +# +# End of 10.2 tests +# diff --git a/mysql-test/suite/innodb/t/innodb_ctype_tis620.test b/mysql-test/suite/innodb/t/innodb_ctype_tis620.test new file mode 100644 index 00000000000..fee1b283ac3 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_ctype_tis620.test @@ -0,0 +1,29 @@ +--source include/have_innodb.inc +--source include/have_tis620.inc + +SET STORAGE_ENGINE=InnoDB; + +--echo # +--echo # Start of 10.2 tests +--echo # + +--echo # +--echo # MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing Export +--echo # + +CREATE TABLE t1(c TEXT CHARACTER SET tis620); +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES('100'); +ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE; +DROP TABLE t1; + +CREATE TABLE t1(c TEXT CHARACTER SET tis620 COLLATE tis620_thai_nopad_ci); +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES('100'); +ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE; +DROP TABLE t1; + + +--echo # +--echo # End of 10.2 tests +--echo # diff --git a/mysql-test/t/ctype_tis620.test b/mysql-test/t/ctype_tis620.test index 7bc248aec2b..7f6382fe7bc 100644 --- a/mysql-test/t/ctype_tis620.test +++ b/mysql-test/t/ctype_tis620.test @@ -209,6 +209,13 @@ let $coll='tis620_nopad_bin'; let $coll_pad='tis620_bin'; --source include/ctype_pad_all_engines.inc +--echo # +--echo # MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing +--echo # + +SELECT HEX(WEIGHT_STRING(_tis620 'a\0b')); +SELECT HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci)); + --echo # --echo # End of 10.2 tests --echo # diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c index 66bd1604803..4f1d12ae741 100644 --- a/strings/ctype-tis620.c +++ b/strings/ctype-tis620.c @@ -605,8 +605,8 @@ my_strnxfrm_tis620(CHARSET_INFO *cs, const uchar *src, size_t srclen, uint flags) { size_t len, dstlen0= dstlen; - len= (uint) (strmake((char*) dst, (char*) src, MY_MIN(dstlen, srclen)) - - (char*) dst); + len= MY_MIN(dstlen, srclen); + memcpy(dst, src, len); len= thai2sortable(dst, len); set_if_smaller(dstlen, nweights); set_if_smaller(len, dstlen); @@ -628,8 +628,8 @@ my_strnxfrm_tis620_nopad(CHARSET_INFO *cs, const uchar *src, size_t srclen, uint flags) { size_t len, dstlen0= dstlen; - len= (uint) (strmake((char*) dst, (char*) src, MY_MIN(dstlen, srclen)) - - (char*) dst); + len= MY_MIN(dstlen, srclen); + memcpy(dst, src, len); len= thai2sortable(dst, len); set_if_smaller(dstlen, nweights); set_if_smaller(len, dstlen); From d352bc5b6772f735a7e4bc540f578e0efc280e71 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Fri, 29 Oct 2021 11:44:09 +0300 Subject: [PATCH 06/26] MDEV-26929: Make the main testsuite runnable with optimizer trace enabled Part#2: check that compile-time default @@optimizer_trace is correct. --- mysql-test/main/opt_trace_default.result | 8 ++++++++ mysql-test/main/opt_trace_default.test | 11 +++++++++++ 2 files changed, 19 insertions(+) create mode 100644 mysql-test/main/opt_trace_default.result create mode 100644 mysql-test/main/opt_trace_default.test diff --git a/mysql-test/main/opt_trace_default.result b/mysql-test/main/opt_trace_default.result new file mode 100644 index 00000000000..4d99128675c --- /dev/null +++ b/mysql-test/main/opt_trace_default.result @@ -0,0 +1,8 @@ +# Verify that compile-time default for optimizer trace is OFF (enabled=off). +select +global_value_origin, +default_value +from +INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace'; +global_value_origin default_value +COMPILE-TIME enabled=off diff --git a/mysql-test/main/opt_trace_default.test b/mysql-test/main/opt_trace_default.test new file mode 100644 index 00000000000..221b68a626c --- /dev/null +++ b/mysql-test/main/opt_trace_default.test @@ -0,0 +1,11 @@ + +if (`SELECT 'COMPILE-TIME'<>GLOBAL_VALUE_ORIGIN from INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace'`) { +--Skip Needs optimizer_trace default to be the compile-time default +} + +--echo # Verify that compile-time default for optimizer trace is OFF (enabled=off). +select + global_value_origin, + default_value +from + INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace'; From 5d6f3cebca77ee650e6cde3bd738d1fac0a8110c Mon Sep 17 00:00:00 2001 From: Sergei Krivonos Date: Fri, 29 Oct 2021 21:01:28 +0300 Subject: [PATCH 07/26] MDEV-19129: Xcode compatibility update: deprecated vfork -> fork --- storage/connect/tabrest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/connect/tabrest.cpp b/storage/connect/tabrest.cpp index c66d8d76f3d..6e8c96a27cb 100644 --- a/storage/connect/tabrest.cpp +++ b/storage/connect/tabrest.cpp @@ -112,7 +112,7 @@ int Xcurl(PGLOBAL g, PCSZ Http, PCSZ Uri, PCSZ filename) } // endif f - pID = vfork(); + pID = fork(); sprintf(fn, "-o%s", filename); if (pID == 0) { From 0c77c5f6e778bca0823b5029ce2d801b506afec1 Mon Sep 17 00:00:00 2001 From: Sergei Krivonos Date: Fri, 29 Oct 2021 13:32:32 +0300 Subject: [PATCH 08/26] MDEV-19129: Xcode compatibility update: #include path --- client/mysql.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/mysql.cc b/client/mysql.cc index cd2c37972bc..177d0f60757 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -90,7 +90,11 @@ extern "C" { #if defined(__WIN__) #include #else -#include +# ifdef __APPLE__ +# include +# else +# include +# endif #define HAVE_READLINE #define USE_POPEN #endif From 026984c360ce27c62072ed6ce798ec855952c974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Mon, 1 Nov 2021 09:28:41 +0200 Subject: [PATCH 09/26] MDEV-26949 --debug-gdb installs redundant signal handlers There is a server startup option --gdb a.k.a. --debug-gdb that requests signals to be set for more convenient debugging. Most notably, SIGINT (ctrl-c) will not be ignored, and you will be able to interrupt the execution of the server while GDB is attached to it. When we are debugging, the signal handlers that would normally display a terse stack trace are useless. When we are debugging with rr, the signal handlers may interfere with a SIGKILL that could be sent to the process by the environment, and ruin the rr replay trace, due to a Linux kernel bug https://lkml.org/lkml/2021/10/31/311 To be able to diagnose bugs in kill+restart tests, we may really need both a trace before the SIGKILL and a trace of the failure after a subsequent server startup. So, we had better avoid hitting the problem by simply not installing those signal handlers. --- mysql-test/lib/My/Debugger.pm | 3 ++- sql/mysqld.cc | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/lib/My/Debugger.pm b/mysql-test/lib/My/Debugger.pm index cc151b233d5..8d09189e766 100644 --- a/mysql-test/lib/My/Debugger.pm +++ b/mysql-test/lib/My/Debugger.pm @@ -147,7 +147,8 @@ sub do_args($$$$$) { my %vars = ( vardir => $::opt_vardir, exe => $$exe, - args => join(' ', map { quote_from_mtr $_ } @$$args, '--loose-gdb'), + args => join(' ', map { quote_from_mtr $_ } @$$args, + '--loose-debug-gdb', '--loose-skip-stack-trace'), input => $input, script => "$::opt_vardir/tmp/${k}init.$type", log => "$::opt_vardir/log/$type.$k", diff --git a/sql/mysqld.cc b/sql/mysqld.cc index d723c36e4cb..d7a44138780 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -9740,7 +9740,6 @@ static int get_options(int *argc_ptr, char ***argv_ptr) { /* Allow break with SIGINT, no core or stack trace */ test_flags|= TEST_SIGINT; - opt_stack_trace= 1; test_flags&= ~TEST_CORE_ON_SIGNAL; } /* Set global MyISAM variables from delay_key_write_options */ From 63c922ae0c9e5896505f3843eeb0524ae97fe779 Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 2 Nov 2021 04:52:03 +0300 Subject: [PATCH 10/26] MDEV-25803 Inplace ALTER breaks MyISAM/Aria table when order of keys is changed mysql_prepare_create_table() does my_qsort(sort_keys) on key info. This sorting is indeterministic: a table is created with one order and inplace alter may overwrite frm with another order. Since inplace alter does nothing about key info for MyISAM/Aria storage engines this results in discrepancy between frm and storage engine key definitions. The fix avoids the sorting of keys when no new keys added by ALTER (and this is ok for MyISAM/Aria since it cannot add new keys inplace). Notes: mi_keydef_write()/mi_keyseg_write() are used only in mi_create(). They should be used in ha_inplace_alter_table() as well. Aria corruption detection is unimplemented: maria_check_definition() is never used! MySQL 8.0 has this bug as well as of 8.0.26. This breaks main.long_unique in 10.4. The new result is correct and should be applied as it just different (original) order of keys. --- mysql-test/main/alter_table.result | 16 ++++++++++++ mysql-test/main/alter_table.test | 41 ++++++++++++++++++++++++++++++ sql/sql_table.cc | 28 +++++++++++++++++--- storage/maria/ha_maria.cc | 5 ++++ storage/myisam/mi_create.c | 6 ++++- 5 files changed, 92 insertions(+), 4 deletions(-) diff --git a/mysql-test/main/alter_table.result b/mysql-test/main/alter_table.result index 8a3fc640301..522c4bf872b 100644 --- a/mysql-test/main/alter_table.result +++ b/mysql-test/main/alter_table.result @@ -2584,5 +2584,21 @@ set max_statement_time= 0; drop table t1; drop view v1; # +# MDEV-25803 Inplace ALTER breaks MyISAM/Aria tables when order of keys is changed +# +set @save_default_engine= @@default_storage_engine; +create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)) engine myisam; +alter table t1 change x xx int, algorithm=inplace; +check table t1; +Table Op Msg_type Msg_text +test.t1 check status OK +create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)); +alter table t1 change x xx int, algorithm=inplace; +check table t1; +Table Op Msg_type Msg_text +test.t1 check status OK +drop table t1; +set @@default_storage_engine= @save_default_engine; +# # End of 10.3 tests # diff --git a/mysql-test/main/alter_table.test b/mysql-test/main/alter_table.test index fab57a49f5b..fd50366311f 100644 --- a/mysql-test/main/alter_table.test +++ b/mysql-test/main/alter_table.test @@ -2099,6 +2099,47 @@ set max_statement_time= 0; drop table t1; drop view v1; +--echo # +--echo # MDEV-25803 Inplace ALTER breaks MyISAM/Aria tables when order of keys is changed +--echo # +set @save_default_engine= @@default_storage_engine; +--disable_query_log +if ($MTR_COMBINATION_INNODB) +{ + set default_storage_engine= innodb; +} +if ($MTR_COMBINATION_ARIA) +{ + set default_storage_engine= aria; +} +--enable_query_log + +if (!$MTR_COMBINATION_INNODB) +{ + --disable_query_log + --disable_result_log + # There is no inplace ADD INDEX for MyISAM/Aria: + create or replace table t1 (x int); + --error ER_ALTER_OPERATION_NOT_SUPPORTED + alter table t1 add unique (x), algorithm=inplace; + --error ER_ALTER_OPERATION_NOT_SUPPORTED + alter table t1 add primary key(x), algorithm=inplace; + --error ER_ALTER_OPERATION_NOT_SUPPORTED + alter table t1 add index(x), algorithm=inplace; + --enable_query_log + --enable_result_log +} + +create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)) engine myisam; +alter table t1 change x xx int, algorithm=inplace; +check table t1; +create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)); +alter table t1 change x xx int, algorithm=inplace; +check table t1; +# cleanup +drop table t1; +set @@default_storage_engine= @save_default_engine; + --echo # --echo # End of 10.3 tests --echo # diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 2b796403dc8..fb3ac735c5d 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4202,9 +4202,31 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, my_message(ER_WRONG_AUTO_KEY, ER_THD(thd, ER_WRONG_AUTO_KEY), MYF(0)); DBUG_RETURN(TRUE); } - /* Sort keys in optimized order */ - my_qsort((uchar*) *key_info_buffer, *key_count, sizeof(KEY), - (qsort_cmp) sort_keys); + /* + We cannot do qsort of key info if MyISAM/Aria does inplace. These engines + do not synchronise key info on inplace alter and that qsort is + indeterministic (MDEV-25803). + + Yet we do not know whether we do inplace or not. That detection is done + after this create_table_impl() and that cannot be changed because of chicken + and egg problem (inplace processing requires key info made by + create_table_impl()). + + MyISAM/Aria cannot add index inplace so we are safe to qsort key info in + that case. And if we don't add index then we do not need qsort at all. + */ + if (!(create_info->options & HA_CREATE_TMP_ALTER) || + alter_info->flags & ALTER_ADD_INDEX) + { + /* + Sort keys in optimized order. + + Note: PK must be always first key, otherwise init_from_binary_frm_image() + can not understand it. + */ + my_qsort((uchar*) *key_info_buffer, *key_count, sizeof(KEY), + (qsort_cmp) sort_keys); + } create_info->null_bits= null_fields; /* Check fields. */ diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index c0163473f3a..12a55f2349e 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -707,6 +707,11 @@ static int table2maria(TABLE *table_arg, data_file_type row_type, - compare SPATIAL keys; - compare FIELD_SKIP_ZERO which is converted to FIELD_NORMAL correctly (should be correctly detected in table2maria). + + FIXME: + maria_check_definition() is never used! CHECK TABLE does not detect the + corruption! Do maria_check_definition() like check_definition() is done + by MyISAM (related to MDEV-25803). */ int maria_check_definition(MARIA_KEYDEF *t1_keyinfo, diff --git a/storage/myisam/mi_create.c b/storage/myisam/mi_create.c index de516d9fb6a..ebe139bb342 100644 --- a/storage/myisam/mi_create.c +++ b/storage/myisam/mi_create.c @@ -711,7 +711,11 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, } #endif - /* Write key and keyseg definitions */ + /* Write key and keyseg definitions + + TODO: update key and keyseg definitions for inplace alter (grep sql layer by + MDEV-25803). Do the same for Aria. + */ DBUG_PRINT("info", ("write key and keyseg definitions")); for (i=0 ; i < share.base.keys - uniques; i++) { From c6207ecba46b6b3bad1dc326dc16f8425d861931 Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 2 Nov 2021 04:52:03 +0300 Subject: [PATCH 11/26] MDEV-25803 innodb.alter_candidate_key fix There is a case when implicit primary key may be changed when removing NOT NULL from the part of unique key. In that case we update modified_primary_key which is then used to not skip key sorting. According to is_candidate_key() there is no other cases when primary kay may be changed implicitly. --- sql/handler.h | 1 + sql/sql_alter.cc | 4 ++-- sql/sql_alter.h | 1 + sql/sql_table.cc | 28 ++++++++++++++++++++-------- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/sql/handler.h b/sql/handler.h index e3e8e9fc5d9..e56ac9fab6e 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -426,6 +426,7 @@ enum enum_alter_inplace_result { #define HA_CREATE_TMP_ALTER 8U #define HA_LEX_CREATE_SEQUENCE 16U #define HA_VERSIONED_TABLE 32U +#define HA_SKIP_KEY_SORT 64U #define HA_MAX_REC_LENGTH 65535 diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc index 94003e328cc..59498d71bb1 100644 --- a/sql/sql_alter.cc +++ b/sql/sql_alter.cc @@ -256,7 +256,7 @@ Alter_table_ctx::Alter_table_ctx() db(null_clex_str), table_name(null_clex_str), alias(null_clex_str), new_db(null_clex_str), new_name(null_clex_str), new_alias(null_clex_str), fk_error_if_delete_row(false), fk_error_id(NULL), - fk_error_table(NULL) + fk_error_table(NULL), modified_primary_key(false) #ifdef DBUG_ASSERT_EXISTS , tmp_table(false) #endif @@ -276,7 +276,7 @@ Alter_table_ctx::Alter_table_ctx(THD *thd, TABLE_LIST *table_list, tables_opened(tables_opened_arg), new_db(*new_db_arg), new_name(*new_name_arg), fk_error_if_delete_row(false), fk_error_id(NULL), - fk_error_table(NULL) + fk_error_table(NULL), modified_primary_key(false) #ifdef DBUG_ASSERT_EXISTS , tmp_table(false) #endif diff --git a/sql/sql_alter.h b/sql/sql_alter.h index 71920b84792..d9749592a4f 100644 --- a/sql/sql_alter.h +++ b/sql/sql_alter.h @@ -324,6 +324,7 @@ public: const char *fk_error_id; /** Name of table for the above error. */ const char *fk_error_table; + bool modified_primary_key; private: char new_filename[FN_REFLEN + 1]; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index fb3ac735c5d..52948968c95 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4215,8 +4215,7 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, MyISAM/Aria cannot add index inplace so we are safe to qsort key info in that case. And if we don't add index then we do not need qsort at all. */ - if (!(create_info->options & HA_CREATE_TMP_ALTER) || - alter_info->flags & ALTER_ADD_INDEX) + if (!(create_info->options & HA_SKIP_KEY_SORT)) { /* Sort keys in optimized order. @@ -8035,7 +8034,6 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, uint used_fields, dropped_sys_vers_fields= 0; KEY *key_info=table->key_info; bool rc= TRUE; - bool modified_primary_key= FALSE; bool vers_system_invisible= false; Create_field *def; Field **f_ptr,*field; @@ -8420,6 +8418,12 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, if (key_info->flags & HA_INVISIBLE_KEY) continue; const char *key_name= key_info->name.str; + const bool primary_key= table->s->primary_key == i; + const bool explicit_pk= primary_key && + !my_strcasecmp(system_charset_info, key_name, + primary_key_name); + const bool implicit_pk= primary_key && !explicit_pk; + Alter_drop *drop; drop_it.rewind(); while ((drop=drop_it++)) @@ -8433,7 +8437,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, if (table->s->tmp_table == NO_TMP_TABLE) { (void) delete_statistics_for_index(thd, table, key_info, FALSE); - if (i == table->s->primary_key) + if (primary_key) { KEY *tab_key_info= table->key_info; for (uint j=0; j < table->s->keys; j++, tab_key_info++) @@ -8478,13 +8482,19 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, } if (!cfield) { - if (table->s->primary_key == i) - modified_primary_key= TRUE; + if (primary_key) + alter_ctx->modified_primary_key= true; delete_index_stat= TRUE; if (!(kfield->flags & VERS_SYSTEM_FIELD)) dropped_key_part= key_part_name; continue; // Field is removed } + + DBUG_ASSERT(!primary_key || kfield->flags & NOT_NULL_FLAG); + if (implicit_pk && !alter_ctx->modified_primary_key && + !(cfield->flags & NOT_NULL_FLAG)) + alter_ctx->modified_primary_key= true; + key_part_length= key_part->length; if (cfield->field) // Not new field { @@ -8533,7 +8543,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, { if (delete_index_stat) (void) delete_statistics_for_index(thd, table, key_info, FALSE); - else if (modified_primary_key && + else if (alter_ctx->modified_primary_key && key_info->user_defined_key_parts != key_info->ext_key_parts) (void) delete_statistics_for_index(thd, table, key_info, TRUE); } @@ -8575,7 +8585,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, key_type= Key::SPATIAL; else if (key_info->flags & HA_NOSAME) { - if (! my_strcasecmp(system_charset_info, key_name, primary_key_name)) + if (explicit_pk) key_type= Key::PRIMARY; else key_type= Key::UNIQUE; @@ -9941,6 +9951,8 @@ do_continue:; tmp_disable_binlog(thd); create_info->options|=HA_CREATE_TMP_ALTER; + if (!(alter_info->flags & ALTER_ADD_INDEX) && !alter_ctx.modified_primary_key) + create_info->options|= HA_SKIP_KEY_SORT; create_info->alias= alter_ctx.table_name; error= create_table_impl(thd, &alter_ctx.db, &alter_ctx.table_name, From 1be39f86ccced289f7a1755467f801a1b5974ede Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 2 Nov 2021 04:52:03 +0300 Subject: [PATCH 12/26] MDEV-25552 system versioned partitioned by LIMIT tables break CHECK TABLE Replaced HA_ADMIN_NOT_IMPLEMENTED error code by HA_ADMIN_OK. Now CHECK TABLE does not fail by unsupported check_misplaced_rows(). Admin message is not needed as well. Test case is the same as for MDEV-21011 (a7cf0db3d86), the result have been changed. --- mysql-test/suite/versioning/r/partition.result | 3 +-- sql/ha_partition.cc | 7 ++----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/mysql-test/suite/versioning/r/partition.result b/mysql-test/suite/versioning/r/partition.result index d2cf32e5bd0..6472c0480c3 100644 --- a/mysql-test/suite/versioning/r/partition.result +++ b/mysql-test/suite/versioning/r/partition.result @@ -603,8 +603,7 @@ delete from t1; delete from t1; check table t1; Table Op Msg_type Msg_text -test.t1 check note Not supported for non-INTERVAL history partitions -test.t1 check note The storage engine for the table doesn't support check +test.t1 check status OK drop table t1; # # MDEV-21233 Assertion `m_extra_cache' failed in ha_partition::late_extra_cache diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index fc1f0ebcb4e..bd73642cd0d 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -10797,11 +10797,8 @@ int ha_partition::check_misplaced_rows(uint read_part_id, bool do_repair) read_part_id != m_part_info->vers_info->now_part->id && !m_part_info->vers_info->interval.is_set()) { - print_admin_msg(ha_thd(), MYSQL_ERRMSG_SIZE, "note", - table_share->db.str, table->alias, - opt_op_name[CHECK_PARTS], - "Not supported for non-INTERVAL history partitions"); - DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED); + /* Skip this check as it is not supported for non-INTERVAL history partitions. */ + DBUG_RETURN(HA_ADMIN_OK); } if (do_repair) From d0b611a76d91a5b6dbbc8fab792d7daaaaa862f5 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Tue, 2 Nov 2021 09:00:49 +0400 Subject: [PATCH 13/26] MDEV-24335 Unexpected question mark in the end of a TINYTEXT column my_copy_fix_mb() passed MIN(src_length,dst_length) to my_append_fix_badly_formed_tail(). It could break a multi-byte character in the middle, which put the question mark to the destination. Fixing the code to pass the true src_length to my_append_fix_badly_formed_tail(). --- mysql-test/r/ctype_utf8.result | 11 +++++++++++ mysql-test/t/ctype_utf8.test | 9 +++++++++ strings/ctype-mb.c | 4 ++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result index 18398f2556a..96fdac1caba 100644 --- a/mysql-test/r/ctype_utf8.result +++ b/mysql-test/r/ctype_utf8.result @@ -11256,5 +11256,16 @@ DROP TABLE kv; DROP VIEW v1; SET NAMES utf8; # +# MDEV-24335 Unexpected question mark in the end of a TINYTEXT column +# +CREATE TABLE t1 (a TINYTEXT character set utf8); +INSERT IGNORE INTO t1 VALUES (REPEAT(_utf8 0xD184, 250)); +Warnings: +Warning 1366 Incorrect string value: '\xD1\x84\xD1\x84\xD1\x84...' for column `test`.`t1`.`a` at row 1 +SELECT LENGTH(a), CHAR_LENGTH(a), RIGHT(a,3) FROM t1; +LENGTH(a) CHAR_LENGTH(a) RIGHT(a,3) +254 127 ффф +DROP TABLE t1; +# # End of 10.2 tests # diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test index b34de4175e9..991c2e100c9 100644 --- a/mysql-test/t/ctype_utf8.test +++ b/mysql-test/t/ctype_utf8.test @@ -2183,6 +2183,15 @@ DROP TABLE kv; DROP VIEW v1; SET NAMES utf8; +--echo # +--echo # MDEV-24335 Unexpected question mark in the end of a TINYTEXT column +--echo # + +CREATE TABLE t1 (a TINYTEXT character set utf8); +INSERT IGNORE INTO t1 VALUES (REPEAT(_utf8 0xD184, 250)); +SELECT LENGTH(a), CHAR_LENGTH(a), RIGHT(a,3) FROM t1; +DROP TABLE t1; + --echo # --echo # End of 10.2 tests --echo # diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c index cabc940065b..caeb9f95ef1 100644 --- a/strings/ctype-mb.c +++ b/strings/ctype-mb.c @@ -401,10 +401,10 @@ my_copy_fix_mb(CHARSET_INFO *cs, size_t well_formed_nchars; size_t well_formed_length; size_t fixed_length; + size_t min_length= MY_MIN(src_length, dst_length); - set_if_smaller(src_length, dst_length); well_formed_nchars= cs->cset->well_formed_char_length(cs, - src, src + src_length, + src, src + min_length, nchars, status); DBUG_ASSERT(well_formed_nchars <= nchars); well_formed_length= status->m_source_end_pos - src; From 8ce5635a3eb2c744136c9f19d49297406db94d46 Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 2 Nov 2021 11:26:35 +0300 Subject: [PATCH 14/26] MDEV-22284 Aria table key read crash because wrong index used When restoring lastinx last_key.keyinfo must be updated as well. The good example is in _ma_check_index(). The point of failure is extra(HA_EXTRA_NO_KEYREAD) in ha_maria::get_auto_increment(): 1. extra(HA_EXTRA_KEYREAD) saves lastinx; 2. maria_rkey() changes index, so the lastinx and last_key.keyinfo; 3. extra(HA_EXTRA_NO_KEYREAD) restores lastinx but not last_key.keyinfo. So we have discrepancy between lastinx and last_key.keyinfo after 3. --- mysql-test/suite/maria/maria.result | 11 +++++++++++ mysql-test/suite/maria/maria.test | 13 +++++++++++++ storage/maria/ma_extra.c | 8 +++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/maria/maria.result b/mysql-test/suite/maria/maria.result index 1e85ee8b50c..f34e7ce8e5d 100644 --- a/mysql-test/suite/maria/maria.result +++ b/mysql-test/suite/maria/maria.result @@ -2850,3 +2850,14 @@ insert into t1 values (8,'0'); ERROR HY000: Table 't1' was locked with a READ lock and can't be updated unlock tables; drop table t1; +# +# MDEV-22284 Aria table key read crash because wrong index used +# +create table t1 ( +a int auto_increment, +b int, c int, +key(c, a), unique(b) +) engine aria +partition by hash (b); +replace into t1 values (1, 0, 0), (2, 0, 0), (0, 0, 0); +drop table t1; diff --git a/mysql-test/suite/maria/maria.test b/mysql-test/suite/maria/maria.test index 6de2c5dccbc..cd392faaeef 100644 --- a/mysql-test/suite/maria/maria.test +++ b/mysql-test/suite/maria/maria.test @@ -2093,3 +2093,16 @@ aria_page_checksum=$default_checksum, aria_log_file_size=$default_log_file_size; --enable_result_log --enable_query_log + +--echo # +--echo # MDEV-22284 Aria table key read crash because wrong index used +--echo # +create table t1 ( + a int auto_increment, + b int, c int, + key(c, a), unique(b) +) engine aria +partition by hash (b); +replace into t1 values (1, 0, 0), (2, 0, 0), (0, 0, 0); +# cleanup +drop table t1; diff --git a/storage/maria/ma_extra.c b/storage/maria/ma_extra.c index 2697c72f2b8..7d4aa358e40 100644 --- a/storage/maria/ma_extra.c +++ b/storage/maria/ma_extra.c @@ -213,7 +213,13 @@ int maria_extra(MARIA_HA *info, enum ha_extra_function function, info->last_key.data + share->base.max_key_length*2, info->save_lastkey_data_length + info->save_lastkey_ref_length); info->update= info->save_update | HA_STATE_WRITTEN; - info->lastinx= info->save_lastinx; + if (info->lastinx != info->save_lastinx) /* Index changed */ + { + info->lastinx = info->save_lastinx; + info->last_key.keyinfo= info->s->keyinfo + info->lastinx; + info->last_key.flag= 0; + info->page_changed=1; + } info->cur_row.lastpos= info->save_lastpos; info->last_key.data_length= info->save_lastkey_data_length; info->last_key.ref_length= info->save_lastkey_ref_length; From c8cece91440edb77aa43b8ba20930fa91514308e Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 2 Nov 2021 04:52:04 +0300 Subject: [PATCH 15/26] MDEV-26928 Column-inclusive WITH SYSTEM VERSIONING doesn't work with explicit system fields versioning_fields flag indicates that any columns were specified WITH SYSTEM VERSIONING. In that case we imply WITH SYSTEM VERSIONING for the whole table and WITHOUT SYSTEM VERSIONING for the other columns. --- mysql-test/suite/versioning/r/create.result | 25 +++++++++++++++++++++ mysql-test/suite/versioning/t/create.test | 17 ++++++++++++++ sql/handler.cc | 10 ++++----- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/mysql-test/suite/versioning/r/create.result b/mysql-test/suite/versioning/r/create.result index fe0e6c807c3..8943ea1f1cd 100644 --- a/mysql-test/suite/versioning/r/create.result +++ b/mysql-test/suite/versioning/r/create.result @@ -599,3 +599,28 @@ t1 CREATE TABLE `t1` ( PRIMARY KEY (`id`) ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING drop table t1; +# +# MDEV-26928 Column-inclusive WITH SYSTEM VERSIONING doesn't work with explicit system fields +# +create or replace table t1 (x int, y int with system versioning); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `x` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING, + `y` int(11) DEFAULT NULL +) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING +create or replace table t1 ( +x int, y int with system versioning, +row_start timestamp(6) as row start, +row_end timestamp(6) as row end, +period for system_time(row_start, row_end)); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `x` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING, + `y` int(11) DEFAULT NULL, + `row_start` timestamp(6) GENERATED ALWAYS AS ROW START WITHOUT SYSTEM VERSIONING, + `row_end` timestamp(6) GENERATED ALWAYS AS ROW END WITHOUT SYSTEM VERSIONING, + PERIOD FOR SYSTEM_TIME (`row_start`, `row_end`) +) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING +drop table t1; diff --git a/mysql-test/suite/versioning/t/create.test b/mysql-test/suite/versioning/t/create.test index 1d9f3a1b341..b1f0055f5cc 100644 --- a/mysql-test/suite/versioning/t/create.test +++ b/mysql-test/suite/versioning/t/create.test @@ -451,3 +451,20 @@ show index from t1; --replace_result $default_engine DEFAULT_ENGINE show create table t1; drop table t1; + +--echo # +--echo # MDEV-26928 Column-inclusive WITH SYSTEM VERSIONING doesn't work with explicit system fields +--echo # +create or replace table t1 (x int, y int with system versioning); +--replace_result $default_engine DEFAULT_ENGINE +show create table t1; + +create or replace table t1 ( + x int, y int with system versioning, + row_start timestamp(6) as row start, + row_end timestamp(6) as row end, + period for system_time(row_start, row_end)); +--replace_result $default_engine DEFAULT_ENGINE +show create table t1; + +drop table t1; diff --git a/sql/handler.cc b/sql/handler.cc index bbd0f3bf515..47f78283897 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -7207,15 +7207,16 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields( if (!vers_info.need_check(alter_info)) return false; - if (!vers_info.versioned_fields && vers_info.unversioned_fields && - !(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING)) + const bool add_versioning= alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING; + + if (!vers_info.versioned_fields && vers_info.unversioned_fields && !add_versioning) { // All is correct but this table is not versioned. options&= ~HA_VERSIONED_TABLE; return false; } - if (!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING) && vers_info) + if (!add_versioning && vers_info && !vers_info.versioned_fields) { my_error(ER_MISSING, MYF(0), create_table.table_name.str, "WITH SYSTEM VERSIONING"); @@ -7225,8 +7226,7 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields( List_iterator it(alter_info->create_list); while (Create_field *f= it++) { - if ((f->versioning == Column_definition::VERSIONING_NOT_SET && - !(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING)) || + if ((f->versioning == Column_definition::VERSIONING_NOT_SET && !add_versioning) || f->versioning == Column_definition::WITHOUT_VERSIONING) { f->flags|= VERS_UPDATE_UNVERSIONED_FLAG; From 2df99f2193bba80588d0f114b31c1743665f63c6 Mon Sep 17 00:00:00 2001 From: Sergei Krivonos Date: Wed, 3 Nov 2021 18:14:02 +0200 Subject: [PATCH 16/26] Revert "MDEV-19129: Xcode compatibility update: deprecated vfork -> fork" This reverts commit 5d6f3cebca77ee650e6cde3bd738d1fac0a8110c. --- storage/connect/tabrest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/connect/tabrest.cpp b/storage/connect/tabrest.cpp index 6e8c96a27cb..c66d8d76f3d 100644 --- a/storage/connect/tabrest.cpp +++ b/storage/connect/tabrest.cpp @@ -112,7 +112,7 @@ int Xcurl(PGLOBAL g, PCSZ Http, PCSZ Uri, PCSZ filename) } // endif f - pID = fork(); + pID = vfork(); sprintf(fn, "-o%s", filename); if (pID == 0) { From 322fc4f4b3afab6c7607e36e2958146fdc2f4ea4 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Wed, 3 Nov 2021 18:23:16 +0100 Subject: [PATCH 17/26] appveyor - do not use buggy cygwin bison. --- appveyor.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index b42453a8350..9797aec6b44 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,3 +1,9 @@ +init: + # Install bison + - choco feature disable --name showDownloadProgress + - choco install -y winflexbison + - C:\ProgramData\chocolatey\lib\winflexbison\tools\win_bison.exe --version + version: build-{build}~branch-{branch} clone_depth: 1 @@ -17,7 +23,7 @@ build_script: - set BUILD_TYPE=MinSizeRel - set GENERATOR=-GNinja - call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" - - cmake -E time cmake %GENERATOR% .. -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DMYSQL_MAINTAINER_MODE=ERR -DFAST_BUILD=1 -DBISON_EXECUTABLE=C:\cygwin64\bin\bison -DPLUGIN_PERFSCHEMA=NO -DPLUGIN_FEEDBACK=NO + - cmake -E time cmake %GENERATOR% .. -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DMYSQL_MAINTAINER_MODE=ERR -DFAST_BUILD=1 -DBISON_EXECUTABLE=C:\ProgramData\chocolatey\lib\winflexbison\tools\win_bison.exe -DPLUGIN_PERFSCHEMA=NO -DPLUGIN_FEEDBACK=NO - set /A jobs=2*%NUMBER_OF_PROCESSORS% - cmake -E time cmake --build . -j %jobs% --config %BUILD_TYPE% --target minbuild From 9dc05f1f11bfd9a066d9154e5c6022af5a9538ac Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Fri, 5 Nov 2021 16:27:08 +0400 Subject: [PATCH 18/26] MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int --- mysql-test/r/ctype_cp850.result | 1050 +++++++++++++++++++++++++++++++ mysql-test/r/ctype_cp866.result | 12 + mysql-test/t/ctype_cp850.test | 32 + mysql-test/t/ctype_cp866.test | 14 + sql/item.h | 13 + sql/item_cmpfunc.cc | 4 +- 6 files changed, 1123 insertions(+), 2 deletions(-) create mode 100644 mysql-test/r/ctype_cp866.result create mode 100644 mysql-test/t/ctype_cp866.test diff --git a/mysql-test/r/ctype_cp850.result b/mysql-test/r/ctype_cp850.result index c028f72b58a..c6aba9d3f4e 100644 --- a/mysql-test/r/ctype_cp850.result +++ b/mysql-test/r/ctype_cp850.result @@ -12,3 +12,1053 @@ DROP TABLE t1; # # End of 5.5 tests # +# +# Start of 10.2 tests +# +# +# MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int +# +SET NAMES cp850; +SELECT '' LIKE '' ESCAPE _cp850 0xFF; +'' LIKE '' ESCAPE _cp850 0xFF +1 +BEGIN NOT ATOMIC +DECLARE ch INT DEFAULT 0x00; +DECLARE query TEXT DEFAULT 'SELECT _cp850'''' LIKE _cp850'''' ESCAPE _cp850 0xFF'; +WHILE ch <= 0xFF DO +SET @query= REPLACE(query, 'FF', CONV(ch, 10, 16)); +SELECT @query; +PREPARE stmt FROM @query; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET ch=ch+1; +END WHILE; +END; +$$ +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x0 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x0 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x10 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x10 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x11 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x11 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x12 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x12 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x13 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x13 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x14 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x14 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x15 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x15 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x16 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x16 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x17 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x17 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x18 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x18 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x19 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x19 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1A +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1A +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1B +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1B +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1C +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1C +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1D +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1D +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1E +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1E +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1F +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1F +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x20 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x20 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x21 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x21 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x22 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x22 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x23 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x23 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x24 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x24 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x25 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x25 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x26 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x26 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x27 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x27 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x28 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x28 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x29 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x29 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2A +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2A +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2B +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2B +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2C +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2C +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2D +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2D +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2E +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2E +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2F +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2F +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x30 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x30 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x31 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x31 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x32 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x32 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x33 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x33 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x34 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x34 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x35 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x35 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x36 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x36 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x37 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x37 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x38 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x38 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x39 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x39 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3A +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3A +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3B +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3B +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3C +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3C +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3D +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3D +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3E +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3E +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3F +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3F +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x40 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x40 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x41 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x41 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x42 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x42 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x43 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x43 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x44 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x44 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x45 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x45 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x46 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x46 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x47 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x47 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x48 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x48 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x49 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x49 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4A +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4A +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4B +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4B +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4C +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4C +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4D +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4D +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4E +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4E +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4F +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4F +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x50 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x50 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x51 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x51 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x52 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x52 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x53 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x53 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x54 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x54 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x55 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x55 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x56 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x56 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x57 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x57 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x58 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x58 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x59 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x59 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5A +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5A +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5B +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5B +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5C +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5C +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5D +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5D +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5E +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5E +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5F +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5F +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x60 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x60 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x61 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x61 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x62 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x62 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x63 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x63 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x64 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x64 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x65 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x65 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x66 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x66 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x67 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x67 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x68 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x68 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x69 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x69 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6A +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6A +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6B +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6B +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6C +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6C +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6D +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6D +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6E +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6E +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6F +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6F +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x70 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x70 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x71 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x71 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x72 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x72 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x73 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x73 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x74 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x74 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x75 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x75 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x76 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x76 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x77 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x77 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x78 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x78 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x79 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x79 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7A +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7A +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7B +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7B +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7C +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7C +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7D +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7D +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7E +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7E +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7F +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7F +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x80 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x80 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x81 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x81 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x82 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x82 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x83 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x83 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x84 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x84 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x85 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x85 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x86 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x86 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x87 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x87 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x88 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x88 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x89 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x89 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8A +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8A +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8B +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8B +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8C +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8C +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8D +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8D +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8E +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8E +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8F +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8F +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x90 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x90 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x91 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x91 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x92 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x92 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x93 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x93 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x94 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x94 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x95 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x95 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x96 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x96 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x97 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x97 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x98 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x98 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x99 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x99 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9A +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9A +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9B +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9B +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9C +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9C +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9D +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9D +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9E +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9E +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9F +_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9F +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA0 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA0 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA1 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA1 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA2 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA2 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA3 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA3 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA4 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA4 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA5 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA5 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA6 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA6 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA7 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA7 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA8 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA8 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA9 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA9 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAA +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAA +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAB +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAB +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAC +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAC +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAD +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAD +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAE +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAE +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAF +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAF +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB0 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB0 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB1 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB1 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB2 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB2 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB3 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB3 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB4 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB4 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB5 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB5 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB6 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB6 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB7 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB7 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB8 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB8 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB9 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB9 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBA +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBA +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBB +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBB +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBC +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBC +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBD +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBD +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBE +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBE +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBF +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBF +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC0 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC0 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC1 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC1 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC2 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC2 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC3 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC3 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC4 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC4 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC5 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC5 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC6 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC6 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC7 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC7 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC8 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC8 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC9 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC9 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCA +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCA +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCB +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCB +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCC +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCC +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCD +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCD +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCE +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCE +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCF +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCF +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD0 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD0 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD1 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD1 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD2 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD2 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD3 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD3 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD4 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD4 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD5 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD5 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD6 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD6 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD7 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD7 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD8 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD8 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD9 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD9 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDA +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDA +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDB +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDB +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDC +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDC +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDD +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDD +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDE +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDE +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDF +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDF +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE0 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE0 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE1 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE1 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE2 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE2 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE3 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE3 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE4 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE4 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE5 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE5 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE6 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE6 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE7 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE7 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE8 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE8 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE9 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE9 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xEA +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xEA +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xEB +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xEB +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xEC +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xEC +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xED +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xED +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xEE +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xEE +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xEF +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xEF +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF0 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF0 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF1 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF1 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF2 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF2 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF3 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF3 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF4 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF4 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF5 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF5 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF6 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF6 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF7 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF7 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF8 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF8 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF9 +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF9 +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFA +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFA +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFB +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFB +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFC +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFC +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFD +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFD +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFE +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFE +1 +@query +SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFF +_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFF +1 +# +# End of 10.2 tests +# diff --git a/mysql-test/r/ctype_cp866.result b/mysql-test/r/ctype_cp866.result new file mode 100644 index 00000000000..008f94f3c79 --- /dev/null +++ b/mysql-test/r/ctype_cp866.result @@ -0,0 +1,12 @@ +# +# Start of 10.2 tests +# +# +# MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int +# +SELECT _cp866'' LIKE _cp866'' ESCAPE _cp866 0xFF; +_cp866'' LIKE _cp866'' ESCAPE _cp866 0xFF +1 +# +# End of 10.2 tests +# diff --git a/mysql-test/t/ctype_cp850.test b/mysql-test/t/ctype_cp850.test index 358829eb351..d2fac6f3646 100644 --- a/mysql-test/t/ctype_cp850.test +++ b/mysql-test/t/ctype_cp850.test @@ -14,3 +14,35 @@ DROP TABLE t1; --echo # --echo # End of 5.5 tests --echo # + +--echo # +--echo # Start of 10.2 tests +--echo # + +--echo # +--echo # MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int +--echo # + +SET NAMES cp850; +SELECT '' LIKE '' ESCAPE _cp850 0xFF; + +DELIMITER $$; +BEGIN NOT ATOMIC + DECLARE ch INT DEFAULT 0x00; + DECLARE query TEXT DEFAULT 'SELECT _cp850'''' LIKE _cp850'''' ESCAPE _cp850 0xFF'; + WHILE ch <= 0xFF DO + SET @query= REPLACE(query, 'FF', CONV(ch, 10, 16)); + SELECT @query; + PREPARE stmt FROM @query; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + SET ch=ch+1; + END WHILE; +END; +$$ +DELIMITER ;$$ + + +--echo # +--echo # End of 10.2 tests +--echo # diff --git a/mysql-test/t/ctype_cp866.test b/mysql-test/t/ctype_cp866.test new file mode 100644 index 00000000000..cdc694d2fc7 --- /dev/null +++ b/mysql-test/t/ctype_cp866.test @@ -0,0 +1,14 @@ +--echo # +--echo # Start of 10.2 tests +--echo # + +--echo # +--echo # MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int +--echo # + +SELECT _cp866'' LIKE _cp866'' ESCAPE _cp866 0xFF; + + +--echo # +--echo # End of 10.2 tests +--echo # diff --git a/sql/item.h b/sql/item.h index 35700129243..2a904c1691a 100644 --- a/sql/item.h +++ b/sql/item.h @@ -6236,6 +6236,19 @@ public: }; +/* + fix_escape_item() sets the out "escape" parameter to: + - native code in case of an 8bit character set + - Unicode code point in case of a multi-byte character set + + The value meaning a not-initialized ESCAPE character must not be equal to + any valid value, so must be outside of these ranges: + - -128..+127, not to conflict with a valid 8bit charcter + - 0..0x10FFFF, not to conflict with a valid Unicode code point + The exact value does not matter. +*/ +#define ESCAPE_NOT_INITIALIZED -1000 + /* It's used in ::fix_fields() methods of LIKE and JSON_SEARCH functions to handle the ESCAPE parameter. diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 8a2c532f621..3a76982d80e 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -5266,7 +5266,7 @@ void Item_func_like::print(String *str, enum_query_type query_type) longlong Item_func_like::val_int() { DBUG_ASSERT(fixed == 1); - DBUG_ASSERT(escape != -1); + DBUG_ASSERT(escape != ESCAPE_NOT_INITIALIZED); String* res= args[0]->val_str(&cmp_value1); if (args[0]->null_value) { @@ -5370,7 +5370,7 @@ bool fix_escape_item(THD *thd, Item *escape_item, String *tmp_str, return TRUE; } - IF_DBUG(*escape= -1,); + IF_DBUG(*escape= ESCAPE_NOT_INITIALIZED,); if (escape_item->const_item()) { From 2a3dae115ba12eb6e6c10a75d4c98a9c47dd5cd2 Mon Sep 17 00:00:00 2001 From: Alexey Bychko Date: Sat, 23 Oct 2021 22:38:13 +0700 Subject: [PATCH 19/26] MDEV-22522 RPM packages have meaningless summary/description added summary/description per package. --- cmake/cpack_rpm.cmake | 73 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 6 deletions(-) diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake index d8cd97d5043..82bd0675b34 100644 --- a/cmake/cpack_rpm.cmake +++ b/cmake/cpack_rpm.cmake @@ -48,21 +48,82 @@ SET(CPACK_RPM_PACKAGE_RELOCATABLE FALSE) SET(CPACK_PACKAGE_RELOCATABLE FALSE) SET(CPACK_RPM_PACKAGE_GROUP "Applications/Databases") SET(CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_URL}) -SET(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_RPM_shared_PACKAGE_VENDOR "MariaDB Corporation Ab") SET(CPACK_RPM_shared_PACKAGE_LICENSE "LGPLv2.1") -SET(CPACK_RPM_shared_PACKAGE_SUMMARY "LGPL MariaDB client library") -SET(CPACK_RPM_shared_PACKAGE_DESCRIPTION " -This is LGPL MariaDB client library that can be used to connect to MySQL + +# Set default description for packages +SET(CPACK_RPM_PACKAGE_DESCRIPTION "MariaDB: a very fast and robust SQL database server + +It is GPL v2 licensed, which means you can use the it free of charge under the +conditions of the GNU General Public License Version 2 (http://www.gnu.org/licenses/). + +MariaDB documentation can be found at https://mariadb.com/kb +MariaDB bug reports should be submitted through https://jira.mariadb.org") + +# Packages with default description +SET(CPACK_RPM_client_PACKAGE_SUMMARY "MariaDB database client binaries") +SET(CPACK_RPM_common_PACKAGE_SUMMARY "MariaDB database common files (e.g. /etc/mysql/conf.d/mariadb.cnf)") +SET(CPACK_RPM_compat_PACKAGE_SUMMARY "MariaDB database client library MySQL compat package") +SET(CPACK_RPM_devel_PACKAGE_SUMMARY "MariaDB database development files") +SET(CPACK_RPM_server_PACKAGE_SUMMARY "MariaDB database server binaries") +SET(CPACK_RPM_test_PACKAGE_SUMMARY "MariaDB database regression test suite") + +# libmariadb3 +SET(CPACK_RPM_shared_PACKAGE_SUMMARY "LGPL MariaDB database client library") +SET(CPACK_RPM_shared_PACKAGE_DESCRIPTION "This is LGPL MariaDB client library that can be used to connect to MySQL or MariaDB. This code is based on the LGPL libmysql client library from MySQL 3.23 and PHP's mysqlnd extension. This product includes PHP software, freely available from - -") +http://www.php.net/software/") + +# Summary and descriptions per package +SET(CPACK_RPM_backup_PACKAGE_SUMMARY "Backup tool for MariaDB server") +SET(CPACK_RPM_backup_PACKAGE_DESCRIPTION "Mariabackup is an open source tool provided by MariaDB +for performing physical online backups of InnoDB, Aria and MyISAM tables. +For InnoDB, “hot online” backups are possible. +It was originally forked from Percona XtraBackup 2.3.8.") + +SET(CPACK_RPM_cassandra-engine_PACKAGE_SUMMARY "Cassandra storage engine for MariaDB") +SET(CPACK_RPM_cassandra-engine_PACKAGE_DESCRIPTION "The Cassandra Storage Engine allows access to data in a Cassandra cluster from +MariaDB, combining the best of SQL and no-SQL worlds. Cassandra SE (storage +engine) makes Cassandra's column family appear as a table in MariaDB that you +can insert to, update, and select from. You can write joins against this table, +it is possible to join data that's stored in MariaDB with data that's stored in +Cassandra.") + +SET(CPACK_RPM_connect-engine_PACKAGE_SUMMARY "Connect storage engine for MariaDB") +SET(CPACK_RPM_connect-engine_PACKAGE_DESCRIPTION "Connect engine supports a number of file formats (dbf, xml, txt, bin, etc), +connections to ODBC tables and remote MySQL tables, as well as a number of +other interesting features.") + +SET(CPACK_RPM_cracklib-password-check_PACKAGE_SUMMARY "CrackLib Password Validation Plugin for MariaDB") +SET(CPACK_RPM_cracklib-password-check_PACKAGE_DESCRIPTION "This password validation plugin uses cracklib to allow only +sufficiently secure (as defined by cracklib) user passwords in MariaDB.") + +SET(CPACK_RPM_gssapi-server_PACKAGE_SUMMARY "GSSAPI authentication plugin for MariaDB server") +SET(CPACK_RPM_gssapi-server_PACKAGE_DESCRIPTION "The gssapi authentication plugin allows the user to authenticate with services +that use the Generic Security Services Application Program Interface (GSSAPI). +The gssapi authentication plugin is most often used for authenticating with Microsoft Active Directory.") + +SET(CPACK_RPM_oqgraph-engine_PACKAGE_SUMMARY "OQGraph storage engine for MariaDB") +SET(CPACK_RPM_oqgraph-engine_PACKAGE_DESCRIPTION "The Open Query GRAPH computation engine, or OQGRAPH as the engine itself is called, +allows you to handle hierarchies (tree structures) and complex graphs +(nodes having many connections in several directions). +It is intended to be used for retrieving hierarchical information, such as those used for graphs, +routes or social relationships, in plain SQL.") + +SET(CPACK_RPM_rocksdb-engine_PACKAGE_SUMMARY "RocksDB storage engine for MariaDB") +SET(CPACK_RPM_rocksdb-engine_PACKAGE_DESCRIPTION "The RocksDB storage engine is a high performance storage engine, aimed +at maximising storage efficiency while maintaining InnoDB-like performance.") + +SET(CPACK_RPM_tokudb-engine_PACKAGE_SUMMARY "TokuDB storage engine for MariaDB") +SET(CPACK_RPM_tokudb-engine_PACKAGE_DESCRIPTION "The TokuDB storage engine is for use in high-performance and write-intensive +environments, offering increased compression and better performance based +on fractal indexes.") SET(CPACK_RPM_SPEC_MORE_DEFINE " %define mysql_vendor ${CPACK_PACKAGE_VENDOR} From 8b6dfc3c029e32dccd6c311b861d6a2ec5163ab6 Mon Sep 17 00:00:00 2001 From: Daniel Bartholomew Date: Mon, 8 Nov 2021 11:26:47 -0500 Subject: [PATCH 20/26] bump the VERSION --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 494d4b1db72..3c9ab398726 100644 --- a/VERSION +++ b/VERSION @@ -1,3 +1,3 @@ MYSQL_VERSION_MAJOR=10 MYSQL_VERSION_MINOR=2 -MYSQL_VERSION_PATCH=41 +MYSQL_VERSION_PATCH=42 From 227b782ad6a6b199caa5dc1c034f6dbe4e44fca8 Mon Sep 17 00:00:00 2001 From: Daniel Bartholomew Date: Mon, 8 Nov 2021 12:39:31 -0500 Subject: [PATCH 21/26] bump the VERSION --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 6abe981f6c2..16ab780f3f3 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=10 MYSQL_VERSION_MINOR=4 -MYSQL_VERSION_PATCH=22 +MYSQL_VERSION_PATCH=23 SERVER_MATURITY=stable From e026eddc7dc3b17e7120adfded1d53da0e7ec9f0 Mon Sep 17 00:00:00 2001 From: Daniel Bartholomew Date: Mon, 8 Nov 2021 12:56:18 -0500 Subject: [PATCH 22/26] bump the VERSION --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 429bbd2a872..2504c916680 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=10 MYSQL_VERSION_MINOR=3 -MYSQL_VERSION_PATCH=32 +MYSQL_VERSION_PATCH=33 SERVER_MATURITY=stable From e1eb39a446c30b8459c39fd7f2ee1c55a36e97d2 Mon Sep 17 00:00:00 2001 From: ryancaicse <73822648+ryancaicse@users.noreply.github.com> Date: Tue, 26 Oct 2021 18:48:44 +0800 Subject: [PATCH 23/26] MDEV-26561 Fix a bug due to unreleased lock Fix a bug of unreleased lock ctrl_mutex in the method create_worker_threads --- extra/mariabackup/ds_compress.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/extra/mariabackup/ds_compress.cc b/extra/mariabackup/ds_compress.cc index 23de4d85116..72c93879947 100644 --- a/extra/mariabackup/ds_compress.cc +++ b/extra/mariabackup/ds_compress.cc @@ -369,6 +369,7 @@ create_worker_threads(uint n) thd)) { msg("compress: pthread_create() failed: " "errno = %d", errno); + pthread_mutex_unlock(&thd->ctrl_mutex); goto err; } } From 7c30bc38a588b22b01f11130cfe99e7f36accf94 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 27 Oct 2021 09:42:45 +1100 Subject: [PATCH 24/26] MDEV-26561 mariabackup release locks The previous threads locked need to be released too. This occurs if the initialization of any of the non-first mutex/conditition variables errors occurs. --- extra/mariabackup/ds_compress.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/extra/mariabackup/ds_compress.cc b/extra/mariabackup/ds_compress.cc index 72c93879947..a85523bd880 100644 --- a/extra/mariabackup/ds_compress.cc +++ b/extra/mariabackup/ds_compress.cc @@ -386,6 +386,13 @@ create_worker_threads(uint n) return threads; err: + while (i > 0) { + comp_thread_ctxt_t *thd; + i--; + thd = threads + i; + pthread_mutex_unlock(&thd->ctrl_mutex); + } + my_free(threads); return NULL; } From 8c7e551da13e0f270eb68d77614253fa05e5b087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Tue, 9 Nov 2021 08:08:29 +0200 Subject: [PATCH 25/26] Remove restarts from encrypt_and_grep test --- .../suite/encryption/r/encrypt_and_grep.result | 6 ++++++ .../suite/encryption/t/encrypt_and_grep.test | 16 ++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/mysql-test/suite/encryption/r/encrypt_and_grep.result b/mysql-test/suite/encryption/r/encrypt_and_grep.result index 7068d1d3502..69837a8dfa9 100644 --- a/mysql-test/suite/encryption/r/encrypt_and_grep.result +++ b/mysql-test/suite/encryption/r/encrypt_and_grep.result @@ -19,6 +19,7 @@ mysql/innodb_index_stats mysql/innodb_table_stats test/t1 test/t2 +FLUSH TABLES t1,t2,t3 FOR EXPORT; # t1 yes on expecting NOT FOUND NOT FOUND /foobarsecret/ in t1.ibd # t2 ... on expecting NOT FOUND @@ -27,6 +28,7 @@ NOT FOUND /tempsecret/ in t2.ibd FOUND 12 /dummysecret/ in t3.ibd # ibdata1 expecting NOT FOUND NOT FOUND /foobarsecret/ in ibdata1 +UNLOCK TABLES; # Now turn off encryption and wait for threads to decrypt everything SET GLOBAL innodb_encrypt_tables = off; # Wait max 10 min for key encryption threads to decrypt all spaces @@ -40,6 +42,7 @@ test/t3 SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; NAME test/t1 +FLUSH TABLES t1,t2,t3 FOR EXPORT; # t1 yes on expecting NOT FOUND NOT FOUND /foobarsecret/ in t1.ibd # t2 ... default expecting FOUND @@ -48,6 +51,7 @@ FOUND 12 /tempsecret/ in t2.ibd FOUND 12 /dummysecret/ in t3.ibd # ibdata1 expecting NOT FOUND NOT FOUND /foobarsecret/ in ibdata1 +UNLOCK TABLES; # Now turn on encryption and wait for threads to encrypt all spaces SET GLOBAL innodb_encrypt_tables = on; # Wait max 10 min for key encryption threads to encrypt all spaces @@ -61,6 +65,7 @@ mysql/innodb_index_stats mysql/innodb_table_stats test/t1 test/t2 +FLUSH TABLES t1,t2,t3 FOR EXPORT; # t1 yes on expecting NOT FOUND NOT FOUND /foobarsecret/ in t1.ibd # t2 ... on expecting NOT FOUND @@ -69,4 +74,5 @@ NOT FOUND /tempsecret/ in t2.ibd FOUND 12 /dummysecret/ in t3.ibd # ibdata1 expecting NOT FOUND NOT FOUND /foobarsecret/ in ibdata1 +UNLOCK TABLES; drop table t1, t2, t3; diff --git a/mysql-test/suite/encryption/t/encrypt_and_grep.test b/mysql-test/suite/encryption/t/encrypt_and_grep.test index eb587d7ea12..64ef9dd5316 100644 --- a/mysql-test/suite/encryption/t/encrypt_and_grep.test +++ b/mysql-test/suite/encryption/t/encrypt_and_grep.test @@ -1,9 +1,6 @@ -- source include/have_innodb.inc -- source include/have_file_key_management_plugin.inc -# embedded does not support restart --- source include/not_embedded.inc - # # MDEV-8138: strange results from encrypt-and-grep test # @@ -38,7 +35,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_ --sorted_result SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; ---source include/shutdown_mysqld.inc +FLUSH TABLES t1,t2,t3 FOR EXPORT; --let SEARCH_PATTERN=foobarsecret --echo # t1 yes on expecting NOT FOUND @@ -57,7 +54,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_ -- let SEARCH_FILE=$ib1_IBD -- source include/search_pattern_in_file.inc --- source include/start_mysqld.inc +UNLOCK TABLES; --echo # Now turn off encryption and wait for threads to decrypt everything @@ -74,7 +71,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_ --sorted_result SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; ---source include/shutdown_mysqld.inc +FLUSH TABLES t1,t2,t3 FOR EXPORT; --let SEARCH_PATTERN=foobarsecret --echo # t1 yes on expecting NOT FOUND @@ -93,8 +90,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_ -- let SEARCH_FILE=$ib1_IBD -- source include/search_pattern_in_file.inc - --- source include/start_mysqld.inc +UNLOCK TABLES; --echo # Now turn on encryption and wait for threads to encrypt all spaces SET GLOBAL innodb_encrypt_tables = on; @@ -109,7 +105,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_ --sorted_result SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; ---source include/shutdown_mysqld.inc +FLUSH TABLES t1,t2,t3 FOR EXPORT; --let SEARCH_PATTERN=foobarsecret --echo # t1 yes on expecting NOT FOUND @@ -128,6 +124,6 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_ -- let SEARCH_FILE=$ib1_IBD -- source include/search_pattern_in_file.inc --- source include/start_mysqld.inc +UNLOCK TABLES; drop table t1, t2, t3; From d6d1a1fc21084c81a0795a26e67577c2a718f6ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Tue, 9 Nov 2021 08:23:25 +0200 Subject: [PATCH 26/26] Remove a warning for clang 11 or earlier This fixes up commit d22c8cae00f7a7517c9b8228efbb543037c23c97 --- storage/innobase/pars/pars0grm.cc | 2 +- storage/innobase/pars/pars0grm.y | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/innobase/pars/pars0grm.cc b/storage/innobase/pars/pars0grm.cc index 10d0d0becd7..1e10a61f5ad 100644 --- a/storage/innobase/pars/pars0grm.cc +++ b/storage/innobase/pars/pars0grm.cc @@ -79,7 +79,7 @@ que_node_t */ #include "que0que.h" #include "row0sel.h" -#ifdef __GNUC__ +#if defined __GNUC__ && (!defined __clang_major__ || __clang_major__ > 11) #pragma GCC diagnostic ignored "-Wfree-nonheap-object" #endif diff --git a/storage/innobase/pars/pars0grm.y b/storage/innobase/pars/pars0grm.y index 3fb0865f608..ed2b9bc09b0 100644 --- a/storage/innobase/pars/pars0grm.y +++ b/storage/innobase/pars/pars0grm.y @@ -38,7 +38,7 @@ que_node_t */ #include "que0que.h" #include "row0sel.h" -#ifdef __GNUC__ +#if defined __GNUC__ && (!defined __clang_major__ || __clang_major__ > 11) #pragma GCC diagnostic ignored "-Wfree-nonheap-object" #endif