SET @@session.storage_engine = 'MyISAM';
# Case 1. All non-stored columns.
# This scenario is currently impossible due to the fact that virtual columns
# with a constant expression are not allowed.
# Case 2. CREATE
#  - Column1: "real"
#  - Column 2: virtual non-stored
create table t1 (a int, b int as (-a));
insert into t1 values (1,default);
select * from t1;
a	b
1	-1
insert into t1 values (2,default);
select * from t1;
a	b
1	-1
2	-2
drop table t1;
# Case 3. CREATE
#  - Column1: "real"
#  - Column 2: virtual stored
create table t1 (a int, b int as (-a) persistent);
insert into t1 values (1,default);
select * from t1;
a	b
1	-1
insert into t1 values (2,default);
select * from t1;
a	b
1	-1
2	-2
drop table t1;
# Case 4. CREATE
#  - Column1: virtual non-stored
#  - Column2: "real"
create table t1 (a int as (-b), b int);
insert into t1 values (default,1);
select * from t1;
a	b
-1	1
insert into t1 values (default,2);
select * from t1;
a	b
-1	1
-2	2
drop table t1;
# Case 5. CREATE
#  - Column1: virtual stored
#  - Column2: "real"
create table t1 (a int as (-b) persistent, b int);
insert into t1 values (default,1);
select * from t1;
a	b
-1	1
insert into t1 values (default,2);
select * from t1;
a	b
-1	1
-2	2
drop table t1;
# Case 6. CREATE
#  - Column1: "real"
#  - Column2: virtual non-stored
#  - Column3: virtual stored
create table t1 (a int, b int as (-a), c int as (-a) persistent);
insert into t1 values (1,default,default);
select * from t1;
a	b	c
1	-1	-1
insert into t1 values (2,default,default);
select * from t1;
a	b	c
1	-1	-1
2	-2	-2
drop table t1;
# Case 7. ALTER. Modify virtual stored -> virtual non-stored
create table t1 (a int, b int as (a % 2) persistent);
alter table t1 modify b int as (a % 2);
ERROR HY000: This is not yet supported for computed columns
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) AS (a % 2) PERSISTENT
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
# Case 8. ALTER. Modify virtual non-stored -> virtual stored
create table t1 (a int, b int as (a % 2));
alter table t1 modify b int as (a % 2) persistent;
ERROR HY000: This is not yet supported for computed columns
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) AS (a % 2) VIRTUAL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
# Case 9. CREATE LIKE
#  - Column1: "real"
#  - Column2: virtual non-stored
#  - Column3: virtual stored
create table t1 (a int, b int as (-a), c int as (-a) persistent);
create table t2 like t1;
insert into t2 values (1,default,default);
select * from t2;
a	b	c
1	-1	-1
insert into t2 values (2,default,default);
select * from t2;
a	b	c
1	-1	-1
2	-2	-2
drop table t2;
drop table t1;
# Case 10. ALTER. Dropping a virtual non-stored column.
#  - Column1: virtual non-stored
#  - Column2: "real"
create table t1 (a int as (-b), b int, c varchar(5));
insert into t1 values (default,1,'v1');
insert into t1 values (default,2,'v2');
select * from t1;
a	b	c
-1	1	v1
-2	2	v2
alter table t1 drop column a;
select * from t1;
b	c
1	v1
2	v2
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `b` int(11) DEFAULT NULL,
  `c` varchar(5) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
# Case 11. ALTER. Dropping a virtual stored column.
#  - Column1: virtual stored
#  - Column2: "real"
create table t1 (a int as (-b) persistent, b int, c char(5));
insert into t1 values (default,1,'v1');
insert into t1 values (default,2,'v2');
select * from t1;
a	b	c
-1	1	v1
-2	2	v2
alter table t1 drop column a;
select * from t1;
b	c
1	v1
2	v2
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `b` int(11) DEFAULT NULL,
  `c` char(5) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
# Case 12. ALTER. Adding a new virtual non-stored column.
create table t1 (a int, b datetime);
insert into t1 values (1,'2008-09-04');
insert into t1 values (2,'2008-09-05');
select * from t1;
a	b
1	2008-09-04 00:00:00
2	2008-09-05 00:00:00
alter table t1 add column c int as (dayofyear(b)) after a;
select * from t1;
a	c	b
1	248	2008-09-04 00:00:00
2	249	2008-09-05 00:00:00
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL,
  `c` int(11) AS (dayofyear(b)) VIRTUAL,
  `b` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
# Case 13. ALTER. Adding a new virtual stored column.
create table t1 (a int, b datetime);
insert into t1 values (1,'2008-09-04');
insert into t1 values (2,'2008-09-05');
select * from t1;
a	b
1	2008-09-04 00:00:00
2	2008-09-05 00:00:00
alter table t1 add column c int as (dayofyear(b)) persistent after a;
select * from t1;
a	c	b
1	248	2008-09-04 00:00:00
2	249	2008-09-05 00:00:00
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL,
  `c` int(11) AS (dayofyear(b)) PERSISTENT,
  `b` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
# Case 14. ALTER. Changing the expression of a virtual stored column.
create table t1 (a int, b datetime, c int as (week(b)) persistent);
insert into t1 values (1,'2008-09-04',default);
insert into t1 values (2,'2008-09-05',default);
select * from t1;
a	b	c
1	2008-09-04 00:00:00	35
2	2008-09-05 00:00:00	35
alter table t1 change column c c int as (week(b,1)) persistent;
select * from t1;
a	b	c
1	2008-09-04 00:00:00	36
2	2008-09-05 00:00:00	36
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL,
  `b` datetime DEFAULT NULL,
  `c` int(11) AS (week(b,1)) PERSISTENT
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
# Case 15. ALTER. Changing the expression of a virtual non-stored column.
create table t1 (a int, b datetime, c int as (week(b)));
insert into t1 values (1,'2008-09-04',default);
insert into t1 values (2,'2008-09-05',default);
select * from t1;
a	b	c
1	2008-09-04 00:00:00	35
2	2008-09-05 00:00:00	35
alter table t1 change column c c int as (week(b,1));
select * from t1;
a	b	c
1	2008-09-04 00:00:00	36
2	2008-09-05 00:00:00	36
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL,
  `b` datetime DEFAULT NULL,
  `c` int(11) AS (week(b,1)) VIRTUAL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
