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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824
|
--source include/have_debug_sync.inc
--source include/have_debug.inc
--source include/count_sessions.inc
--source include/have_innodb_max_16k.inc
CREATE TABLE `t` (
`a` VARCHAR(100),
`b` VARCHAR(100),
`c` VARCHAR(200) GENERATED ALWAYS AS (CONCAT(a,b)) VIRTUAL,
`h` VARCHAR(10) DEFAULT NULL,
`i` int
) ENGINE=InnoDB;
INSERT INTO t VALUES (REPEAT('g', 100), REPEAT('x', 10), DEFAULT, "kk", 1);
INSERT INTO t VALUES (REPEAT('a', 100), REPEAT('b', 100), DEFAULT, "mm", 2);
CREATE INDEX idx ON t(c(100));
SET session debug="+d,ib_alter_add_virtual_fail";
--error ER_WRONG_KEY_COLUMN
ALTER TABLE t ADD COLUMN x VARCHAR(200) GENERATED ALWAYS AS (a) VIRTUAL, ADD INDEX(h),
ALGORITHM = INPLACE;
--error ER_WRONG_KEY_COLUMN
ALTER TABLE t DROP COLUMN c, ADD INDEX(h), ALGORITHM = INPLACE;
SET session debug="-d,ib_alter_add_virtual_fail";
DROP TABLE t;
#online test
CREATE TABLE t (a INT, b INT, c INT GENERATED ALWAYS AS(a+b), h VARCHAR(10));
INSERT INTO t VALUES (11, 3, DEFAULT, 'mm');
INSERT INTO t VALUES (18, 1, DEFAULT, 'mm');
INSERT INTO t VALUES (28, 1, DEFAULT, 'mm');
INSERT INTO t VALUES (null, null, DEFAULT, "mx");
SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create WAIT_FOR go_ahead';
--send CREATE INDEX idx ON t(c);
connect (con1,localhost,root,,);
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_create';
update t set a=0 where a = 11;
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
connection default;
reap;
--sorted_result
SELECT c FROM t;
SHOW CREATE TABLE t;
SELECT * FROM t;
SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create WAIT_FOR go_ahead';
--send ALTER TABLE t ADD COLUMN x INT;
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_create';
start transaction;
update t set a=1 where a = 0;
ROLLBACK;
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
connection default;
reap;
--sorted_result
SELECT c FROM t;
SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create WAIT_FOR go_ahead';
--send ALTER TABLE t ADD COLUMN x2 INT;
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_create';
start transaction;
DELETE FROM t WHERE a = 0;
ROLLBACK;
DELETE FROM t WHERE a = 0;
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
connection default;
reap;
--sorted_result
SELECT c FROM t;
disconnect con1;
DROP TABLE t;
SET DEBUG_SYNC = 'RESET';
# Test add virtual column and add index at the same time
# introduce some error
CREATE TABLE t (a INT, b INT, c INT GENERATED ALWAYS AS(a+b), h VARCHAR(10));
INSERT INTO t VALUES (11, 3, DEFAULT, 'mm');
INSERT INTO t VALUES (18, 1, DEFAULT, 'mm');
INSERT INTO t VALUES (28, 1, DEFAULT, 'mm');
INSERT INTO t VALUES (null, null, DEFAULT, 'mm');
CREATE INDEX idx_1 on t(c);
SET SESSION debug="+d,create_index_fail";
--enable_info
--error ER_DUP_ENTRY
ALTER TABLE t ADD COLUMN x INT GENERATED ALWAYS AS(a+b), ADD INDEX idx (x);
SET SESSION debug="-d,create_index_fail";
--disable_info
SHOW CREATE TABLE t;
--sorted_result
SELECT c FROM t;
DROP TABLE t;
--echo #
--echo # Bug#22018532 ASSERTION WHEN ONLINE REAPPLY REBUILD LOG ON
--echo # MULTIPLE INDEXED VIRTUAL COLUMNS
--echo #
create table t (
a int as (1) virtual,
b int,
c int as (1) virtual,
unique(b),
unique(c),
key(a)
) engine=innodb;
insert ignore into t values();
SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create WAIT_FOR go_ahead';
--send optimize table t
connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'now WAIT_FOR start_create';
insert ignore into t values();
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
connection default;
--echo /* connection default */ optimize table t;
reap;
--sorted_result
SELECT c FROM t;
SHOW CREATE TABLE t;
SELECT * FROM t;
DROP TABLE t;
# Do another test without duplicate error
CREATE TABLE t (a INT, b INT, c INT GENERATED ALWAYS AS(a+b), h VARCHAR(10));
INSERT INTO t VALUES (11, 3, DEFAULT, 'mm');
INSERT INTO t VALUES (18, 1, DEFAULT, 'mm');
INSERT INTO t VALUES (28, 1, DEFAULT, 'mm');
INSERT INTO t VALUES (null, null, DEFAULT, 'mm');
CREATE INDEX idx ON t(c);
SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_rebuild WAIT_FOR go_ahead';
--send optimize table t
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_rebuild';
INSERT INTO t VALUES (48, 2, DEFAULT, 'xx');
INSERT INTO t VALUES (68, 3, DEFAULT, 'sx');
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
connection default;
--echo /* connection default */ optimize table t;
reap;
--sorted_result
SELECT c FROM t;
disconnect con1;
DROP TABLE t;
--echo #
--echo # Bug#22140944 WL#8149: ADD TEST FOR THE ROW0LOG.CC FIX THAT
--echo # WAS UNRELATED TO Bug#21894654
--echo #
CREATE TABLE t1 ( id INT ,a VARCHAR(20), b VARCHAR(20) ,c VARCHAR(40)
GENERATED ALWAYS AS (CONCAT(a,b)),key(c));
INSERT INTO t1 (id,a,b) VALUES (10,'aditya','hello');
connect (con1,localhost,root);
connection con1;
SET DEBUG_SYNC= 'ddl_after_scan SIGNAL opened WAIT_FOR go_ddl';
send ALTER TABLE t1 ADD CONSTRAINT pk1 PRIMARY KEY (id);
connection default;
SET DEBUG_SYNC= 'now WAIT_FOR opened';
UPDATE t1 SET a = 'fg', id = 20 WHERE id = 10;
SET DEBUG_SYNC= 'now SIGNAL go_ddl';
connection con1;
reap;
disconnect con1;
connection default;
SELECT * from t1;
DROP TABLE t1;
--echo #
--echo # Bug#22951879 - ASSERTS RELATED TO ONLINE DDL AND GCOL
--echo #
# Create a table with 2 virtual column, one (vbidxcol) is indexed and
# the other one (vbcol) is not
create table ibstd_14 (a int not null, d int not null, b varchar(198) not null, c char(181), vadcol int as (a+length(d)) stored, vbcol char(2) as (substr(b,2,2)) virtual, vbidxcol char(3) as (substr(b,1,3)) virtual , index(d), index(a), index(vbidxcol), index(a,vbidxcol), index(vbidxcol,d), unique key (b(10), a, d), index(c(99), b(31)), index(b(5), c(10), a) , index(a,d)) engine=InnoDB stats_persistent=1 row_format=dynamic charset latin1;
# Do an alter table rebuild table and also create a new index on this
# non-indexed virtual column
SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create WAIT_FOR go_ahead';
--send alter table ibstd_14 row_format=compressed key_block_size=4,add key kn3 (d,c,vbcol,b);
# Do a concurrent insert, and make sure this newly indexed virtual column
# is also logged
connect (con1,localhost,root);
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_create';
insert into ibstd_14 (a,d,b,c, vbidxcol, vbcol) values ('118','6',repeat('oacolaarlruoacuroauurloraarucoooarcooauoolacalllaulrruarrrucruuooclacuoouccarrcoocloccorrrrarourcooalloocooccouruolaorlcaocualolc','1'),repeat('lolrrlalcocroraaulauclaaucolcorcuooaolruaooooluooooouaoorlarucorullalcrrloccououaooaorluorraclrcooouuolocoaolcocaaculruoocucoocoooauuolarcoraraocaoolulolarru','1'),default,default);
insert into ibstd_14 (a,d,b,c, vbidxcol, vbcol) values ('118','6', 'aaaa', 'lll', default, default);
# Also do an concurrent update, make sure this is performed
update ibstd_14 set b='11111' where b='aaaa';
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
connection default;
reap;
select * from ibstd_14;
# This will use the newly added "kn3" index, to check materialized vbcol
# after log reapply
--sorted_result
select d,c,vbcol,b from ibstd_14;
# check the value is inserted into the index
--sorted_result
select vbcol from ibstd_14;
drop table ibstd_14;
--echo #
--echo # Bug#26375771 INNODB: ASSERTION FAILURE: MACH0DATA.IC:308:VAL > 0X7F
--echo #
create table ibstd_07 (a int not null, d int not null, b blob not null, c text, vadcol int as (a+length(d)) stored, vbcol char(2) as (substr(b,2,2)) virtual, vbidxcol char(3) as (substr(b,1,3)) virtual , index(d desc), index(a desc), index(vbidxcol desc), index(vbidxcol desc,d asc), unique key (b(101) desc, a asc, d ), index(c(255) desc, b(255) asc), index(b(5) desc, c(10) asc, a ) ) engine=InnoDB default charset=latin1 row_format=redundant;
insert into ibstd_07 values (2, 2, repeat('rocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaooc','281'),repeat('ouolrculuouocououooalcoraooaulouuacrolrocooraoaooooolaccralacalooolalocoaacoorarorcurccarocucla','317'), default, default, default);
SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create WAIT_FOR go_ahead';
--send alter table ibstd_07 add primary key (b(11) desc,a asc, d );
# Do a concurrent update
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_create';
update ibstd_07 set c=repeat('0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo','70');
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
connection default;
reap;
SELECT * FROM ibstd_07;
DROP TABLE ibstd_07;
--echo #
--echo # Bug#22018745 CORRUPTION IN ONLINE TABLE REBUILD
--echo # (ROW_FORMAT=REDUNDANT, INDEXED VIRTUAL COLUMN)
--echo #
CREATE TABLE t (
b char(5) PRIMARY KEY,
v char(3) GENERATED ALWAYS AS (substr(b,1,3)) VIRTUAL, KEY(v)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT;
connection con1;
SET DEBUG_SYNC='row_log_table_apply1_before SIGNAL prepared WAIT_FOR apply';
--send OPTIMIZE TABLE t
connection default;
SET DEBUG_SYNC='now WAIT_FOR prepared';
INSERT INTO t SET b='fubar';
BEGIN;
DELETE FROM t;
ROLLBACK;
SET DEBUG_SYNC='now SIGNAL apply';
connection con1;
reap;
connection default;
CHECK TABLE t;
SELECT * FROM t;
DROP TABLE t;
disconnect con1;
SET DEBUG_SYNC = 'RESET';
--source include/wait_until_count_sessions.inc
--echo #
--echo # Bug#24658707 ASSERT: BUF0BUF.CC:2469:BUF_BLOCK_GET_STATE(BLOCK)
--echo # == BUF_BLOCK_FILE_PAGE#
--echo #
--connect(con1,localhost,root)
--connect(con2,localhost,root)
CREATE TABLE t1 (
col1 int(11) NOT NULL,
col2 int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--connection con1
SET DEBUG_SYNC='purge_wait_for_btr_search_latch WAIT_FOR go';
--send ALTER TABLE t1 ADD COLUMN col3 INT GENERATED ALWAYS AS (col1 % col2) VIRTUAL, algorithm=inplace;
--connection con2
# Allow purge to wait for btr_search_latch
--sleep 10
SET DEBUG_SYNC = 'now signal go';
--connection con1
--reap
SET DEBUG_SYNC = 'RESET';
DROP TABLE t1;
--connection default
--disconnect con1
--disconnect con2
--echo #
--echo # Bug#26330279 - ASSERT ON ROW_PURGE_REMOVE_SEC_IF_POSS_LEAF| INNOBASE/ROW/ROW0PURGE.CC
--echo #
SET GLOBAL innodb_purge_stop_now=ON;
CREATE TABLE t1 (col1 INT,
col2 VARCHAR(100),
col3 VARCHAR(80) GENERATED ALWAYS AS (SUBSTR(col2,1,70)),
PRIMARY KEY (col1), UNIQUE KEY uidx(col3(10))) ENGINE = InnoDB;
INSERT INTO t1(col1, col2) VALUES(1, CONCAT(1, REPEAT('z',90)));
REPLACE INTO t1(col1, col2) SELECT col1, col2 FROM t1;
SET GLOBAL innodb_purge_run_now=ON;
--source include/wait_innodb_all_purged.inc
DROP TABLE t1;
--echo #
--echo # BUG#27319084 - INDEX CORRUPT: INNODB: FIELD 0 LEN IS NNN, SHOULD BE NNN; RECORD
--echo #
CREATE TABLE t1(a INT NOT NULL, d INT NOT NULL, b VARCHAR(198) NOT NULL, c CHAR(84), vbcol CHAR(2) AS (substr(b, 2, 2)) VIRTUAL, vbidxcol CHAR(3) AS (substr(b, 1, 3)) VIRTUAL, INDEX(vbidxcol ASC)) ROW_FORMAT = DYNAMIC;
INSERT INTO t1(a, d, b, c) VALUES(200, 300, '1.3.1415926535', 'hello world');
connect (conn1, localhost, root,,);
connection default;
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL altered WAIT_FOR dmls_done';
--send ALTER TABLE t1 ROW_FORMAT = REDUNDANT
connection conn1;
SET DEBUG_SYNC = 'now WAIT_FOR altered';
INSERT INTO t1(a, d, b, c) VALUES(201, 300, '3.1415926535', 'hello world');
UPDATE t1 SET b = '6.1516179' WHERE a = 200;
SET DEBUG_SYNC = 'now SIGNAL dmls_done';
disconnect conn1;
connection default;
reap;
SET DEBUG_SYNC = 'reset';
CHECK TABLE t1;
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a INT NOT NULL, d INT NOT NULL, b VARCHAR(198) NOT NULL, c CHAR(84), vbcol CHAR(2) AS (substr(b, 2, 2)) VIRTUAL, vbidxcol CHAR(3) AS (substr(b, 1, 3)) VIRTUAL, INDEX(vbidxcol ASC)) ROW_FORMAT = REDUNDANT;
INSERT INTO t1(a, d, b, c) VALUES(200, 300, '1.3.1415926535', 'hello world');
connect (conn1, localhost, root,,);
connection default;
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL altered WAIT_FOR dmls_done';
--send ALTER TABLE t1 ROW_FORMAT = DYNAMIC
connection conn1;
SET DEBUG_SYNC = 'now WAIT_FOR altered';
INSERT INTO t1(a, d, b, c) VALUES(201, 300, '3.1415926535', 'hello world');
UPDATE t1 SET b = '6.1516179' WHERE a = 200;
SET DEBUG_SYNC = 'now SIGNAL dmls_done';
disconnect conn1;
connection default;
reap;
SET DEBUG_SYNC = 'reset';
CHECK TABLE t1;
SELECT * FROM t1;
DROP TABLE t1;
--echo #
--echo # BUG#28448853 - ASSERTION FAILURE: ROW0LOG.CC:2153 ROW_LOG_TABLE_APPLY (THR=0X7F7C7C050030
--echo #
CREATE TABLE t1(a INT NOT NULL, d INT NOT NULL, b VARCHAR(198) NOT NULL, c CHAR(84), vbcol CHAR(2) AS (substr(b, 2, 2)) VIRTUAL);
INSERT INTO t1(a, d, b, c) VALUES(200, 300, '1.3.1415926535', 'hello world');
SELECT * FROM t1;
connect (conn1, localhost, root,,);
connection default;
SET DEBUG_SYNC = 'inplace_after_index_build SIGNAL altered WAIT_FOR dmls_done';
--send ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
connection conn1;
SET DEBUG_SYNC = 'now WAIT_FOR altered';
START TRANSACTION;
UPDATE t1 SET b = '6.1516179' WHERE a = 200;
ROLLBACK;
SET DEBUG_SYNC = 'now SIGNAL dmls_done';
disconnect conn1;
connection default;
reap;
SET DEBUG_SYNC = 'reset';
CHECK TABLE t1;
SHOW CREATE TABLE t1;
SELECT * FROM t1;
DROP TABLE t1;
--echo #
--echo # Bug#28825718 - ASSERTION FAILURE: TRX0REC.CC:NNN:N_IDX > 0 WHILE DOING REPLACE/INSERT
--echo #
CREATE TABLE t1(a INT PRIMARY KEY, b INT, c INT GENERATED ALWAYS AS(b+1) VIRTUAL) ENGINE=InnoDB;
INSERT INTO t1(a, b) VALUES(1, 1);
connect (con1,localhost,root,,);
connection con1;
SET DEBUG_SYNC = 'row_log_apply_after SIGNAL s1 WAIT_FOR s2';
SET lock_wait_timeout = 1;
--send ALTER TABLE t1 ADD UNIQUE INDEX(c, b)
connection default;
SET DEBUG_SYNC = 'now WAIT_FOR s1';
SET DEBUG_SYNC = 'row_ins_sec_index_enter SIGNAL s2 WAIT_FOR s3';
--send INSERT INTO t1(a, b) VALUES(2, 2)
connection con1;
--echo /* con1 reap */ ALTER TABLE t1 ADD UNIQUE INDEX(c, b);
--error ER_LOCK_WAIT_TIMEOUT
reap;
SET DEBUG_SYNC ='now SIGNAL s3';
disconnect con1;
connection default;
reap;
ALTER TABLE t1 ADD KEY(b);
INSERT INTO t1(a, b) VALUES(3, 3);
SELECT * FROM t1;
CHECK TABLE t1;
DROP TABLE t1;
--echo #
--echo # Bug#28834208 ROW_LOG_TABLE_APPLY_UPDATE*INPLACE_ALTER_TABLE
--echo #
CREATE TABLE t1 (
pkey INT(11) PRIMARY KEY,
a VARCHAR(100),
v VARCHAR(100) GENERATED ALWAYS AS (SUBSTRING(a,2,2)) VIRTUAL,
c varchar(100),
UNIQUE KEY k (v)
);
INSERT INTO t1 ( pkey,a,c) VALUES (149,'bata','test');
SELECT pkey,a,v FROM t1;
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL index_built WAIT_FOR S2';
--send OPTIMIZE TABLE t1
connect (con1,localhost,root,,);
--echo # Connect to con1
--connection con1
SET DEBUG_SYNC = 'now WAIT_FOR index_built';
UPDATE t1 SET a='tata' WHERE pkey=149;
SET DEBUG_SYNC ='now signal S2';
SELECT pkey,a,v FROM t1;
disconnect con1;
--connection default
--echo # Connect to Default
reap;
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (
pkey INT(11) PRIMARY KEY,
a VARCHAR(100),
v VARCHAR(100) GENERATED ALWAYS AS (SUBSTRING(a,2,2)) VIRTUAL,
c varchar(100),
v1 VARCHAR(100) GENERATED ALWAYS AS (SUBSTRING(c,2,2)) VIRTUAL,
KEY k (v),
KEY v (v1)
);
INSERT INTO t1 (pkey, a, c) VALUES (149, 'bata', 'test');
INSERT INTO t1 (pkey, a, c) VALUES (150, 'bata', 'test');
INSERT INTO t1 (pkey, a, c) VALUES (160, 'bata', 'test');
SELECT pkey, a, v, c, v1 FROM t1;
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL index_built WAIT_FOR S2';
--send OPTIMIZE TABLE t1
connect (con1,localhost,root,,);
--echo # Connect to con1
--connection con1
SET DEBUG_SYNC = 'now WAIT_FOR index_built';
UPDATE t1 SET c = 'best' WHERE pkey = 149;
UPDATE t1 SET a = 'tata' WHERE pkey = 150;
UPDATE t1 SET a = 'tata', c = 'best' WHERE pkey = 160;
SET DEBUG_SYNC ='now signal S2';
SELECT pkey, a, v, c, v1 FROM t1;
disconnect con1;
--connection default
--echo # Connect to Default
reap;
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(
j SERIAL PRIMARY KEY,
a VARCHAR(36),
isa BOOLEAN,
ab VARCHAR(36) AS (IF(`isa`,`a`,NULL )),
KEY k(ab)
);
INSERT INTO t1 (a, isa) VALUES ('test', 1);
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL index_built WAIT_FOR S2';
--send OPTIMIZE TABLE t1
connect (con1,localhost,root,,);
--echo # Connect to con1
--connection con1
SET DEBUG_SYNC = 'now WAIT_FOR index_built';
UPDATE t1 SET isa=0 ;
SET DEBUG_SYNC ='now signal S2';
SELECT j,a,isa,ab FROM t1;
disconnect con1;
--echo # Connect to Default
--connection default
reap;
SELECT j,a,isa,ab FROM t1;
UPDATE t1 SET isa = 1 WHERE a = 'test' AND isa = 0;
SELECT j,a,isa,ab FROM t1;
DROP TABLE t1;
# Test for the rollback scenario when both a virtual column and a virtual
# Index are added. The in-memory dict_index_t object should be handled
# properly, in case of any unexpected crash
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES(1), (1);
set session debug = '+d, force_virtual_col_build_fail';
# Prepare an index which is marked as aborted
connect (conn1,localhost,root,,);
connect (conn2,localhost,root,,);
connection default;
SET DEBUG_SYNC='innodb_commit_inplace_alter_table_enter SIGNAL rolling_back WAIT_FOR drop_created';
--send ALTER TABLE t1 ADD COLUMN (h INT GENERATED ALWAYS AS(a+1) VIRTUAL), ADD INDEX idx(h), ALGORITHM=INPLACE;
connection conn1;
SET DEBUG_SYNC='now WAIT_FOR rolling_back';
SET DEBUG_SYNC='row_search_for_mysql_before_return SIGNAL scanning WAIT_FOR continue_scan';
--send SELECT * FROM t1;
connection conn2;
SET DEBUG_SYNC='now WAIT_FOR scanning';
SET DEBUG_SYNC='now SIGNAL drop_created';
connection default;
--error ER_GET_ERRNO
--reap
connection conn2;
SET DEBUG_SYNC='now SIGNAL continue_scan';
connection conn1;
--reap;
disconnect conn1;
disconnect conn2;
connection default;
set session debug = '-d, force_virtual_col_build_fail';
INSERT INTO t1 VALUES(1);
CHECK TABLE t1;
DROP TABLE t1;
--source include/wait_until_count_sessions.inc
--echo #
--echo # Bug 31279528 - CRASH IN MYSQL SERVER, ASSERTION FAILURE: DICT0DICT.CC
--echo #
CREATE TABLE t1 (c1 INT);
# Create a secondary index which will cause virtual columns to be added into table
CREATE INDEX idx ON t1 ( ( c1 = 127 ) , ( c1 + c1 ) , c1 , ( c1 + - -1 ) , (c1 > 26 ) ) ;
SHOW WARNINGS;
SHOW CREATE TABLE t1;
SET SESSION debug= '+d,skip_dd_table_access_check';
SELECT ID INTO @tid FROM mysql.tables WHERE NAME='t1';
SELECT NAME, ORDINAL_POSITION, TYPE, HIDDEN, GENERATION_EXPRESSION_UTF8 FROM mysql.columns WHERE TABLE_ID=@tid ORDER BY ORDINAL_POSITION;
DROP TABLE t1;
--echo #
--echo # Bug #30556595 FAILING ASSERTION: !CURSOR->INDEX->IS_COMMITTED()
--echo # ON TABLE WITH GCOLS
--echo #
--echo # Set binlog_row_image = MINIMAL.
SET @old_binlog_row_image = @@binlog_row_image;
SET @@session.binlog_row_image = 'MINIMAL';
--echo # Testcase-1
CREATE TABLE t (pid int PRIMARY KEY,
uid int,
vid int AS (uid) VIRTUAL);
connect(con1,localhost,root,,);
--echo # Create index on virtual column and stop before applying row logs.
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL start_dml WAIT_FOR resume_ddl';
--send ALTER TABLE t ADD INDEX idx_vid(vid), algorithm=inplace
connection default;
SET DEBUG_SYNC= 'now WAIT_FOR start_dml';
--echo # Insert a record to generate an insert row log for the new index.
--echo # LOG-1 idx_vid : INSERT [10, 1]
INSERT INTO t(pid, uid) VALUES (1,10);
--echo # Update the record changing PK. It should generate 2 row logs for the new index.
--echo # LOG-2 idx_vid : DELETE [10, 1]
--echo # LOG-3 idx_vid : INSERT [10, 2]
UPDATE t SET pid = 2 WHERE pid = 1;
SELECT * FROM t;
SET DEBUG_SYNC= 'now SIGNAL resume_ddl';
connection con1;
--reap
connection default;
--echo # Insert a record to re-use the delete marked record in idx_vid [10, 1]
INSERT INTO t(pid, uid) VALUES (1,10);
SELECT * FROM t;
disconnect con1;
DROP TABLE t;
--echo # Testcase-2
CREATE TABLE t (pid int PRIMARY KEY,
uid int,
vid int AS (uid) VIRTUAL);
connect(con1,localhost,root,,);
--echo # Create index on virtual column and stop before applying row logs.
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL start_dml WAIT_FOR resume_ddl';
--send ALTER TABLE t ADD INDEX idx_vid(vid), algorithm=inplace
connection default;
SET DEBUG_SYNC= 'now WAIT_FOR start_dml';
--echo # Start transaction
BEGIN;
--echo # Insert a record to generate an insert row log for the new index.
--echo # LOG-1 idx_vid : INSERT [10, 1]
INSERT INTO t(pid, uid) VALUES (1,10);
--echo # Update the record changing PK. It should generate 2 row logs for the new index.
--echo # LOG-2 idx_vid : DELETE [10, 1]
--echo # LOG-3 idx_vid : INSERT [10, 2]
UPDATE t SET pid = 2 WHERE pid = 1;
SELECT * FROM t;
--echo # Rollback transaction
--echo # LOG-4 idx_vid : DELETE [10, 2]
--echo # LOG-5 idx_vid : INSERT [10, 1]
--echo # LOG-6 idx_vid : DELETE [10, 1]
ROLLBACK;
SET DEBUG_SYNC= 'now SIGNAL resume_ddl';
connection con1;
--reap
connection default;
--echo # Insert a record to check valid entry in idx_vid [NULL, 1]
INSERT INTO t(pid) VALUES (1);
SELECT * FROM t;
disconnect con1;
DROP TABLE t;
--echo # Testcase-3
CREATE TABLE t (pid int PRIMARY KEY,
uid int,
vid int AS (uid) VIRTUAL);
INSERT INTO t(pid, uid) VALUES (1,10);
connect(con1,localhost,root,,);
--echo # Create index on virtual column and stop before applying row logs.
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL start_dml WAIT_FOR resume_ddl';
--send ALTER TABLE t ADD INDEX idx_vid(vid), algorithm=inplace
connection default;
SET DEBUG_SYNC= 'now WAIT_FOR start_dml';
--echo # Update the record changing PK. It should generate 2 row logs for the new index.
--echo # LOG-2 idx_vid : DELETE [10, 1]
--echo # LOG-3 idx_vid : INSERT [10, 2]
UPDATE t SET pid = 2 WHERE pid = 1;
SET DEBUG_SYNC= 'now SIGNAL resume_ddl';
connection con1;
--reap
connection default;
--echo # Read [2, 10, 10] row using idx_vid index key.
--sleep 1
--skip_if_hypergraph # Hits assertion. Bug#33888263.
select * from t where VID=10;
disconnect con1;
DROP TABLE t;
--echo # Testcase-4
CREATE TABLE t (pid int PRIMARY KEY,
uid int,
vid int AS (uid) VIRTUAL);
INSERT INTO t(pid, uid) VALUES (1,10);
connect(con1,localhost,root,,);
--echo # Create index on virtual column and stop before applying row logs.
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL start_dml WAIT_FOR resume_ddl';
--send ALTER TABLE t ADD INDEX idx_vid(vid), algorithm=inplace
connection default;
SET DEBUG_SYNC= 'now WAIT_FOR start_dml';
--echo # Update the record changing PK. It should generate 2 row logs for the new index.
--echo # LOG-2 idx_vid : DELETE [10, 1]
--echo # LOG-3 idx_vid : INSERT [10, 2]
UPDATE t SET pid = 2 WHERE pid = 1;
SET DEBUG_SYNC= 'now SIGNAL resume_ddl';
connection con1;
--reap
connection default;
--echo # Delete a record.
--skip_if_hypergraph # Hits assertion. Bug#33888263.
delete from t limit 1;
disconnect con1;
DROP TABLE t;
SET @@session.binlog_row_image = @old_binlog_row_image;
|