From af06683b73abfeba9d675bbf9817bc227372f117 Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Sun, 18 Jun 2017 10:01:24 +0300 Subject: [PATCH] Optimize make_lex_string() to not call alloc_root twice. --- sql/sql_class.h | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/sql/sql_class.h b/sql/sql_class.h index 0034b42f853..1c2b2717591 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -3368,17 +3368,31 @@ public: LEX_STRING *make_lex_string(const char* str, uint length) { LEX_STRING *lex_str; - if (!(lex_str= (LEX_STRING *)alloc_root(mem_root, sizeof(LEX_STRING)))) + char *tmp; + if (!(lex_str= (LEX_STRING *) alloc_root(mem_root, sizeof(LEX_STRING) + + length+1))) return 0; - return make_lex_string(lex_str, str, length); + tmp= (char*) (lex_str+1); + lex_str->str= tmp; + memcpy(tmp, str, length); + tmp[length]= 0; + lex_str->length= length; + return lex_str; } LEX_CSTRING *make_clex_string(const char* str, uint length) { LEX_CSTRING *lex_str; - if (!(lex_str= (LEX_CSTRING *)alloc_root(mem_root, sizeof(LEX_CSTRING)))) + char *tmp; + if (!(lex_str= (LEX_CSTRING *)alloc_root(mem_root, sizeof(LEX_CSTRING) + + length+1))) return 0; - return make_lex_string(lex_str, str, length); + tmp= (char*) (lex_str+1); + lex_str->str= tmp; + memcpy(tmp, str, length); + tmp[length]= 0; + lex_str->length= length; + return lex_str; } // Allocate LEX_STRING for character set conversion