mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-15872 Crash in online ALTER TABLE...ADD PRIMARY KEY after instant ADD COLUMN...NULL
row_log_table_get_pk_col(): Replace a condition that was inadvertently removed in MDEV-16365. PRIMARY KEY columns are never allowed to be NULL, and failure to enforce the constraint caused a null pointer to be dereferenced in mem_heap_dup().
This commit is contained in:
@ -205,12 +205,35 @@ INSERT INTO t1 SET a=1;
|
||||
INSERT INTO t1 SET a=2,b=3,c=4;
|
||||
SET DEBUG_SYNC = 'now SIGNAL logged';
|
||||
connection ddl;
|
||||
disconnect ddl;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = RESET;
|
||||
SELECT * FROM t1;
|
||||
a b c
|
||||
1 2 NULL
|
||||
2 3 4
|
||||
#
|
||||
# MDEV-15872 Crash in online ALTER TABLE...ADD PRIMARY KEY
|
||||
# after instant ADD COLUMN ... NULL
|
||||
#
|
||||
ALTER TABLE t1 ADD COLUMN d INT, ALGORITHM=INSTANT;
|
||||
UPDATE t1 SET d=1;
|
||||
connection ddl;
|
||||
SET DEBUG_SYNC='row_log_table_apply1_before SIGNAL copied WAIT_FOR logged';
|
||||
ALTER IGNORE TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY (a,d);
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR copied';
|
||||
BEGIN;
|
||||
INSERT INTO t1 SET a=3;
|
||||
ROLLBACK;
|
||||
SET DEBUG_SYNC = 'now SIGNAL logged';
|
||||
connection ddl;
|
||||
ERROR 22004: Invalid use of NULL value
|
||||
disconnect ddl;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = RESET;
|
||||
SELECT * FROM t1;
|
||||
a b c d
|
||||
1 2 NULL 1
|
||||
2 3 4 1
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_purge_rseg_truncate_frequency = @save_frequency;
|
||||
|
Reference in New Issue
Block a user