diff options
| author | Marko Mäkelä <marko.makela@mariadb.com> | 2019-05-16 14:24:29 +0300 | 
|---|---|---|
| committer | Marko Mäkelä <marko.makela@mariadb.com> | 2019-05-16 14:24:29 +0300 | 
| commit | 3d56adbfac394b2b3ffd22a89fe7c2978ed9a505 (patch) | |
| tree | 20d568348fb9aab84446988823f1a971f45a7aca | |
| parent | b7d22a843e36cd5b8695f8ac2b92789d1cf50e4f (diff) | |
| parent | 796486d19b7eede58566620dfd110d24ac723218 (diff) | |
| download | mariadb-git-3d56adbfac394b2b3ffd22a89fe7c2978ed9a505.tar.gz | |
Merge 10.2 into 10.3
| -rw-r--r-- | client/mysqlimport.c | 11 | ||||
| -rw-r--r-- | mysql-test/main/mysqldump.result | 18 | ||||
| -rw-r--r-- | mysql-test/main/mysqldump.test | 29 | ||||
| -rw-r--r-- | mysql-test/main/stat_tables.result | 30 | ||||
| -rw-r--r-- | mysql-test/main/stat_tables.test | 26 | ||||
| -rw-r--r-- | mysql-test/main/stat_tables_innodb.result | 30 | ||||
| -rw-r--r-- | mysql-test/suite/innodb_gis/r/rtree_add_index.result | 13 | ||||
| -rw-r--r-- | mysql-test/suite/innodb_gis/t/rtree_add_index.test | 20 | ||||
| -rw-r--r-- | sql/opt_range.cc | 2 | ||||
| -rw-r--r-- | sql/sql_statistics.cc | 3 | 
10 files changed, 179 insertions, 3 deletions
diff --git a/client/mysqlimport.c b/client/mysqlimport.c index 8740670c1c4..dbb2e8f7dba 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[] =     ¤t_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}, @@ -489,6 +493,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/main/mysqldump.result b/mysql-test/main/mysqldump.result index 812a095d1bb..539f51c24e2 100644 --- a/mysql-test/main/mysqldump.result +++ b/mysql-test/main/mysqldump.result @@ -5639,6 +5639,24 @@ 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; +#  # Test for --add-drop-trigger  #  use test; diff --git a/mysql-test/main/mysqldump.test b/mysql-test/main/mysqldump.test index dbd32f3e74a..8853002b6c0 100644 --- a/mysql-test/main/mysqldump.test +++ b/mysql-test/main/mysqldump.test @@ -2500,6 +2500,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 @@ -2669,6 +2670,34 @@ 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; + +--echo #  --echo # Test for --add-drop-trigger  --echo #  use test; diff --git a/mysql-test/main/stat_tables.result b/mysql-test/main/stat_tables.result index d224286056f..a631aab8714 100644 --- a/mysql-test/main/stat_tables.result +++ b/mysql-test/main/stat_tables.result @@ -707,8 +707,38 @@ ERROR 42S02: Table 'test.x' doesn't exist  select * from information_schema.tables where table_name='v';  TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	TABLE_TYPE	ENGINE	VERSION	ROW_FORMAT	TABLE_ROWS	AVG_ROW_LENGTH	DATA_LENGTH	MAX_DATA_LENGTH	INDEX_LENGTH	DATA_FREE	AUTO_INCREMENT	CREATE_TIME	UPDATE_TIME	CHECK_TIME	TABLE_COLLATION	CHECKSUM	CREATE_OPTIONS	TABLE_COMMENT	MAX_INDEX_LENGTH	TEMPORARY  def	test	v	VIEW	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	VIEW	NULL	NULL +set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;  drop table t1,t2;  drop view v; +# +# MDEV-19407: Assertion `field->table->stats_is_read' failed in is_eits_usable +# +set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity; +set @@optimizer_use_condition_selectivity= 1; +set @@use_stat_tables='never'; +create table t1(pk int); +insert into t1 values (4),(3); +set @@optimizer_use_condition_selectivity= 4; +set use_stat_tables='preferably'; +INSERT INTO t1 SELECT * FROM x; +ERROR 42S02: Table 'test.x' doesn't exist +CREATE TABLE t2 SELECT pk FROM t1 WHERE pk>2; +select * from t2; +pk +4 +3 +drop table t1,t2; +create table t1(a int,b int, key k1(a) ); +insert into t1 values(1,1),(2,2),(3,3); +analyze table t1; +Table	Op	Msg_type	Msg_text +test.t1	analyze	status	Engine-independent statistics collected +test.t1	analyze	status	OK +select * from mysql.index_stats, t1 where index_name='k1' and t1.a > 1 and t1.b > 1; +db_name	table_name	index_name	prefix_arity	avg_frequency	a	b +test	t1	k1	1	1.0000	2	2 +test	t1	k1	1	1.0000	3	3 +drop table t1;  set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;  set @save_optimizer_switch=@@optimizer_switch;  set use_stat_tables=@save_use_stat_tables; diff --git a/mysql-test/main/stat_tables.test b/mysql-test/main/stat_tables.test index ddf881c69ae..79a7a17550b 100644 --- a/mysql-test/main/stat_tables.test +++ b/mysql-test/main/stat_tables.test @@ -469,9 +469,35 @@ CREATE VIEW v AS SELECT * FROM t1 JOIN t2;  INSERT INTO t2 SELECT * FROM x;  select * from information_schema.tables where table_name='v'; +set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;  drop table t1,t2;  drop view v; + +--echo # +--echo # MDEV-19407: Assertion `field->table->stats_is_read' failed in is_eits_usable +--echo # + +set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity; +set @@optimizer_use_condition_selectivity= 1; +set @@use_stat_tables='never'; +create table t1(pk int); +insert into t1 values (4),(3); +set @@optimizer_use_condition_selectivity= 4; +set use_stat_tables='preferably'; + +--error ER_NO_SUCH_TABLE +INSERT INTO t1 SELECT * FROM x; +CREATE TABLE t2 SELECT pk FROM t1 WHERE pk>2; +select * from t2; +drop table t1,t2; + +create table t1(a int,b int, key k1(a) ); +insert into t1 values(1,1),(2,2),(3,3); +analyze table t1; +select * from mysql.index_stats, t1 where index_name='k1' and t1.a > 1 and t1.b > 1; +drop table t1; +  set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;  set @save_optimizer_switch=@@optimizer_switch; diff --git a/mysql-test/main/stat_tables_innodb.result b/mysql-test/main/stat_tables_innodb.result index 1d7e1b8f1b6..53a1441158a 100644 --- a/mysql-test/main/stat_tables_innodb.result +++ b/mysql-test/main/stat_tables_innodb.result @@ -734,8 +734,38 @@ ERROR 42S02: Table 'test.x' doesn't exist  select * from information_schema.tables where table_name='v';  TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	TABLE_TYPE	ENGINE	VERSION	ROW_FORMAT	TABLE_ROWS	AVG_ROW_LENGTH	DATA_LENGTH	MAX_DATA_LENGTH	INDEX_LENGTH	DATA_FREE	AUTO_INCREMENT	CREATE_TIME	UPDATE_TIME	CHECK_TIME	TABLE_COLLATION	CHECKSUM	CREATE_OPTIONS	TABLE_COMMENT	MAX_INDEX_LENGTH	TEMPORARY  def	test	v	VIEW	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	VIEW	NULL	NULL +set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;  drop table t1,t2;  drop view v; +# +# MDEV-19407: Assertion `field->table->stats_is_read' failed in is_eits_usable +# +set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity; +set @@optimizer_use_condition_selectivity= 1; +set @@use_stat_tables='never'; +create table t1(pk int); +insert into t1 values (4),(3); +set @@optimizer_use_condition_selectivity= 4; +set use_stat_tables='preferably'; +INSERT INTO t1 SELECT * FROM x; +ERROR 42S02: Table 'test.x' doesn't exist +CREATE TABLE t2 SELECT pk FROM t1 WHERE pk>2; +select * from t2; +pk +4 +3 +drop table t1,t2; +create table t1(a int,b int, key k1(a) ); +insert into t1 values(1,1),(2,2),(3,3); +analyze table t1; +Table	Op	Msg_type	Msg_text +test.t1	analyze	status	Engine-independent statistics collected +test.t1	analyze	status	OK +select * from mysql.index_stats, t1 where index_name='k1' and t1.a > 1 and t1.b > 1; +db_name	table_name	index_name	prefix_arity	avg_frequency	a	b +test	t1	k1	1	1.0000	2	2 +test	t1	k1	1	1.0000	3	3 +drop table t1;  set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;  set @save_optimizer_switch=@@optimizer_switch;  set use_stat_tables=@save_use_stat_tables; diff --git a/mysql-test/suite/innodb_gis/r/rtree_add_index.result b/mysql-test/suite/innodb_gis/r/rtree_add_index.result new file mode 100644 index 00000000000..dbd804b18bd --- /dev/null +++ b/mysql-test/suite/innodb_gis/r/rtree_add_index.result @@ -0,0 +1,13 @@ +SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; +SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; +CREATE TABLE t1 (g MULTIPOINT NOT NULL) ENGINE=InnoDB; +INSERT INTO t1 VALUES (''); +connect purge_control,localhost,root; +START TRANSACTION WITH CONSISTENT SNAPSHOT; +connection default; +DELETE FROM t1; +ALTER TABLE t1 ADD SPATIAL INDEX (g); +disconnect purge_control; +InnoDB		0 transactions not purged +DROP TABLE t1; +SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb_gis/t/rtree_add_index.test b/mysql-test/suite/innodb_gis/t/rtree_add_index.test new file mode 100644 index 00000000000..cbc82f62a70 --- /dev/null +++ b/mysql-test/suite/innodb_gis/t/rtree_add_index.test @@ -0,0 +1,20 @@ +--source include/have_innodb.inc + +SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; +SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; + +CREATE TABLE t1 (g MULTIPOINT NOT NULL) ENGINE=InnoDB; +INSERT INTO t1 VALUES (''); + +connect purge_control,localhost,root; +START TRANSACTION WITH CONSISTENT SNAPSHOT; +connection default; + +DELETE FROM t1; + +ALTER TABLE t1 ADD SPATIAL INDEX (g); + +disconnect purge_control; +--source ../../innodb/include/wait_all_purged.inc +DROP TABLE t1; +SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 59f21d31279..ec7b3dbbd7a 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -3045,7 +3045,7 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)    if (thd->variables.optimizer_use_condition_selectivity > 2 &&        !bitmap_is_clear_all(used_fields) && -      thd->variables.use_stat_tables > 0) +      thd->variables.use_stat_tables > 0 && table->stats_is_read)    {      PARAM param;      MEM_ROOT alloc; diff --git a/sql/sql_statistics.cc b/sql/sql_statistics.cc index 9ed49cef3e6..5b8c1b63b6f 100644 --- a/sql/sql_statistics.cc +++ b/sql/sql_statistics.cc @@ -2199,6 +2199,9 @@ inline bool statistics_for_command_is_needed(THD *thd)    case SQLCOM_DELETE_MULTI:    case SQLCOM_REPLACE:    case SQLCOM_REPLACE_SELECT: +  case SQLCOM_CREATE_TABLE: +  case SQLCOM_SET_OPTION: +  case SQLCOM_DO:      break;    default:       return FALSE;  | 
