summaryrefslogtreecommitdiff
path: root/mysql-test/t/information_schema_inno.test
blob: 657d0effd7e0402ad8b85938b119fc1e4bb57fb0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
-- source include/testdb_only.inc
-- source include/have_innodb.inc
--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3;
--enable_warnings

#
# Test for KEY_COLUMN_USAGE & TABLE_CONSTRAINTS tables
#

CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
CREATE TABLE t2 (id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id, id),
FOREIGN KEY (t1_id) REFERENCES t1(id)  ON DELETE CASCADE,
FOREIGN KEY (t1_id) REFERENCES t1(id)  ON UPDATE CASCADE) ENGINE=INNODB;

CREATE TABLE t3 (id INT PRIMARY KEY, t2_id INT, INDEX par_ind (t2_id),
FOREIGN KEY (id, t2_id) REFERENCES t2(t1_id, id)  ON DELETE CASCADE) ENGINE=INNODB;

select * from information_schema.TABLE_CONSTRAINTS where
TABLE_SCHEMA= "test";
select * from information_schema.KEY_COLUMN_USAGE where
TABLE_SCHEMA= "test";

drop table t3, t2, t1;

#
# Test for REFERENTIAL_CONSTRAINTS table
#
CREATE TABLE t1(a1 INT NOT NULL, a2 INT NOT NULL,
                PRIMARY KEY(a1, a2)) ENGINE=INNODB;
CREATE TABLE t2(b1 INT, b2 INT, INDEX (b1, b2),
                CONSTRAINT A1
                FOREIGN KEY (b1, b2) REFERENCES t1(a1, a2)
                ON UPDATE CASCADE ON DELETE NO ACTION) ENGINE=INNODB;
CREATE TABLE t3(b1 INT, b2 INT, INDEX t3_indx (b1, b2),
		CONSTRAINT A2
		FOREIGN KEY (b1, b2) REFERENCES t2(b1, b2)
		ON UPDATE SET NULL ON DELETE RESTRICT) ENGINE=INNODB;
CREATE TABLE t4(b1 INT, b2 INT, UNIQUE KEY t4_ukey (b1, b2),
                CONSTRAINT A3
                FOREIGN KEY (b1, b2) REFERENCES t3(b1, b2)
                ON UPDATE NO ACTION ON DELETE SET NULL) ENGINE=INNODB;
CREATE TABLE t5(b1 INT, b2 INT, INDEX (b1, b2),
                CONSTRAINT A4
                FOREIGN KEY (b1, b2) REFERENCES t4(b1, b2)
                ON UPDATE RESTRICT ON DELETE CASCADE) ENGINE=INNODB;
		
select a.CONSTRAINT_SCHEMA, b.TABLE_NAME, CONSTRAINT_TYPE,
       b.CONSTRAINT_NAME, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME,
       MATCH_OPTION, UPDATE_RULE, DELETE_RULE, b.REFERENCED_TABLE_NAME
from information_schema.TABLE_CONSTRAINTS a,
     information_schema.REFERENTIAL_CONSTRAINTS b
where a.CONSTRAINT_SCHEMA = 'test' and a.CONSTRAINT_SCHEMA = b.CONSTRAINT_SCHEMA and
a.CONSTRAINT_NAME = b.CONSTRAINT_NAME;
drop tables t5, t4, t3, t2, t1;

#
# Bug#25026  `information_schema.KEY_COLUMN_USAGE`.`REFERENCED_TABLE_NAME` returns garbage
#
create database `db-1`;
use `db-1`;
create table `t-2` (
  id int(10) unsigned not null auto_increment,
  primary key (id)
) engine=innodb;

create table `t-1` (
  id int(10) unsigned not null auto_increment,
  idtype int(10) unsigned not null,
  primary key (id),
  key fk_t1_1 (idtype),
  constraint fk_t1_1 foreign key (idtype) references `t-2` (id)
) engine=innodb;
use test;
select referenced_table_schema, referenced_table_name 
from information_schema.key_column_usage
where constraint_schema = 'db-1';
drop database `db-1`;

#
# Bug#35108 SELECT FROM REFERENTIAL_CONSTRAINTS crashes
#
create table t1(id int primary key) engine = Innodb;
create table t2(pid int, foreign key (pid) references t1(id)) engine = Innodb;
set foreign_key_checks = 0;
drop table t1;
select UNIQUE_CONSTRAINT_NAME
from information_schema.referential_constraints
where constraint_schema = schema();
drop table t2;
set foreign_key_checks = 1;


--echo #
--echo # Bug#55973 Assertion `thd->transaction.stmt.is_empty()'
--echo #           on CREATE TABLE .. SELECT I_S.PART
--echo #

--disable_warnings
DROP TABLE IF EXISTS t1;
DROP VIEW IF EXISTS v1;
--enable_warnings

CREATE VIEW v1 AS SELECT 1;
# This used to case an assert.
CREATE TABLE t1 engine = InnoDB AS
  SELECT * FROM information_schema.partitions
  WHERE table_schema= 'test' AND table_name= 'v1';

DROP TABLE t1;
DROP VIEW v1;