summaryrefslogtreecommitdiff
path: root/sql/sql_load.cc
diff options
context:
space:
mode:
authorgshchepa/uchum@gleb.loc <>2007-07-03 19:37:46 +0500
committergshchepa/uchum@gleb.loc <>2007-07-03 19:37:46 +0500
commitdbe4fb94cad60318d54db399206848310e1fc9d3 (patch)
tree225544d55fd087e00370cd901b8bd353467a3e62 /sql/sql_load.cc
parentf8bf427ba41df2aa4b19667e7b8c2d64a85b6074 (diff)
downloadmariadb-git-dbe4fb94cad60318d54db399206848310e1fc9d3.tar.gz
Fixed bug #29294.
The `SELECT 'r' INTO OUTFILE ... FIELDS ENCLOSED BY 'r' ' statement encoded the 'r' string to a 4 byte string of value x'725c7272' (sequence of 4 characters: r\rr). The LOAD DATA statement decoded this string to a 1 byte string of value x'0d' (ASCII Carriage Return character) instead of the original 'r' character. The same error also happened with the FIELDS ENCLOSED BY clause followed by special characters: 'n', 't', 'r', 'b', '0', 'Z' and 'N'. NOTE 1: This is a result of the undocumented feature: the LOAD DATA INFILE recognises 2-byte input sequences like \n, \t, \r and \Z in addition to documented 2-byte sequences: \0 and \N. This feature should be documented (here backspace character is a default ESCAPED BY character, in the real-life example it may be any ESCAPED BY character). NOTE 2, changed behaviour: Now the `SELECT INTO OUTFILE' statement with the `FIELDS ENCLOSED BY' clause followed by one of: 'n', 't', 'r', 'b', '0', 'Z' or 'N' characters encodes this special character itself by doubling it ('r' --> 'rr'), not by prepending it with an escape character.
Diffstat (limited to 'sql/sql_load.cc')
-rw-r--r--sql/sql_load.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/sql/sql_load.cc b/sql/sql_load.cc
index 10124e5f5ff..bac981651c3 100644
--- a/sql/sql_load.cc
+++ b/sql/sql_load.cc
@@ -611,6 +611,7 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table,
char
READ_INFO::unescape(char chr)
{
+ /* keep this switch synchornous with the ESCAPE_CHARS macro */
switch(chr) {
case 'n': return '\n';
case 't': return '\t';