diff options
author | Monty <monty@mariadb.org> | 2017-04-23 19:39:57 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2017-04-23 22:35:46 +0300 |
commit | 5a759d31f766087d5e135e1d3d3d987693bc9b88 (patch) | |
tree | 93c7359e8b211e269bfa73e5f595f34b9dca575a /sql/unireg.cc | |
parent | cba84469eb96481568a9f4ddf3f2989c49c9294c (diff) | |
download | mariadb-git-5a759d31f766087d5e135e1d3d3d987693bc9b88.tar.gz |
Changing field::field_name and Item::name to LEX_CSTRING
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)
Diffstat (limited to 'sql/unireg.cc')
-rw-r--r-- | sql/unireg.cc | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/sql/unireg.cc b/sql/unireg.cc index 0bb8a4e77c6..268ee24f509 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -73,7 +73,7 @@ static uchar *extra2_write_len(uchar *pos, size_t len) } static uchar *extra2_write(uchar *pos, enum extra2_frm_value_type type, - LEX_STRING *str) + const LEX_CSTRING *str) { *pos++ = type; pos= extra2_write_len(pos, str->length); @@ -84,7 +84,7 @@ static uchar *extra2_write(uchar *pos, enum extra2_frm_value_type type, static uchar *extra2_write(uchar *pos, enum extra2_frm_value_type type, LEX_CUSTRING *str) { - return extra2_write(pos, type, reinterpret_cast<LEX_STRING *>(str)); + return extra2_write(pos, type, reinterpret_cast<LEX_CSTRING *>(str)); } /** @@ -107,7 +107,7 @@ LEX_CUSTRING build_frm_image(THD *thd, const char *table, List<Create_field> &create_fields, uint keys, KEY *key_info, handler *db_file) { - LEX_STRING str_db_type; + LEX_CSTRING str_db_type; uint reclength, key_info_length, i; ulong key_buff_length; ulong filepos, data_offset; @@ -616,7 +616,8 @@ static bool pack_header(THD *thd, uchar *forminfo, while ((field=it++)) { if (validate_comment_length(thd, &field->comment, COLUMN_COMMENT_MAXLEN, - ER_TOO_LONG_FIELD_COMMENT, field->field_name)) + ER_TOO_LONG_FIELD_COMMENT, + field->field_name.str)) DBUG_RETURN(1); totlength+= field->length; @@ -632,7 +633,7 @@ static bool pack_header(THD *thd, uchar *forminfo, length=field->pack_length; if ((uint) field->offset+ (uint) data_offset+ length > reclength) reclength=(uint) (field->offset+ data_offset + length); - n_length+= (ulong) strlen(field->field_name)+1; + n_length+= field->field_name.length + 1; field->interval_id=0; field->save_interval= 0; if (field->interval) @@ -776,7 +777,7 @@ static size_t packed_fields_length(List<Create_field> &create_fields) } length+= FCOMP; - length+= strlen(field->field_name)+1; + length+= field->field_name.length + 1; length+= field->comment.length; } length+= 2; @@ -837,7 +838,7 @@ static bool pack_fields(uchar **buff_arg, List<Create_field> &create_fields, it.rewind(); while ((field=it++)) { - buff= (uchar*)strmov((char*) buff, field->field_name); + buff= (uchar*)strmov((char*) buff, field->field_name.str); *buff++=NAMES_SEP_CHAR; } *buff++= 0; @@ -959,7 +960,7 @@ static bool make_empty_rec(THD *thd, uchar *buff, uint table_options, field->unireg_check, field->save_interval ? field->save_interval : field->interval, - field->field_name); + &field->field_name); if (!regfield) { error= 1; @@ -989,7 +990,7 @@ static bool make_empty_rec(THD *thd, uchar *buff, uint table_options, /* If not ok or warning of level 'note' */ if (res != 0 && res != 3) { - my_error(ER_INVALID_DEFAULT, MYF(0), regfield->field_name); + my_error(ER_INVALID_DEFAULT, MYF(0), regfield->field_name.str); error= 1; delete regfield; //To avoid memory leak goto err; |