From b615d275b8c26ecec943003e1275ee19f94d9887 Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Sun, 2 Feb 2020 15:13:29 +0300 Subject: [PATCH] MDEV-17798 System variable system_versioning_asof accepts wrong values (10.4) --- mysql-test/suite/versioning/r/sysvars.result | 16 ++++++++++++++++ mysql-test/suite/versioning/t/sysvars.test | 16 ++++++++++++++++ sql/sys_vars.ic | 9 +++++++-- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/versioning/r/sysvars.result b/mysql-test/suite/versioning/r/sysvars.result index 79aa8fce746..165458ef170 100644 --- a/mysql-test/suite/versioning/r/sysvars.result +++ b/mysql-test/suite/versioning/r/sysvars.result @@ -31,6 +31,14 @@ set global system_versioning_asof= 1; ERROR 42000: Incorrect argument type to variable 'system_versioning_asof' set global system_versioning_asof= 1.1; ERROR 42000: Incorrect argument type to variable 'system_versioning_asof' +set global system_versioning_asof= '2011-02-29 00:00'; +ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-02-29 00:00' +set global system_versioning_asof= '2011-02-28 24:00'; +ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-02-28 24:00' +set global system_versioning_asof= '2011-00-28 00:00'; +ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-00-28 00:00' +set global system_versioning_asof= '0000-00-00 00:00'; +ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '0000-00-00 00:00' set system_versioning_asof= 'alley'; ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of 'alley' set system_versioning_asof= null; @@ -39,6 +47,14 @@ set system_versioning_asof= 1; ERROR 42000: Incorrect argument type to variable 'system_versioning_asof' set system_versioning_asof= 1.1; ERROR 42000: Incorrect argument type to variable 'system_versioning_asof' +set system_versioning_asof= '2011-02-29 00:00'; +ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-02-29 00:00' +set system_versioning_asof= '2011-02-28 24:00'; +ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-02-28 24:00' +set system_versioning_asof= '2011-00-28 00:00'; +ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-00-28 00:00' +set system_versioning_asof= '0000-00-00 00:00'; +ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '0000-00-00 00:00' # GLOBAL @@system_versioning_asof set global system_versioning_asof= '1911-11-11 11:11:11.1111119'; Warnings: diff --git a/mysql-test/suite/versioning/t/sysvars.test b/mysql-test/suite/versioning/t/sysvars.test index 52fab81b8e6..e82a116f30e 100644 --- a/mysql-test/suite/versioning/t/sysvars.test +++ b/mysql-test/suite/versioning/t/sysvars.test @@ -23,6 +23,14 @@ set global system_versioning_asof= null; set global system_versioning_asof= 1; --error ER_WRONG_TYPE_FOR_VAR set global system_versioning_asof= 1.1; +--error ER_WRONG_VALUE_FOR_VAR +set global system_versioning_asof= '2011-02-29 00:00'; +--error ER_WRONG_VALUE_FOR_VAR +set global system_versioning_asof= '2011-02-28 24:00'; +--error ER_WRONG_VALUE_FOR_VAR +set global system_versioning_asof= '2011-00-28 00:00'; +--error ER_WRONG_VALUE_FOR_VAR +set global system_versioning_asof= '0000-00-00 00:00'; # session --error ER_WRONG_VALUE_FOR_VAR @@ -33,6 +41,14 @@ set system_versioning_asof= null; set system_versioning_asof= 1; --error ER_WRONG_TYPE_FOR_VAR set system_versioning_asof= 1.1; +--error ER_WRONG_VALUE_FOR_VAR +set system_versioning_asof= '2011-02-29 00:00'; +--error ER_WRONG_VALUE_FOR_VAR +set system_versioning_asof= '2011-02-28 24:00'; +--error ER_WRONG_VALUE_FOR_VAR +set system_versioning_asof= '2011-00-28 00:00'; +--error ER_WRONG_VALUE_FOR_VAR +set system_versioning_asof= '0000-00-00 00:00'; --echo # GLOBAL @@system_versioning_asof set global system_versioning_asof= '1911-11-11 11:11:11.1111119'; diff --git a/sql/sys_vars.ic b/sql/sys_vars.ic index 6862dcfde6f..e983347f4ce 100644 --- a/sql/sys_vars.ic +++ b/sql/sys_vars.ic @@ -2634,7 +2634,10 @@ public: if (!Sys_var_enum::do_check(thd, var)) return false; MYSQL_TIME ltime; - Datetime::Options opt(TIME_CONV_NONE, thd); + // FIXME: please resolve both conflicts to "old" and remove this comment + Datetime::Options opt(TIME_CONV_NONE | + TIME_NO_ZERO_IN_DATE | + TIME_NO_ZERO_DATE, thd); bool res= var->value->get_date(thd, <ime, opt); if (!res) { @@ -2653,7 +2656,9 @@ private: if (var->value) { THD *thd= current_thd; - Datetime::Options opt(TIME_CONV_NONE, thd); + Datetime::Options opt(TIME_CONV_NONE | + TIME_NO_ZERO_IN_DATE | + TIME_NO_ZERO_DATE, thd); res= var->value->get_date(thd, &out.ltime, opt); } else // set DEFAULT from global var