diff options
author | Praveenkumar Hulakund <praveenkumar.hulakund@oracle.com> | 2012-02-29 14:15:15 +0530 |
---|---|---|
committer | Praveenkumar Hulakund <praveenkumar.hulakund@oracle.com> | 2012-02-29 14:15:15 +0530 |
commit | a0b46059ee30def733601a85d12e44855f4d10af (patch) | |
tree | ffb1240e5cdf7d9be7936eb35ef77d4645b6297f /sql | |
parent | 9e048a6bc556f909613cca1fa9b9007ec3546092 (diff) | |
parent | c22c9270fb40a8a2df988084968c0e04dd07a4b8 (diff) | |
download | mariadb-git-a0b46059ee30def733601a85d12e44855f4d10af.tar.gz |
Merge from 5.1 to 5.5
Diffstat (limited to 'sql')
-rw-r--r-- | sql/item.cc | 7 | ||||
-rw-r--r-- | sql/item.h | 2 | ||||
-rw-r--r-- | sql/log_event.cc | 25 | ||||
-rw-r--r-- | sql/log_event.h | 2 | ||||
-rw-r--r-- | sql/sp_head.cc | 2 | ||||
-rw-r--r-- | sql/sql_prepare.cc | 6 |
6 files changed, 31 insertions, 13 deletions
diff --git a/sql/item.cc b/sql/item.cc index 54982d656c9..69821df986a 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -3291,7 +3291,7 @@ String *Item_param::val_str(String* str) that binary log contains wrong statement */ -const String *Item_param::query_val_str(String* str) const +const String *Item_param::query_val_str(THD *thd, String* str) const { switch (state) { case INT_VALUE: @@ -3329,7 +3329,8 @@ const String *Item_param::query_val_str(String* str) const case LONG_DATA_VALUE: { str->length(0); - append_query_string(value.cs_info.character_set_client, &str_value, str); + append_query_string(thd, value.cs_info.character_set_client, &str_value, + str); break; } case NULL_VALUE: @@ -3462,7 +3463,7 @@ void Item_param::print(String *str, enum_query_type query_type) char buffer[STRING_BUFFER_USUAL_SIZE]; String tmp(buffer, sizeof(buffer), &my_charset_bin); const String *res; - res= query_val_str(&tmp); + res= query_val_str(current_thd, &tmp); str->append(*res); } } diff --git a/sql/item.h b/sql/item.h index 223a519fa33..bd43689e91b 100644 --- a/sql/item.h +++ b/sql/item.h @@ -1948,7 +1948,7 @@ public: */ void (*set_param_func)(Item_param *param, uchar **pos, ulong len); - const String *query_val_str(String *str) const; + const String *query_val_str(THD *thd, String *str) const; bool convert_str_value(THD *thd); diff --git a/sql/log_event.cc b/sql/log_event.cc index 0003a621cbb..40969a11212 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -585,7 +585,7 @@ char *str_to_hex(char *to, const char *from, uint len) */ int -append_query_string(CHARSET_INFO *csinfo, +append_query_string(THD *thd, CHARSET_INFO *csinfo, String const *from, String *to) { char *beg, *ptr; @@ -600,9 +600,26 @@ append_query_string(CHARSET_INFO *csinfo, else { *ptr++= '\''; - ptr+= escape_string_for_mysql(csinfo, ptr, 0, - from->ptr(), from->length()); - *ptr++='\''; + if (!(thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)) + { + ptr+= escape_string_for_mysql(csinfo, ptr, 0, + from->ptr(), from->length()); + } + else + { + const char *frm_str= from->ptr(); + + for (; frm_str < (from->ptr() + from->length()); frm_str++) + { + /* Using '' way to represent "'" */ + if (*frm_str == '\'') + *ptr++= *frm_str; + + *ptr++= *frm_str; + } + } + + *ptr++= '\''; } to->length(orig_len + ptr - beg); return 0; diff --git a/sql/log_event.h b/sql/log_event.h index 68afc88f617..87ae3eba415 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -4082,7 +4082,7 @@ private: }; #endif -int append_query_string(CHARSET_INFO *csinfo, +int append_query_string(THD *thd, CHARSET_INFO *csinfo, String const *from, String *to); /** diff --git a/sql/sp_head.cc b/sql/sp_head.cc index eb29590b700..0c228d19f4d 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -169,7 +169,7 @@ sp_get_item_value(THD *thd, Item *item, String *str) buf.append(result->charset()->csname); if (cs->escape_with_backslash_is_dangerous) buf.append(' '); - append_query_string(cs, result, &buf); + append_query_string(thd, cs, result, &buf); buf.append(" COLLATE '"); buf.append(item->collation.collation->name); buf.append('\''); diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 76026f52b14..8390594c2eb 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -885,7 +885,7 @@ static bool insert_params_with_log(Prepared_statement *stmt, uchar *null_array, */ else if (! is_param_long_data_type(param)) DBUG_RETURN(1); - res= param->query_val_str(&str); + res= param->query_val_str(thd, &str); if (param->convert_str_value(thd)) DBUG_RETURN(1); /* out of memory */ @@ -1059,7 +1059,7 @@ static bool emb_insert_params_with_log(Prepared_statement *stmt, DBUG_RETURN(1); } } - res= param->query_val_str(&str); + res= param->query_val_str(thd, &str); if (param->convert_str_value(thd)) DBUG_RETURN(1); /* out of memory */ @@ -1205,7 +1205,7 @@ static bool insert_params_from_vars_with_log(Prepared_statement *stmt, setup_one_conversion_function(thd, param, param->param_type); if (param->set_from_user_var(thd, entry)) DBUG_RETURN(1); - val= param->query_val_str(&buf); + val= param->query_val_str(thd, &buf); if (param->convert_str_value(thd)) DBUG_RETURN(1); /* out of memory */ |