From 6c7e3e5c13162b7ffa90eaa81b4ba5afaf3e0c1e Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 29 Jul 2022 10:24:45 +0200 Subject: [PATCH] bugfix: RAND is VCOL_SESSION_FUNC it's not "non deterministic", it's completely defined by @@rand_seed1 and @@rand_seed2. And as a session func it needs to be re-fixed at the beginning of every statement. --- mysql-test/suite/vcol/r/vcol_misc.result | 16 ++++++++++++++++ mysql-test/suite/vcol/t/vcol_misc.test | 13 +++++++++++++ sql/item_func.h | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/vcol/r/vcol_misc.result b/mysql-test/suite/vcol/r/vcol_misc.result index b9812bf2c4a..155d647aa0f 100644 --- a/mysql-test/suite/vcol/r/vcol_misc.result +++ b/mysql-test/suite/vcol/r/vcol_misc.result @@ -533,3 +533,19 @@ drop table t1; # # End of 10.2 tests # +# +# RAND is session func +# +create table t1 (a int, b float default rand(1)); +insert into t1 (a) values (1); +insert into t1 (a) values (2); +insert into t1 (a) values (3); +select * from t1; +a b +1 0.405404 +2 0.405404 +3 0.405404 +drop table t1; +# +# End of 10.3 tests +# diff --git a/mysql-test/suite/vcol/t/vcol_misc.test b/mysql-test/suite/vcol/t/vcol_misc.test index e5609003806..e693738d5c7 100644 --- a/mysql-test/suite/vcol/t/vcol_misc.test +++ b/mysql-test/suite/vcol/t/vcol_misc.test @@ -506,3 +506,16 @@ drop table t1; --echo # End of 10.2 tests --echo # +--echo # +--echo # RAND is session func +--echo # +create table t1 (a int, b float default rand(1)); +insert into t1 (a) values (1); +insert into t1 (a) values (2); +insert into t1 (a) values (3); +select * from t1; +drop table t1; + +--echo # +--echo # End of 10.3 tests +--echo # diff --git a/sql/item_func.h b/sql/item_func.h index 754b1cd1eb2..7268b56eb97 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -1513,7 +1513,7 @@ public: void cleanup() { first_eval= TRUE; Item_real_func::cleanup(); } bool check_vcol_func_processor(void *arg) { - return mark_unsupported_function(func_name(), "()", arg, VCOL_NON_DETERMINISTIC); + return mark_unsupported_function(func_name(), "()", arg, VCOL_SESSION_FUNC); } Item *get_copy(THD *thd) { return get_item_copy(thd, this); }