mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Don't reset StringBuffers in loops when not needed
- Moved out creating StringBuffers in loops and instead create them outside and just reset the buffer if it was not allocated (to avoid a possible malloc/free for every entry) Other things related to set_buffer_if_not_allocated() - Changed Valuebuffer to not call set_buffer_if_not_allocated() when it is created. - Fixed geometry functions to reset string length before calling String::reserve(). This is because one should not access length() of an undefined. - Added Item_func_conv_charset::save_in_field() as the item is using str_value to store cached values, which conflicts with Item::save_str_in_field(). - Changed Item_proc_string to not store the string value in sql_string as this clashes with Item::save_str_in_field(). - Locally store value of full_name_cstring() in analyse::end_of_records() as Item::save_str_in_field() may overwrite it. - Marked some strings as set_thread_specific() - Added String::free_buffer() to be used internally in String functions to just free the buffer but not reset other String values. - Fixed uses_buffer_owned_by() to check for allocated length instead of strlength, which could be marked MEM_UNDEFINED().
This commit is contained in:
@ -40,7 +40,7 @@ bool Binary_string::real_alloc(size_t length)
|
||||
str_length=0;
|
||||
if (Alloced_length < arg_length)
|
||||
{
|
||||
free();
|
||||
free_buffer();
|
||||
if (!(Ptr=(char*) my_malloc(STRING_PSI_MEMORY_KEY,
|
||||
arg_length,MYF(MY_WME | (thread_specific ?
|
||||
MY_THREAD_SPECIFIC : 0)))))
|
||||
@ -1112,7 +1112,8 @@ uint
|
||||
String_copier::well_formed_copy(CHARSET_INFO *to_cs,
|
||||
char *to, size_t to_length,
|
||||
CHARSET_INFO *from_cs,
|
||||
const char *from, size_t from_length, size_t nchars)
|
||||
const char *from, size_t from_length,
|
||||
size_t nchars)
|
||||
{
|
||||
if ((to_cs == &my_charset_bin) ||
|
||||
(from_cs == &my_charset_bin) ||
|
||||
|
Reference in New Issue
Block a user