mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.2 into 10.3
This commit is contained in:
@ -48,8 +48,8 @@ static char *add_load_option(char *ptr,const char *object,
|
|||||||
const char *statement);
|
const char *statement);
|
||||||
|
|
||||||
static my_bool verbose=0,lock_tables=0,ignore_errors=0,opt_delete=0,
|
static my_bool verbose=0,lock_tables=0,ignore_errors=0,opt_delete=0,
|
||||||
replace=0,silent=0,ignore=0,opt_compress=0,
|
replace, silent, ignore, ignore_foreign_keys,
|
||||||
opt_low_priority= 0, tty_password= 0;
|
opt_compress, opt_low_priority, tty_password;
|
||||||
static my_bool debug_info_flag= 0, debug_check_flag= 0;
|
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 uint opt_use_threads=0, opt_local_file=0, my_end_arg= 0;
|
||||||
static char *opt_password=0, *current_user=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},
|
¤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", 'i', "If duplicate unique key was found, keep old row.",
|
||||||
&ignore, &ignore, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
&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.",
|
{"ignore-lines", OPT_IGN_LINES, "Ignore first n lines of data infile.",
|
||||||
&opt_ignore_lines, &opt_ignore_lines, 0, GET_LL,
|
&opt_ignore_lines, &opt_ignore_lines, 0, GET_LL,
|
||||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
@ -489,6 +493,9 @@ static MYSQL *db_connect(char *host, char *database,
|
|||||||
ignore_errors=0;
|
ignore_errors=0;
|
||||||
db_error(mysql);
|
db_error(mysql);
|
||||||
}
|
}
|
||||||
|
if (ignore_foreign_keys)
|
||||||
|
mysql_query(mysql, "set foreign_key_checks= 0;");
|
||||||
|
|
||||||
return mysql;
|
return mysql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5639,6 +5639,24 @@ DROP FUNCTION f;
|
|||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP FUNCTION f;
|
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
|
# Test for --add-drop-trigger
|
||||||
#
|
#
|
||||||
use test;
|
use test;
|
||||||
|
@ -2500,6 +2500,7 @@ DROP TABLE t1;
|
|||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
DROP DATABASE db_20772273;
|
DROP DATABASE db_20772273;
|
||||||
USE test;
|
USE test;
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/tmp/t2.txt
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Bug #25717383: MYSQLDUMP MAY EXECUTE ANY ARBITRARY QUERY
|
--echo # Bug #25717383: MYSQLDUMP MAY EXECUTE ANY ARBITRARY QUERY
|
||||||
@ -2668,6 +2669,34 @@ DROP FUNCTION f;
|
|||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP FUNCTION f;
|
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 #
|
||||||
--echo # Test for --add-drop-trigger
|
--echo # Test for --add-drop-trigger
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -707,8 +707,38 @@ ERROR 42S02: Table 'test.x' doesn't exist
|
|||||||
select * from information_schema.tables where table_name='v';
|
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
|
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
|
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 table t1,t2;
|
||||||
drop view v;
|
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 @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||||
set @save_optimizer_switch=@@optimizer_switch;
|
set @save_optimizer_switch=@@optimizer_switch;
|
||||||
set use_stat_tables=@save_use_stat_tables;
|
set use_stat_tables=@save_use_stat_tables;
|
||||||
|
@ -469,9 +469,35 @@ CREATE VIEW v AS SELECT * FROM t1 JOIN t2;
|
|||||||
INSERT INTO t2 SELECT * FROM x;
|
INSERT INTO t2 SELECT * FROM x;
|
||||||
|
|
||||||
select * from information_schema.tables where table_name='v';
|
select * from information_schema.tables where table_name='v';
|
||||||
|
set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||||
|
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
drop view v;
|
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 @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||||
|
|
||||||
set @save_optimizer_switch=@@optimizer_switch;
|
set @save_optimizer_switch=@@optimizer_switch;
|
||||||
|
@ -734,8 +734,38 @@ ERROR 42S02: Table 'test.x' doesn't exist
|
|||||||
select * from information_schema.tables where table_name='v';
|
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
|
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
|
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 table t1,t2;
|
||||||
drop view v;
|
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 @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||||
set @save_optimizer_switch=@@optimizer_switch;
|
set @save_optimizer_switch=@@optimizer_switch;
|
||||||
set use_stat_tables=@save_use_stat_tables;
|
set use_stat_tables=@save_use_stat_tables;
|
||||||
|
13
mysql-test/suite/innodb_gis/r/rtree_add_index.result
Normal file
13
mysql-test/suite/innodb_gis/r/rtree_add_index.result
Normal file
@ -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;
|
20
mysql-test/suite/innodb_gis/t/rtree_add_index.test
Normal file
20
mysql-test/suite/innodb_gis/t/rtree_add_index.test
Normal file
@ -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;
|
@ -3045,7 +3045,7 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
|
|||||||
|
|
||||||
if (thd->variables.optimizer_use_condition_selectivity > 2 &&
|
if (thd->variables.optimizer_use_condition_selectivity > 2 &&
|
||||||
!bitmap_is_clear_all(used_fields) &&
|
!bitmap_is_clear_all(used_fields) &&
|
||||||
thd->variables.use_stat_tables > 0)
|
thd->variables.use_stat_tables > 0 && table->stats_is_read)
|
||||||
{
|
{
|
||||||
PARAM param;
|
PARAM param;
|
||||||
MEM_ROOT alloc;
|
MEM_ROOT alloc;
|
||||||
|
@ -2199,6 +2199,9 @@ inline bool statistics_for_command_is_needed(THD *thd)
|
|||||||
case SQLCOM_DELETE_MULTI:
|
case SQLCOM_DELETE_MULTI:
|
||||||
case SQLCOM_REPLACE:
|
case SQLCOM_REPLACE:
|
||||||
case SQLCOM_REPLACE_SELECT:
|
case SQLCOM_REPLACE_SELECT:
|
||||||
|
case SQLCOM_CREATE_TABLE:
|
||||||
|
case SQLCOM_SET_OPTION:
|
||||||
|
case SQLCOM_DO:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
Reference in New Issue
Block a user