1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
--source include/have_debug_sync.inc
--echo #
--echo # Bug#33319149: TABLE ID is not updated in dd::Column se_private_date
--echo # for discarded table
--echo #
--echo # Test for non-partitioned table
# Verify that the table_id is updated in the column metadata
# after discarding a tablespace of a non-partitioned table
CREATE TABLE t1 (c1 INT, c2 INT as (c1 + 1) VIRTUAL);
SELECT TABLE_ID INTO @old_tableid FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME
LIKE '%t1%';
let $old_tid = `SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME LIKE '%t1%'`;
# Verify that the column metadata reflects the old table_id
SET SESSION debug= '+d,skip_dd_table_access_check';
SET @query = CONCAT("SELECT COUNT(*) FROM mysql.columns WHERE SE_PRIVATE_DATA like \"%table_id=", @old_tableid, "%\"");
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
# Discard the tablespace
ALTER TABLE t1 DISCARD TABLESPACE;
SELECT TABLE_ID INTO @new_tableid FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME
LIKE '%t1%';
let $new_tid = `SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME LIKE '%t1%'`;
# Verify that the table_id has been updated
if ($old_tid == $new_tid)
{
--echo 'ERROR: table_id not updated';
}
# Verify that the column metadata reflects the new table_id
SET @query = CONCAT("SELECT COUNT(*) FROM mysql.columns WHERE SE_PRIVATE_DATA like \"%table_id=", @new_tableid, "%\"");
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
DROP TABLE t1;
--echo # Test for partitioned table
# Verify that the table_id is updated in the column metadata
# after discarding a tablespace of a partitioned table
CREATE TABLE tpart (c1 INT, c2 INT as (c1 + 1) VIRTUAL)
PARTITION BY RANGE (c1) (
PARTITION p1 VALUES LESS THAN (10),
PARTITION p2 VALUES LESS THAN (100));
SELECT TABLE_ID INTO @old_tableid FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME
LIKE '%tpart%' LIMIT 1;
let $old_tid = `SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME LIKE '%tpart%' LIMIT 1`;
# Verify that the column metadata reflects the old table_id
SET @query = CONCAT("SELECT COUNT(*) FROM mysql.columns WHERE SE_PRIVATE_DATA like \"%table_id=", @old_tableid, "%\"");
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
# Discard the tablespace
ALTER TABLE tpart DISCARD TABLESPACE;
SELECT TABLE_ID INTO @new_tableid FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME
LIKE '%tpart%' LIMIT 1;
let $new_tid = `SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME LIKE '%tpart%' LIMIT 1`;
# Verify that the table_id has been updated
if ($old_tid == $new_tid)
{
--echo 'ERROR: table_id not updated';
}
# Verify that the column metadata reflects the new table_id
SET @query = CONCAT("SELECT COUNT(*) FROM mysql.columns WHERE SE_PRIVATE_DATA like \"%table_id=", @new_tableid, "%\"");
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET SESSION debug= '-d,skip_dd_table_access_check';
DROP TABLE tpart;
|