You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
844 lines
27 KiB
844 lines
27 KiB
#
|
|
# Some simple test of load data
|
|
#
|
|
|
|
--disable_warnings
|
|
drop table if exists t1, t2;
|
|
--enable_warnings
|
|
|
|
create table t1 (a date, b date, c date not null, d date);
|
|
load data infile '../../std_data/loaddata1.dat' ignore into table t1 fields terminated by ',';
|
|
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' IGNORE 2 LINES;
|
|
SELECT * from t1;
|
|
truncate table t1;
|
|
|
|
load data infile '../../std_data/loaddata1.dat' ignore into table t1 fields terminated by ',' LINES STARTING BY ',' (b,c,d);
|
|
SELECT * from t1;
|
|
drop table t1;
|
|
|
|
create table t1 (a text, b text);
|
|
load data infile '../../std_data/loaddata2.dat' ignore into table t1 fields terminated by ',' enclosed by '''';
|
|
select concat('|',a,'|'), concat('|',b,'|') from t1;
|
|
drop table t1;
|
|
|
|
create table t1 (a int, b char(10)) charset latin1;
|
|
load data infile '../../std_data/loaddata3.dat' ignore into table t1 fields terminated by '' enclosed by '' ignore 1 lines;
|
|
select * from t1;
|
|
truncate table t1;
|
|
load data infile '../../std_data/loaddata4.dat' ignore into table t1 fields terminated by '' enclosed by '' lines terminated by '' ignore 1 lines;
|
|
|
|
# The empty line last comes from the end line field in the file
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
#
|
|
# 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;
|
|
eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' from t1;
|
|
delete from t1;
|
|
eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t1;
|
|
enable_query_log;
|
|
select * from t1;
|
|
remove_file $MYSQLTEST_VARDIR/tmp/t1;
|
|
|
|
disable_query_log;
|
|
eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1'
|
|
FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n'
|
|
FROM t1;
|
|
delete from t1;
|
|
eval load data infile '$MYSQLTEST_VARDIR/tmp/t1' into table t1
|
|
FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n';
|
|
enable_query_log;
|
|
select * from t1;
|
|
remove_file $MYSQLTEST_VARDIR/tmp/t1;
|
|
SET @@SQL_MODE=@OLD_SQL_MODE;
|
|
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/loaddata_dq.dat' into table t1 fields terminated by ',' enclosed by '"' escaped by '"' (a,b);
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
#
|
|
# 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.'),
|
|
('.r.'), ('.rr.'), ('.rrr.'), ('.rrrr.');
|
|
SELECT * FROM t1;
|
|
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
eval SELECT * INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1' FIELDS ENCLOSED BY 'r' FROM t1;
|
|
cat_file $MYSQLTEST_VARDIR/tmp/t1;
|
|
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1' INTO TABLE t2 FIELDS ENCLOSED BY 'r';
|
|
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;
|
|
|
|
remove_file $MYSQLTEST_VARDIR/tmp/t1;
|
|
DROP TABLE t1,t2;
|
|
|
|
# End of 4.1 tests
|
|
|
|
#
|
|
# 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
|
|
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (a, @b) set b=@b+10, c=concat("b=",@b);
|
|
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
|
|
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (a, @b) set c= if(a is null,"oops",a);
|
|
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;
|
|
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@a, b) set c= if(@a is null,@c,b);
|
|
select * from t1;
|
|
# let us test side-effect of such load
|
|
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@a, @b);
|
|
select * from t1;
|
|
select @a, @b;
|
|
truncate table t1;
|
|
# Reading of all columns with set
|
|
load data infile '../../std_data/rpl_loaddata.dat' ignore into table t1 set c=b;
|
|
select * from t1;
|
|
truncate table t1;
|
|
# now going to test fixed field-row file format
|
|
load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (a, b) set c="Wow";
|
|
select * from t1;
|
|
truncate table t1;
|
|
# this also should work
|
|
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));
|
|
select * from t1;
|
|
# and this should bark
|
|
--error 1409
|
|
load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (a, @b);
|
|
|
|
# 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;
|
|
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@dummy,@n) set a= @n, c= (select str from t2 where num=@n);
|
|
select * from t1;
|
|
|
|
#
|
|
# Bug#18628 mysql-test-run: security problem
|
|
#
|
|
# It should not be possible to load from a file outside of vardir
|
|
|
|
--error 1238
|
|
set @@secure_file_priv= 0;
|
|
|
|
# Test "load data"
|
|
truncate table t1;
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--error ER_OPTION_PREVENTS_STATEMENT, ER_TEXTFILE_NOT_READABLE
|
|
eval load data infile '$MYSQL_TEST_DIR/t/loaddata.test' into table t1;
|
|
select * from t1;
|
|
|
|
# Test "load_file" returns NULL
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
eval select load_file("$MYSQL_TEST_DIR/t/loaddata.test");
|
|
|
|
# cleanup
|
|
drop table t1, t2;
|
|
|
|
#
|
|
# 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;
|
|
remove_file $MYSQLTEST_VARDIR/tmp/t1;
|
|
SET @@SQL_MODE=@OLD_SQL_MODE;
|
|
drop table t1,t2;
|
|
|
|
#
|
|
# 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' ignore into table t1;
|
|
enable_query_log;
|
|
SET @previous_sql_mode = @@sql_mode;
|
|
SET sql_mode = 'ALLOW_INVALID_DATES';
|
|
select f1 from t1 where f2 <> '0000-00-00 00:00:00' order by f1;
|
|
remove_file $MYSQLTEST_VARDIR/tmp/t2;
|
|
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' ignore into table t1
|
|
FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n';
|
|
enable_query_log;
|
|
select f1 from t1 where f2 <> '0000-00-00 00:00:00' order by f1;
|
|
SET sql_mode = @previous_sql_mode;
|
|
remove_file $MYSQLTEST_VARDIR/tmp/t2;
|
|
drop table t1,t2;
|
|
|
|
#
|
|
# 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;
|
|
cat_file $MYSQLTEST_VARDIR/tmp/t1;
|
|
echo EOF;
|
|
|
|
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;
|
|
|
|
remove_file $MYSQLTEST_VARDIR/tmp/t1;
|
|
DROP TABLE t1;
|
|
|
|
###########################################################################
|
|
|
|
--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
|
|
LOAD DATA INFILE '../../std_data/bug35469.dat' INTO TABLE v1
|
|
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
|
|
LOAD DATA INFILE '../../std_data/bug35469.dat' INTO TABLE v2
|
|
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_NONUPDATEABLE_COLUMN
|
|
LOAD DATA INFILE '../../std_data/bug35469.dat' INTO TABLE v2
|
|
FIELDS ESCAPED BY '\\'
|
|
TERMINATED BY ','
|
|
ENCLOSED BY '"'
|
|
LINES TERMINATED BY '\n' (c0, c2);
|
|
|
|
--echo
|
|
--error ER_NON_UPDATABLE_TABLE
|
|
LOAD DATA INFILE '../../std_data/bug35469.dat' INTO TABLE v3
|
|
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.
|
|
|
|
|
|
|
|
###########################################################################
|
|
|
|
#
|
|
# 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
|
|
|
|
SET sql_mode = '';
|
|
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
--eval SELECT '1 \\\\aa\n' INTO DUMPFILE '$file'
|
|
|
|
CREATE TABLE t1 (id INT, val1 CHAR(3));
|
|
|
|
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
|
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
--eval LOAD DATA INFILE '$file' REPLACE INTO TABLE t1 FIELDS TERMINATED BY ' '
|
|
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;
|
|
|
|
|
|
--echo #
|
|
--echo # Bug #51893: crash with certain characters given to load_file
|
|
--echo # function on windows
|
|
--echo #
|
|
|
|
select load_file(0x0A9FB76C661B409C4BEC88098C5DD71B1072F9691F2E827D7EC8F092B299868A3CE196C04F0FB18CAB4E1557EB72331D812379DE7A75CA21C32E7C722C59E5CC33EF262EF04187B0F0EE756FA984DF2EAD37B1E4ADB064C3C5038F2E3B2D661B1C1150AAEB5425512E14D7506166D92D4533872E662F4B2D1428AAB5CCA72E75AA2EF325E196A5A02E2E8278873C64375845994B0F39BE2FF7B478332A7B0AA5E48877C47B6F513E997848AF8CCB8A899F3393AB35333CF0871E36698193862D486B4B9078B70C0A0A507B8A250F3F876F5A067632D5E65193E4445A1EC3A2C9B4C6F07AC334F0F62BC33357CB502E9B1C19D2398B6972AEC2EF21630F8C9134C4F7DD662D8AD7BDC9E19C46720F334B66C22D4BF32ED275144E20E7669FFCF6FC143667C9F02A577F32960FA9F2371BE1FA90E49CBC69C01531F140556854D588DD0E55E1307D78CA38E975CD999F9AEA604266329EE62BFB5ADDA67F549E211ECFBA906C60063696352ABB82AA782D25B17E872EA587871F450446DB1BAE0123D20404A8F2D2698B371002E986C8FCB969A99FF0E150A2709E2ED7633D02ADA87D5B3C9487D27B2BD9D21E2EC3215DCC3CDCD884371281B95A2E9987AAF82EB499C058D9C3E7DC1B66635F60DB121C72F929622DD47B6B2E69F59FF2AE6B63CC2EC60FFBA20EA50569DBAB5DAEFAEB4F03966C9637AB55662EDD28439155A82D053A5299448EDB2E7BEB0F62889E2F84E6C7F34B3212C9AAC32D521D5AB8480993F1906D5450FAB342A0FA6ED223E178BAC036B81E15783604C32A961EA1EF20BE2EBB93D34ED37BC03142B7583303E4557E48551E4BD7CBDDEA146D5485A5D212C35189F0BD6497E66912D2780A59A53B532E12C0A5ED1EC0445D96E8F2DD825221CFE4A65A87AA21DC8750481B9849DD81694C3357A0ED9B78D608D8EDDE28FAFBEC17844DE5709F41E121838DB55639D77E32A259A416D7013B2EB1259FDE1B498CBB9CAEE1D601DF3C915EA91C69B44E6B72062F5F4B3C73F06F2D5AD185E1692E2E0A01E7DD5133693681C52EE13B2BE42D03BDCF48E4E133CF06662339B778E1C3034F9939A433E157449172F7969ACCE1F5D2F65A4E09E4A5D5611EBEDDDBDB0C0C0A);
|
|
|
|
|
|
--echo End of 5.0 tests
|
|
|
|
|
|
|
|
#
|
|
# 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=binary;
|
|
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-1' INTO TABLE t1;
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
remove_file $MYSQLD_DATADIR/test/t-1;
|
|
SET character_set_filesystem=default;
|
|
select @@character_set_filesystem;
|
|
|
|
|
|
--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;
|
|
|
|
|
|
--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;
|
|
|
|
#############################################################################
|
|
# The below protion is moved to ctype_ucs.test #
|
|
#############################################################################
|
|
#--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;
|
|
######################################################################################
|
|
|
|
|
|
--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 0xE1C330 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;
|
|
|
|
--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;
|
|
|
|
--echo End of 5.1 tests
|
|
|
|
--echo #
|
|
--echo # Bug#17834434: sql/table.h: Assertion tbl->updatable &&
|
|
--echo # !tbl->multitable_view failed
|
|
--echo #
|
|
|
|
CREATE TABLE t1(a INTEGER);
|
|
|
|
CREATE VIEW v1 AS SELECT t1.a FROM t1, t1 AS t2;
|
|
|
|
--error ER_NON_UPDATABLE_TABLE
|
|
LOAD DATA LOCAL INFILE '' REPLACE INTO TABLE v1;
|
|
|
|
DROP VIEW v1;
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # Bug#11759519 INFINITE HANG WITH 100% CPU USAGE WITH LOAD DATA LOCAL AND IMPORT ERRORS
|
|
--echo #
|
|
SET @old_mode= @@sql_mode;
|
|
CREATE TABLE t1 (fld1 INT);
|
|
SET sql_mode=default;
|
|
|
|
--copy_file $EXE_MYSQL $MYSQLTEST_VARDIR/mysql
|
|
|
|
--echo # Without fix, load data hangs forever.
|
|
# The actual error code depends on character set
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD,ER_INVALID_CHARACTER_STRING
|
|
eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/mysql' REPLACE INTO TABLE t1
|
|
FIELDS TERMINATED BY 't' LINES TERMINATED BY '';
|
|
|
|
SET @@sql_mode= @old_mode;
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # Bug#20683959 LOAD DATA INFILE IGNORES A SPECIFIC ROW SILENTLY
|
|
--echo # UNDER DB CHARSET IS UTF8
|
|
--echo #
|
|
|
|
CREATE DATABASE d1 CHARSET latin1;
|
|
USE d1;
|
|
CREATE TABLE t1 (val TEXT);
|
|
LOAD DATA INFILE '../../std_data/bug20683959loaddata.txt' INTO TABLE t1;
|
|
SELECT COUNT(*) FROM t1;
|
|
SELECT HEX(val) FROM t1;
|
|
|
|
CREATE DATABASE d2 CHARSET utf8;
|
|
USE d2;
|
|
CREATE TABLE t1 (val TEXT);
|
|
LOAD DATA INFILE '../../std_data/bug20683959loaddata.txt' INTO TABLE t1;
|
|
SELECT COUNT(*) FROM t1;
|
|
SELECT HEX(val) FROM t1;
|
|
|
|
|
|
DROP TABLE d1.t1, d2.t1;
|
|
DROP DATABASE d1;
|
|
DROP DATABASE d2;
|
|
USE test;
|
|
|
|
--echo # Bug#21097485 *insert_table_ref && (insert_table_ref)->is_insertable
|
|
|
|
CREATE TABLE t(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER);
|
|
CREATE VIEW v AS SELECT a, b+c AS d FROM t;
|
|
|
|
--error ER_NONUPDATEABLE_COLUMN
|
|
LOAD DATA INFILE 'test.dat' INTO TABLE v(a, d);
|
|
|
|
--error ER_NONUPDATEABLE_COLUMN
|
|
LOAD DATA INFILE 'test.dat' INTO TABLE v(@a, @d) SET a= @a, d= @d;
|
|
|
|
DROP VIEW v;
|
|
DROP TABLE t;
|
|
|
|
--echo #
|
|
--echo # Bug #25147988: LOAD DATA INFILE FAILS WITH AN ESCAPE CHARACTER
|
|
--echo # FOLLOWED BY A MULTI-BYTE ONE
|
|
--echo #
|
|
# Test escape mark followed by multibyte character
|
|
CREATE TABLE t1(a VARCHAR(20)) CHARSET utf8mb4;
|
|
LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1 CHARACTER SET utf8mb4;
|
|
SELECT HEX(a) FROM t1;
|
|
DROP TABLE t1;
|
|
# Test multibyte character whose second byte is 0x5C
|
|
CREATE TABLE t1(a VARCHAR(20)) CHARSET gb18030;
|
|
LOAD DATA INFILE '../../std_data/loaddata7.dat' INTO TABLE t1 CHARACTER SET gb18030;
|
|
SELECT HEX(a) FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo #
|
|
--echo # Regression test added in WL#8063
|
|
--echo #
|
|
|
|
--error ER_TOO_LONG_IDENT
|
|
LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890;
|
|
|
|
CREATE TABLE t1(a VARCHAR(20));
|
|
|
|
LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1 ();
|
|
LOAD DATA INFILE '../../std_data/loaddata_incomplete_mb.dat' INTO TABLE t1 IGNORE 20 LINES;
|
|
LOAD DATA INFILE '../../std_data/loaddata_incomplete_escape.dat' INTO TABLE t1 IGNORE 20 LINES;
|
|
|
|
--error ER_SP_BADSTATEMENT
|
|
CREATE PROCEDURE p1() LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1;
|
|
|
|
|
|
SET @save_local_infile = @@local_infile;
|
|
SET GLOBAL local_infile = OFF;
|
|
|
|
--error ER_NOT_ALLOWED_COMMAND
|
|
LOAD DATA LOCAL INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1;
|
|
|
|
SET GLOBAL local_infile = @save_local_infile;
|
|
|
|
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t2(a BLOB);
|
|
|
|
--error ER_BLOBS_AND_NO_TERMINATED
|
|
LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t2 FIELDS TERMINATED BY '' LINES TERMINATED BY '';
|
|
|
|
DROP TABLE t2;
|
|
|
|
|
|
CREATE TABLE t3(a VARCHAR(20), i INT NOT NULL);
|
|
|
|
--error ER_BAD_NULL_ERROR
|
|
LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t3 (a) SET i = NULL;
|
|
|
|
DROP TABLE t3;
|
|
--remove_file $MYSQLTEST_VARDIR/mysql
|
|
--remove_file $file
|
|
|
|
--echo #
|
|
--echo # Bug#28460369 LOAD DATA INFILE THROWS ERROR WITH NOT NULL COLUMN DEFINED
|
|
--echo # VIA SET
|
|
--echo #
|
|
--echo # Verify that LOAD DATA rejects rows with no data for GEOMETRY NOT NULL
|
|
--echo # columns. However, if the column is set using the SET clause,
|
|
--echo # LOAD DATA should succeed.
|
|
CREATE TABLE t1 (x DOUBLE, y DOUBLE, g GEOMETRY NOT NULL SRID 4326);
|
|
|
|
--error ER_NO_DEFAULT_FOR_FIELD
|
|
LOAD DATA INFILE '../../std_data/x_y_data.csv'
|
|
INTO TABLE t1
|
|
FIELDS TERMINATED BY ','
|
|
(x, y);
|
|
|
|
LOAD DATA INFILE '../../std_data/x_y_data.csv'
|
|
INTO TABLE t1
|
|
FIELDS TERMINATED BY ','
|
|
(x, y) SET g = ST_SRID(POINT(x, y), 4326);
|
|
SELECT x, y, ST_AsText(g), ST_SRID(g) FROM t1;
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo #-----------------------------------------------------------------------
|
|
--echo # Bug#30126375 - LOAD DATA WITH SET CLAUSE IGNORES NO_AUTO_VALUE_ON_ZERO
|
|
--echo # MODE
|
|
--echo #-----------------------------------------------------------------------
|
|
SET @old_sql_mode = @@sql_mode;
|
|
SET @@sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
|
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, j INT);
|
|
INSERT INTO t1 VALUES (0, 1);
|
|
--echo # NO_AUTO_VALUE_ON_ZERO should prevent generation of new
|
|
--echo # auto-increment value. So row should get 0 as id.
|
|
SELECT * FROM t1;
|
|
|
|
--echo # LOAD DATA from file with separators.
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
--eval SELECT * FROM t1 INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1.txt'
|
|
DELETE FROM t1;
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1.txt' INTO TABLE t1 SET j = 2;
|
|
--echo # The above LOAD DATA should preserve id (i.e. 0) for the row.
|
|
SELECT * FROM t1;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/t1.txt
|
|
|
|
--echo # LOAD DATA from file in fixed row format.
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
--eval SELECT * FROM t1 INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1.txt' FIELDS TERMINATED BY '' ENCLOSED BY ''
|
|
DELETE FROM t1;
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1.txt' INTO TABLE t1 FIELDS TERMINATED BY '' ENCLOSED BY '' SET j = 3;
|
|
--echo # The above LOAD DATA should preserve id (i.e. 0) for the row too.
|
|
SELECT * FROM t1;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/t1.txt
|
|
|
|
--echo # LOAD DATA from XML file.
|
|
--echo # Use mysqldump --xml to produce t1.xml file.
|
|
--exec $MYSQL_DUMP --xml test t1 > "$MYSQLTEST_VARDIR/tmp/t1.xml" 2>&1
|
|
DELETE FROM t1;
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
--eval LOAD XML INFILE "$MYSQLTEST_VARDIR/tmp/t1.xml" IGNORE INTO TABLE t1 SET j = 4;
|
|
--echo # The above LOAD DATA should preserve id (i.e. 0) for the row as well.
|
|
SELECT * FROM t1;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/t1.xml
|
|
|
|
--echo # Clean up.
|
|
DROP TABLE t1;
|
|
SET sql_mode=@old_sql_mode;
|
|
|