Commit c686f699 authored by unknown's avatar unknown

Fix LOAD DATA to handle having the escape and enclosed-by character

be the same. (Bug #11203)


mysql-test/r/loaddata.result:
  Update results
mysql-test/t/loaddata.test:
  Add new test
sql/sql_load.cc:
  Handle having escape_char and enclosed_char the same when loading
  data.
mysql-test/std_data/loaddata5.dat:
  New BitKeeper file ``mysql-test/std_data/loaddata5.dat''
parent 31d07866
...@@ -66,3 +66,11 @@ a b ...@@ -66,3 +66,11 @@ a b
3 row 3 3 row 3
0 0
drop table t1; drop table t1;
create table t1 (a varchar(20), b varchar(20));
load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by ',' enclosed by '"' escaped by '"' (a,b);
select * from t1;
a b
field1 field2
a"b cd"ef
a"b c"d"e
drop table t1;
"field1","field2"
"a""b","cd""ef"
"a"b",c"d"e
...@@ -31,3 +31,11 @@ load data infile '../../std_data/loaddata4.dat' into table t1 fields terminated ...@@ -31,3 +31,11 @@ load data infile '../../std_data/loaddata4.dat' into table t1 fields terminated
select * from t1; select * from t1;
drop table t1; drop table t1;
#
# Bug #11203: LOAD DATA does not accept same characters for ESCAPED and
# ENCLOSED
#
create table t1 (a varchar(20), b varchar(20));
load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by ',' enclosed by '"' escaped by '"' (a,b);
select * from t1;
drop table t1;
...@@ -799,9 +799,24 @@ int READ_INFO::read_field() ...@@ -799,9 +799,24 @@ int READ_INFO::read_field()
*to++= (byte) escape_char; *to++= (byte) escape_char;
goto found_eof; goto found_eof;
} }
/*
When escape_char == enclosed_char, we treat it like we do for
handling quotes in SQL parsing -- you can double-up the
escape_char to include it literally, but it doesn't do escapes
like \n. This allows: LOAD DATA ... ENCLOSED BY '"' ESCAPED BY '"'
with data like: "fie""ld1", "field2"
*/
if (escape_char != enclosed_char || chr == escape_char)
{
*to++ = (byte) unescape((char) chr); *to++ = (byte) unescape((char) chr);
continue; continue;
} }
else
{
PUSH(chr);
chr= escape_char;
}
}
#ifdef ALLOW_LINESEPARATOR_IN_STRINGS #ifdef ALLOW_LINESEPARATOR_IN_STRINGS
if (chr == line_term_char) if (chr == line_term_char)
#else #else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment