mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge 10.0 into 10.1
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (c) 2013, Monty Program Ab.
|
/* Copyright (c) 2013, 2018, MariaDB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
time-consuming loops, and gracefully abort the operation if it is
|
time-consuming loops, and gracefully abort the operation if it is
|
||||||
non-zero.
|
non-zero.
|
||||||
|
|
||||||
thd_is_killed(thd)
|
thd_killed(thd)
|
||||||
@return 0 - no KILL statement was issued, continue normally
|
@return 0 - no KILL statement was issued, continue normally
|
||||||
@return 1 - there was a KILL statement, abort the execution.
|
@return 1 - there was a KILL statement, abort the execution.
|
||||||
|
|
||||||
|
@@ -8013,6 +8013,15 @@ ABCDEFGHI-ABCDEFGHI
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET optimizer_switch=@save_optimizer_switch;
|
SET optimizer_switch=@save_optimizer_switch;
|
||||||
#
|
#
|
||||||
|
# MDEV-17298 ASAN unknown-crash / READ of size 1 in my_strntoul_8bit upon INSERT .. SELECT
|
||||||
|
#
|
||||||
|
SET NAMES latin1;
|
||||||
|
CREATE TABLE t1 (a CHAR);
|
||||||
|
CREATE TABLE t2 (b ENUM('foo','bar'));
|
||||||
|
INSERT INTO t1 VALUES ('1');
|
||||||
|
INSERT INTO t2 SELECT * FROM t1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
#
|
||||||
# End of 10.0 tests
|
# End of 10.0 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@@ -1712,3 +1712,53 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE t1 ALL PRIMARY,c1,i,c2 NULL NULL NULL 69 Using where
|
1 SIMPLE t1 ALL PRIMARY,c1,i,c2 NULL NULL NULL 69 Using where
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
set optimizer_switch= @optimizer_switch_save;
|
set optimizer_switch= @optimizer_switch_save;
|
||||||
|
#
|
||||||
|
# MDEV-16695: Estimate for rows of derived tables is very high when we are using index_merge union
|
||||||
|
#
|
||||||
|
create table t0
|
||||||
|
(
|
||||||
|
key1 int not null,
|
||||||
|
INDEX i1(key1)
|
||||||
|
);
|
||||||
|
insert into t0 values (1),(2),(3),(4),(5),(6),(7),(8);
|
||||||
|
set @d=8;
|
||||||
|
insert into t0 select key1+ @d from t0;
|
||||||
|
set @d=@d*2;
|
||||||
|
insert into t0 select key1+ @d from t0;
|
||||||
|
set @d=@d*2;
|
||||||
|
insert into t0 select key1+ @d from t0;
|
||||||
|
set @d=@d*2;
|
||||||
|
insert into t0 select key1+ @d from t0;
|
||||||
|
set @d=@d*2;
|
||||||
|
insert into t0 select key1+ @d from t0;
|
||||||
|
set @d=@d*2;
|
||||||
|
insert into t0 select key1+ @d from t0;
|
||||||
|
set @d=@d*2;
|
||||||
|
insert into t0 select key1+ @d from t0;
|
||||||
|
set @d=@d*2;
|
||||||
|
alter table t0 add key2 int not null, add index i2(key2);
|
||||||
|
alter table t0 add key3 int not null, add index i3(key3);
|
||||||
|
alter table t0 add key8 int not null, add index i8(key8);
|
||||||
|
update t0 set key2=key1,key3=key1,key8=1024-key1;
|
||||||
|
analyze table t0;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t0 analyze status OK
|
||||||
|
set @optimizer_switch_save=@@optimizer_switch;
|
||||||
|
set optimizer_switch='derived_merge=off,derived_with_keys=off';
|
||||||
|
explain select * from (select * from t0 where key1 = 3 or key2 =3) as Z where Z.key8 > 5;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2 Using where
|
||||||
|
2 DERIVED t0 index_merge i1,i2 i1,i2 4,4 NULL 2 Using union(i1,i2); Using where
|
||||||
|
select * from (select * from t0 where key1 = 3 or key2 =3) as Z where Z.key8 > 5;
|
||||||
|
key1 key2 key3 key8
|
||||||
|
3 3 3 1021
|
||||||
|
set optimizer_use_condition_selectivity=2;
|
||||||
|
explain select * from (select * from t0 where key1 = 3 or key2 =3) as Z where Z.key8 > 5;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2 Using where
|
||||||
|
2 DERIVED t0 index_merge i1,i2 i1,i2 4,4 NULL 2 Using union(i1,i2); Using where
|
||||||
|
select * from (select * from t0 where key1 = 3 or key2 =3) as Z where Z.key8 > 5;
|
||||||
|
key1 key2 key3 key8
|
||||||
|
3 3 3 1021
|
||||||
|
set @@optimizer_switch= @optimizer_switch_save;
|
||||||
|
drop table t0;
|
||||||
|
@@ -714,6 +714,7 @@ t2 CREATE TABLE `t2` (
|
|||||||
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c2`) REFERENCES `t1` (`c1`)
|
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c2`) REFERENCES `t1` (`c1`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
ALTER TABLE t1 CHANGE COLUMN c1 C1 INT;
|
ALTER TABLE t1 CHANGE COLUMN c1 C1 INT;
|
||||||
|
ALTER TABLE t2 CHANGE COLUMN c2 C2 INT;
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
@@ -723,24 +724,147 @@ t1 CREATE TABLE `t1` (
|
|||||||
SHOW CREATE TABLE t2;
|
SHOW CREATE TABLE t2;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t2 CREATE TABLE `t2` (
|
t2 CREATE TABLE `t2` (
|
||||||
`c2` int(11) NOT NULL,
|
`C2` int(11) DEFAULT NULL,
|
||||||
KEY `c2` (`c2`),
|
KEY `c2` (`C2`),
|
||||||
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c2`) REFERENCES `t1` (`c1`)
|
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c2`) REFERENCES `t1` (`c1`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
ALTER TABLE t1 CHANGE COLUMN C1 c5 INT;
|
||||||
|
ALTER TABLE t2 CHANGE COLUMN C2 c6 INT;
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`C1` int(11) NOT NULL,
|
`c5` int(11) NOT NULL,
|
||||||
PRIMARY KEY (`C1`)
|
PRIMARY KEY (`c5`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
SHOW CREATE TABLE t2;
|
SHOW CREATE TABLE t2;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t2 CREATE TABLE `t2` (
|
t2 CREATE TABLE `t2` (
|
||||||
`c2` int(11) NOT NULL,
|
`c6` int(11) DEFAULT NULL,
|
||||||
KEY `c2` (`c2`),
|
KEY `c2` (`c6`),
|
||||||
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c2`) REFERENCES `t1` (`c1`)
|
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c6`) REFERENCES `t1` (`c5`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
SELECT C.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS C INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON C.TABLE_ID=T.TABLE_ID
|
||||||
|
WHERE T.NAME='test/t1';
|
||||||
|
NAME
|
||||||
|
c5
|
||||||
|
SELECT F.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS F INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_INDEXES I ON F.INDEX_ID=I.INDEX_ID INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON I.TABLE_ID=T.TABLE_ID
|
||||||
|
WHERE T.NAME='test/t1' AND I.NAME='PRIMARY';
|
||||||
|
NAME
|
||||||
|
c5
|
||||||
|
SELECT C.REF_COL_NAME, C.FOR_COL_NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS C INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_FOREIGN F ON C.ID=F.ID
|
||||||
|
WHERE F.FOR_NAME='test/t2';
|
||||||
|
REF_COL_NAME FOR_COL_NAME
|
||||||
|
c5 c6
|
||||||
DROP TABLE t2, t1;
|
DROP TABLE t2, t1;
|
||||||
|
# virtual columns case too
|
||||||
|
CREATE TABLE t1 (a INT, b INT GENERATED ALWAYS AS (a) VIRTUAL) ENGINE = InnoDB;
|
||||||
|
ALTER TABLE t1 CHANGE COLUMN a A INT;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`A` int(11) DEFAULT NULL,
|
||||||
|
`b` int(11) AS (a) VIRTUAL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
SELECT C.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS C INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON C.TABLE_ID=T.TABLE_ID
|
||||||
|
WHERE T.NAME='test/t1';
|
||||||
|
NAME
|
||||||
|
a
|
||||||
|
DROP TABLE t1;
|
||||||
|
# different FOREIGN KEY cases
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT UNIQUE KEY,
|
||||||
|
b INT UNIQUE KEY,
|
||||||
|
c INT UNIQUE KEY,
|
||||||
|
d INT UNIQUE KEY
|
||||||
|
) ENGINE=INNODB;
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
aa INT,
|
||||||
|
bb INT,
|
||||||
|
cc INT,
|
||||||
|
dd INT
|
||||||
|
) ENGINE=INNODB;
|
||||||
|
INSERT INTO t1 VALUES (1, 1, 1, 1);
|
||||||
|
INSERT INTO t2 VALUES (1, 1, 1, 1);
|
||||||
|
ALTER TABLE t1 CHANGE a A INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t1 CHANGE c C INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t2 CHANGE cc CC INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t2 CHANGE dd DD INT, ALGORITHM=INPLACE;
|
||||||
|
SET foreign_key_checks=0;
|
||||||
|
ALTER TABLE t2
|
||||||
|
ADD FOREIGN KEY(aa) REFERENCES t1(a),
|
||||||
|
ADD FOREIGN KEY(bb) REFERENCES t1(b),
|
||||||
|
ADD FOREIGN KEY(cc) REFERENCES t1(c),
|
||||||
|
ADD FOREIGN KEY(dd) REFERENCES t1(d),
|
||||||
|
ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t1 CHANGE b B INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t2 CHANGE aa AA INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t1 CHANGE d D INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t2 CHANGE bb BB INT, ALGORITHM=INPLACE;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`A` int(11) DEFAULT NULL,
|
||||||
|
`B` int(11) DEFAULT NULL,
|
||||||
|
`C` int(11) DEFAULT NULL,
|
||||||
|
`D` int(11) DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`A`),
|
||||||
|
UNIQUE KEY `b` (`B`),
|
||||||
|
UNIQUE KEY `c` (`C`),
|
||||||
|
UNIQUE KEY `d` (`D`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
SHOW CREATE TABLE t2;
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`AA` int(11) DEFAULT NULL,
|
||||||
|
`BB` int(11) DEFAULT NULL,
|
||||||
|
`CC` int(11) DEFAULT NULL,
|
||||||
|
`DD` int(11) DEFAULT NULL,
|
||||||
|
KEY `aa` (`AA`),
|
||||||
|
KEY `bb` (`BB`),
|
||||||
|
KEY `CC` (`CC`),
|
||||||
|
KEY `DD` (`DD`),
|
||||||
|
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`aa`) REFERENCES `t1` (`a`),
|
||||||
|
CONSTRAINT `t2_ibfk_2` FOREIGN KEY (`bb`) REFERENCES `t1` (`b`),
|
||||||
|
CONSTRAINT `t2_ibfk_3` FOREIGN KEY (`cc`) REFERENCES `t1` (`c`),
|
||||||
|
CONSTRAINT `t2_ibfk_4` FOREIGN KEY (`dd`) REFERENCES `t1` (`d`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
DELETE FROM t1 WHERE a=1;
|
||||||
|
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`aa`) REFERENCES `t1` (`a`))
|
||||||
|
DELETE FROM t1 WHERE A=1;
|
||||||
|
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`aa`) REFERENCES `t1` (`a`))
|
||||||
|
DELETE FROM t1 WHERE b=1;
|
||||||
|
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`aa`) REFERENCES `t1` (`a`))
|
||||||
|
DELETE FROM t1 WHERE B=1;
|
||||||
|
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`aa`) REFERENCES `t1` (`a`))
|
||||||
|
DELETE FROM t1 WHERE c=1;
|
||||||
|
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`aa`) REFERENCES `t1` (`a`))
|
||||||
|
DELETE FROM t1 WHERE C=1;
|
||||||
|
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`aa`) REFERENCES `t1` (`a`))
|
||||||
|
DELETE FROM t1 WHERE d=1;
|
||||||
|
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`aa`) REFERENCES `t1` (`a`))
|
||||||
|
DELETE FROM t1 WHERE D=1;
|
||||||
|
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`aa`) REFERENCES `t1` (`a`))
|
||||||
|
DROP TABLE t2, t1;
|
||||||
|
# virtual columns case too
|
||||||
|
CREATE TABLE t1 (a INT, b INT GENERATED ALWAYS AS (a) VIRTUAL) ENGINE = InnoDB;
|
||||||
|
ALTER TABLE t1 CHANGE COLUMN a A INT;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`A` int(11) DEFAULT NULL,
|
||||||
|
`b` int(11) AS (a) VIRTUAL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
SELECT C.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS C INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON C.TABLE_ID=T.TABLE_ID
|
||||||
|
WHERE T.NAME='test/t1';
|
||||||
|
NAME
|
||||||
|
a
|
||||||
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# BUG 20029625 - HANDLE_FATAL_SIGNAL (SIG=11) IN
|
# BUG 20029625 - HANDLE_FATAL_SIGNAL (SIG=11) IN
|
||||||
# DICT_MEM_TABLE_COL_RENAME_LOW
|
# DICT_MEM_TABLE_COL_RENAME_LOW
|
||||||
|
@@ -419,14 +419,109 @@ CREATE TABLE t2(c2 INT NOT NULL, FOREIGN KEY(c2) REFERENCES t1(c1))ENGINE=INNODB
|
|||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
SHOW CREATE TABLE t2;
|
SHOW CREATE TABLE t2;
|
||||||
ALTER TABLE t1 CHANGE COLUMN c1 C1 INT;
|
ALTER TABLE t1 CHANGE COLUMN c1 C1 INT;
|
||||||
|
ALTER TABLE t2 CHANGE COLUMN c2 C2 INT;
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
SHOW CREATE TABLE t2;
|
SHOW CREATE TABLE t2;
|
||||||
# FIXME: MDEV-13671 InnoDB should use case-insensitive column name comparisons
|
ALTER TABLE t1 CHANGE COLUMN C1 c5 INT;
|
||||||
# like the rest of the server
|
ALTER TABLE t2 CHANGE COLUMN C2 c6 INT;
|
||||||
#ALTER TABLE t1 CHANGE COLUMN C1 c5 INT;
|
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
SHOW CREATE TABLE t2;
|
SHOW CREATE TABLE t2;
|
||||||
|
|
||||||
|
SELECT C.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS C INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON C.TABLE_ID=T.TABLE_ID
|
||||||
|
WHERE T.NAME='test/t1';
|
||||||
|
|
||||||
|
SELECT F.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS F INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_INDEXES I ON F.INDEX_ID=I.INDEX_ID INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON I.TABLE_ID=T.TABLE_ID
|
||||||
|
WHERE T.NAME='test/t1' AND I.NAME='PRIMARY';
|
||||||
|
|
||||||
|
SELECT C.REF_COL_NAME, C.FOR_COL_NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS C INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_FOREIGN F ON C.ID=F.ID
|
||||||
|
WHERE F.FOR_NAME='test/t2';
|
||||||
|
|
||||||
DROP TABLE t2, t1;
|
DROP TABLE t2, t1;
|
||||||
|
--echo # virtual columns case too
|
||||||
|
CREATE TABLE t1 (a INT, b INT GENERATED ALWAYS AS (a) VIRTUAL) ENGINE = InnoDB;
|
||||||
|
ALTER TABLE t1 CHANGE COLUMN a A INT;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
SELECT C.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS C INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON C.TABLE_ID=T.TABLE_ID
|
||||||
|
WHERE T.NAME='test/t1';
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo # different FOREIGN KEY cases
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT UNIQUE KEY,
|
||||||
|
b INT UNIQUE KEY,
|
||||||
|
c INT UNIQUE KEY,
|
||||||
|
d INT UNIQUE KEY
|
||||||
|
) ENGINE=INNODB;
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
aa INT,
|
||||||
|
bb INT,
|
||||||
|
cc INT,
|
||||||
|
dd INT
|
||||||
|
) ENGINE=INNODB;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1, 1, 1, 1);
|
||||||
|
INSERT INTO t2 VALUES (1, 1, 1, 1);
|
||||||
|
|
||||||
|
ALTER TABLE t1 CHANGE a A INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t1 CHANGE c C INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t2 CHANGE cc CC INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t2 CHANGE dd DD INT, ALGORITHM=INPLACE;
|
||||||
|
|
||||||
|
SET foreign_key_checks=0;
|
||||||
|
ALTER TABLE t2
|
||||||
|
ADD FOREIGN KEY(aa) REFERENCES t1(a),
|
||||||
|
ADD FOREIGN KEY(bb) REFERENCES t1(b),
|
||||||
|
ADD FOREIGN KEY(cc) REFERENCES t1(c),
|
||||||
|
ADD FOREIGN KEY(dd) REFERENCES t1(d),
|
||||||
|
ALGORITHM=INPLACE;
|
||||||
|
|
||||||
|
ALTER TABLE t1 CHANGE b B INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t2 CHANGE aa AA INT, ALGORITHM=INPLACE;
|
||||||
|
|
||||||
|
--source include/restart_mysqld.inc
|
||||||
|
|
||||||
|
ALTER TABLE t1 CHANGE d D INT, ALGORITHM=INPLACE;
|
||||||
|
ALTER TABLE t2 CHANGE bb BB INT, ALGORITHM=INPLACE;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
SHOW CREATE TABLE t2;
|
||||||
|
|
||||||
|
--error ER_ROW_IS_REFERENCED_2
|
||||||
|
DELETE FROM t1 WHERE a=1;
|
||||||
|
--error ER_ROW_IS_REFERENCED_2
|
||||||
|
DELETE FROM t1 WHERE A=1;
|
||||||
|
|
||||||
|
--error ER_ROW_IS_REFERENCED_2
|
||||||
|
DELETE FROM t1 WHERE b=1;
|
||||||
|
--error ER_ROW_IS_REFERENCED_2
|
||||||
|
DELETE FROM t1 WHERE B=1;
|
||||||
|
|
||||||
|
--error ER_ROW_IS_REFERENCED_2
|
||||||
|
DELETE FROM t1 WHERE c=1;
|
||||||
|
--error ER_ROW_IS_REFERENCED_2
|
||||||
|
DELETE FROM t1 WHERE C=1;
|
||||||
|
|
||||||
|
--error ER_ROW_IS_REFERENCED_2
|
||||||
|
DELETE FROM t1 WHERE d=1;
|
||||||
|
--error ER_ROW_IS_REFERENCED_2
|
||||||
|
DELETE FROM t1 WHERE D=1;
|
||||||
|
|
||||||
|
DROP TABLE t2, t1;
|
||||||
|
|
||||||
|
--echo # virtual columns case too
|
||||||
|
CREATE TABLE t1 (a INT, b INT GENERATED ALWAYS AS (a) VIRTUAL) ENGINE = InnoDB;
|
||||||
|
ALTER TABLE t1 CHANGE COLUMN a A INT;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
SELECT C.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS C INNER JOIN
|
||||||
|
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON C.TABLE_ID=T.TABLE_ID
|
||||||
|
WHERE T.NAME='test/t1';
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # BUG 20029625 - HANDLE_FATAL_SIGNAL (SIG=11) IN
|
--echo # BUG 20029625 - HANDLE_FATAL_SIGNAL (SIG=11) IN
|
||||||
|
@@ -264,6 +264,18 @@ SET NAMES latin1;
|
|||||||
--source include/ctype_mdev13118.inc
|
--source include/ctype_mdev13118.inc
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-17298 ASAN unknown-crash / READ of size 1 in my_strntoul_8bit upon INSERT .. SELECT
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET NAMES latin1;
|
||||||
|
CREATE TABLE t1 (a CHAR);
|
||||||
|
CREATE TABLE t2 (b ENUM('foo','bar'));
|
||||||
|
INSERT INTO t1 VALUES ('1');
|
||||||
|
INSERT INTO t2 SELECT * FROM t1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.0 tests
|
--echo # End of 10.0 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@@ -243,3 +243,38 @@ DROP TABLE t1;
|
|||||||
|
|
||||||
set optimizer_switch= @optimizer_switch_save;
|
set optimizer_switch= @optimizer_switch_save;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-16695: Estimate for rows of derived tables is very high when we are using index_merge union
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t0
|
||||||
|
(
|
||||||
|
key1 int not null,
|
||||||
|
INDEX i1(key1)
|
||||||
|
);
|
||||||
|
|
||||||
|
insert into t0 values (1),(2),(3),(4),(5),(6),(7),(8);
|
||||||
|
let $1=7;
|
||||||
|
set @d=8;
|
||||||
|
while ($1)
|
||||||
|
{
|
||||||
|
eval insert into t0 select key1+ @d from t0;
|
||||||
|
eval set @d=@d*2;
|
||||||
|
dec $1;
|
||||||
|
}
|
||||||
|
alter table t0 add key2 int not null, add index i2(key2);
|
||||||
|
alter table t0 add key3 int not null, add index i3(key3);
|
||||||
|
alter table t0 add key8 int not null, add index i8(key8);
|
||||||
|
|
||||||
|
update t0 set key2=key1,key3=key1,key8=1024-key1;
|
||||||
|
analyze table t0;
|
||||||
|
|
||||||
|
set @optimizer_switch_save=@@optimizer_switch;
|
||||||
|
set optimizer_switch='derived_merge=off,derived_with_keys=off';
|
||||||
|
explain select * from (select * from t0 where key1 = 3 or key2 =3) as Z where Z.key8 > 5;
|
||||||
|
select * from (select * from t0 where key1 = 3 or key2 =3) as Z where Z.key8 > 5;
|
||||||
|
set optimizer_use_condition_selectivity=2;
|
||||||
|
explain select * from (select * from t0 where key1 = 3 or key2 =3) as Z where Z.key8 > 5;
|
||||||
|
select * from (select * from t0 where key1 = 3 or key2 =3) as Z where Z.key8 > 5;
|
||||||
|
set @@optimizer_switch= @optimizer_switch_save;
|
||||||
|
drop table t0;
|
||||||
|
@@ -3139,6 +3139,12 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (quick && (quick->get_type() == QUICK_SELECT_I::QS_TYPE_ROR_UNION ||
|
||||||
|
quick->get_type() == QUICK_SELECT_I::QS_TYPE_INDEX_MERGE))
|
||||||
|
{
|
||||||
|
table->cond_selectivity*= (quick->records/table_records);
|
||||||
|
}
|
||||||
|
|
||||||
bitmap_union(used_fields, &handled_columns);
|
bitmap_union(used_fields, &handled_columns);
|
||||||
|
|
||||||
/* Check if we can improve selectivity estimates by using sampling */
|
/* Check if we can improve selectivity estimates by using sampling */
|
||||||
|
@@ -498,9 +498,7 @@ dict_mem_table_col_rename(
|
|||||||
s += len + 1;
|
s += len + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This could fail if the data dictionaries are out of sync.
|
ut_ad(!my_strcasecmp(system_charset_info, from, s));
|
||||||
Proceed with the renaming anyway. */
|
|
||||||
ut_ad(!strcmp(from, s));
|
|
||||||
|
|
||||||
dict_mem_table_col_rename_low(table, nth_col, to, s);
|
dict_mem_table_col_rename_low(table, nth_col, to, s);
|
||||||
}
|
}
|
||||||
|
@@ -4631,7 +4631,6 @@ innobase_rename_column_try(
|
|||||||
|
|
||||||
pars_info_add_ull_literal(info, "tableid", user_table->id);
|
pars_info_add_ull_literal(info, "tableid", user_table->id);
|
||||||
pars_info_add_int4_literal(info, "nth", nth_col);
|
pars_info_add_int4_literal(info, "nth", nth_col);
|
||||||
pars_info_add_str_literal(info, "old", from);
|
|
||||||
pars_info_add_str_literal(info, "new", to);
|
pars_info_add_str_literal(info, "new", to);
|
||||||
|
|
||||||
trx->op_info = "renaming column in SYS_COLUMNS";
|
trx->op_info = "renaming column in SYS_COLUMNS";
|
||||||
@@ -4641,7 +4640,7 @@ innobase_rename_column_try(
|
|||||||
"PROCEDURE RENAME_SYS_COLUMNS_PROC () IS\n"
|
"PROCEDURE RENAME_SYS_COLUMNS_PROC () IS\n"
|
||||||
"BEGIN\n"
|
"BEGIN\n"
|
||||||
"UPDATE SYS_COLUMNS SET NAME=:new\n"
|
"UPDATE SYS_COLUMNS SET NAME=:new\n"
|
||||||
"WHERE TABLE_ID=:tableid AND NAME=:old\n"
|
"WHERE TABLE_ID=:tableid\n"
|
||||||
"AND POS=:nth;\n"
|
"AND POS=:nth;\n"
|
||||||
"END;\n",
|
"END;\n",
|
||||||
FALSE, trx);
|
FALSE, trx);
|
||||||
@@ -4665,8 +4664,10 @@ err_exit:
|
|||||||
index = dict_table_get_next_index(index)) {
|
index = dict_table_get_next_index(index)) {
|
||||||
|
|
||||||
for (ulint i = 0; i < dict_index_get_n_fields(index); i++) {
|
for (ulint i = 0; i < dict_index_get_n_fields(index); i++) {
|
||||||
if (strcmp(dict_index_get_nth_field(index, i)->name,
|
if (my_strcasecmp(
|
||||||
from)) {
|
system_charset_info,
|
||||||
|
dict_index_get_nth_field(index, i)->name,
|
||||||
|
from)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4674,7 +4675,6 @@ err_exit:
|
|||||||
|
|
||||||
pars_info_add_ull_literal(info, "indexid", index->id);
|
pars_info_add_ull_literal(info, "indexid", index->id);
|
||||||
pars_info_add_int4_literal(info, "nth", i);
|
pars_info_add_int4_literal(info, "nth", i);
|
||||||
pars_info_add_str_literal(info, "old", from);
|
|
||||||
pars_info_add_str_literal(info, "new", to);
|
pars_info_add_str_literal(info, "new", to);
|
||||||
|
|
||||||
error = que_eval_sql(
|
error = que_eval_sql(
|
||||||
@@ -4683,14 +4683,14 @@ err_exit:
|
|||||||
"BEGIN\n"
|
"BEGIN\n"
|
||||||
|
|
||||||
"UPDATE SYS_FIELDS SET COL_NAME=:new\n"
|
"UPDATE SYS_FIELDS SET COL_NAME=:new\n"
|
||||||
"WHERE INDEX_ID=:indexid AND COL_NAME=:old\n"
|
"WHERE INDEX_ID=:indexid\n"
|
||||||
"AND POS=:nth;\n"
|
"AND POS=:nth;\n"
|
||||||
|
|
||||||
/* Try again, in case there is a prefix_len
|
/* Try again, in case there is a prefix_len
|
||||||
encoded in SYS_FIELDS.POS */
|
encoded in SYS_FIELDS.POS */
|
||||||
|
|
||||||
"UPDATE SYS_FIELDS SET COL_NAME=:new\n"
|
"UPDATE SYS_FIELDS SET COL_NAME=:new\n"
|
||||||
"WHERE INDEX_ID=:indexid AND COL_NAME=:old\n"
|
"WHERE INDEX_ID=:indexid\n"
|
||||||
"AND POS>=65536*:nth AND POS<65536*(:nth+1);\n"
|
"AND POS>=65536*:nth AND POS<65536*(:nth+1);\n"
|
||||||
|
|
||||||
"END;\n",
|
"END;\n",
|
||||||
@@ -4716,7 +4716,9 @@ rename_foreign:
|
|||||||
foreign_modified = false;
|
foreign_modified = false;
|
||||||
|
|
||||||
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
||||||
if (strcmp(foreign->foreign_col_names[i], from)) {
|
if (my_strcasecmp(system_charset_info,
|
||||||
|
foreign->foreign_col_names[i],
|
||||||
|
from)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4724,7 +4726,6 @@ rename_foreign:
|
|||||||
|
|
||||||
pars_info_add_str_literal(info, "id", foreign->id);
|
pars_info_add_str_literal(info, "id", foreign->id);
|
||||||
pars_info_add_int4_literal(info, "nth", i);
|
pars_info_add_int4_literal(info, "nth", i);
|
||||||
pars_info_add_str_literal(info, "old", from);
|
|
||||||
pars_info_add_str_literal(info, "new", to);
|
pars_info_add_str_literal(info, "new", to);
|
||||||
|
|
||||||
error = que_eval_sql(
|
error = que_eval_sql(
|
||||||
@@ -4733,8 +4734,7 @@ rename_foreign:
|
|||||||
"BEGIN\n"
|
"BEGIN\n"
|
||||||
"UPDATE SYS_FOREIGN_COLS\n"
|
"UPDATE SYS_FOREIGN_COLS\n"
|
||||||
"SET FOR_COL_NAME=:new\n"
|
"SET FOR_COL_NAME=:new\n"
|
||||||
"WHERE ID=:id AND POS=:nth\n"
|
"WHERE ID=:id AND POS=:nth;\n"
|
||||||
"AND FOR_COL_NAME=:old;\n"
|
|
||||||
"END;\n",
|
"END;\n",
|
||||||
FALSE, trx);
|
FALSE, trx);
|
||||||
|
|
||||||
@@ -4758,7 +4758,9 @@ rename_foreign:
|
|||||||
dict_foreign_t* foreign = *it;
|
dict_foreign_t* foreign = *it;
|
||||||
|
|
||||||
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
||||||
if (strcmp(foreign->referenced_col_names[i], from)) {
|
if (my_strcasecmp(system_charset_info,
|
||||||
|
foreign->referenced_col_names[i],
|
||||||
|
from)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4766,7 +4768,6 @@ rename_foreign:
|
|||||||
|
|
||||||
pars_info_add_str_literal(info, "id", foreign->id);
|
pars_info_add_str_literal(info, "id", foreign->id);
|
||||||
pars_info_add_int4_literal(info, "nth", i);
|
pars_info_add_int4_literal(info, "nth", i);
|
||||||
pars_info_add_str_literal(info, "old", from);
|
|
||||||
pars_info_add_str_literal(info, "new", to);
|
pars_info_add_str_literal(info, "new", to);
|
||||||
|
|
||||||
error = que_eval_sql(
|
error = que_eval_sql(
|
||||||
@@ -4775,8 +4776,7 @@ rename_foreign:
|
|||||||
"BEGIN\n"
|
"BEGIN\n"
|
||||||
"UPDATE SYS_FOREIGN_COLS\n"
|
"UPDATE SYS_FOREIGN_COLS\n"
|
||||||
"SET REF_COL_NAME=:new\n"
|
"SET REF_COL_NAME=:new\n"
|
||||||
"WHERE ID=:id AND POS=:nth\n"
|
"WHERE ID=:id AND POS=:nth;\n"
|
||||||
"AND REF_COL_NAME=:old;\n"
|
|
||||||
"END;\n",
|
"END;\n",
|
||||||
FALSE, trx);
|
FALSE, trx);
|
||||||
|
|
||||||
|
@@ -499,9 +499,7 @@ dict_mem_table_col_rename(
|
|||||||
s += len + 1;
|
s += len + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This could fail if the data dictionaries are out of sync.
|
ut_ad(!my_strcasecmp(system_charset_info, from, s));
|
||||||
Proceed with the renaming anyway. */
|
|
||||||
ut_ad(!strcmp(from, s));
|
|
||||||
|
|
||||||
dict_mem_table_col_rename_low(table, nth_col, to, s);
|
dict_mem_table_col_rename_low(table, nth_col, to, s);
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,7 @@ Copyright (c) 2013, 2018, MariaDB Corporation.
|
|||||||
Copyright (c) 2008, 2009 Google Inc.
|
Copyright (c) 2008, 2009 Google Inc.
|
||||||
Copyright (c) 2009, Percona Inc.
|
Copyright (c) 2009, Percona Inc.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
|
Copyright (c) 2013, 2018, MariaDB Corporation.
|
||||||
|
|
||||||
Portions of this file contain modifications contributed and copyrighted by
|
Portions of this file contain modifications contributed and copyrighted by
|
||||||
Google, Inc. Those modifications are gratefully acknowledged and are described
|
Google, Inc. Those modifications are gratefully acknowledged and are described
|
||||||
@@ -22147,15 +22148,6 @@ int ha_innobase::multi_range_read_explain_info(uint mrr_mode, char *str, size_t
|
|||||||
return ds_mrr.dsmrr_explain_info(mrr_mode, str, size);
|
return ds_mrr.dsmrr_explain_info(mrr_mode, str, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
A helper function used only in index_cond_func_innodb
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool ha_innobase::is_thd_killed()
|
|
||||||
{
|
|
||||||
return thd_kill_level(user_thd);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Issue a warning that the row is too big. */
|
Issue a warning that the row is too big. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
|
@@ -389,10 +389,6 @@ public:
|
|||||||
* @return idx_cond if pushed; NULL if not pushed
|
* @return idx_cond if pushed; NULL if not pushed
|
||||||
*/
|
*/
|
||||||
class Item* idx_cond_push(uint keyno, class Item* idx_cond);
|
class Item* idx_cond_push(uint keyno, class Item* idx_cond);
|
||||||
|
|
||||||
/* An helper function for index_cond_func_innodb: */
|
|
||||||
bool is_thd_killed();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** The multi range read session object */
|
/** The multi range read session object */
|
||||||
DsMrr_impl ds_mrr;
|
DsMrr_impl ds_mrr;
|
||||||
|
@@ -4635,7 +4635,6 @@ innobase_rename_column_try(
|
|||||||
|
|
||||||
pars_info_add_ull_literal(info, "tableid", user_table->id);
|
pars_info_add_ull_literal(info, "tableid", user_table->id);
|
||||||
pars_info_add_int4_literal(info, "nth", nth_col);
|
pars_info_add_int4_literal(info, "nth", nth_col);
|
||||||
pars_info_add_str_literal(info, "old", from);
|
|
||||||
pars_info_add_str_literal(info, "new", to);
|
pars_info_add_str_literal(info, "new", to);
|
||||||
|
|
||||||
trx->op_info = "renaming column in SYS_COLUMNS";
|
trx->op_info = "renaming column in SYS_COLUMNS";
|
||||||
@@ -4645,7 +4644,7 @@ innobase_rename_column_try(
|
|||||||
"PROCEDURE RENAME_SYS_COLUMNS_PROC () IS\n"
|
"PROCEDURE RENAME_SYS_COLUMNS_PROC () IS\n"
|
||||||
"BEGIN\n"
|
"BEGIN\n"
|
||||||
"UPDATE SYS_COLUMNS SET NAME=:new\n"
|
"UPDATE SYS_COLUMNS SET NAME=:new\n"
|
||||||
"WHERE TABLE_ID=:tableid AND NAME=:old\n"
|
"WHERE TABLE_ID=:tableid\n"
|
||||||
"AND POS=:nth;\n"
|
"AND POS=:nth;\n"
|
||||||
"END;\n",
|
"END;\n",
|
||||||
FALSE, trx);
|
FALSE, trx);
|
||||||
@@ -4669,8 +4668,10 @@ err_exit:
|
|||||||
index = dict_table_get_next_index(index)) {
|
index = dict_table_get_next_index(index)) {
|
||||||
|
|
||||||
for (ulint i = 0; i < dict_index_get_n_fields(index); i++) {
|
for (ulint i = 0; i < dict_index_get_n_fields(index); i++) {
|
||||||
if (strcmp(dict_index_get_nth_field(index, i)->name,
|
if (my_strcasecmp(
|
||||||
from)) {
|
system_charset_info,
|
||||||
|
dict_index_get_nth_field(index, i)->name,
|
||||||
|
from)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4678,7 +4679,6 @@ err_exit:
|
|||||||
|
|
||||||
pars_info_add_ull_literal(info, "indexid", index->id);
|
pars_info_add_ull_literal(info, "indexid", index->id);
|
||||||
pars_info_add_int4_literal(info, "nth", i);
|
pars_info_add_int4_literal(info, "nth", i);
|
||||||
pars_info_add_str_literal(info, "old", from);
|
|
||||||
pars_info_add_str_literal(info, "new", to);
|
pars_info_add_str_literal(info, "new", to);
|
||||||
|
|
||||||
error = que_eval_sql(
|
error = que_eval_sql(
|
||||||
@@ -4687,14 +4687,14 @@ err_exit:
|
|||||||
"BEGIN\n"
|
"BEGIN\n"
|
||||||
|
|
||||||
"UPDATE SYS_FIELDS SET COL_NAME=:new\n"
|
"UPDATE SYS_FIELDS SET COL_NAME=:new\n"
|
||||||
"WHERE INDEX_ID=:indexid AND COL_NAME=:old\n"
|
"WHERE INDEX_ID=:indexid\n"
|
||||||
"AND POS=:nth;\n"
|
"AND POS=:nth;\n"
|
||||||
|
|
||||||
/* Try again, in case there is a prefix_len
|
/* Try again, in case there is a prefix_len
|
||||||
encoded in SYS_FIELDS.POS */
|
encoded in SYS_FIELDS.POS */
|
||||||
|
|
||||||
"UPDATE SYS_FIELDS SET COL_NAME=:new\n"
|
"UPDATE SYS_FIELDS SET COL_NAME=:new\n"
|
||||||
"WHERE INDEX_ID=:indexid AND COL_NAME=:old\n"
|
"WHERE INDEX_ID=:indexid\n"
|
||||||
"AND POS>=65536*:nth AND POS<65536*(:nth+1);\n"
|
"AND POS>=65536*:nth AND POS<65536*(:nth+1);\n"
|
||||||
|
|
||||||
"END;\n",
|
"END;\n",
|
||||||
@@ -4720,7 +4720,9 @@ rename_foreign:
|
|||||||
foreign_modified = false;
|
foreign_modified = false;
|
||||||
|
|
||||||
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
||||||
if (strcmp(foreign->foreign_col_names[i], from)) {
|
if (my_strcasecmp(system_charset_info,
|
||||||
|
foreign->foreign_col_names[i],
|
||||||
|
from)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4728,7 +4730,6 @@ rename_foreign:
|
|||||||
|
|
||||||
pars_info_add_str_literal(info, "id", foreign->id);
|
pars_info_add_str_literal(info, "id", foreign->id);
|
||||||
pars_info_add_int4_literal(info, "nth", i);
|
pars_info_add_int4_literal(info, "nth", i);
|
||||||
pars_info_add_str_literal(info, "old", from);
|
|
||||||
pars_info_add_str_literal(info, "new", to);
|
pars_info_add_str_literal(info, "new", to);
|
||||||
|
|
||||||
error = que_eval_sql(
|
error = que_eval_sql(
|
||||||
@@ -4737,8 +4738,7 @@ rename_foreign:
|
|||||||
"BEGIN\n"
|
"BEGIN\n"
|
||||||
"UPDATE SYS_FOREIGN_COLS\n"
|
"UPDATE SYS_FOREIGN_COLS\n"
|
||||||
"SET FOR_COL_NAME=:new\n"
|
"SET FOR_COL_NAME=:new\n"
|
||||||
"WHERE ID=:id AND POS=:nth\n"
|
"WHERE ID=:id AND POS=:nth;\n"
|
||||||
"AND FOR_COL_NAME=:old;\n"
|
|
||||||
"END;\n",
|
"END;\n",
|
||||||
FALSE, trx);
|
FALSE, trx);
|
||||||
|
|
||||||
@@ -4762,7 +4762,9 @@ rename_foreign:
|
|||||||
dict_foreign_t* foreign = *it;
|
dict_foreign_t* foreign = *it;
|
||||||
|
|
||||||
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
||||||
if (strcmp(foreign->referenced_col_names[i], from)) {
|
if (my_strcasecmp(system_charset_info,
|
||||||
|
foreign->referenced_col_names[i],
|
||||||
|
from)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4770,7 +4772,6 @@ rename_foreign:
|
|||||||
|
|
||||||
pars_info_add_str_literal(info, "id", foreign->id);
|
pars_info_add_str_literal(info, "id", foreign->id);
|
||||||
pars_info_add_int4_literal(info, "nth", i);
|
pars_info_add_int4_literal(info, "nth", i);
|
||||||
pars_info_add_str_literal(info, "old", from);
|
|
||||||
pars_info_add_str_literal(info, "new", to);
|
pars_info_add_str_literal(info, "new", to);
|
||||||
|
|
||||||
error = que_eval_sql(
|
error = que_eval_sql(
|
||||||
@@ -4779,8 +4780,7 @@ rename_foreign:
|
|||||||
"BEGIN\n"
|
"BEGIN\n"
|
||||||
"UPDATE SYS_FOREIGN_COLS\n"
|
"UPDATE SYS_FOREIGN_COLS\n"
|
||||||
"SET REF_COL_NAME=:new\n"
|
"SET REF_COL_NAME=:new\n"
|
||||||
"WHERE ID=:id AND POS=:nth\n"
|
"WHERE ID=:id AND POS=:nth;\n"
|
||||||
"AND REF_COL_NAME=:old;\n"
|
|
||||||
"END;\n",
|
"END;\n",
|
||||||
FALSE, trx);
|
FALSE, trx);
|
||||||
|
|
||||||
|
@@ -461,7 +461,6 @@ ulong my_strntoul_8bit(CHARSET_INFO *cs,
|
|||||||
register uint cutlim;
|
register uint cutlim;
|
||||||
register uint32 i;
|
register uint32 i;
|
||||||
register const char *s;
|
register const char *s;
|
||||||
register uchar c;
|
|
||||||
const char *save, *e;
|
const char *save, *e;
|
||||||
int overflow;
|
int overflow;
|
||||||
|
|
||||||
@@ -496,8 +495,9 @@ ulong my_strntoul_8bit(CHARSET_INFO *cs,
|
|||||||
overflow = 0;
|
overflow = 0;
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
for (c = *s; s != e; c = *++s)
|
for ( ; s != e; ++s)
|
||||||
{
|
{
|
||||||
|
register uchar c= *s;
|
||||||
if (c>='0' && c<='9')
|
if (c>='0' && c<='9')
|
||||||
c -= '0';
|
c -= '0';
|
||||||
else if (c>='A' && c<='Z')
|
else if (c>='A' && c<='Z')
|
||||||
|
Reference in New Issue
Block a user