From fca44b7c1ffe5e32a94e8d4449bd1d9f91492c3a Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 13 Dec 2018 23:12:14 +0100 Subject: [PATCH] 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. --- mysql-test/std_data/mdev17909#P#p20181029.MYD | 0 mysql-test/std_data/mdev17909#P#p20181029.MYI | Bin 0 -> 1024 bytes mysql-test/std_data/mdev17909#P#p20181128.MYD | 0 mysql-test/std_data/mdev17909#P#p20181128.MYI | Bin 0 -> 1024 bytes mysql-test/std_data/mdev17909.frm | Bin 0 -> 3284 bytes mysql-test/std_data/mdev17909.par | Bin 0 -> 48 bytes mysql-test/suite/vcol/r/upgrade.result | 16 ++++++++++++++++ mysql-test/suite/vcol/t/upgrade.test | 15 +++++++++++++++ sql/table.cc | 2 +- 9 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 mysql-test/std_data/mdev17909#P#p20181029.MYD create mode 100644 mysql-test/std_data/mdev17909#P#p20181029.MYI create mode 100644 mysql-test/std_data/mdev17909#P#p20181128.MYD create mode 100644 mysql-test/std_data/mdev17909#P#p20181128.MYI create mode 100644 mysql-test/std_data/mdev17909.frm create mode 100644 mysql-test/std_data/mdev17909.par 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 diff --git a/mysql-test/std_data/mdev17909#P#p20181029.MYI b/mysql-test/std_data/mdev17909#P#p20181029.MYI new file mode 100644 index 0000000000000000000000000000000000000000..dcdd088b4dc04a5413787cdb08d9a16b67d75c60 GIT binary patch literal 1024 zcmezOkDZZ$kujQK149bK5e7yEAmRX$K=2<-Vj=!R0Yr)giwayqAsomuFmqruOfH72 z`2my-b_o(6rUaRWxR!xfcd*}PU|_!kG=LdM-v`nn5H@U33dJ&}>kx6(7%(bu1wfq@aIoC~ZU$Y5Y>U}9jH0JPzMK#-@eV^HLO zuqmU&@C$+e4a3h*qdpo9fzc2c4S~@R7!85Z5TJDka55Am7L{a{Waj5B1=^($;20F* z8RF^hr{EN+5aj6R?y8^>;vetg7#XaQ;F4I9nxLu4rGZdYU}RuuVQ64vsSxJq6Y3hQ z;Nuz`tPtYi=%=7zZftIBW~iy)>gVq1=c-_<0BN!6a3R?O(QjyEfkVF~rhZKZhE~Q_ zP)m0N17@J#{eb-i2M#`XCoq?eNsQxQZ#eY!bf{4WbiT@cG`5B!3eL{Wx;@w?Cz!9IApkt`u7_8vz;TWW0 JXkehJ2>`7fTk)EMQ;)(wv+O3?e|fz{tSR!qC9T63Q|(vH*%g004Vp1s?za literal 0 HcmV?d00001 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 */