diff options
author | Alexander Barkov <bar@mariadb.org> | 2017-05-19 21:39:41 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2017-05-19 21:39:41 +0400 |
commit | d2fec340d25c24c8862f461b1f3272c098e67d54 (patch) | |
tree | 990ec1a37e25d400480bae9c8c87f6b3bc91fba3 /sql/item_func.h | |
parent | ac4ce47b09f8869431dfc7a71a250f38ca84b406 (diff) | |
download | mariadb-git-d2fec340d25c24c8862f461b1f3272c098e67d54.tar.gz |
An after-fix for MDEV-12849 Out-of-range errors when casting hex-hybrid to SIGNED and UNSIGNED
1. Adding the forgotten "SET sql_mode=STRICT_ALL_TABLES" into the test.
2. STRICT_ALL_TABLES revealed that CAST(0xFFFFFFFF AS SIGNED),
e.g. with a hex number with 8 hex digits, did not work well.
Fixing Item_func_unsigned::create_tmp_field() and
Item_func_unsigned::create_field_for_create_select() to handle
this corner case.
Diffstat (limited to 'sql/item_func.h')
-rw-r--r-- | sql/item_func.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sql/item_func.h b/sql/item_func.h index c644c1abf1b..baa80ede03f 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -834,6 +834,14 @@ public: unsigned_flag= 0; } const char *func_name() const { return "cast_as_signed"; } + Field *create_tmp_field(bool group, TABLE *table) + { + return Item::create_tmp_field(false, table, + MY_INT32_NUM_DECIMAL_DIGITS - 2 + + unsigned_flag); + } + Field *create_field_for_create_select(TABLE *table) + { return Item_func_signed::create_tmp_field(false, table); } longlong val_int() { longlong value= args[0]->val_int_signed_typecast(); |