Commit fc78b253 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge mariadb-10.6.15 into 10.6

parents e0398c5b 0d16eb35
# include/no_valgrind_without_big.inc
#
# If we are running with Valgrind ($VALGRIND_TEST <> 0) than the resource
# consumption (storage space needed, runtime ...) will be extreme.
# Therefore we require that the option "--big-test" is also set.
#
if ($VALGRIND_TEST) {
if (!$BIG_TEST)
{
--skip Need "--big-test" when running with Valgrind
}
}
......@@ -6256,3 +6256,19 @@ length(concat(t1.f,t2.f))
DROP TABLE t;
set @@optimizer_switch=@org_optimizer_switch;
set @@join_buffer_size=@org_join_buffer_size;
#
# MDEV-31348 Assertion `last_key_entry >= end_pos' failed in
# virtual bool JOIN_CACHE_HASHED::put_record()
#
SET JOIN_buffer_size=1;
Warnings:
Warning 1292 Truncated incorrect join_buffer_size value: '1'
SET SESSION JOIN_cache_level=4;
SET SESSION optimizer_switch='optimize_JOIN_buffer_size=OFF';
SELECT * FROM information_schema.statistics JOIN information_schema.COLUMNS USING (table_name,column_name);
ERROR HY001: Could not create a join buffer. Please check and adjust the value of the variables 'JOIN_BUFFER_SIZE (128)' and 'JOIN_BUFFER_SPACE_LIMIT (2097152)'
SET JOIN_buffer_size=16384;
SELECT * FROM information_schema.statistics JOIN information_schema.COLUMNS USING (table_name,column_name);
#
# End of 10.4 tests
#
......@@ -4230,3 +4230,22 @@ SELECT length(concat(t1.f,t2.f)) FROM t t1, t t2;
DROP TABLE t;
set @@optimizer_switch=@org_optimizer_switch;
set @@join_buffer_size=@org_join_buffer_size;
--echo #
--echo # MDEV-31348 Assertion `last_key_entry >= end_pos' failed in
--echo # virtual bool JOIN_CACHE_HASHED::put_record()
--echo #
SET JOIN_buffer_size=1;
SET SESSION JOIN_cache_level=4;
SET SESSION optimizer_switch='optimize_JOIN_buffer_size=OFF';
--error ER_OUTOFMEMORY
SELECT * FROM information_schema.statistics JOIN information_schema.COLUMNS USING (table_name,column_name);
SET JOIN_buffer_size=16384;
--disable_result_log
SELECT * FROM information_schema.statistics JOIN information_schema.COLUMNS USING (table_name,column_name);
--enable_result_log
--echo #
--echo # End of 10.4 tests
--echo #
......@@ -2,8 +2,11 @@
# Tests that should be in join_cache but cannot be run with ASAN
--source include/have_64bit.inc
# Disable asan it asan builds crashes when trying to allocate too much memory
--source include/not_asan.inc
--source include/not_msan.inc
# Valgrind is useful here, but very slow as lots of memory is allocated
--source include/no_valgrind_without_big.inc
--source include/have_innodb.inc
--echo #
......
......@@ -8972,3 +8972,15 @@ select @counter;
5
drop function f1;
drop table t1,t2;
#
# MDEV-31877: ASAN errors in Exec_time_tracker::get_cycles with innodb slow log verbosity
#
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,2);
SET @tmp=@@log_slow_verbosity;
SET SESSION log_slow_verbosity= 'innodb';
BEGIN NOT ATOMIC DECLARE r ROW TYPE OF t1 DEFAULT (SELECT * FROM t1); SELECT r.a; END $
r.a
1
SET SESSION log_slow_verbosity= @tmp;
DROP TABLE t1;
......@@ -10573,3 +10573,19 @@ select f1(col1) from t2 order by col2 desc limit 5;
select @counter;
drop function f1;
drop table t1,t2;
--echo #
--echo # MDEV-31877: ASAN errors in Exec_time_tracker::get_cycles with innodb slow log verbosity
--echo #
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,2);
SET @tmp=@@log_slow_verbosity;
SET SESSION log_slow_verbosity= 'innodb';
--delimiter $
BEGIN NOT ATOMIC DECLARE r ROW TYPE OF t1 DEFAULT (SELECT * FROM t1); SELECT r.a; END $
--delimiter ;
SET SESSION log_slow_verbosity= @tmp;
# Cleanup
DROP TABLE t1;
......@@ -3807,7 +3807,6 @@ int
sp_instr_set::exec_core(THD *thd, uint *nextp)
{
int res= get_rcontext(thd)->set_variable(thd, m_offset, &m_value);
delete_explain_query(thd->lex);
*nextp = m_ip+1;
return res;
}
......@@ -3849,7 +3848,6 @@ sp_instr_set_row_field::exec_core(THD *thd, uint *nextp)
int res= get_rcontext(thd)->set_variable_row_field(thd, m_offset,
m_field_offset,
&m_value);
delete_explain_query(thd->lex);
*nextp= m_ip + 1;
return res;
}
......@@ -3897,7 +3895,6 @@ sp_instr_set_row_field_by_name::exec_core(THD *thd, uint *nextp)
int res= get_rcontext(thd)->set_variable_row_field_by_name(thd, m_offset,
m_field_name,
&m_value);
delete_explain_query(thd->lex);
*nextp= m_ip + 1;
return res;
}
......
......@@ -800,6 +800,18 @@ size_t JOIN_CACHE::get_min_join_buffer_size()
}
size_t JOIN_CACHE::calc_avg_record_length()
{
size_t len= 0;
for (JOIN_TAB *tab= start_tab; tab != join_tab;
tab= next_linear_tab(join, tab, WITHOUT_BUSH_ROOTS))
{
len+= tab->get_used_fieldlength();
}
len+= get_record_max_affix_length();
return len;
}
/*
Get the maximum possible size of the cache join buffer
......@@ -822,9 +834,9 @@ size_t JOIN_CACHE::get_min_join_buffer_size()
'max_buff_size' in order to use it directly at the next
invocations of the function.
RETURN VALUE
The maximum possible size of the join buffer of this cache
The maximum possible size of the join buffer of this cache
avg_record_length is also updated if optimize_buff_size != 0
*/
size_t JOIN_CACHE::get_max_join_buffer_size(bool optimize_buff_size,
......@@ -839,19 +851,13 @@ size_t JOIN_CACHE::get_max_join_buffer_size(bool optimize_buff_size,
return max_buff_size= limit_sz;
size_t max_sz;
size_t len= 0;
size_t len;
double max_records, partial_join_cardinality=
(join_tab-1)->get_partial_join_cardinality();
/* Expected join buffer space used for one record */
size_t space_per_record;
for (JOIN_TAB *tab= start_tab; tab != join_tab;
tab= next_linear_tab(join, tab, WITHOUT_BUSH_ROOTS))
{
len+= tab->get_used_fieldlength();
}
len+= get_record_max_affix_length();
avg_record_length= len;
len= avg_record_length= calc_avg_record_length();
len+= get_max_key_addon_space_per_record() + avg_aux_buffer_incr;
space_per_record= len;
......@@ -2794,7 +2800,6 @@ bool JOIN_CACHE_BKAH::save_explain_data(EXPLAIN_BKA_TYPE *explain)
int JOIN_CACHE_HASHED::init(bool for_explain)
{
TABLE_REF *ref= &join_tab->ref;
DBUG_ENTER("JOIN_CACHE_HASHED::init");
hash_table= 0;
......@@ -2881,6 +2886,8 @@ int JOIN_CACHE_HASHED::init_hash_table()
hash_table= 0;
key_entries= 0;
avg_record_length= calc_avg_record_length();
/* Calculate the minimal possible value of size_of_key_ofs greater than 1 */
uint max_size_of_key_ofs= MY_MAX(2, get_size_of_rec_offset());
for (size_of_key_ofs= 2;
......
......@@ -130,6 +130,7 @@ class JOIN_CACHE :public Sql_alloc
case 4: int4store(ptr, (uint32) ofs); return;
}
}
size_t calc_avg_record_length();
/*
The maximum total length of the fields stored for a record in the cache.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment