• Monty's avatar
    Reduce usage of strlen() · b6ff139a
    Monty authored
    Changes:
    - To detect automatic strlen() I removed the methods in String that
      uses 'const char *' without a length:
      - String::append(const char*)
      - Binary_string(const char *str)
      - String(const char *str, CHARSET_INFO *cs)
      - append_for_single_quote(const char *)
      All usage of append(const char*) is changed to either use
      String::append(char), String::append(const char*, size_t length) or
      String::append(LEX_CSTRING)
    - Added STRING_WITH_LEN() around constant string arguments to
      String::append()
    - Added overflow argument to escape_string_for_mysql() and
      escape_quotes_for_mysql() instead of returning (size_t) -1 on overflow.
      This was needed as most usage of the above functions never tested the
      result for -1 and would have given wrong results or crashes in case
      of overflows.
    - Added Item_func_or_sum::func_name_cstring(), which returns LEX_CSTRING.
      Changed all Item_func::func_name()'s to func_name_cstring()'s.
      The old Item_func_or_sum::func_name() is now an inline function that
      returns func_name_cstring().str.
    - Changed Item::mode_name() and Item::func_name_ext() to return
      LEX_CSTRING.
    - Changed for some functions the name argument from const char * to
      to const LEX_CSTRING &:
      - Item::Item_func_fix_attributes()
      - Item::check_type_...()
      - Type_std_attributes::agg_item_collations()
      - Type_std_attributes::agg_item_set_converter()
      - Type_std_attributes::agg_arg_charsets...()
      - Type_handler_hybrid_field_type::aggregate_for_result()
      - Type_handler_geometry::check_type_geom_or_binary()
      - Type_handler::Item_func_or_sum_illegal_param()
      - Predicant_to_list_comparator::add_value_skip_null()
      - Predicant_to_list_comparator::add_value()
      - cmp_item_row::prepare_comparators()
      - cmp_item_row::aggregate_row_elements_for_comparison()
      - Cursor_ref::print_func()
    - Removes String_space() as it was only used in one cases and that
      could be simplified to not use String_space(), thanks to the fixed
      my_vsnprintf().
    - Added some const LEX_CSTRING's for common strings:
      - NULL_clex_str, DATA_clex_str, INDEX_clex_str.
    - Changed primary_key_name to a LEX_CSTRING
    - Renamed String::set_quick() to String::set_buffer_if_not_allocated() to
      clarify what the function really does.
    - Rename of protocol function:
      bool store(const char *from, CHARSET_INFO *cs) to
      bool store_string_or_null(const char *from, CHARSET_INFO *cs).
      This was done to both clarify the difference between this 'store' function
      and also to make it easier to find unoptimal usage of store() calls.
    - Added Protocol::store(const LEX_CSTRING*, CHARSET_INFO*)
    - Changed some 'const char*' arrays to instead be of type LEX_CSTRING.
    - class Item_func_units now used LEX_CSTRING for name.
    
    Other things:
    - Fixed a bug in mysql.cc:construct_prompt() where a wrong escape character
      in the prompt would cause some part of the prompt to be duplicated.
    - Fixed a lot of instances where the length of the argument to
      append is known or easily obtain but was not used.
    - Removed some not needed 'virtual' definition for functions that was
      inherited from the parent. I added override to these.
    - Fixed Ordered_key::print() to preallocate needed buffer. Old code could
      case memory overruns.
    - Simplified some loops when adding char * to a String with delimiters.
    b6ff139a
sql_repl.cc 147 KB