set @OLD_SQL_MODE=@@SESSION.SQL_MODE; create table t1 (a int, b int generated always as (a+1)); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL, `b` int(11) GENERATED ALWAYS AS (`a` + 1) VIRTUAL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci drop table t1; create table t1 (a int, b int as (a+1) virtual); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL, `b` int(11) GENERATED ALWAYS AS (`a` + 1) VIRTUAL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci drop table t1; create table t1 (a int, b int generated always as (a+1) persistent); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL, `b` int(11) GENERATED ALWAYS AS (`a` + 1) STORED ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci drop table t1; set session sql_mode='ORACLE'; create table t1 (a int, b int as (a+1)); show create table t1; Table Create Table t1 CREATE TABLE "t1" ( "a" int(11) DEFAULT NULL, "b" int(11) GENERATED ALWAYS AS ("a" + 1) VIRTUAL ) drop table t1; create table t1 (a int, b int generated always as (a+1) virtual); show create table t1; Table Create Table t1 CREATE TABLE "t1" ( "a" int(11) DEFAULT NULL, "b" int(11) GENERATED ALWAYS AS ("a" + 1) VIRTUAL ) drop table t1; create table t1 (a int, b int as (a+1) persistent); show create table t1; Table Create Table t1 CREATE TABLE "t1" ( "a" int(11) DEFAULT NULL, "b" int(11) GENERATED ALWAYS AS ("a" + 1) STORED ) drop table t1; set session sql_mode=@OLD_SQL_MODE; # # MDEV-25091 CREATE TABLE: field references qualified by a wrong table name succeed # create table t2 (x int); create table t1 (x int, y int generated always as (t2.x)); ERROR 42S22: Unknown column '`t2`.`x`' in 'GENERATED ALWAYS' create table t1 (x int, y int check (y > t2.x)); ERROR 42S22: Unknown column '`t2`.`x`' in 'CHECK' create table t1 (x int, y int default t2.x); ERROR 42S22: Unknown column '`t2`.`x`' in 'DEFAULT' create table t1 (x int, check (t2.x > 0)); ERROR 42S22: Unknown column '`t2`.`x`' in 'CHECK' create table t1 (x int); alter table t1 add column y int generated always as (t2.x); ERROR 42S22: Unknown column '`t2`.`x`' in 'GENERATED ALWAYS' alter table t1 add column y int check (z > t2.x); ERROR 42S22: Unknown column '`t2`.`x`' in 'CHECK' alter table t1 add column y int default t2.x; ERROR 42S22: Unknown column '`t2`.`x`' in 'DEFAULT' alter table t1 add constraint check (t2.x > 0); ERROR 42S22: Unknown column '`t2`.`x`' in 'CHECK' create or replace table t1 (x int, y int generated always as (t1.x)); create or replace table t1 (x int, y int check (y > t1.x)); create or replace table t1 (x int, y int default t1.x); create or replace table t1 (x int, check (t1.x > 0)); create or replace table t1 (x int, y int generated always as (test.t1.x)); create or replace table t1 (x int, y int check (y > test.t1.x)); create or replace table t1 (x int, y int default test.t1.x); create or replace table t1 (x int, check (test.t1.x > 0)); drop tables t1, t2; create table t1 (x int, y int generated always as (test2.t1.x)); ERROR 42S22: Unknown column '`test2`.`t1`.`x`' in 'GENERATED ALWAYS' create table t1 (x int, y int check (y > test2.t1.x)); ERROR 42S22: Unknown column '`test2`.`t1`.`x`' in 'CHECK' create table t1 (x int, y int default test2.t1.x); ERROR 42S22: Unknown column '`test2`.`t1`.`x`' in 'DEFAULT' create table t1 (x int, check (test2.t1.x > 0)); ERROR 42S22: Unknown column '`test2`.`t1`.`x`' in 'CHECK' # # MDEV-25672 table alias from previous statement interferes later commands # create table t1 (a int, v_a int generated always as (a)); update t1 as x set a = 1; alter table t1 force; drop table t1; create table t1 ( id int not null auto_increment primary key, order_date_time datetime not null, order_date date generated always as (convert(order_date_time, date)), language_id binary(16) null ); update t1 as tx set order_date= null; alter table t1 modify column language_id binary(16) not null; drop table t1; # # MDEV-24176 Server crashes after insert in the table with virtual column generated using date_format() and if() # create table t1 (d1 date not null, d2 date not null, gd text as (concat(d1,if(d1 <> d2, date_format(d2, 'to %y-%m-%d '), ''))) ); insert into t1(d1,d2) values ('2020-09-01','2020-09-01'),('2020-05-01','2020-09-01'); select * from t1; d1 d2 gd 2020-09-01 2020-09-01 2020-09-01 2020-05-01 2020-09-01 2020-05-01to 20-09-01 drop table t1; # MDEV-25772 (duplicate) and LOCK TABLES case create table t1 (d1 datetime , v_d1 tinyint(1) as (d1 < curdate())); insert into t1 (d1) values ('2021-09-11 08:38:23'), ('2021-09-01 08:38:23'); lock tables t1 write; select * from t1 where v_d1=1; d1 v_d1 2021-09-11 08:38:23 1 2021-09-01 08:38:23 1 select * from t1; d1 v_d1 2021-09-11 08:38:23 1 2021-09-01 08:38:23 1 unlock tables; drop table t1; # MDEV-26432 (duplicate) create table t1 (v2 int, v1 int as ((user() like 'x'))) ; select 1 from t1 where v1=1 ; 1 select * from t1; v2 v1 drop table t1; create table t1 (v2 int as ( user () like 'x')); select 1 from t1 order by v2 ; 1 alter table t1 add i int; drop table t1; # MDEV-26437 (duplicate) create table v0 (v2 int not null, v1 bigint as (case 'x' when current_user() then v2 end)); select v2 as v3 from v0 where v1 like 'x' escape 'x'; v3 insert into v0 (v2) values (-128); drop table v0; create table t1 (vi int as (case 'x' when current_user() then 1 end)); select 1 from t1 where vi=1; 1 show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `vi` int(11) GENERATED ALWAYS AS (case 'x' when current_user() then 1 end) VIRTUAL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci drop table t1; create table t1 (vi int as (case 'x' when current_user() then 1 end)); select 1 from t1 where vi=1; 1 select 1 from t1 where vi=1; 1 drop table t1; # MDEV-28092 (duplicate) create table t1 (b timestamp, a int as (1 in (dayofmonth (b between 'x' and current_user) = b))); insert into t1(b) values ('2022-03-17 14:55:37'); select 1 from t1 x natural join t1; 1 1 Warnings: Warning 1292 Truncated incorrect datetime value: 'x' Warning 1292 Truncated incorrect datetime value: 'root@localhost' Warning 1292 Truncated incorrect datetime value: 'x' Warning 1292 Truncated incorrect datetime value: 'root@localhost' drop table t1; # MDEV-28089 (duplicate) create table t1 (a int , b date as (1 in ('x' ,(database () = 'x' is null) ))) ; select b from t1; b select a from t1 order by 'x' = b; a drop table t1; create table t1 (a int , b date as (1 in ('x' ,(database ()) ))) ; Warnings: Warning 1292 Truncated incorrect DECIMAL value: 'x' Warning 1292 Truncated incorrect DECIMAL value: 'test' select b from t1; b Warnings: Warning 1292 Truncated incorrect DECIMAL value: 'x' Warning 1292 Truncated incorrect DECIMAL value: 'test' select a from t1 order by 'x' = b; a Warnings: Warning 1292 Truncated incorrect DECIMAL value: 'x' Warning 1292 Truncated incorrect DECIMAL value: 'test' drop table t1;