mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
d270525dfd
- In ha_innobase::prepare_inplace_alter_table(), InnoDB should check whether the table is empty. If the table is empty then server should avoid downgrading the MDL after prepare phase. It is more like instant alter, does change only in dicationary and metadata. - Changed few debug test case to make non-empty DDL table
102 lines
2.8 KiB
Text
102 lines
2.8 KiB
Text
CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES(1, 1);
|
|
SET DEBUG_SYNC= 'row_merge_after_scan
|
|
SIGNAL opened WAIT_FOR flushed';
|
|
affected rows: 0
|
|
ALTER TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2;
|
|
connect con1,localhost,root;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR opened';
|
|
affected rows: 0
|
|
INSERT INTO t1 VALUES(2, NULL);
|
|
affected rows: 1
|
|
UPDATE t1 SET c1 = 3 WHERE c2 = 1;
|
|
affected rows: 1
|
|
info: Rows matched: 1 Changed: 1 Warnings: 0
|
|
SET DEBUG_SYNC= 'now SIGNAL flushed';
|
|
affected rows: 0
|
|
connection default;
|
|
affected rows: 0
|
|
info: Records: 0 Duplicates: 0 Warnings: 1
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'c2' at row 3
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
2 0
|
|
3 1
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES(1, 1);
|
|
SET DEBUG_SYNC= 'row_merge_after_scan
|
|
SIGNAL opened WAIT_FOR flushed';
|
|
affected rows: 0
|
|
ALTER TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2;
|
|
connection con1;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR opened';
|
|
affected rows: 0
|
|
INSERT INTO t1 VALUES(2, 3);
|
|
affected rows: 1
|
|
UPDATE t1 SET c1 = 3 WHERE c2 = 1;
|
|
affected rows: 1
|
|
info: Rows matched: 1 Changed: 1 Warnings: 0
|
|
SET DEBUG_SYNC= 'now SIGNAL flushed';
|
|
affected rows: 0
|
|
connection default;
|
|
affected rows: 0
|
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
2 3
|
|
3 1
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1(c1 INT NOT NULL, c2 INT, c3 INT, PRIMARY KEY(c1))ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES(1, 2, 3);
|
|
SET DEBUG_SYNC= 'row_merge_after_scan
|
|
SIGNAL opened WAIT_FOR flushed';
|
|
affected rows: 0
|
|
ALTER IGNORE TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2;
|
|
connection con1;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR opened';
|
|
affected rows: 0
|
|
UPDATE t1 SET c2= 2 WHERE c1 = 1;
|
|
affected rows: 0
|
|
info: Rows matched: 1 Changed: 0 Warnings: 0
|
|
INSERT INTO t1 VALUES (2, NULL, 4);
|
|
affected rows: 1
|
|
SET DEBUG_SYNC= 'now SIGNAL flushed';
|
|
affected rows: 0
|
|
connection default;
|
|
affected rows: 0
|
|
info: Records: 0 Duplicates: 0 Warnings: 1
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'c2' at row 3
|
|
SELECT * FROM t1;
|
|
c1 c2 c3
|
|
1 2 3
|
|
2 0 4
|
|
DROP TABLE t1;
|
|
SET DEBUG_SYNC='RESET';
|
|
#
|
|
# MDEV-21539 Assertion ...prtype... in row_log_table_apply_convert_mrec
|
|
#
|
|
CREATE TABLE t1 (f VARCHAR(8) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
|
|
ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES('ZERO');
|
|
connection con1;
|
|
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL scanned WAIT_FOR insert_done';
|
|
ALTER TABLE t1 MODIFY f VARCHAR(256) COLLATE latin1_german2_ci NOT NULL;
|
|
# session default
|
|
connection default;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR scanned';
|
|
INSERT INTO t1 VALUES('one');
|
|
SET DEBUG_SYNC = 'now SIGNAL insert_done';
|
|
connection con1;
|
|
disconnect con1;
|
|
connection default;
|
|
SET DEBUG_SYNC=RESET;
|
|
ALTER TABLE t1 CHANGE f eins VARCHAR(257) COLLATE latin1_german1_ci NOT NULL,
|
|
ALGORITHM=INSTANT;
|
|
SELECT * FROM t1;
|
|
eins
|
|
ZERO
|
|
one
|
|
DROP TABLE t1;
|