mysql-server/mysql-test/t/mysql_load_data_local_dir.test
2025-03-05 14:31:37 +07:00

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;