| Server IP : 88.99.149.37 / Your IP : 216.73.216.141 Web Server : nginx/1.31.2 System : Linux server-88-99-149-37 6.12.0-124.56.5.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 15 06:12:08 EDT 2026 x86_64 User : muralimurth ( 1015) PHP Version : 8.4.23 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/local/mysql/mysql-test/suite/gcol/t/ |
Upload File : |
--source include/have_innodb.inc --source include/have_debug.inc --source include/have_debug_sync.inc --echo # --echo # MDEV-24971 InnoDB access freed virtual column --echo # after rollback of secondary index --echo # # Exclusive lock must not defer the index removal CREATE TABLE t1(f1 INT, f2 INT AS (f1 + 2) VIRTUAL)ENGINE=InnoDB; INSERT INTO t1(f1) VALUES(1), (1); --error ER_DUP_ENTRY ALTER TABLE t1 ADD UNIQUE INDEX(f2), ALGORITHM=INPLACE, LOCK=EXCLUSIVE; SHOW CREATE TABLE t1; DROP TABLE t1; # If Shared lock and table doesn't have any other open handle # then InnoDB must not defer the index removal CREATE TABLE t1(f1 INT, f2 INT AS (f1 + 2) VIRTUAL)ENGINE=InnoDB; INSERT INTO t1(f1) VALUES(1), (1); --error ER_DUP_ENTRY ALTER TABLE t1 ADD UNIQUE INDEX(f2), ALGORITHM=INPLACE, LOCK=SHARED; SHOW CREATE TABLE t1; DROP TABLE t1; # InnoDB should store the newly dropped virtual column into # new_vcol_info in index when rollback of alter happens CREATE TABLE t1(f1 INT, f2 INT AS (f1) VIRTUAL)ENGINE=InnoDB; INSERT INTO t1(f1) VALUES(1); SET DEBUG_DBUG="+d,create_index_fail"; SET DEBUG_SYNC="innodb_inplace_alter_table_enter SIGNAL con1_go WAIT_FOR alter_signal"; SEND ALTER TABLE t1 ADD COLUMN f3 INT AS (f1) VIRTUAL, ADD INDEX(f2, f3); connect(con1,localhost,root,,,); SET DEBUG_SYNC="now WAIT_FOR con1_go"; BEGIN; SELECT * FROM t1; SET DEBUG_SYNC="now SIGNAL alter_signal"; connection default; --error ER_DUP_ENTRY reap; connection con1; rollback; connection default; SHOW CREATE TABLE t1; DROP TABLE t1; CREATE TABLE t1(f1 INT, f2 INT AS (f1) VIRTUAL)ENGINE=InnoDB; INSERT INTO t1(f1) VALUES(1); SET DEBUG_DBUG="+d,create_index_fail"; SET DEBUG_SYNC="innodb_inplace_alter_table_enter SIGNAL con1_go WAIT_FOR alter_signal"; send ALTER TABLE t1 ADD INDEX(f2); connection con1; SET DEBUG_SYNC="now WAIT_FOR con1_go"; BEGIN; INSERT INTO t1(f1) VALUES(1); SET DEBUG_SYNC="now SIGNAL alter_signal"; connection default; --error ER_DUP_ENTRY reap; connection con1; rollback; connection default; disconnect con1; DROP TABLE t1; CREATE TABLE t1(f1 CHAR(100), f2 CHAR(100) as (f1) VIRTUAL)ENGINE=InnoDB; --error ER_DUP_FIELDNAME ALTER TABLE t1 ADD COLUMN f3 CHAR(100) AS (f2) VIRTUAL, ADD INDEX(f3(10), f1, f3(12)); DROP TABLE t1; SET DEBUG_SYNC=RESET;