summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2023-01-30 13:25:02 +0100
committerOleksandr Byelkin <sanja@mariadb.com>2023-01-30 13:25:02 +0100
commitdb8019ef00060dbd469a3adffeae2dff6e0a0969 (patch)
tree1ebc0b90f36ffadb4cb40665419ba7a5e6b9f2e2
parent6173a4a15b3f14b78c11576ee81c317d6df6d371 (diff)
parentc8f2e9a5c0ac5905f28b050b7df5a9ffd914b7e7 (diff)
downloadmariadb-git-db8019ef00060dbd469a3adffeae2dff6e0a0969.tar.gz
Merge branch '10.4' into 10.5
m---------extra/wolfssl/wolfssl0
m---------libmariadb0
-rw-r--r--mysql-test/suite/binlog/disabled.def1
-rw-r--r--mysql-test/suite/binlog/r/binlog_recovery_after_checksum_change.result8
-rw-r--r--mysql-test/suite/binlog/r/innodb_rc_insert_before_delete.result52
-rw-r--r--sql/sql_select.cc10
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;