summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Bindar <robert@mariadb.org>2019-05-13 12:30:35 +0300
committerSergey Vojtovich <svoj@mariadb.org>2019-05-15 18:45:58 +0400
commita941e58fb8a1911b1dabcd85c8f906e88466318d (patch)
tree9a439a074bf74abdfe16990537ed1d66b00dd55c
parent47637a3dd13d19e897a7cbfd1499f1bf3b2fdb2a (diff)
downloadmariadb-git-a941e58fb8a1911b1dabcd85c8f906e88466318d.tar.gz
MDEV-788 mysqlimport should support the ability to disable foreign keys
-rw-r--r--client/mysqlimport.c11
-rw-r--r--mysql-test/r/mysqldump.result18
-rw-r--r--mysql-test/t/mysqldump.test29
3 files changed, 56 insertions, 2 deletions
diff --git a/client/mysqlimport.c b/client/mysqlimport.c
index 38cec6da668..4cd51477e32 100644
--- a/client/mysqlimport.c
+++ b/client/mysqlimport.c
@@ -48,8 +48,8 @@ static char *add_load_option(char *ptr,const char *object,
const char *statement);
static my_bool verbose=0,lock_tables=0,ignore_errors=0,opt_delete=0,
- replace=0,silent=0,ignore=0,opt_compress=0,
- opt_low_priority= 0, tty_password= 0;
+ replace, silent, ignore, ignore_foreign_keys,
+ opt_compress, opt_low_priority, tty_password;
static my_bool debug_info_flag= 0, debug_check_flag= 0;
static uint opt_use_threads=0, opt_local_file=0, my_end_arg= 0;
static char *opt_password=0, *current_user=0,
@@ -123,6 +123,10 @@ static struct my_option my_long_options[] =
&current_host, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"ignore", 'i', "If duplicate unique key was found, keep old row.",
&ignore, &ignore, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
+ {"ignore-foreign-keys", 'k',
+ "Disable foreign key checks while importing the data.",
+ &ignore_foreign_keys, &ignore_foreign_keys, 0, GET_BOOL, NO_ARG,
+ 0, 0, 0, 0, 0, 0},
{"ignore-lines", OPT_IGN_LINES, "Ignore first n lines of data infile.",
&opt_ignore_lines, &opt_ignore_lines, 0, GET_LL,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
@@ -487,6 +491,9 @@ static MYSQL *db_connect(char *host, char *database,
ignore_errors=0;
db_error(mysql);
}
+ if (ignore_foreign_keys)
+ mysql_query(mysql, "set foreign_key_checks= 0;");
+
return mysql;
}
diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result
index 25c1931d0e0..8d8e3b7eda4 100644
--- a/mysql-test/r/mysqldump.result
+++ b/mysql-test/r/mysqldump.result
@@ -5610,3 +5610,21 @@ DROP FUNCTION f;
#
DROP VIEW v1;
DROP FUNCTION f;
+#
+# MDEV-788 New option to ignore foreign key contraints in mysqlimport
+#
+create table t1 (
+id int primary key
+) engine=InnoDB;
+create table t2 (
+t1_id int,
+CONSTRAINT fk
+FOREIGN KEY (t1_id) REFERENCES t1 (id)
+) ENGINE = InnoDB;
+select count(*) from t2;
+count(*)
+1
+select count(*) from t2;
+count(*)
+2
+drop tables t2, t1;
diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test
index e8a0cc3f81f..7382bd455c8 100644
--- a/mysql-test/t/mysqldump.test
+++ b/mysql-test/t/mysqldump.test
@@ -2484,6 +2484,7 @@ DROP TABLE t1;
DROP TABLE t2;
DROP DATABASE db_20772273;
USE test;
+--remove_file $MYSQLTEST_VARDIR/tmp/t2.txt
--echo #
--echo # Bug #25717383: MYSQLDUMP MAY EXECUTE ANY ARBITRARY QUERY
@@ -2649,3 +2650,31 @@ DROP FUNCTION f;
--echo #
DROP VIEW v1;
DROP FUNCTION f;
+
+--echo #
+--echo # MDEV-788 New option to ignore foreign key contraints in mysqlimport
+--echo #
+create table t1 (
+ id int primary key
+) engine=InnoDB;
+
+create table t2 (
+ t1_id int,
+ CONSTRAINT fk
+ FOREIGN KEY (t1_id) REFERENCES t1 (id)
+) ENGINE = InnoDB;
+
+--write_file $MYSQLTEST_VARDIR/tmp/t2.txt
+0
+EOF
+
+--error 1
+--exec $MYSQL_IMPORT --silent test $MYSQLTEST_VARDIR/tmp/t2.txt
+--exec $MYSQL_IMPORT --silent -k test $MYSQLTEST_VARDIR/tmp/t2.txt
+select count(*) from t2;
+
+--exec $MYSQL_IMPORT --silent --ignore-foreign-keys test $MYSQLTEST_VARDIR/tmp/t2.txt
+select count(*) from t2;
+
+--remove_file $MYSQLTEST_VARDIR/tmp/t2.txt
+drop tables t2, t1;