• Monty's avatar
    Changing field::field_name and Item::name to LEX_CSTRING · 5a759d31
    Monty authored
    Benefits of this patch:
    - Removed a lot of calls to strlen(), especially for field_string
    - Strings generated by parser are now const strings, less chance of
      accidently changing a string
    - Removed a lot of calls with LEX_STRING as parameter (changed to pointer)
    - More uniform code
    - Item::name_length was not kept up to date. Now fixed
    - Several bugs found and fixed (Access to null pointers,
      access of freed memory, wrong arguments to printf like functions)
    - Removed a lot of casts from (const char*) to (char*)
    
    Changes:
    - This caused some ABI changes
      - lex_string_set now uses LEX_CSTRING
      - Some fucntions are now taking const char* instead of char*
    - Create_field::change and after changed to LEX_CSTRING
    - handler::connect_string, comment and engine_name() changed to LEX_CSTRING
    - Checked printf() related calls to find bugs. Found and fixed several
      errors in old code.
    - A lot of changes from LEX_STRING to LEX_CSTRING, especially related to
      parsing and events.
    - Some changes from LEX_STRING and LEX_STRING & to LEX_CSTRING*
    - Some changes for char* to const char*
    - Added printf argument checking for my_snprintf()
    - Introduced null_clex_str, star_clex_string, temp_lex_str to simplify
      code
    - Added item_empty_name and item_used_name to be able to distingush between
      items that was given an empty name and items that was not given a name
      This is used in sql_yacc.yy to know when to give an item a name.
    - select table_name."*' is not anymore same as table_name.*
    - removed not used function Item::rename()
    - Added comparision of item->name_length before some calls to
      my_strcasecmp() to speed up comparison
    - Moved Item_sp_variable::make_field() from item.h to item.cc
    - Some minimal code changes to avoid copying to const char *
    - Fixed wrong error message in wsrep_mysql_parse()
    - Fixed wrong code in find_field_in_natural_join() where real_item() was
      set when it shouldn't
    - ER_ERROR_ON_RENAME was used with extra arguments.
    - Removed some (wrong) ER_OUTOFMEMORY, as alloc_root will already
      give the error.
    
    TODO:
    - Check possible unsafe casts in plugin/auth_examples/qa_auth_interface.c
    - Change code to not modify LEX_CSTRING for database name
      (as part of lower_case_table_names)
    5a759d31
rpl_mi.cc 59.4 KB