summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorPraveenkumar Hulakund <praveenkumar.hulakund@oracle.com>2012-02-29 14:15:15 +0530
committerPraveenkumar Hulakund <praveenkumar.hulakund@oracle.com>2012-02-29 14:15:15 +0530
commita0b46059ee30def733601a85d12e44855f4d10af (patch)
treeffb1240e5cdf7d9be7936eb35ef77d4645b6297f /sql
parent9e048a6bc556f909613cca1fa9b9007ec3546092 (diff)
parentc22c9270fb40a8a2df988084968c0e04dd07a4b8 (diff)
downloadmariadb-git-a0b46059ee30def733601a85d12e44855f4d10af.tar.gz
Merge from 5.1 to 5.5
Diffstat (limited to 'sql')
-rw-r--r--sql/item.cc7
-rw-r--r--sql/item.h2
-rw-r--r--sql/log_event.cc25
-rw-r--r--sql/log_event.h2
-rw-r--r--sql/sp_head.cc2
-rw-r--r--sql/sql_prepare.cc6
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 */