1#
2# WL#13168: Test MySQL command line client(mysql) --load-data-local-dir option
3#
4
5let $test_dir=$MYSQLTEST_VARDIR/tmp/wl13168;
6let $wrong_test_dir=$MYSQLTEST_VARDIR/tmp/wl13168_2;
7let $nonexistent_test_dir=$MYSQLTEST_VARDIR/tmp/wl13168_3;
8let $test_file=$MYSQLTEST_VARDIR/tmp/wl13168/t1;
9let $test_file_wrong_case=$MYSQLTEST_VARDIR/tmp/wl13168/T1;
10let $test_file_wrong_file=$MYSQLTEST_VARDIR/tmp/wl13168/t2;
11let $test_file_wrong_dir=$wrong_test_dir/t1;
12let $test_file_wrong_dir_case=$MYSQLTEST_VARDIR/Tmp/wl13168/t1;
13
14--echo # create the test directory
15mkdir $test_dir;
16--echo # create the wrong test directory
17mkdir $wrong_test_dir;
18--echo # create the test file
19--write_file $test_file
201,a
212,b
22EOF
23--echo # create the wrong test file
24--write_file $test_file_wrong_file
251,a
262,b
27EOF
28--echo # create a file in wrong dir
29--write_file $test_file_wrong_dir
301,a
312,b
32EOF
33
34--echo # setup
35CREATE TABLE test.wl13168(id INT PRIMARY KEY, data VARCHAR(50));
36
37--echo # FR2/FR1.2: specify test_dir: should work
38--exec $MYSQL --load_data_local_dir="$test_dir" -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
39--echo # verify that the data are loaded
40SELECT * FROM test.wl13168 ORDER BY id;
41DELETE FROM test.wl13168;
42
43--echo # FR1.1: specify empty (default): should fail
44--error 1
45--exec $MYSQL -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
46SELECT * FROM test.wl13168 ORDER BY id;
47
48--echo # FR1.1: specify explicit empty: should fail
49--error 1
50--exec $MYSQL --load_data_local_dir= -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
51SELECT * FROM test.wl13168 ORDER BY id;
52
53--echo # FR1.1: specify explicit empty and local-infile: should work
54--exec $MYSQL --load_data_local_dir= --local-infile -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
55SELECT * FROM test.wl13168 ORDER BY id;
56DELETE FROM test.wl13168;
57
58--echo # FR1.1: specify wrong file: should fail
59--error 1
60--exec $MYSQL --load_data_local_dir=$test_file_wrong_file -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
61SELECT * FROM test.wl13168 ORDER BY id;
62
63--echo # FR1.1: specify wrong dir: should fail
64--error 1
65--exec $MYSQL --load_data_local_dir=$test_file_wrong_dir -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
66SELECT * FROM test.wl13168 ORDER BY id;
67
68--echo # FR1.1: specify wrong dir and local-infile: should work
69--exec $MYSQL --load_data_local_dir=$test_file_wrong_dir --local-infile -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
70SELECT * FROM test.wl13168 ORDER BY id;
71DELETE FROM test.wl13168;
72
73--echo # Expect no error on MacOS and error on others
74let expected_error=`SELECT if (CONVERT(@@version_compile_os USING LATIN1) RLIKE '^(osx|macos)', 0, 1)`;
75
76--echo # FR1.5: specify wrong case dir: should fail except on MacOS
77--error $expected_error
78--exec $MYSQL --load_data_local_dir=$test_file -e "LOAD DATA LOCAL INFILE '$test_file_wrong_dir_case' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" > $MYSQLTEST_VARDIR/tmp/wl13168_log.txt
79remove_file $MYSQLTEST_VARDIR/tmp/wl13168_log.txt;
80DELETE FROM test.wl13168;
81
82--echo # FR1.5: specify wrong case file: should fail except on MacOS
83--error $expected_error
84--exec $MYSQL --load_data_local_dir=$test_file -e "LOAD DATA LOCAL INFILE '$test_file_wrong_case' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" > $MYSQLTEST_VARDIR/tmp/wl13168_log.txt
85remove_file $MYSQLTEST_VARDIR/tmp/wl13168_log.txt;
86DELETE FROM test.wl13168;
87
88--echo # Expect no error on windows and error on others
89let expected_error=`select if (convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") = 1, 0, 1)`;
90
91--echo # FR2.1: specify non-existent dir: expect success on windows and failure on unix
92--error $expected_error
93--exec $MYSQL --load_data_local_dir=$nonexistent_test_dir -e "SELECT 1" > $MYSQLTEST_VARDIR/tmp/wl13168_log.txt
94remove_file $MYSQLTEST_VARDIR/tmp/wl13168_log.txt;
95
96SET @@global.local_infile = 0;
97
98--echo # FR2/FR1.2: specify test_dir: should fail
99--error 1
100--exec $MYSQL --load_data_local_dir="$test_dir" -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
101SELECT * FROM test.wl13168 ORDER BY id;
102
103--echo # cleanup
104DROP TABLE test.wl13168;
105SET @@global.local_infile = 1;
106force-rmdir $test_dir;
107force-rmdir $wrong_test_dir;
108