Commit 79cc1546 authored by unknown's avatar unknown
Browse files

WL#2257 REFERENTIAL_CONSTRAINTS view

added I_S.REFARENTIAL_CONSTRAINTS table


mysql-test/r/information_schema.result:
  WL#2257 REFERENTIAL_CONSTRAINTS view
   result fix
mysql-test/r/information_schema_db.result:
  WL#2257 REFERENTIAL_CONSTRAINTS view
   result fix
mysql-test/r/information_schema_inno.result:
  WL#2257 REFERENTIAL_CONSTRAINTS view
   test case
mysql-test/t/information_schema_inno.test:
  WL#2257 REFERENTIAL_CONSTRAINTS view
   test case
sql/ha_innodb.cc:
  WL#2257 REFERENTIAL_CONSTRAINTS view
parent fb2c04a1
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ KEY_COLUMN_USAGE
PARTITIONS
PLUGINS
PROCESSLIST
REFERENTIAL_CONSTRAINTS
ROUTINES
SCHEMATA
SCHEMA_PRIVILEGES
@@ -745,7 +746,7 @@ CREATE TABLE t_crashme ( f1 BIGINT);
CREATE VIEW a1 (t_CRASHME) AS SELECT f1 FROM t_crashme GROUP BY f1;
CREATE VIEW a2 AS SELECT t_CRASHME FROM a1;
count(*)
112
113
drop view a2, a1;
drop table t_crashme;
select table_schema,table_name, column_name from
@@ -832,6 +833,7 @@ COLUMN_PRIVILEGES TABLE_NAME select
FILES	TABLE_NAME	select
KEY_COLUMN_USAGE	TABLE_NAME	select
PARTITIONS	TABLE_NAME	select
REFERENTIAL_CONSTRAINTS	TABLE_NAME	select
STATISTICS	TABLE_NAME	select
TABLES	TABLE_NAME	select
TABLE_CONSTRAINTS	TABLE_NAME	select
@@ -843,7 +845,7 @@ flush privileges;
SELECT table_schema, count(*) FROM information_schema.TABLES GROUP BY TABLE_SCHEMA;
table_schema	count(*)
cluster	1
information_schema	22
information_schema	23
mysql	21
create table t1 (i int, j int);
create trigger trg1 before insert on t1 for each row
+1 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ KEY_COLUMN_USAGE
PARTITIONS
PLUGINS
PROCESSLIST
REFERENTIAL_CONSTRAINTS
ROUTINES
SCHEMATA
SCHEMA_PRIVILEGES
+31 −0
Original line number Diff line number Diff line
@@ -25,3 +25,34 @@ NULL test PRIMARY NULL test t3 id 1 NULL NULL NULL NULL
NULL	test	t3_ibfk_1	NULL	test	t3	id	1	1	test	t2	t1_id
NULL	test	t3_ibfk_1	NULL	test	t3	t2_id	2	2	test	t2	id
drop table t3, t2, t1;
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 (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, INDEX (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
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;
CONSTRAINT_SCHEMA	TABLE_NAME	CONSTRAINT_TYPE	CONSTRAINT_NAME	UNIQUE_CONSTRAINT_SCHEMA	UNIQUE_CONSTRAINT_NAME	MATCH_OPTION	UPDATE_RULE	DELETE_RULE
test	t2	FOREIGN KEY	A1	test	t1	NONE	CASCADE	NO ACTION
test	t3	FOREIGN KEY	A2	test	t2	NONE	SET NULL	RESTRICT
test	t4	FOREIGN KEY	A3	test	t3	NONE	NO ACTION	SET NULL
test	t5	FOREIGN KEY	A4	test	t4	NONE	RESTRICT	CASCADE
drop tables t5, t4, t3, t2, t1;
+32 −0
Original line number Diff line number Diff line
@@ -21,3 +21,35 @@ 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 (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, INDEX (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
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;
+49 −28
Original line number Diff line number Diff line
@@ -5827,35 +5827,56 @@ ha_innobase::get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list)
			  break;
	  }

	  ulong length= 0;
	  if (foreign->type == DICT_FOREIGN_ON_DELETE_CASCADE) {
		  length=17;
		  tmp_buff= "ON DELETE CASCADE";
          ulong length;
          if (foreign->type & DICT_FOREIGN_ON_DELETE_CASCADE)
          {
            length=7;
            tmp_buff= "CASCADE";
          }	
	  else if (foreign->type == DICT_FOREIGN_ON_DELETE_SET_NULL) {
		  length=18;
		  tmp_buff= "ON DELETE SET NULL";
          else if (foreign->type & DICT_FOREIGN_ON_DELETE_SET_NULL)
          {
            length=8;
            tmp_buff= "SET NULL";
          }
	  else if (foreign->type == DICT_FOREIGN_ON_DELETE_NO_ACTION) {
		  length=19;
		  tmp_buff= "ON DELETE NO ACTION";
          else if (foreign->type & DICT_FOREIGN_ON_DELETE_NO_ACTION)
          {
            length=9;
            tmp_buff= "NO ACTION";
          }
	  else if (foreign->type == DICT_FOREIGN_ON_UPDATE_CASCADE) {
		  length=17;
		  tmp_buff= "ON UPDATE CASCADE";
          else
          {
            length=8;
            tmp_buff= "RESTRICT";
          }
	  else if (foreign->type == DICT_FOREIGN_ON_UPDATE_SET_NULL) {
		  length=18;
		  tmp_buff= "ON UPDATE SET NULL";
          f_key_info.delete_method= make_lex_string(thd, f_key_info.delete_method,
                                                    tmp_buff, length, 1);
 
 
          if (foreign->type & DICT_FOREIGN_ON_UPDATE_CASCADE)
          {
            length=7;
            tmp_buff= "CASCADE";
          }
	  else if (foreign->type == DICT_FOREIGN_ON_UPDATE_NO_ACTION) {
		  length=19;
		  tmp_buff= "ON UPDATE NO ACTION";
          else if (foreign->type & DICT_FOREIGN_ON_UPDATE_SET_NULL)
          {
            length=8;
            tmp_buff= "SET NULL";
          }
          else if (foreign->type & DICT_FOREIGN_ON_UPDATE_NO_ACTION)
          {
            length=9;
            tmp_buff= "NO ACTION";
          }
	  f_key_info.constraint_method= make_lex_string(thd,
		  f_key_info.constraint_method,
          else
          {
            length=8;
            tmp_buff= "RESTRICT";
          }
          f_key_info.update_method= make_lex_string(thd, f_key_info.update_method,
                                                    tmp_buff, length, 1);



	  FOREIGN_KEY_INFO *pf_key_info= ((FOREIGN_KEY_INFO *)
		  thd->memdup((gptr) &f_key_info,
			  sizeof(FOREIGN_KEY_INFO)));
Loading