loaddata.test 20.3 KB
Newer Older
1 2 3 4
#
# Some simple test of load data
#

unknown's avatar
unknown committed
5
--disable_warnings
6
drop table if exists t1, t2;
unknown's avatar
unknown committed
7
--enable_warnings
8 9

create table t1 (a date, b date, c date not null, d date);
unknown's avatar
unknown committed
10 11
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',';
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' IGNORE 2 LINES;
12
SELECT * from t1;
13 14
truncate table t1;

unknown's avatar
unknown committed
15
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' LINES STARTING BY ',' (b,c,d);
16
SELECT * from t1;
17
drop table t1;
18

19
create table t1 (a text, b text);
unknown's avatar
unknown committed
20
load data infile '../../std_data/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
21 22
select concat('|',a,'|'), concat('|',b,'|') from t1;
drop table t1;
23 24

create table t1 (a int, b char(10));
unknown's avatar
unknown committed
25
load data infile '../../std_data/loaddata3.dat' into table t1 fields terminated by '' enclosed by '' ignore 1 lines;
26 27
select * from t1;
truncate table t1;
unknown's avatar
unknown committed
28
load data infile '../../std_data/loaddata4.dat' into table t1 fields terminated by '' enclosed by '' lines terminated by '' ignore 1 lines;
29 30 31 32 33

# The empty line last comes from the end line field in the file
select * from t1;
drop table t1;

34 35 36 37 38 39 40
#
# Bug #12053 LOAD DATA INFILE ignores NO_AUTO_VALUE_ON_ZERO setting
#
SET @OLD_SQL_MODE=@@SQL_MODE, @@SQL_MODE=NO_AUTO_VALUE_ON_ZERO;
create table t1(id integer not null auto_increment primary key);
insert into t1 values(0);
disable_query_log;
41
eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' from t1;
42
delete from t1;
43
eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t1;
44 45
enable_query_log;
select * from t1;
46
remove_file $MYSQLTEST_VARDIR/tmp/t1;
47 48

disable_query_log;
49
eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1'
50 51 52
FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n'
FROM t1;
delete from t1;
53
eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t1
54 55 56
FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n';
enable_query_log;
select * from t1;
57
remove_file $MYSQLTEST_VARDIR/tmp/t1;
58
SET @@SQL_MODE=@OLD_SQL_MODE;
unknown's avatar
unknown committed
59
drop table t1;
60

61 62 63 64 65
#
# Bug #11203: LOAD DATA does not accept same characters for ESCAPED and
# ENCLOSED
#
create table t1 (a varchar(20), b varchar(20));
unknown's avatar
unknown committed
66
load data infile '../../std_data/loaddata_dq.dat' into table t1 fields terminated by ',' enclosed by '"' escaped by '"' (a,b);
67 68
select * from t1;
drop table t1;
69

unknown's avatar
unknown committed
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
#
# Bug #29294 SELECT INTO OUTFILE/LOAD DATA INFILE with special
# characters in the FIELDS ENCLOSED BY clause
#

CREATE TABLE t1 (
  id INT AUTO_INCREMENT PRIMARY KEY,
  c1 VARCHAR(255)
);

CREATE TABLE t2 (
  id INT,
  c2 VARCHAR(255)
);

INSERT INTO t1 (c1) VALUES
  ('r'),   ('rr'),   ('rrr'),   ('rrrr'),
  ('.r'),  ('.rr'),  ('.rrr'),  ('.rrrr'),
  ('r.'),  ('rr.'),  ('rrr.'),  ('rrrr.'),
unknown's avatar
unknown committed
89
  ('.r.'), ('.rr.'), ('.rrr.'), ('.rrrr.');
unknown's avatar
unknown committed
90 91
SELECT * FROM t1;

unknown's avatar
unknown committed
92 93
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' FIELDS ENCLOSED BY 'r' FROM t1;
94
cat_file $MYSQLTEST_VARDIR/tmp/t1;
unknown's avatar
unknown committed
95

unknown's avatar
unknown committed
96 97
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1' INTO TABLE t2 FIELDS ENCLOSED BY 'r';
unknown's avatar
unknown committed
98 99 100
SELECT t1.id, c1, c2 FROM t1 LEFT  JOIN t2 ON t1.id=t2.id WHERE c1 != c2;
SELECT t1.id, c1, c2 FROM t1 RIGHT JOIN t2 ON t1.id=t2.id WHERE c1 != c2;

101
remove_file $MYSQLTEST_VARDIR/tmp/t1;
unknown's avatar
unknown committed
102 103
DROP TABLE t1,t2;

104
# End of 4.1 tests
unknown's avatar
unknown committed
105

unknown's avatar
unknown committed
106 107 108 109 110
#
# Let us test extended LOAD DATA features
#
create table t1 (a int default 100, b int, c varchar(60));
# we can do something like this
unknown's avatar
unknown committed
111
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (a, @b) set b=@b+10, c=concat("b=",@b);
unknown's avatar
unknown committed
112 113 114 115
select * from t1;
truncate table t1;
# we can use filled fields in expressions 
# we also assigning NULL value to field with non-NULL default here
unknown's avatar
unknown committed
116
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (a, @b) set c= if(a is null,"oops",a);
unknown's avatar
unknown committed
117 118 119 120 121
select * from t1;
truncate table t1;
# we even can use variables in set clause, and missed columns will be set
# with default values
set @c:=123;
unknown's avatar
unknown committed
122
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@a, b) set c= if(@a is null,@c,b);
unknown's avatar
unknown committed
123 124
select * from t1;
# let us test side-effect of such load
unknown's avatar
unknown committed
125
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@a, @b);
unknown's avatar
unknown committed
126 127 128
select * from t1;
select @a, @b;
truncate table t1;
129
# Reading of all columns with set
unknown's avatar
unknown committed
130
load data infile '../../std_data/rpl_loaddata.dat' into table t1 set c=b;
131 132
select * from t1;
truncate table t1;
unknown's avatar
unknown committed
133
# now going to test fixed field-row file format
unknown's avatar
unknown committed
134
load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (a, b) set c="Wow";
unknown's avatar
unknown committed
135 136 137
select * from t1;
truncate table t1;
# this also should work
unknown's avatar
unknown committed
138
load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (a, b) set c=concat(a,"+",b,"+",@c,"+",b,"+",if(c is null,"NIL",c));
unknown's avatar
unknown committed
139 140 141
select * from t1;
# and this should bark
--error 1409 
unknown's avatar
unknown committed
142
load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (a, @b);
143 144 145 146 147

# Now let us test LOAD DATA with subselect
create table t2 (num int primary key, str varchar(10));
insert into t2 values (10,'Ten'), (15,'Fifteen');
truncate table t1;
unknown's avatar
unknown committed
148
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@dummy,@n) set a= @n, c= (select str from t2 where num=@n);
149 150
select * from t1;

151 152 153 154 155
#
# Bug#18628 mysql-test-run: security problem
#
# It should not be possible to load from a file outside of vardir

156 157 158 159 160 161 162 163 164 165
## The following lines were disabled because of patch for
## bug 50373. MYSQLTEST_VARDIR doesn't rewrite symlinks
## to real paths, but this is done for secure_file_priv.
## Because of this the result can't be replaced if the
## test suite runs with the --mem option which creates
## symlinks to the ramdisk.
#--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
#show variables like "secure_file_pri%";
#--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
#select @@secure_file_priv;
166 167 168 169 170 171
--error 1238
set @@secure_file_priv= 0;

# Test "load data"
truncate table t1;
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
172
--error ER_OPTION_PREVENTS_STATEMENT, ER_TEXTFILE_NOT_READABLE
173
eval load data infile '$MYSQL_TEST_DIR/t/loaddata.test' into table t1;
174 175 176 177
select * from t1;

# Test "load_file" returns NULL
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
178
eval select load_file("$MYSQL_TEST_DIR/t/loaddata.test");
179

180 181
# cleanup
drop table t1, t2;
182

183 184 185 186 187 188 189 190 191 192 193 194 195
#
# Bug#27586: Wrong autoinc value assigned by LOAD DATA in the
#            NO_AUTO_VALUE_ON_ZERO mode
#
create table t1(f1 int);
insert into t1 values(1),(null);
create table t2(f2 int auto_increment primary key);
disable_query_log;
eval select * into outfile '$MYSQLTEST_VARDIR/tmp/t1' from t1;
SET @OLD_SQL_MODE=@@SQL_MODE, @@SQL_MODE=NO_AUTO_VALUE_ON_ZERO;
eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t2;
enable_query_log;
select * from t2;
196
remove_file $MYSQLTEST_VARDIR/tmp/t1;
197 198
SET @@SQL_MODE=@OLD_SQL_MODE;
drop table t1,t2;
199 200 201 202 203 204 205 206 207 208 209 210

#
# Bug#27670: LOAD DATA does not set CURRENT_TIMESTAMP default value for a
#            TIMESTAMP field when no value has been provided.
#
create table t1(f1 int, f2 timestamp not null default current_timestamp);
create table t2(f1 int);
insert into t2 values(1),(2);
disable_query_log;
eval select * into outfile '$MYSQLTEST_VARDIR/tmp/t2' from t2;
eval load data infile '$MYSQLTEST_VARDIR/tmp/t2' into table t1;
enable_query_log;
unknown's avatar
unknown committed
211
select f1 from t1 where f2 <> '0000-00-00 00:00:00' order by f1;
212
remove_file $MYSQLTEST_VARDIR/tmp/t2;
213 214 215 216 217 218 219 220
delete from t1;
disable_query_log;
eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t2'
FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n'
FROM t2;
eval load data infile '$MYSQLTEST_VARDIR/tmp/t2' into table t1
FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n';
enable_query_log;
unknown's avatar
unknown committed
221
select f1 from t1 where f2 <> '0000-00-00 00:00:00' order by f1;
222
remove_file $MYSQLTEST_VARDIR/tmp/t2;
223 224
drop table t1,t2;

unknown's avatar
unknown committed
225 226 227 228 229 230 231 232 233 234 235 236
#
# Bug#29442: SELECT INTO OUTFILE FIELDS ENCLOSED BY digit, minus sign etc
#            corrupts non-string fields containing this character.
#

CREATE TABLE t1 (c1 INT, c2 TIMESTAMP, c3 REAL, c4 DOUBLE);

INSERT INTO t1 (c1, c2, c3, c4) VALUES (10, '1970-02-01 01:02:03', 1.1E-100, 1.1E+100);
SELECT * FROM t1;

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' FIELDS ENCLOSED BY '-' FROM t1;
237 238
cat_file $MYSQLTEST_VARDIR/tmp/t1;
echo EOF;
unknown's avatar
unknown committed
239 240 241 242 243 244 245

TRUNCATE t1;

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1' INTO TABLE t1 FIELDS ENCLOSED BY '-';
SELECT * FROM t1;

246
remove_file $MYSQLTEST_VARDIR/tmp/t1;
unknown's avatar
unknown committed
247 248
DROP TABLE t1;

249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
###########################################################################

--echo
--echo # --
--echo # -- Bug#35469: server crash with LOAD DATA INFILE to a VIEW.
--echo # --

--echo
--disable_warnings
DROP TABLE IF EXISTS t1;
DROP VIEW IF EXISTS v1;
DROP VIEW IF EXISTS v2;
DROP VIEW IF EXISTS v3;
--enable_warnings

--echo
CREATE TABLE t1(c1 INT, c2 VARCHAR(255));

--echo
CREATE VIEW v1 AS SELECT * FROM t1;
CREATE VIEW v2 AS SELECT 1 + 2 AS c0, c1, c2 FROM t1;
CREATE VIEW v3 AS SELECT 1 AS d1, 2 AS d2;

--echo
unknown's avatar
unknown committed
273
LOAD DATA INFILE '../../std_data/bug35469.dat' INTO TABLE v1
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
  FIELDS ESCAPED BY '\\'
  TERMINATED BY ','
  ENCLOSED BY '"'
  LINES TERMINATED BY '\n' (c1, c2);

--echo
SELECT * FROM t1;

--echo
SELECT * FROM v1;

--echo
DELETE FROM t1;

--echo
unknown's avatar
unknown committed
289
LOAD DATA INFILE '../../std_data/bug35469.dat' INTO TABLE v2
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
  FIELDS ESCAPED BY '\\'
  TERMINATED BY ','
  ENCLOSED BY '"'
  LINES TERMINATED BY '\n' (c1, c2);

--echo
SELECT * FROM t1;

--echo
SELECT * FROM v2;

--echo
DELETE FROM t1;

--echo
--error ER_LOAD_DATA_INVALID_COLUMN
unknown's avatar
unknown committed
306
LOAD DATA INFILE '../../std_data/bug35469.dat' INTO TABLE v2
307 308 309 310 311 312 313
  FIELDS ESCAPED BY '\\'
  TERMINATED BY ','
  ENCLOSED BY '"'
  LINES TERMINATED BY '\n' (c0, c2);

--echo
--error ER_NON_UPDATABLE_TABLE
unknown's avatar
unknown committed
314
LOAD DATA INFILE '../../std_data/bug35469.dat' INTO TABLE v3
315 316 317 318 319 320 321 322 323 324 325 326 327 328 329
  FIELDS ESCAPED BY '\\'
  TERMINATED BY ','
  ENCLOSED BY '"'
  LINES TERMINATED BY '\n' (d1, d2);

--echo
DROP TABLE t1;
DROP VIEW v1;
DROP VIEW v2;
DROP VIEW v3;

--echo
--echo # -- End of Bug#35469.


330

331 332
###########################################################################

333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
#
# Bug#37114: sql_mode NO_BACKSLASH_ESCAPES does not work properly with
#            LOAD DATA INFILE
#

# - For each plain "SELECT id,...", the 1st pair ("before" SELECT...OUTFILE,
#   LOAD...INFILE) and the 2nd pair of lines ("after") in the result should
#   look the same, otherwise we broke the dumpe/restore cycle!
#
# - the \r is always { '\\', 'r' } in memory, but on-disk format changes
#
# - the \t is { '\t' } or { '\\', 't' } in memory depending on whether \
#    is magic (that is, NO_BACKSLASH_ESCAPES is not set) at INSERT-time.
#    on-disk format varies.
#
# - while INFILE/OUTFILE behaviour changes according to NO_BACKSLASH_ESCAPES,
#   we can override these defaults using ESCAPED BY '...'
#   1:  NO_BACKSLASH_ESCAPES default,  \  on-disk:  \,t,x,\r
#   2:  NO_BACKSLASH_ESCAPES override, \\ on-disk:  \,\,t,x,\,\,r
#   3: !NO_BACKSLASH_ESCAPES default,  \\ on-disk:  tab,\,\,r
#   3: !NO_BACKSLASH_ESCAPES override, \  on-disk:  tab,\,r

--echo Bug#37114

SET SESSION character_set_client=latin1;
SET SESSION character_set_server=latin1;
SET SESSION character_set_connection=latin1;
SET @OLD_SQL_MODE=@@SESSION.SQL_MODE;

# 0. test LOAD DATA INFILE first; if that works, all issues in
#    SELECT INTO OUTFILE / LOAD DATA INFILE cycles below are
#    arguably in the saving.

--echo test LOAD DATA INFILE

--let $file=$MYSQLTEST_VARDIR/tmp/bug37114.txt
--let $file2=$MYSQLTEST_VARDIR/tmp/bug37114_out.txt

371 372 373 374
SET sql_mode = '';

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval SELECT '1 \\\\aa\n' INTO DUMPFILE '$file'
375 376 377 378 379 380

CREATE TABLE t1 (id INT, val1 CHAR(3)) ENGINE=MyISAM;

SET sql_mode = 'NO_BACKSLASH_ESCAPES';

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
381
--eval LOAD DATA INFILE '$file' REPLACE INTO TABLE t1 FIELDS TERMINATED BY ' '
382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510
SELECT * FROM t1;

# show we can write this with OUTFILE, forcing the parameters for now
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval SELECT * INTO OUTFILE '$file2' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1
--diff_files $file $file2
--remove_file $file2

# now show the OUTFILE defaults are correct with NO_BACKSLASH_ESCAPES
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval SELECT * INTO OUTFILE '$file2' FIELDS               TERMINATED BY ' ' FROM t1
--diff_files $file $file2
--remove_file $file2

INSERT INTO t1 (id, val1) VALUES (1, '\aa');
SELECT * FROM t1;

SET sql_mode='';
INSERT INTO t1 (id, val1) VALUES (1, '\aa');
SELECT * FROM t1;

DROP TABLE t1;

--remove_file $file



--echo test SELECT INTO OUTFILE

CREATE TABLE t1 (id INT PRIMARY KEY, val1 CHAR(4));
CREATE TABLE t2 LIKE t1;

# 1. with NO_BACKSLASH_ESCAPES on

SET sql_mode = '';
INSERT INTO t1 (id, val1) VALUES (5, '\ttab');
INSERT INTO t1 (id, val1) VALUES (4, '\\r');
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
INSERT INTO t1 (id, val1) VALUES (3, '\tx');

--echo 1.1 NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval SELECT * INTO OUTFILE '$file' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS TERMINATED BY ' '

SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
 SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;

TRUNCATE t2;

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval SELECT LOAD_FILE("$file");
--remove_file $file



--echo 1.2 NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval SELECT * INTO OUTFILE '$file' FIELDS ESCAPED BY '\' TERMINATED BY ' ' FROM t1 ORDER BY id

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS ESCAPED BY '\' TERMINATED BY ' '

SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
 SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;

TRUNCATE t2;

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval SELECT LOAD_FILE("$file");
--remove_file $file



# 2. with NO_BACKSLASH_ESCAPES off

SET sql_mode = '';

--echo 2.1 !NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval SELECT * INTO OUTFILE '$file' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS TERMINATED BY ' '

SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
 SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;

TRUNCATE t2;

SET sql_mode = 'NO_BACKSLASH_ESCAPES';

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval SELECT LOAD_FILE("$file");
--remove_file $file

SET sql_mode = '';



--echo 2.2 !NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval SELECT * INTO OUTFILE '$file' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1 ORDER BY id

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS ESCAPED BY '' TERMINATED BY ' '

SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
 SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;

TRUNCATE t2;

SET sql_mode = 'NO_BACKSLASH_ESCAPES';

--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval SELECT LOAD_FILE("$file");
--remove_file $file

# clean up
set session sql_mode=@OLD_SQL_MODE;
DROP TABLE t1,t2;


511 512 513 514 515 516 517
--echo #
--echo # Bug #51893: crash with certain characters given to load_file 
--echo #   function on windows
--echo #

select load_file(0x0A9FB76C661B409C4BEC88098C5DD71B1072F9691F2E827D7EC8F092B299868A3CE196C04F0FB18CAB4E1557EB72331D812379DE7A75CA21C32E7C722C59E5CC33EF262EF04187B0F0EE756FA984DF2EAD37B1E4ADB064C3C5038F2E3B2D661B1C1150AAEB5425512E14D7506166D92D4533872E662F4B2D1428AAB5CCA72E75AA2EF325E196A5A02E2E8278873C64375845994B0F39BE2FF7B478332A7B0AA5E48877C47B6F513E997848AF8CCB8A899F3393AB35333CF0871E36698193862D486B4B9078B70C0A0A507B8A250F3F876F5A067632D5E65193E4445A1EC3A2C9B4C6F07AC334F0F62BC33357CB502E9B1C19D2398B6972AEC2EF21630F8C9134C4F7DD662D8AD7BDC9E19C46720F334B66C22D4BF32ED275144E20E7669FFCF6FC143667C9F02A577F32960FA9F2371BE1FA90E49CBC69C01531F140556854D588DD0E55E1307D78CA38E975CD999F9AEA604266329EE62BFB5ADDA67F549E211ECFBA906C60063696352ABB82AA782D25B17E872EA587871F450446DB1BAE0123D20404A8F2D2698B371002E986C8FCB969A99FF0E150A2709E2ED7633D02ADA87D5B3C9487D27B2BD9D21E2EC3215DCC3CDCD884371281B95A2E9987AAF82EB499C058D9C3E7DC1B66635F60DB121C72F929622DD47B6B2E69F59FF2AE6B63CC2EC60FFBA20EA50569DBAB5DAEFAEB4F03966C9637AB55662EDD28439155A82D053A5299448EDB2E7BEB0F62889E2F84E6C7F34B3212C9AAC32D521D5AB8480993F1906D5450FAB342A0FA6ED223E178BAC036B81E15783604C32A961EA1EF20BE2EBB93D34ED37BC03142B7583303E4557E48551E4BD7CBDDEA146D5485A5D212C35189F0BD6497E66912D2780A59A53B532E12C0A5ED1EC0445D96E8F2DD825221CFE4A65A87AA21DC8750481B9849DD81694C3357A0ED9B78D608D8EDDE28FAFBEC17844DE5709F41E121838DB55639D77E32A259A416D7013B2EB1259FDE1B498CBB9CAEE1D601DF3C915EA91C69B44E6B72062F5F4B3C73F06F2D5AD185E1692E2E0A01E7DD5133693681C52EE13B2BE42D03BDCF48E4E133CF06662339B778E1C3034F9939A433E157449172F7969ACCE1F5D2F65A4E09E4A5D5611EBEDDDBDB0C0C0A);

518 519

--echo End of 5.0 tests
Tatiana A. Nurnberg's avatar
Tatiana A. Nurnberg committed
520

unknown's avatar
unknown committed
521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541


#
# Bug#12448 LOAD DATA / SELECT INTO OUTFILE
# doesn't work with multibyte path name
#
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1);
SET NAMES latin1;
SET character_set_filesystem=filename;
select @@character_set_filesystem;
SELECT * INTO OUTFILE 't-1' FROM t1;
DELETE FROM t1;
LOAD DATA INFILE 't-1' INTO TABLE t1;
SELECT * FROM t1;
DELETE FROM t1;
SET character_set_filesystem=latin1;
select @@character_set_filesystem;
LOAD DATA INFILE 't@002d1' INTO TABLE t1;
SELECT * FROM t1;
DROP TABLE t1;
unknown's avatar
unknown committed
542 543
let $MYSQLD_DATADIR= `select @@datadir`;
remove_file $MYSQLD_DATADIR/test/t@002d1;
unknown's avatar
unknown committed
544 545
SET character_set_filesystem=default;
select @@character_set_filesystem;
Tatiana A. Nurnberg's avatar
Tatiana A. Nurnberg committed
546 547


548 549 550 551 552 553 554 555 556 557 558 559 560 561
--echo #
--echo # Bug #51850: crash/memory overlap when using load data infile and set 
--echo #  col equal to itself!
--echo #

CREATE TABLE t1(col0 LONGBLOB);
SELECT 'test' INTO OUTFILE 't1.txt';
LOAD DATA INFILE 't1.txt' IGNORE INTO TABLE t1 SET col0=col0;
SELECT * FROM t1;

DROP TABLE t1;
let $MYSQLD_DATADIR= `select @@datadir`;
remove_file $MYSQLD_DATADIR/test/t1.txt;

Tatiana A. Nurnberg's avatar
Tatiana A. Nurnberg committed
562

563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582
--echo #
--echo # Bug #52512 : Assertion `! is_set()' in 
--echo #  Diagnostics_area::set_ok_status on LOAD DATA
--echo #

connect (con1,localhost,root,,test);

CREATE TABLE t1 (id INT NOT NULL);
--send LOAD DATA LOCAL INFILE 'tb.txt' INTO TABLE t1
# please keep this is a spearate test file : it's important to have no
# commands after this one

connection default;
dirty_close con1;

connect (con1,localhost,root,,test);
DROP TABLE t1;
connection default;
disconnect con1;

583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613

--echo #
--echo # Bug #51876 : crash/memory underrun when loading data with ucs2 
--echo #   and reverse() function
--echo #

--echo # Problem # 1 (original report): wrong parsing of ucs2 data
SELECT '00' UNION SELECT '10' INTO OUTFILE 'tmpp.txt';
CREATE TABLE t1(a INT);
LOAD DATA INFILE 'tmpp.txt' INTO TABLE t1 CHARACTER SET ucs2
(@b) SET a=REVERSE(@b);
--echo # should return 2 zeroes (as the value is truncated)
SELECT * FROM t1;

DROP TABLE t1;
let $MYSQLD_DATADIR= `select @@datadir`;
remove_file $MYSQLD_DATADIR/test/tmpp.txt;


--echo # Problem # 2 : if you write and read ucs2 data to a file they're lost
SELECT '00' UNION SELECT '10' INTO OUTFILE 'tmpp2.txt' CHARACTER SET ucs2;
CREATE TABLE t1(a INT);
LOAD DATA INFILE 'tmpp2.txt' INTO TABLE t1 CHARACTER SET ucs2
(@b) SET a=REVERSE(@b);
--echo # should return 0 and 1 (10 reversed)
SELECT * FROM t1;

DROP TABLE t1;
let $MYSQLD_DATADIR= `select @@datadir`;
remove_file $MYSQLD_DATADIR/test/tmpp2.txt;

614 615 616 617 618 619 620 621 622 623 624 625 626
--echo #
--echo # Bug#11765139  58069: LOAD DATA INFILE: VALGRIND REPORTS INVALID MEMORY READS AND WRITES WITH U
--echo #

CREATE TABLE t1(f1 INT);
EVAL SELECT 0xE1BB30 INTO OUTFILE 't1.dat';
--disable_warnings
LOAD DATA INFILE 't1.dat' IGNORE INTO TABLE t1 CHARACTER SET utf8;
--enable_warnings

DROP TABLE t1;
let $MYSQLD_DATADIR= `select @@datadir`;
remove_file $MYSQLD_DATADIR/test/t1.dat;
627

628 629 630 631 632 633 634 635 636 637 638 639 640 641 642
--echo #
--echo # Bug#11765141 - 58072: LOAD DATA INFILE: LEAKS IO CACHE MEMORY
--echo # WHEN ERROR OCCURS
--echo #

--let $file=$MYSQLTEST_VARDIR/tmp/bug11735141.txt
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--eval SELECT '1\n' INTO DUMPFILE '$file'

create table t1(a point);
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--error ER_CANT_CREATE_GEOMETRY_OBJECT
--eval LOAD DATA INFILE '$file' INTO TABLE t1
drop table t1;

Tatiana A. Nurnberg's avatar
Tatiana A. Nurnberg committed
643
--echo End of 5.1 tests