MDEV-17021 Server crash or assertion `length <= column->length' failure in write_block_record
Problem was that the number of NULL bit's was record wrong in the .frm file because there could be more fields marked NOT_NULL after the number of not_null fields where recorded. Fixed by copying test for virtual fields from prepare_create_field() The code change, only the test, doesn't have to be merged to 10.3 as this is fixed there.
This commit is contained in:
parent
0cafc13164
commit
f195286a3e
26
mysql-test/suite/maria/create.result
Normal file
26
mysql-test/suite/maria/create.result
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
CREATE OR REPLACE TABLE t1 (
|
||||||
|
f1 DECIMAL(43,0) NOT NULL,
|
||||||
|
f2 TIME(4) NULL,
|
||||||
|
f3 BINARY(101) NULL,
|
||||||
|
f4 TIMESTAMP(4) NULL,
|
||||||
|
f5 DATETIME(1) NULL,
|
||||||
|
f6 SET('a','b','c') NOT NULL DEFAULT 'a',
|
||||||
|
f7 VARBINARY(2332) NOT NULL DEFAULT '',
|
||||||
|
f8 DATE NULL,
|
||||||
|
f9 BLOB NULL,
|
||||||
|
f10 MEDIUMINT(45) NOT NULL DEFAULT 0,
|
||||||
|
f11 YEAR NULL,
|
||||||
|
f12 BIT(58) NULL,
|
||||||
|
v2 TIME(1) AS (f2) VIRTUAL,
|
||||||
|
v3 BINARY(115) AS (f3) VIRTUAL,
|
||||||
|
v4 TIMESTAMP(3) AS (f4) VIRTUAL,
|
||||||
|
v7 VARBINARY(658) AS (f7) PERSISTENT,
|
||||||
|
v8 DATE AS (f8) PERSISTENT,
|
||||||
|
v9 TINYTEXT AS (f9) PERSISTENT,
|
||||||
|
v11 YEAR AS (f11) VIRTUAL
|
||||||
|
) ENGINE=Aria;
|
||||||
|
INSERT IGNORE INTO t1 (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12) VALUES
|
||||||
|
(0.8,'16:01:46',NULL,'2006-03-01 12:44:34','2029-10-10 21:27:53','a','foo','1989-12-24','bar',9,1975,b'1');
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'f1' at row 1
|
||||||
|
DROP TABLE t1;
|
31
mysql-test/suite/maria/create.test
Normal file
31
mysql-test/suite/maria/create.test
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
--source include/have_maria.inc
|
||||||
|
|
||||||
|
# MDEV-17021
|
||||||
|
# Server crash or assertion `length <= column->length' failure in
|
||||||
|
# write_block_record
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE t1 (
|
||||||
|
f1 DECIMAL(43,0) NOT NULL,
|
||||||
|
f2 TIME(4) NULL,
|
||||||
|
f3 BINARY(101) NULL,
|
||||||
|
f4 TIMESTAMP(4) NULL,
|
||||||
|
f5 DATETIME(1) NULL,
|
||||||
|
f6 SET('a','b','c') NOT NULL DEFAULT 'a',
|
||||||
|
f7 VARBINARY(2332) NOT NULL DEFAULT '',
|
||||||
|
f8 DATE NULL,
|
||||||
|
f9 BLOB NULL,
|
||||||
|
f10 MEDIUMINT(45) NOT NULL DEFAULT 0,
|
||||||
|
f11 YEAR NULL,
|
||||||
|
f12 BIT(58) NULL,
|
||||||
|
v2 TIME(1) AS (f2) VIRTUAL,
|
||||||
|
v3 BINARY(115) AS (f3) VIRTUAL,
|
||||||
|
v4 TIMESTAMP(3) AS (f4) VIRTUAL,
|
||||||
|
v7 VARBINARY(658) AS (f7) PERSISTENT,
|
||||||
|
v8 DATE AS (f8) PERSISTENT,
|
||||||
|
v9 TINYTEXT AS (f9) PERSISTENT,
|
||||||
|
v11 YEAR AS (f11) VIRTUAL
|
||||||
|
) ENGINE=Aria;
|
||||||
|
INSERT IGNORE INTO t1 (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12) VALUES
|
||||||
|
(0.8,'16:01:46',NULL,'2006-03-01 12:44:34','2029-10-10 21:27:53','a','foo','1989-12-24','bar',9,1975,b'1');
|
||||||
|
DROP TABLE t1;
|
@ -3328,6 +3328,10 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Virtual fields are always NULL */
|
||||||
|
if (sql_field->vcol_info)
|
||||||
|
sql_field->flags&= ~NOT_NULL_FLAG;
|
||||||
|
|
||||||
if (sql_field->sql_type == MYSQL_TYPE_SET ||
|
if (sql_field->sql_type == MYSQL_TYPE_SET ||
|
||||||
sql_field->sql_type == MYSQL_TYPE_ENUM)
|
sql_field->sql_type == MYSQL_TYPE_ENUM)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user