mirror of
https://github.com/MariaDB/server.git
synced 2025-02-10 07:34:11 +01:00
![Thirunarayanan Balathandayuthapani](/assets/img/avatar_default.png)
Problem: ======= InnoDB wrongly stores the primary key field in externally stored off page during bulk insert operation. This leads to assert failure. Solution: ======== row_merge_buf_blob(): Should store the primary key fields inline. Store the variable length field data externally based on the row format of the table. row_merge_buf_write(): check whether the record size exceeds the maximum record size. row_merge_copy_blob_from_file(): Construct the tuple based on the variable length field
15 lines
1.1 KiB
Text
15 lines
1.1 KiB
Text
--- insert_into_empty.result
|
|
+++ insert_into_empty,64k.result
|
|
@@ -446,12 +446,9 @@
|
|
c09 text, c10 text, c11 text, c12 text) ENGINE=InnoDB;
|
|
SET GLOBAL INNODB_DEFAULT_ROW_FORMAT= COMPACT;
|
|
ALTER TABLE t1 FORCE;
|
|
-Warnings:
|
|
-Warning 139 Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
|
|
INSERT IGNORE INTO t1 VALUES
|
|
(1, REPEAT('x',4805), REPEAT('t',2211), REPEAT('u',974), REPEAT('e',871), REPEAT('z',224), REPEAT('j',978), REPEAT('n',190), REPEAT('t',888), REPEAT('x',32768), REPEAT('e',968), REPEAT('b',913), REPEAT('x',12107)),
|
|
(2, REPEAT('x',4805), REPEAT('t',2211), REPEAT('u',974), REPEAT('e',871), REPEAT('z',224), REPEAT('j',978), REPEAT('n',190), REPEAT('t',888), REPEAT('x',32768), REPEAT('e',968), REPEAT('b',913), REPEAT('x',12107));
|
|
-ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|