mirror of
https://github.com/MariaDB/server.git
synced 2025-04-18 05:05:32 +02:00
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''
This commit is contained in:
parent
31d0786687
commit
c686f699b2
4 changed files with 36 additions and 2 deletions
|
@ -66,3 +66,11 @@ a b
|
|||
3 row 3
|
||||
0
|
||||
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;
|
||||
|
|
3
mysql-test/std_data/loaddata5.dat
Normal file
3
mysql-test/std_data/loaddata5.dat
Normal file
|
@ -0,0 +1,3 @@
|
|||
"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
|
|||
select * from 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,8 +799,23 @@ int READ_INFO::read_field()
|
|||
*to++= (byte) escape_char;
|
||||
goto found_eof;
|
||||
}
|
||||
*to++ = (byte) unescape((char) chr);
|
||||
continue;
|
||||
/*
|
||||
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);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
PUSH(chr);
|
||||
chr= escape_char;
|
||||
}
|
||||
}
|
||||
#ifdef ALLOW_LINESEPARATOR_IN_STRINGS
|
||||
if (chr == line_term_char)
|
||||
|
|
Loading…
Add table
Reference in a new issue