diff options
author | Sergei Golubchik <serg@mariadb.org> | 2018-12-13 23:12:14 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2018-12-20 08:06:55 +0100 |
commit | fca44b7c1ffe5e32a94e8d4449bd1d9f91492c3a (patch) | |
tree | 1165c044bdbaaea39f976b9439de142ada887ed5 | |
parent | e765b47e41db54124c05732a903110eae08e1194 (diff) | |
download | mariadb-git-fca44b7c1ffe5e32a94e8d4449bd1d9f91492c3a.tar.gz |
MDEV-17909 Problem by MariaDB Update 10.1.32 -> 10.2.19 (Incorrect information in file: .frm)
use frm_version, not mysql_version when parsing frm
In particular, virtual columns are stored according to
frm_version. And CHECK TABLE will overwrite mysql_version
to the current server version, so it cannot correctly
describe frm format.
-rw-r--r-- | mysql-test/std_data/mdev17909#P#p20181029.MYD | 0 | ||||
-rw-r--r-- | mysql-test/std_data/mdev17909#P#p20181029.MYI | bin | 0 -> 1024 bytes | |||
-rw-r--r-- | mysql-test/std_data/mdev17909#P#p20181128.MYD | 0 | ||||
-rw-r--r-- | mysql-test/std_data/mdev17909#P#p20181128.MYI | bin | 0 -> 1024 bytes | |||
-rw-r--r-- | mysql-test/std_data/mdev17909.frm | bin | 0 -> 3284 bytes | |||
-rw-r--r-- | mysql-test/std_data/mdev17909.par | bin | 0 -> 48 bytes | |||
-rw-r--r-- | mysql-test/suite/vcol/r/upgrade.result | 16 | ||||
-rw-r--r-- | mysql-test/suite/vcol/t/upgrade.test | 15 | ||||
-rw-r--r-- | sql/table.cc | 2 |
9 files changed, 32 insertions, 1 deletions
diff --git a/mysql-test/std_data/mdev17909#P#p20181029.MYD b/mysql-test/std_data/mdev17909#P#p20181029.MYD new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/mysql-test/std_data/mdev17909#P#p20181029.MYD diff --git a/mysql-test/std_data/mdev17909#P#p20181029.MYI b/mysql-test/std_data/mdev17909#P#p20181029.MYI Binary files differnew file mode 100644 index 00000000000..dcdd088b4dc --- /dev/null +++ b/mysql-test/std_data/mdev17909#P#p20181029.MYI diff --git a/mysql-test/std_data/mdev17909#P#p20181128.MYD b/mysql-test/std_data/mdev17909#P#p20181128.MYD new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/mysql-test/std_data/mdev17909#P#p20181128.MYD diff --git a/mysql-test/std_data/mdev17909#P#p20181128.MYI b/mysql-test/std_data/mdev17909#P#p20181128.MYI Binary files differnew file mode 100644 index 00000000000..dcdd088b4dc --- /dev/null +++ b/mysql-test/std_data/mdev17909#P#p20181128.MYI diff --git a/mysql-test/std_data/mdev17909.frm b/mysql-test/std_data/mdev17909.frm Binary files differnew file mode 100644 index 00000000000..575ecd2c70f --- /dev/null +++ b/mysql-test/std_data/mdev17909.frm diff --git a/mysql-test/std_data/mdev17909.par b/mysql-test/std_data/mdev17909.par Binary files differnew file mode 100644 index 00000000000..d9141dd0dee --- /dev/null +++ b/mysql-test/std_data/mdev17909.par diff --git a/mysql-test/suite/vcol/r/upgrade.result b/mysql-test/suite/vcol/r/upgrade.result index 75684bf0e41..527bc5f3abf 100644 --- a/mysql-test/suite/vcol/r/upgrade.result +++ b/mysql-test/suite/vcol/r/upgrade.result @@ -16,3 +16,19 @@ select * from vcol_autoinc; pk v3 1 1 drop table vcol_autoinc; +check table t1 for upgrade; +Table Op Msg_type Msg_text +test.t1 check status OK +flush tables; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `Date` datetime(6) NOT NULL, + `Data` varbinary(2000) NOT NULL, + `a` varchar(100) GENERATED ALWAYS AS (column_get(`Data`,1 as char(100) charset latin1)) VIRTUAL, + PRIMARY KEY (`Date`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + PARTITION BY RANGE (to_days(`Date`)) +(PARTITION `p20181029` VALUES LESS THAN (737361) ENGINE = MyISAM, + PARTITION `p20181128` VALUES LESS THAN (737391) ENGINE = MyISAM) +drop table t1; diff --git a/mysql-test/suite/vcol/t/upgrade.test b/mysql-test/suite/vcol/t/upgrade.test index 3e221747dfa..146495d8ed0 100644 --- a/mysql-test/suite/vcol/t/upgrade.test +++ b/mysql-test/suite/vcol/t/upgrade.test @@ -11,3 +11,18 @@ select * from vcol_autoinc; insert vcol_autoinc (pk) values (1); select * from vcol_autoinc; drop table vcol_autoinc; + +# +# MDEV-17909 Problem by MariaDB Update 10.1.32 -> 10.2.19 (Incorrect information in file: .frm) +# +source include/have_partition.inc; +copy_file std_data/mdev17909#P#p20181029.MYD $datadir/test/t1#P#p20181029.MYD; +copy_file std_data/mdev17909#P#p20181029.MYI $datadir/test/t1#P#p20181029.MYI; +copy_file std_data/mdev17909#P#p20181128.MYD $datadir/test/t1#P#p20181128.MYD; +copy_file std_data/mdev17909#P#p20181128.MYI $datadir/test/t1#P#p20181128.MYI; +copy_file std_data/mdev17909.frm $datadir/test/t1.frm; +copy_file std_data/mdev17909.par $datadir/test/t1.par; +check table t1 for upgrade; +flush tables; +show create table t1; +drop table t1; diff --git a/sql/table.cc b/sql/table.cc index 0cf88aed4f6..dbf10bc8293 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1027,7 +1027,7 @@ bool parse_vcol_defs(THD *thd, MEM_ROOT *mem_root, TABLE *table, while (pos < end) { uint type, expr_length; - if (table->s->mysql_version >= 100202) + if (table->s->frm_version >= FRM_VER_EXPRESSSIONS) { uint field_nr, name_length; /* see pack_expression() for how data is stored */ |