1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

Merge branch '11.0' into 11.1

This commit is contained in:
Sergei Golubchik
2023-06-05 20:13:06 +02:00
1034 changed files with 41396 additions and 18285 deletions

View File

@ -0,0 +1,22 @@
#
# BUG#6236 - ALTER TABLE MODIFY should set implicit NOT NULL on PK columns
#
create table t1 ( a varchar(10) not null primary key ) engine=myisam;
create table t2 ( a varchar(10) not null primary key ) engine=merge union=(t1);
flush tables;
alter table t1 modify a varchar(10);
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` varchar(10) NOT NULL,
PRIMARY KEY (`a`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci UNION=(`t1`)
flush tables;
alter table t1 modify a varchar(10) not null;
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` varchar(10) NOT NULL,
PRIMARY KEY (`a`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci UNION=(`t1`)
drop table if exists t1, t2;

View File

@ -0,0 +1,12 @@
--echo #
--echo # BUG#6236 - ALTER TABLE MODIFY should set implicit NOT NULL on PK columns
--echo #
create table t1 ( a varchar(10) not null primary key ) engine=myisam;
create table t2 ( a varchar(10) not null primary key ) engine=merge union=(t1);
flush tables;
alter table t1 modify a varchar(10);
show create table t2;
flush tables;
alter table t1 modify a varchar(10) not null;
show create table t2;
drop table if exists t1, t2;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
set @default_storage_engine= @@global.default_storage_engine;
set global default_storage_engine=myisam;
set session default_storage_engine=myisam;
call mtr.add_suppression("Index for table .*crashed' is corrupt; try to repair it");
drop table if exists crashed,t2,t3,t4;
SET @orig_debug=@@global.debug_dbug;
CREATE TABLE crashed (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TABLE t3 (c1 INT);
CREATE TABLE t4 (c1 INT) ENGINE=MRG_MYISAM UNION=(crashed,t2,t3) INSERT_METHOD=LAST;
INSERT INTO crashed VALUES (10);
INSERT INTO t2 VALUES (20);
INSERT INTO t3 VALUES (30);
LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, crashed WRITE;
SET GLOBAL debug_dbug="+d,myisam_pretend_crashed_table_on_open";
CREATE TRIGGER t1_ai AFTER INSERT ON crashed FOR EACH ROW INSERT INTO t2 VALUES(29);
SET GLOBAL debug_dbug=@orig_debug;
INSERT INTO t4 VALUES (39);
ERROR HY000: Table 'crashed' was not locked with LOCK TABLES
INSERT INTO crashed VALUES (11);
ERROR HY000: Table 'crashed' was not locked with LOCK TABLES
INSERT INTO t2 VALUES (21);
INSERT INTO t3 VALUES (31);
UNLOCK TABLES;
DROP TRIGGER t1_ai;
DROP TABLE t4,crashed,t2,t3;
set global default_storage_engine=@default_storage_engine;

View File

@ -0,0 +1,46 @@
#
# Test failures with MERGE
#
--source include/have_debug.inc
set @default_storage_engine= @@global.default_storage_engine;
set global default_storage_engine=myisam;
set session default_storage_engine=myisam;
call mtr.add_suppression("Index for table .*crashed' is corrupt; try to repair it");
--disable_warnings
drop table if exists crashed,t2,t3,t4;
--enable_warnings
SET @orig_debug=@@global.debug_dbug;
#
# Check that MariaDB handles reopen that fails without crashing
#
CREATE TABLE crashed (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TABLE t3 (c1 INT);
CREATE TABLE t4 (c1 INT) ENGINE=MRG_MYISAM UNION=(crashed,t2,t3) INSERT_METHOD=LAST;
INSERT INTO crashed VALUES (10);
INSERT INTO t2 VALUES (20);
INSERT INTO t3 VALUES (30);
LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, crashed WRITE;
SET GLOBAL debug_dbug="+d,myisam_pretend_crashed_table_on_open";
--disable_warnings
CREATE TRIGGER t1_ai AFTER INSERT ON crashed FOR EACH ROW INSERT INTO t2 VALUES(29);
--enable_warnings
SET GLOBAL debug_dbug=@orig_debug;
--error ER_TABLE_NOT_LOCKED
INSERT INTO t4 VALUES (39);
--error ER_TABLE_NOT_LOCKED
INSERT INTO crashed VALUES (11);
INSERT INTO t2 VALUES (21);
INSERT INTO t3 VALUES (31);
UNLOCK TABLES;
DROP TRIGGER t1_ai;
DROP TABLE t4,crashed,t2,t3;
set global default_storage_engine=@default_storage_engine;

View File

@ -0,0 +1,70 @@
DROP TABLE IF EXISTS t1, t2, t3, t4, t5;
CREATE TABLE t1 (c1 varchar(100)) ENGINE=MyISAM;
CREATE TABLE t2 (c1 varchar(100)) ENGINE=MyISAM;
CREATE TABLE t3 (c1 varchar(100)) ENGINE=InnoDB;
INSERT INTO t1 VALUES ('Ann'), ('Alice');
INSERT INTO t2 VALUES ('Bob'), ('Brian');
INSERT INTO t3 VALUES ('Chris'), ('Charlie');
CREATE TABLE t4 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TABLE t5 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t3)
INSERT_METHOD=LAST;
SELECT * FROM t5;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
SELECT * FROM t4;
c1
Ann
Alice
Bob
Brian
ALTER TABLE t2 ENGINE=InnoDB;
SELECT * FROM t4;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
DELETE FROM t2 LIMIT 1;
SELECT * FROM t4;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
INSERT INTO t4 VALUES ('Beware');
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
SELECT * FROM t4;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
SELECT * FROM t2;
c1
Brian
SELECT * FROM t1;
c1
Ann
Alice
DROP TABLE t1, t2, t3, t4, t5;
create table t1 (c1 varchar(100));
create table t2 (c1 varchar(100));
create view t3 as select * from t1;
insert into t1 values ('ann'), ('alice');
insert into t2 values ('bob'), ('brian');
create temporary table t4 (c1 varchar(100)) engine=MERGE union=(t2, t1);
create temporary table t5 (c1 varchar(100)) engine=MERGE union=(t3, t1);
select * from t5;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
lock tables t1 read, t2 read, t3 read, t4 read;
select * from t5;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
select * from t4;
c1
bob
brian
ann
alice
unlock tables;
drop table t2;
create view t2 as select * from t1;
select * from t4;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
lock tables t1 read, t2 read, t3 read;
select * from t4;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
select * from t4;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
select * from t4;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
unlock tables;
drop view t2, t3;
drop table t1;

View File

@ -0,0 +1,72 @@
# t/merge_innodb.test
#
# Tests with MERGE tables over InnoDB tables
#
--source include/have_innodb.inc
--disable_warnings
DROP TABLE IF EXISTS t1, t2, t3, t4, t5;
--enable_warnings
#
# Bug#30491 - MERGE doesn't report error when one table is Innodb
#
CREATE TABLE t1 (c1 varchar(100)) ENGINE=MyISAM;
CREATE TABLE t2 (c1 varchar(100)) ENGINE=MyISAM;
CREATE TABLE t3 (c1 varchar(100)) ENGINE=InnoDB;
INSERT INTO t1 VALUES ('Ann'), ('Alice');
INSERT INTO t2 VALUES ('Bob'), ('Brian');
INSERT INTO t3 VALUES ('Chris'), ('Charlie');
CREATE TABLE t4 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TABLE t5 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t3)
INSERT_METHOD=LAST;
--error ER_WRONG_MRG_TABLE
SELECT * FROM t5;
SELECT * FROM t4;
ALTER TABLE t2 ENGINE=InnoDB;
--error ER_WRONG_MRG_TABLE
SELECT * FROM t4;
DELETE FROM t2 LIMIT 1;
--error ER_WRONG_MRG_TABLE
SELECT * FROM t4;
--error ER_WRONG_MRG_TABLE
INSERT INTO t4 VALUES ('Beware');
--error ER_WRONG_MRG_TABLE
SELECT * FROM t4;
SELECT * FROM t2;
SELECT * FROM t1;
DROP TABLE t1, t2, t3, t4, t5;
#
# Bug#20691429 temporary merge over view under lock tables
#
create table t1 (c1 varchar(100));
create table t2 (c1 varchar(100));
create view t3 as select * from t1;
insert into t1 values ('ann'), ('alice');
insert into t2 values ('bob'), ('brian');
create temporary table t4 (c1 varchar(100)) engine=MERGE union=(t2, t1);
create temporary table t5 (c1 varchar(100)) engine=MERGE union=(t3, t1);
--error ER_WRONG_MRG_TABLE
select * from t5;
lock tables t1 read, t2 read, t3 read, t4 read;
--error ER_WRONG_MRG_TABLE
select * from t5;
select * from t4;
unlock tables;
drop table t2;
create view t2 as select * from t1;
--error ER_WRONG_MRG_TABLE
select * from t4;
lock tables t1 read, t2 read, t3 read;
--error ER_WRONG_MRG_TABLE
select * from t4;
--error ER_WRONG_MRG_TABLE
select * from t4;
--error ER_WRONG_MRG_TABLE
select * from t4;
unlock tables;
drop view t2, t3;
drop table t1;

View File

@ -0,0 +1 @@
--myisam-use-mmap

View File

@ -0,0 +1,190 @@
SET GLOBAL default_storage_engine = MyISAM;
SET SESSION default_storage_engine = MyISAM;
DROP TABLE IF EXISTS t1, t2, m1, m2;
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
c1
1
2
3
4
1
2
3
4
SELECT * FROM t2;
c1
2
3
4
1
2
3
4
DROP TABLE m2, m1, t2, t1;
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
c1
1
2
3
4
1
2
3
4
DROP TABLE m2, m1, t2, t1;
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
c1
1
2
3
4
1
2
3
4
DROP TABLE m2, m1, t2, t1;
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
c1
1
2
3
4
1
2
3
4
DROP TABLE m2, m1, t2, t1;
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
LOCK TABLE m1 WRITE, m2 WRITE;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
c1
1
2
3
4
1
2
3
4
SELECT * FROM t2;
c1
2
3
4
1
2
3
4
UNLOCK TABLES;
DROP TABLE m2, m1, t2, t1;
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
LOCK TABLE m1 WRITE, m2 WRITE;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
c1
1
2
3
4
1
2
3
4
UNLOCK TABLES;
DROP TABLE m2, m1, t2, t1;
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
LOCK TABLE m1 WRITE, m2 WRITE;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
c1
1
2
3
4
1
2
3
4
UNLOCK TABLES;
DROP TABLE m2, m1, t2, t1;
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
LOCK TABLE m1 WRITE, m2 WRITE;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
c1
1
2
3
4
1
2
3
4
UNLOCK TABLES;
DROP TABLE m2, m1, t2, t1;
End of 6.0 tests

View File

@ -0,0 +1,153 @@
#
# Test of MERGE TABLES with MyISAM memory mapping enabled (--myisam-use-mmap)
#
# MERGE tables require MyISAM tables
--let $default=`SELECT @@global.default_storage_engine`
SET GLOBAL default_storage_engine = MyISAM;
SET SESSION default_storage_engine = MyISAM;
# Clean up resources used in this test case.
--disable_warnings
DROP TABLE IF EXISTS t1, t2, m1, m2;
--enable_warnings
####################
## No locked tables.
####################
#
# INSERT-SELECT with no TEMPORARY table.
#
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
SELECT * FROM t2;
DROP TABLE m2, m1, t2, t1;
#
# INSERT-SELECT with TEMPORARY select table.
#
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
DROP TABLE m2, m1, t2, t1;
#
# INSERT-SELECT with TEMPORARY insert table.
#
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
DROP TABLE m2, m1, t2, t1;
#
# INSERT-SELECT with TEMPORARY both tables.
#
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
DROP TABLE m2, m1, t2, t1;
####################
## With LOCK TABLES.
####################
#
# INSERT-SELECT with no TEMPORARY table.
#
--disable_service_connection
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
LOCK TABLE m1 WRITE, m2 WRITE;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
SELECT * FROM t2;
UNLOCK TABLES;
DROP TABLE m2, m1, t2, t1;
#
# INSERT-SELECT with TEMPORARY select table.
#
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
LOCK TABLE m1 WRITE, m2 WRITE;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
UNLOCK TABLES;
DROP TABLE m2, m1, t2, t1;
#
# INSERT-SELECT with TEMPORARY insert table.
#
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
LOCK TABLE m1 WRITE, m2 WRITE;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
UNLOCK TABLES;
DROP TABLE m2, m1, t2, t1;
#
# INSERT-SELECT with TEMPORARY both tables.
#
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
INSERT_METHOD=LAST;
LOCK TABLE m1 WRITE, m2 WRITE;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2), (3), (4);
INSERT INTO m2 SELECT * FROM m1;
SELECT * FROM m2;
UNLOCK TABLES;
DROP TABLE m2, m1, t2, t1;
--enable_service_connection
--echo End of 6.0 tests
--disable_result_log
--disable_query_log
eval SET GLOBAL default_storage_engine = $default;
--enable_result_log
--enable_query_log