1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-6179: dynamic columns functions/cast()/convert() doesn't play nice with CREATE/ALTER TABLE

When parsing a field declaration, grab type information from LEX before it's overwritten
by further rules. Pass type information through the parser stack to the rule that needs it.
This commit is contained in:
Sergei Golubchik
2014-11-08 19:54:42 +01:00
parent b99328bbf8
commit 360c49c1b9
4 changed files with 106 additions and 13 deletions

View File

@ -2430,3 +2430,50 @@ a b
1 1
unlock tables;
drop table t1,t2;
#
# MDEV-6179: dynamic columns functions/cast()/convert() doesn't
# play nice with CREATE/ALTER TABLE
#
create table t1 (
color char(32) as (COLUMN_GET(dynamic_cols, 1 as char)) persistent,
cl char(32) as (COLUMN_GET(COLUMN_ADD(COLUMN_CREATE(1 , 'blue' as char), 2, 'ttt'), i as char)) persistent,
item_name varchar(32) primary key, -- A common attribute for all items
i int,
dynamic_cols blob -- Dynamic columns will be stored here
);
INSERT INTO t1(item_name, dynamic_cols, i) VALUES
('MariaDB T-shirt', COLUMN_CREATE(1, 'blue', 2, 'XL'), 1);
INSERT INTO t1(item_name, dynamic_cols, i) VALUES
('Thinkpad Laptop', COLUMN_CREATE(1, 'black', 3, 500), 2);
select item_name, color, cl from t1;
item_name color cl
MariaDB T-shirt blue blue
Thinkpad Laptop black ttt
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`color` char(32) AS (COLUMN_GET(dynamic_cols, 1 as char)) PERSISTENT,
`cl` char(32) AS (COLUMN_GET(COLUMN_ADD(COLUMN_CREATE(1 , 'blue' as char), 2, 'ttt'), i as char)) PERSISTENT,
`item_name` varchar(32) NOT NULL,
`i` int(11) DEFAULT NULL,
`dynamic_cols` blob,
PRIMARY KEY (`item_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 (
n int,
c char(32) as (convert(cast(n as char), char)) persistent
);
insert into t1(n) values (1),(2),(3);
select * from t1;
n c
1 1
2 2
3 3
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`n` int(11) DEFAULT NULL,
`c` char(32) AS (convert(cast(n as char), char)) PERSISTENT
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;