summaryrefslogtreecommitdiff
path: root/sql/sql_class.cc
diff options
context:
space:
mode:
authortsmith@sita.local <>2007-07-09 03:27:03 -0600
committertsmith@sita.local <>2007-07-09 03:27:03 -0600
commit5f12f35c3424127f8b80c6b6ecc658c24650ea8e (patch)
treea96c6f8f663f3241acd88553098532553c33ed17 /sql/sql_class.cc
parentb37c24c439282ed2497534b1515cde1fdf32057e (diff)
parenteac626bde6dfa170254290d2fb0c73f9dd49d06d (diff)
downloadmariadb-git-5f12f35c3424127f8b80c6b6ecc658c24650ea8e.tar.gz
Merge sita.local:/Users/tsmith/m/bk/51
into sita.local:/Users/tsmith/m/bk/maint/51 This merge requires a post-merge fix to remove rpl_udf from suite/rpl/t/disabled.def.
Diffstat (limited to 'sql/sql_class.cc')
-rw-r--r--sql/sql_class.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 337bd4e6cc1..4945b805578 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -1542,6 +1542,8 @@ select_export::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
field_sep_char= (exchange->enclosed->length() ? (*exchange->enclosed)[0] :
field_term_length ? (*exchange->field_term)[0] : INT_MAX);
escape_char= (exchange->escaped->length() ? (*exchange->escaped)[0] : -1);
+ is_ambiguous_field_sep= test(strchr(ESCAPE_CHARS, field_sep_char));
+ is_unsafe_field_sep= test(strchr(NUMERIC_CHARS, field_sep_char));
line_sep_char= (exchange->line_term->length() ?
(*exchange->line_term)[0] : INT_MAX);
if (!field_term_length)
@@ -1616,7 +1618,8 @@ bool select_export::send_data(List<Item> &items)
used_length=min(res->length(),item->max_length);
else
used_length=res->length();
- if (result_type == STRING_RESULT && escape_char != -1)
+ if ((result_type == STRING_RESULT || is_unsafe_field_sep) &&
+ escape_char != -1)
{
char *pos, *start, *end;
CHARSET_INFO *res_charset= res->charset();
@@ -1682,7 +1685,9 @@ bool select_export::send_data(List<Item> &items)
NEED_ESCAPING(pos[1])))
{
char tmp_buff[2];
- tmp_buff[0]= escape_char;
+ tmp_buff[0]= ((int) *pos == field_sep_char &&
+ is_ambiguous_field_sep) ?
+ field_sep_char : escape_char;
tmp_buff[1]= *pos ? *pos : '0';
if (my_b_write(&cache,(uchar*) start,(uint) (pos-start)) ||
my_b_write(&cache,(uchar*) tmp_buff,2))