diff options
author | tsmith@sita.local <> | 2007-07-09 03:27:03 -0600 |
---|---|---|
committer | tsmith@sita.local <> | 2007-07-09 03:27:03 -0600 |
commit | 5f12f35c3424127f8b80c6b6ecc658c24650ea8e (patch) | |
tree | a96c6f8f663f3241acd88553098532553c33ed17 /sql/sql_class.cc | |
parent | b37c24c439282ed2497534b1515cde1fdf32057e (diff) | |
parent | eac626bde6dfa170254290d2fb0c73f9dd49d06d (diff) | |
download | mariadb-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.cc | 9 |
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)) |