diff --git a/mysql-test/suite/innodb/r/instant_alter_bugs.result b/mysql-test/suite/innodb/r/instant_alter_bugs.result new file mode 100644 index 00000000000..14d88c64de8 --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_alter_bugs.result @@ -0,0 +1,130 @@ +# +# MDEV-17821 Assertion `!page_rec_is_supremum(rec)' failed +# in btr_pcur_store_position +# +CREATE TABLE t1 (pk INT PRIMARY KEY, c INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1,2); +ALTER TABLE t1 ADD COLUMN f VARCHAR(255); +ALTER TABLE t1 DROP COLUMN f; +DELETE FROM t1; +HANDLER t1 OPEN; +HANDLER t1 READ `PRIMARY` <= (3); +pk c +DROP TABLE t1; +CREATE TABLE t1 ( +pk INT AUTO_INCREMENT, +f1 CHAR(32), +f2 CHAR(32), +f3 CHAR(32), +f4 INT, +f5 CHAR(32), +f6 INT, +f7 INT, +f8 INT, +PRIMARY KEY (pk), +UNIQUE (f6) +) ENGINE=InnoDB; +INSERT INTO t1 (f1,f2,f3,f4,f5,f6,f7,f8) VALUES +('reality', 'llt', 'within', -1996816384, 'j', 160, 7, -1822687232), +('h', 'j', 'j', 251, 'civilian', NULL, 211, NULL), +('ltq', 'b', 'mud', 111, 'v', 90, 0, NULL), +('toxic', 'breakfast', 'series', 2, 'x', NULL, 118, 2), +('h', 'n', 'vision', 84, 'n', NULL, 197, 103), +('h', 'tq', 'q', 6, 'bet', -1927151616, -446038016, 3), +('pocket', 'qjt', 'jtl', 0, 'blink', NULL, 12, 0), +('k', 'uv', 'exist', 37, 'g', 149, -1610219520, NULL), +('parent', 'motion', 'u', 70, 'promote', NULL, 178, NULL), +('get', 'convict', 'liquid', -780337152, 'd', NULL, 4, NULL), +('vp', 'px', 'xi', -631111680, 'support', NULL, 8, NULL), +('ck', 'z', 'minority', 8, 'k', NULL, 864878592, NULL), +('kxx', 'g', 'container', 1, 'cholesterol', NULL, 4, 1404436480), +('xxv', 'rail', 'j', 219, 'serious', NULL, -816119808, 62), +('x', 'v', 'vr', 146, 'm', 16, 170, -1765867520), +('age', 'm', 'q', -1251278848, 'rte', 6, 224, NULL), +('discrimination', 't', 'q', 31, 'exl', 0, 2, 244), +('water', 'x', 'ldb', 98, 'r', 235, 4, 63), +('d', 'db', 'p', 248, 'so-called', 102, -255524864, 198), +('last', 'bz', 'us', 0, 'experienced', 137, 240, 134), +('q', 'z', 'attract', 67, 'code', 67, 75, 1758920704), +('yellow', 'c', 'u', 6, 'v', 1731985408, 528154624, 2), +('cognitive', 'he', 'protective', 590020608, 'sentence', NULL, 4, 102), +('eih', 'l', 'ih', 1266024448, 'traditionally', NULL, 190, NULL), +('pine', 'i', 'y', 6, 'glimpse', 214, 7, -1486880768), +('jo', 'everyone', 'ol', 0, 'lj', NULL, 1, 0), +('blood', 'f', 'scientist', 54, 'j', 1341128704, 168, NULL), +('z', 'brief', 'ambassador', 115, 'ygp', 82, 129, NULL), +('gp', 'severe', 'consist', 7, 'p', -1829961728, 602669056, 154), +('admit', 'poetry', 'x', 116, 'enemy', 174, -2128543744, -407764992), +('s', 'norm', 'decide', 2055667712, 'rtz', NULL, 99, -1233715200), +('tzg', 'f', 'beg', 2016280576, 'w', NULL, -643825664, 137), +('zgg', 'x', 'f', 148, 'y', -987496448, -708116480, 8), +('attorney', 'perfectly', 's', 49, 'z', -1865285632, 56, -1518534656), +('concentrate', 's', 'k', -1028849664, 'tir', 83, -1592459264, 1820065792), +('t', 'sacrifice', 'ir', -2143879168, 'recipe', 156, 217, NULL), +('wdf', 'd', 'f', 137, 'empty', NULL, 188, NULL), +('o', 'customer', 'qd', -2135293952, 'z', 1527840768, 227, -1174929408), +('d', 'qow', 'o', 1472266240, 'whe', NULL, 7, 197), +('deny', 'reputation', 'dutch', 59, 'v', 124, 2, 191), +('m', 'liver', 'fv', 0, 'policy', 781582336, 198574080, 177), +('vk', 'kx', 'immigrant', -1452736512, 'x', 163, 76, 6) , +('j', 'ru', 'r', 67, 'joke', NULL, 3, NULL), +('o', 'u', 'a', -569442304, 'uz', NULL, 933298176, NULL), +('g', 'zb', 'c', -1694760960, 'fish', 18, -390463488, 1), +('bb', 'o', 'b', 6, 'z', 9, 12, NULL), +('compelling', 'xe', 'debut', 89, 'e', -734724096, 119, 175), +('md', 'r', 'object', 1046478848, 'frequently', 915537920, 0, 1506410496), +('dwn', 'wnz', 'x', 1767571456, 'nz', 241, -882180096, 9), +('zvf', 'vfo', 'g', -844824576, 'w', NULL, 1, 9), +('w', 'pose', 'r', 1029308416, 'a', -48627712, 1756168192, NULL), +('o', 'jwp', 'patient', 172, 'i', 297140224, 45809664, 3), +('w', 'p', 'american', 450297856, 'z', 20, 4, 186), +('ridiculous', 'helpful', 'vy', -2022899712, 'conspiracy', NULL, 162, -264634368), +('t', 'g', 'spite', 289931264, 'y', 4, 13, NULL), +('performer', 'i', 'tomato', -1519386624, 'mz', 8, 87, 106), +('m', 'z', 'hang', 3, 'crowded', -537919488, 1, 2), +('fu', 'uot', 'j', 1, 'o', 179, 220, -2084569088), +('ts', 'n', 'su', 1, 'o', 198, 9, 68), +('ball', 'halfway', 'uf', 40, 'l', 145948672, 9, 149), +('hunting', 'n', 'teenager', 0, 'neat', 209, 2044461056, 68), +('independent', 'along', 'fpn', 5, 'pn', 3, 1353252864, 217), +('p', 'presumably', 'n', -1977548800, 'balanced', 1909260288, 197, NULL), +('pink', 'h', 'tear', 8, 'n', 254, 8, 1006305280), +('tyy', 'n', 'yyr', 1107820544, 'yr', NULL, 0, 219), +('u', 'retirement', 'thread', -2083192832, 'rx', -678232064, 209, 1048969216), +('xk', 'kb', 'z', 9, 'ba', 218, 7, 8), +('a', 'plenty', 'forget', 36, 'c', 215, 2027094016, NULL), +('i', 'compromise', 'n', -1090256896, 'o', 10, 66, 1872887808), +('x', 'disappointment', 'cognitive', 753860608, 'ua', 77, 123, 10), +('e', 'added', 'aub', 2, 'u', NULL, 9, 92), +('bc', 'h', 'n', 146, 'master', NULL, 1003945984, NULL), +('execution', 'f', 'cgp', 574423040, 'gp', 2, -518782976, -1189085184), +('pv', 'bad', 'v', 132, 'r', 195, 6, 5), +('modify', 'participation', 'vol', 237, 'j', -842924032, 88, -747765760), +('substantially', 'i', 'congressional', 2, 'edit', NULL, 1003159552, NULL), +('tell', 'forty', 'v', -910098432, 'd', 43, 3, NULL), +('crawl', 'ad', 'respect', -1851195392, 'p', 72, -1709047808, 1343225856), +('w', 'reception', 'fiber', 56, 's', NULL, 2, -993787904), +('successful', 'instruct', 'dug', 2, 'u', 7, -411500544, NULL), +('appointment', 'pregnant', 'weird', 2, 'r', NULL, -897384448, 76), +('g', 'j', 'thin', 663617536, 'oan', 1, 7, NULL), +('secretary', 'a', 'o', 103, 'nj', 1977745408, -1291124736, -1314521088), +('g', 'jq', 'q', 1875116032, 'blame', NULL, 1, 4), +('oj', 'j', 'breast', 150, 'c', NULL, 3, NULL), +('rd', 'm', 'comprehensive', 1723334656, 't', NULL, 155, -312344576) , +('a', 'd', 'criminal', -1155137536, 'airplane', 242, -662896640, 1), +('fast', 'i', 'k', -386662400, 'zxe', NULL, 7, 119), +('xe', 'mouse', 'c', -205717504, 'ew', NULL, -729612288, 86), +('hang', 'j', 'o', 3, 'hungry', NULL, 200, 49), +('expense', 'z', 'sum', 2, 'gob', -472055808, -538181632, NULL), +('nest', 'o', 'k', 116, 'weak', NULL, 223, NULL); +INSERT INTO t1 (f1,f2,f3,f4,f5,f6,f7,f8) VALUES ('impact', 'b', 'h', 185, 'fj', 7, 7, 3); +ERROR 23000: Duplicate entry '7' for key 'f6' +ALTER TABLE t1 ADD COLUMN filler VARCHAR(255) DEFAULT ''; +SELECT * FROM t1 INTO OUTFILE 'load.data'; +UPDATE IGNORE t1 SET pk = 0; +LOAD DATA INFILE 'load.data' REPLACE INTO TABLE t1; +HANDLER t1 OPEN AS h; +HANDLER h READ `PRIMARY` PREV WHERE 0; +pk f1 f2 f3 f4 f5 f6 f7 f8 filler +HANDLER h CLOSE; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/instant_alter_bugs.test b/mysql-test/suite/innodb/t/instant_alter_bugs.test new file mode 100644 index 00000000000..9cc0037703b --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_alter_bugs.test @@ -0,0 +1,138 @@ +--source include/have_innodb.inc + +--echo # +--echo # MDEV-17821 Assertion `!page_rec_is_supremum(rec)' failed +--echo # in btr_pcur_store_position +--echo # + +CREATE TABLE t1 (pk INT PRIMARY KEY, c INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1,2); +ALTER TABLE t1 ADD COLUMN f VARCHAR(255); +ALTER TABLE t1 DROP COLUMN f; +DELETE FROM t1; +HANDLER t1 OPEN; +HANDLER t1 READ `PRIMARY` <= (3); +DROP TABLE t1; + +CREATE TABLE t1 ( + pk INT AUTO_INCREMENT, + f1 CHAR(32), + f2 CHAR(32), + f3 CHAR(32), + f4 INT, + f5 CHAR(32), + f6 INT, + f7 INT, + f8 INT, + PRIMARY KEY (pk), + UNIQUE (f6) +) ENGINE=InnoDB; + +INSERT INTO t1 (f1,f2,f3,f4,f5,f6,f7,f8) VALUES + ('reality', 'llt', 'within', -1996816384, 'j', 160, 7, -1822687232), + ('h', 'j', 'j', 251, 'civilian', NULL, 211, NULL), + ('ltq', 'b', 'mud', 111, 'v', 90, 0, NULL), + ('toxic', 'breakfast', 'series', 2, 'x', NULL, 118, 2), + ('h', 'n', 'vision', 84, 'n', NULL, 197, 103), + ('h', 'tq', 'q', 6, 'bet', -1927151616, -446038016, 3), + ('pocket', 'qjt', 'jtl', 0, 'blink', NULL, 12, 0), + ('k', 'uv', 'exist', 37, 'g', 149, -1610219520, NULL), + ('parent', 'motion', 'u', 70, 'promote', NULL, 178, NULL), + ('get', 'convict', 'liquid', -780337152, 'd', NULL, 4, NULL), + ('vp', 'px', 'xi', -631111680, 'support', NULL, 8, NULL), + ('ck', 'z', 'minority', 8, 'k', NULL, 864878592, NULL), + ('kxx', 'g', 'container', 1, 'cholesterol', NULL, 4, 1404436480), + ('xxv', 'rail', 'j', 219, 'serious', NULL, -816119808, 62), + ('x', 'v', 'vr', 146, 'm', 16, 170, -1765867520), + ('age', 'm', 'q', -1251278848, 'rte', 6, 224, NULL), + ('discrimination', 't', 'q', 31, 'exl', 0, 2, 244), + ('water', 'x', 'ldb', 98, 'r', 235, 4, 63), + ('d', 'db', 'p', 248, 'so-called', 102, -255524864, 198), + ('last', 'bz', 'us', 0, 'experienced', 137, 240, 134), + ('q', 'z', 'attract', 67, 'code', 67, 75, 1758920704), + ('yellow', 'c', 'u', 6, 'v', 1731985408, 528154624, 2), + ('cognitive', 'he', 'protective', 590020608, 'sentence', NULL, 4, 102), + ('eih', 'l', 'ih', 1266024448, 'traditionally', NULL, 190, NULL), + ('pine', 'i', 'y', 6, 'glimpse', 214, 7, -1486880768), + ('jo', 'everyone', 'ol', 0, 'lj', NULL, 1, 0), + ('blood', 'f', 'scientist', 54, 'j', 1341128704, 168, NULL), + ('z', 'brief', 'ambassador', 115, 'ygp', 82, 129, NULL), + ('gp', 'severe', 'consist', 7, 'p', -1829961728, 602669056, 154), + ('admit', 'poetry', 'x', 116, 'enemy', 174, -2128543744, -407764992), + ('s', 'norm', 'decide', 2055667712, 'rtz', NULL, 99, -1233715200), + ('tzg', 'f', 'beg', 2016280576, 'w', NULL, -643825664, 137), + ('zgg', 'x', 'f', 148, 'y', -987496448, -708116480, 8), + ('attorney', 'perfectly', 's', 49, 'z', -1865285632, 56, -1518534656), + ('concentrate', 's', 'k', -1028849664, 'tir', 83, -1592459264, 1820065792), + ('t', 'sacrifice', 'ir', -2143879168, 'recipe', 156, 217, NULL), + ('wdf', 'd', 'f', 137, 'empty', NULL, 188, NULL), + ('o', 'customer', 'qd', -2135293952, 'z', 1527840768, 227, -1174929408), + ('d', 'qow', 'o', 1472266240, 'whe', NULL, 7, 197), + ('deny', 'reputation', 'dutch', 59, 'v', 124, 2, 191), + ('m', 'liver', 'fv', 0, 'policy', 781582336, 198574080, 177), + ('vk', 'kx', 'immigrant', -1452736512, 'x', 163, 76, 6) , + ('j', 'ru', 'r', 67, 'joke', NULL, 3, NULL), + ('o', 'u', 'a', -569442304, 'uz', NULL, 933298176, NULL), + ('g', 'zb', 'c', -1694760960, 'fish', 18, -390463488, 1), + ('bb', 'o', 'b', 6, 'z', 9, 12, NULL), + ('compelling', 'xe', 'debut', 89, 'e', -734724096, 119, 175), + ('md', 'r', 'object', 1046478848, 'frequently', 915537920, 0, 1506410496), + ('dwn', 'wnz', 'x', 1767571456, 'nz', 241, -882180096, 9), + ('zvf', 'vfo', 'g', -844824576, 'w', NULL, 1, 9), + ('w', 'pose', 'r', 1029308416, 'a', -48627712, 1756168192, NULL), + ('o', 'jwp', 'patient', 172, 'i', 297140224, 45809664, 3), + ('w', 'p', 'american', 450297856, 'z', 20, 4, 186), + ('ridiculous', 'helpful', 'vy', -2022899712, 'conspiracy', NULL, 162, -264634368), + ('t', 'g', 'spite', 289931264, 'y', 4, 13, NULL), + ('performer', 'i', 'tomato', -1519386624, 'mz', 8, 87, 106), + ('m', 'z', 'hang', 3, 'crowded', -537919488, 1, 2), + ('fu', 'uot', 'j', 1, 'o', 179, 220, -2084569088), + ('ts', 'n', 'su', 1, 'o', 198, 9, 68), + ('ball', 'halfway', 'uf', 40, 'l', 145948672, 9, 149), + ('hunting', 'n', 'teenager', 0, 'neat', 209, 2044461056, 68), + ('independent', 'along', 'fpn', 5, 'pn', 3, 1353252864, 217), + ('p', 'presumably', 'n', -1977548800, 'balanced', 1909260288, 197, NULL), + ('pink', 'h', 'tear', 8, 'n', 254, 8, 1006305280), + ('tyy', 'n', 'yyr', 1107820544, 'yr', NULL, 0, 219), + ('u', 'retirement', 'thread', -2083192832, 'rx', -678232064, 209, 1048969216), + ('xk', 'kb', 'z', 9, 'ba', 218, 7, 8), + ('a', 'plenty', 'forget', 36, 'c', 215, 2027094016, NULL), + ('i', 'compromise', 'n', -1090256896, 'o', 10, 66, 1872887808), + ('x', 'disappointment', 'cognitive', 753860608, 'ua', 77, 123, 10), + ('e', 'added', 'aub', 2, 'u', NULL, 9, 92), + ('bc', 'h', 'n', 146, 'master', NULL, 1003945984, NULL), + ('execution', 'f', 'cgp', 574423040, 'gp', 2, -518782976, -1189085184), + ('pv', 'bad', 'v', 132, 'r', 195, 6, 5), + ('modify', 'participation', 'vol', 237, 'j', -842924032, 88, -747765760), + ('substantially', 'i', 'congressional', 2, 'edit', NULL, 1003159552, NULL), + ('tell', 'forty', 'v', -910098432, 'd', 43, 3, NULL), + ('crawl', 'ad', 'respect', -1851195392, 'p', 72, -1709047808, 1343225856), + ('w', 'reception', 'fiber', 56, 's', NULL, 2, -993787904), + ('successful', 'instruct', 'dug', 2, 'u', 7, -411500544, NULL), + ('appointment', 'pregnant', 'weird', 2, 'r', NULL, -897384448, 76), + ('g', 'j', 'thin', 663617536, 'oan', 1, 7, NULL), + ('secretary', 'a', 'o', 103, 'nj', 1977745408, -1291124736, -1314521088), + ('g', 'jq', 'q', 1875116032, 'blame', NULL, 1, 4), + ('oj', 'j', 'breast', 150, 'c', NULL, 3, NULL), + ('rd', 'm', 'comprehensive', 1723334656, 't', NULL, 155, -312344576) , + ('a', 'd', 'criminal', -1155137536, 'airplane', 242, -662896640, 1), + ('fast', 'i', 'k', -386662400, 'zxe', NULL, 7, 119), + ('xe', 'mouse', 'c', -205717504, 'ew', NULL, -729612288, 86), + ('hang', 'j', 'o', 3, 'hungry', NULL, 200, 49), + ('expense', 'z', 'sum', 2, 'gob', -472055808, -538181632, NULL), + ('nest', 'o', 'k', 116, 'weak', NULL, 223, NULL); +--error ER_DUP_ENTRY +INSERT INTO t1 (f1,f2,f3,f4,f5,f6,f7,f8) VALUES ('impact', 'b', 'h', 185, 'fj', 7, 7, 3); + +ALTER TABLE t1 ADD COLUMN filler VARCHAR(255) DEFAULT ''; +SELECT * FROM t1 INTO OUTFILE 'load.data'; +UPDATE IGNORE t1 SET pk = 0; +LOAD DATA INFILE 'load.data' REPLACE INTO TABLE t1; +HANDLER t1 OPEN AS h; +HANDLER h READ `PRIMARY` PREV WHERE 0; + +# Cleanup +HANDLER h CLOSE; +DROP TABLE t1; +--let $datadir= `select @@datadir` +--remove_file $datadir/test/load.data diff --git a/storage/innobase/btr/btr0pcur.cc b/storage/innobase/btr/btr0pcur.cc index 41661d226e1..d998ec70672 100644 --- a/storage/innobase/btr/btr0pcur.cc +++ b/storage/innobase/btr/btr0pcur.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2016, 2017, MariaDB Corporation. +Copyright (c) 2016, 2019, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -141,6 +141,7 @@ btr_pcur_store_position( if (page_rec_is_supremum_low(offs)) { cursor->rel_pos = BTR_PCUR_AFTER_LAST_IN_TREE; } else { +before_first: cursor->rel_pos = BTR_PCUR_BEFORE_FIRST_IN_TREE; } @@ -158,8 +159,12 @@ btr_pcur_store_position( rec = page_rec_get_next(rec); if (rec_is_metadata(rec, index)) { + ut_ad(!page_has_prev(page)); rec = page_rec_get_next(rec); - ut_ad(!page_rec_is_supremum(rec)); + if (page_rec_is_supremum(rec)) { + ut_ad(page_has_next(page)); + goto before_first; + } } cursor->rel_pos = BTR_PCUR_BEFORE;