summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2017-05-19 21:39:41 +0400
committerAlexander Barkov <bar@mariadb.org>2017-05-19 21:39:41 +0400
commitd2fec340d25c24c8862f461b1f3272c098e67d54 (patch)
tree990ec1a37e25d400480bae9c8c87f6b3bc91fba3 /sql
parentac4ce47b09f8869431dfc7a71a250f38ca84b406 (diff)
downloadmariadb-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')
-rw-r--r--sql/item_func.h8
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();