diff options
author | Alexander Barkov <bar@mariadb.com> | 2019-03-18 15:33:59 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2019-03-18 15:33:59 +0400 |
commit | 3b98c65c4e8b50b3000cbca643a5d3048cf1f7f7 (patch) | |
tree | 229ac6510d1571de247850cd5e63fd4d805e740c /sql/item_strfunc.cc | |
parent | 6c08174e365c1a2db76e51dedd2a8292464472d6 (diff) | |
download | mariadb-git-3b98c65c4e8b50b3000cbca643a5d3048cf1f7f7.tar.gz |
MDEV-18881 Assertion `0' failed in make_sortkey upon SELECT with GROUP BY after LOAD DATA
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r-- | sql/item_strfunc.cc | 36 |
1 files changed, 7 insertions, 29 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 73080d9f7fe..de13999bab8 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -3066,8 +3066,12 @@ err: } -void Item_func_rpad::fix_length_and_dec() +void Item_func_pad::fix_length_and_dec() { + String *str; + if (!args[2]->basic_const_item() || !(str= args[2]->val_str(&pad_str)) || !str->length()) + maybe_null= true; + // Handle character set for args[0] and args[2]. if (agg_arg_charsets_for_string_result(collation, &args[0], 2, 2)) return; @@ -3101,7 +3105,7 @@ String *Item_func_rpad::val_str(String *str) longlong count= args[1]->val_int(); longlong byte_count; String *res= args[0]->val_str(str); - String *rpad= args[2]->val_str(&rpad_str); + String *rpad= args[2]->val_str(&pad_str); if (!res || args[1]->null_value || !rpad || ((count < 0) && !args[1]->unsigned_flag)) @@ -3174,32 +3178,6 @@ String *Item_func_rpad::val_str(String *str) } -void Item_func_lpad::fix_length_and_dec() -{ - // Handle character set for args[0] and args[2]. - if (agg_arg_charsets_for_string_result(collation, &args[0], 2, 2)) - return; - - if (args[1]->const_item()) - { - ulonglong char_length= (ulonglong) args[1]->val_int(); - DBUG_ASSERT(collation.collation->mbmaxlen > 0); - /* Assumes that the maximum length of a String is < INT_MAX32. */ - /* Set here so that rest of code sees out-of-bound value as such. */ - if (args[1]->null_value) - char_length= 0; - else if (char_length > INT_MAX32) - char_length= INT_MAX32; - fix_char_length_ulonglong(char_length); - } - else - { - max_length= MAX_BLOB_WIDTH; - maybe_null= 1; - } -} - - String *Item_func_lpad::val_str(String *str) { DBUG_ASSERT(fixed == 1); @@ -3208,7 +3186,7 @@ String *Item_func_lpad::val_str(String *str) longlong count= args[1]->val_int(); longlong byte_count; String *res= args[0]->val_str(&tmp_value); - String *pad= args[2]->val_str(&lpad_str); + String *pad= args[2]->val_str(&pad_str); if (!res || args[1]->null_value || !pad || ((count < 0) && !args[1]->unsigned_flag)) |