diff options
author | Sergei Golubchik <sergii@pisem.net> | 2012-12-17 20:47:23 +0100 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2012-12-17 20:47:23 +0100 |
commit | 1d2b11b291e2ac797ffae59b13f0c94967c052c6 (patch) | |
tree | bac461df8a83eeccb0b2be3cef7590d5bfcaa146 /sql/sql_parse.cc | |
parent | cb7f5948ecedaaaf68de5bdbfab78f1c2e934453 (diff) | |
download | mariadb-git-1d2b11b291e2ac797ffae59b13f0c94967c052c6.tar.gz |
MDEV-438 Microseconds: Precision is ignored in CURRENT_TIMESTAMP(N) when it is given as a default column value
For MySQL 5.6 compatibility, support precision specification in CURRENT_TIMESTAMP in
a default clause, when it's not less than the column's precision.
Diffstat (limited to 'sql/sql_parse.cc')
-rw-r--r-- | sql/sql_parse.cc | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 7bc4f8f1833..3cab8e17533 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -5955,6 +5955,7 @@ bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum_field_types type, { register Create_field *new_field; LEX *lex= thd->lex; + uint8 datetime_precision= length ? atoi(length) : 0; DBUG_ENTER("add_field_to_list"); if (check_string_char_length(field_name, "", NAME_CHAR_LEN, @@ -5994,8 +5995,10 @@ bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum_field_types type, NOW() as default for TIMESTAMP and DATETIME type. */ if (default_value->type() == Item::FUNC_ITEM && - !(((Item_func*)default_value)->functype() == Item_func::NOW_FUNC && - (type == MYSQL_TYPE_TIMESTAMP || type == MYSQL_TYPE_DATETIME))) + (static_cast<Item_func*>(default_value)->functype() != + Item_func::NOW_FUNC || + (mysql_type_to_time_type(type) != MYSQL_TIMESTAMP_DATETIME) || + default_value->decimals < datetime_precision)) { my_error(ER_INVALID_DEFAULT, MYF(0), field_name->str); DBUG_RETURN(1); @@ -6018,7 +6021,8 @@ bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum_field_types type, } if (on_update_value && - !(type == MYSQL_TYPE_TIMESTAMP || type == MYSQL_TYPE_DATETIME)) + (mysql_type_to_time_type(type) != MYSQL_TIMESTAMP_DATETIME || + on_update_value->decimals < datetime_precision)) { my_error(ER_INVALID_ON_UPDATE, MYF(0), field_name->str); DBUG_RETURN(1); |