diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2023-01-30 13:25:02 +0100 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2023-01-30 13:25:02 +0100 |
commit | db8019ef00060dbd469a3adffeae2dff6e0a0969 (patch) | |
tree | 1ebc0b90f36ffadb4cb40665419ba7a5e6b9f2e2 | |
parent | 6173a4a15b3f14b78c11576ee81c317d6df6d371 (diff) | |
parent | c8f2e9a5c0ac5905f28b050b7df5a9ffd914b7e7 (diff) | |
download | mariadb-git-db8019ef00060dbd469a3adffeae2dff6e0a0969.tar.gz |
Merge branch '10.4' into 10.5
m--------- | extra/wolfssl/wolfssl | 0 | ||||
m--------- | libmariadb | 0 | ||||
-rw-r--r-- | mysql-test/suite/binlog/disabled.def | 1 | ||||
-rw-r--r-- | mysql-test/suite/binlog/r/binlog_recovery_after_checksum_change.result | 8 | ||||
-rw-r--r-- | mysql-test/suite/binlog/r/innodb_rc_insert_before_delete.result | 52 | ||||
-rw-r--r-- | sql/sql_select.cc | 10 |
6 files changed, 59 insertions, 12 deletions
diff --git a/extra/wolfssl/wolfssl b/extra/wolfssl/wolfssl -Subproject f1e2165c591f074feb47872a8ff712713ec411e +Subproject 4fbd4fd36a21efd9d1a7e17aba390e91c78693b diff --git a/libmariadb b/libmariadb -Subproject 7fdb3eab66384a355475704332d11cc1ab82499 +Subproject d204e83104222844251b221e9be7eb3dd9f8d63 diff --git a/mysql-test/suite/binlog/disabled.def b/mysql-test/suite/binlog/disabled.def index 3a1f5472c85..888298bbb09 100644 --- a/mysql-test/suite/binlog/disabled.def +++ b/mysql-test/suite/binlog/disabled.def @@ -9,4 +9,3 @@ # Do not use any TAB characters for whitespace. # ############################################################################## -innodb_rc_insert_before_delete : MDEV-30490 2023-01-28 andrei see the MDEV description diff --git a/mysql-test/suite/binlog/r/binlog_recovery_after_checksum_change.result b/mysql-test/suite/binlog/r/binlog_recovery_after_checksum_change.result deleted file mode 100644 index 85b0b84c684..00000000000 --- a/mysql-test/suite/binlog/r/binlog_recovery_after_checksum_change.result +++ /dev/null @@ -1,8 +0,0 @@ -connection default; -set @@global.binlog_checksum=none; -set @@session.debug_dbug='d,crash_before_write_second_checkpoint_event'; -set @@global.binlog_checksum=crc32; -ERROR HY000: Lost connection to MySQL server during query -connection default; -NOT FOUND /Replication event checksum verification failed/ in mysqld.1.err -End of the tests diff --git a/mysql-test/suite/binlog/r/innodb_rc_insert_before_delete.result b/mysql-test/suite/binlog/r/innodb_rc_insert_before_delete.result new file mode 100644 index 00000000000..24d748b7673 --- /dev/null +++ b/mysql-test/suite/binlog/r/innodb_rc_insert_before_delete.result @@ -0,0 +1,52 @@ +connect pause_purge,localhost,root; +START TRANSACTION WITH CONSISTENT SNAPSHOT; +connection default; +CREATE TABLE t (pk int PRIMARY KEY, sk INT UNIQUE) ENGINE=InnoDB; +INSERT INTO t VALUES (10, 100); +connect con1,localhost,root; +BEGIN; +SELECT * FROM t WHERE sk = 100 FOR UPDATE; +pk sk +10 100 +connect con2,localhost,root; +SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL insert_wait_started"; +INSERT INTO t VALUES (5, 100) # trx 1; +connect con3,localhost,root; +SET TRANSACTION ISOLATION LEVEL READ COMMITTED; +SET DEBUG_SYNC="now WAIT_FOR insert_wait_started"; +SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL delete_started_waiting"; +BEGIN; +UPDATE t SET sk = 200 WHERE sk = 100; # trx 2; +connection con1; +SET DEBUG_SYNC="now WAIT_FOR delete_started_waiting"; +DELETE FROM t WHERE sk=100; +COMMIT; +disconnect con1; +connection con2; +disconnect con2; +connection con3; +must be logged in ROW format as the only event of trx 2 (con3) +INSERT INTO t VALUES (11, 101); +COMMIT; +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`; DELETE FROM t WHERE sk=100 +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Query # # use `test`; INSERT INTO t VALUES (5, 100) # trx 1 +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Gtid # # BEGIN GTID #-#-# +master-bin.000001 # Annotate_rows # # INSERT INTO t VALUES (11, 101) +master-bin.000001 # Table_map # # table_id: # (test.t) +master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +disconnect con3; +connection default; +SELECT * FROM t; +pk sk +5 100 +11 101 +disconnect pause_purge; +SET DEBUG_SYNC="RESET"; +DROP TABLE t; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 2bcd38bf502..42711270f60 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -7657,6 +7657,7 @@ best_access_path(JOIN *join, rec= MATCHING_ROWS_IN_OTHER_TABLE; // Fix for small tables Json_writer_object trace_access_idx(thd); + double eq_ref_rows= 0.0, eq_ref_cost= 0.0; /* full text keys require special treatment */ @@ -7701,7 +7702,10 @@ best_access_path(JOIN *join, tmp= adjust_quick_cost(table->opt_range[key].cost, 1); else tmp= table->file->avg_io_cost(); - tmp*= prev_record_reads(join_positions, idx, found_ref); + eq_ref_rows= prev_record_reads(join_positions, idx, + found_ref); + tmp*= eq_ref_rows; + eq_ref_cost= tmp; records=1.0; } else @@ -8019,8 +8023,8 @@ best_access_path(JOIN *join, Set the effective number of rows from "tmp" here. */ - keyread_tmp= tmp/ 2; - rows= tmp; + keyread_tmp= COST_ADD(eq_ref_cost / 2, s->startup_cost); + rows= eq_ref_rows; } else rows= record_count * records; |