107 lines
4.4 KiB
Text
107 lines
4.4 KiB
Text
#
|
|
# WL#13168: Test MySQL command line client(mysql) --load-data-local-dir option
|
|
#
|
|
|
|
let $test_dir=$MYSQLTEST_VARDIR/tmp/wl13168;
|
|
let $wrong_test_dir=$MYSQLTEST_VARDIR/tmp/wl13168_2;
|
|
let $nonexistent_test_dir=$MYSQLTEST_VARDIR/tmp/wl13168_3;
|
|
let $test_file=$MYSQLTEST_VARDIR/tmp/wl13168/t1;
|
|
let $test_file_wrong_case=$MYSQLTEST_VARDIR/tmp/wl13168/T1;
|
|
let $test_file_wrong_file=$MYSQLTEST_VARDIR/tmp/wl13168/t2;
|
|
let $test_file_wrong_dir=$wrong_test_dir/t1;
|
|
let $test_file_wrong_dir_case=$MYSQLTEST_VARDIR/Tmp/wl13168/t1;
|
|
|
|
--echo # create the test directory
|
|
mkdir $test_dir;
|
|
--echo # create the wrong test directory
|
|
mkdir $wrong_test_dir;
|
|
--echo # create the test file
|
|
--write_file $test_file
|
|
1,a
|
|
2,b
|
|
EOF
|
|
--echo # create the wrong test file
|
|
--write_file $test_file_wrong_file
|
|
1,a
|
|
2,b
|
|
EOF
|
|
--echo # create a file in wrong dir
|
|
--write_file $test_file_wrong_dir
|
|
1,a
|
|
2,b
|
|
EOF
|
|
|
|
--echo # setup
|
|
CREATE TABLE test.wl13168(id INT PRIMARY KEY, data VARCHAR(50));
|
|
|
|
--echo # FR2/FR1.2: specify test_dir: should work
|
|
--exec $MYSQL --load_data_local_dir="$test_dir" -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
|
|
--echo # verify that the data are loaded
|
|
SELECT * FROM test.wl13168 ORDER BY id;
|
|
DELETE FROM test.wl13168;
|
|
|
|
--echo # FR1.1: specify empty (default): should fail
|
|
--error 1
|
|
--exec $MYSQL -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
|
|
SELECT * FROM test.wl13168 ORDER BY id;
|
|
|
|
--echo # FR1.1: specify explicit empty: should fail
|
|
--error 1
|
|
--exec $MYSQL --load_data_local_dir= -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
|
|
SELECT * FROM test.wl13168 ORDER BY id;
|
|
|
|
--echo # FR1.1: specify explicit empty and local-infile: should work
|
|
--exec $MYSQL --load_data_local_dir= --local-infile -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
|
|
SELECT * FROM test.wl13168 ORDER BY id;
|
|
DELETE FROM test.wl13168;
|
|
|
|
--echo # FR1.1: specify wrong file: should fail
|
|
--error 1
|
|
--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
|
|
SELECT * FROM test.wl13168 ORDER BY id;
|
|
|
|
--echo # FR1.1: specify wrong dir: should fail
|
|
--error 1
|
|
--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
|
|
SELECT * FROM test.wl13168 ORDER BY id;
|
|
|
|
--echo # FR1.1: specify wrong dir and local-infile: should work
|
|
--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
|
|
SELECT * FROM test.wl13168 ORDER BY id;
|
|
DELETE FROM test.wl13168;
|
|
|
|
--echo # Expect no error on MacOS and error on others
|
|
let expected_error=`SELECT if (CONVERT(@@version_compile_os USING LATIN1) RLIKE '^(osx|macos)', 0, 1)`;
|
|
|
|
--echo # FR1.5: specify wrong case dir: should fail except on MacOS
|
|
--error $expected_error
|
|
--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
|
|
remove_file $MYSQLTEST_VARDIR/tmp/wl13168_log.txt;
|
|
DELETE FROM test.wl13168;
|
|
|
|
--echo # FR1.5: specify wrong case file: should fail except on MacOS
|
|
--error $expected_error
|
|
--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
|
|
remove_file $MYSQLTEST_VARDIR/tmp/wl13168_log.txt;
|
|
DELETE FROM test.wl13168;
|
|
|
|
--echo # Expect no error on windows and error on others
|
|
let expected_error=`select if (convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") = 1, 0, 1)`;
|
|
|
|
--echo # FR2.1: specify non-existent dir: expect success on windows and failure on unix
|
|
--error $expected_error
|
|
--exec $MYSQL --load_data_local_dir=$nonexistent_test_dir -e "SELECT 1" > $MYSQLTEST_VARDIR/tmp/wl13168_log.txt
|
|
remove_file $MYSQLTEST_VARDIR/tmp/wl13168_log.txt;
|
|
|
|
SET @@global.local_infile = 0;
|
|
|
|
--echo # FR2/FR1.2: specify test_dir: should fail
|
|
--error 1
|
|
--exec $MYSQL --load_data_local_dir="$test_dir" -e "LOAD DATA LOCAL INFILE '$test_file' INTO TABLE test.wl13168 FIELDS TERMINATED BY ','" 2>&1
|
|
SELECT * FROM test.wl13168 ORDER BY id;
|
|
|
|
--echo # cleanup
|
|
DROP TABLE test.wl13168;
|
|
SET @@global.local_infile = 1;
|
|
force-rmdir $test_dir;
|
|
force-rmdir $wrong_test_dir;
|