mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-28131 Unexpected warning while selecting from information_schema.processlist
Problem: DECIMAL columns in I_S must be explicitly set of some value. I_S columns do not have `DEFAULT 0` (after MDEV-18918), so during restore_record() their record fragments pointed by Field::ptr are initialized to zero bytes 0x00. But an array of 0x00's is not a valid binary DECIMAL value. So val_decimal() called for such Field_new_decimal generated a warning when seeing a wrong binary encoded DECIMAL value in the record. Fix: Explicitly setting INFORMATION_SCHEMA.PROCESSLIST.PROGRESS to the decimal value of 0 if no progress information is available.
This commit is contained in:
@ -40,3 +40,23 @@ utf8mb4_string xxx😎yyy
|
||||
#
|
||||
# End of 10.1 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.3 tests
|
||||
#
|
||||
#
|
||||
# MDEV-28131 Unexpected warning while selecting from information_schema.processlist
|
||||
#
|
||||
connect conn1, localhost, root,,;
|
||||
connection conn1;
|
||||
SELECT SLEEP(1000);
|
||||
connection default;
|
||||
SELECT progress FROM information_schema.processlist WHERE info='SELECT SLEEP(1000)';
|
||||
progress
|
||||
0.000
|
||||
connection conn1;
|
||||
Got one of the listed errors
|
||||
connection default;
|
||||
disconnect conn1;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
|
@ -70,3 +70,38 @@ SELECT INFO, INFO_BINARY, 'xxx😎yyy' AS utf8mb4_string FROM INFORMATION_SCHEMA
|
||||
--echo #
|
||||
--echo # End of 10.1 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.3 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-28131 Unexpected warning while selecting from information_schema.processlist
|
||||
--echo #
|
||||
|
||||
connect (conn1, localhost, root,,);
|
||||
connection conn1;
|
||||
let $ID= `select connection_id()`;
|
||||
send SELECT SLEEP(1000);
|
||||
connection default;
|
||||
let $wait_timeout= 10;
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='User sleep' and info='SELECT SLEEP(1000)';
|
||||
--source include/wait_condition.inc
|
||||
SELECT progress FROM information_schema.processlist WHERE info='SELECT SLEEP(1000)';
|
||||
disable_query_log;
|
||||
eval kill $ID;
|
||||
enable_query_log;
|
||||
let $wait_timeout= 10;
|
||||
let $wait_condition=select count(*)=0 from information_schema.processlist
|
||||
where state='User sleep' and info='SELECT SLEEP(1000)';
|
||||
--source include/wait_condition.inc
|
||||
connection conn1;
|
||||
--error 2013,ER_CONNECTION_KILLED
|
||||
reap;
|
||||
connection default;
|
||||
disconnect conn1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
@ -3351,6 +3351,16 @@ int fill_schema_processlist(THD* thd, TABLE_LIST* tables, COND* cond)
|
||||
table->field[11]->store((double) tmp->progress.counter /
|
||||
(double) max_counter*100.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
This is a DECIMAL column without DEFAULT.
|
||||
restore_record() fills its Field::ptr to zero bytes,
|
||||
according to pack_length(). But an array of zero bytes
|
||||
is not a valid decimal. Set it explicitly to 0.
|
||||
*/
|
||||
table->field[11]->store((longlong) 0, true);
|
||||
}
|
||||
mysql_mutex_unlock(&tmp->LOCK_thd_data);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user