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
|
# 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 #
|
||||||
--echo # End of 10.1 tests
|
--echo # End of 10.1 tests
|
||||||
--echo #
|
--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 /
|
table->field[11]->store((double) tmp->progress.counter /
|
||||||
(double) max_counter*100.0);
|
(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);
|
mysql_mutex_unlock(&tmp->LOCK_thd_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user