From 7f02528fe7d216fa2df832e7f999a1ecb99b555c Mon Sep 17 00:00:00 2001
From: unknown <kevin.lewis@oracle.com>
Date: Tue, 2 Nov 2010 10:16:55 -0500
Subject: [PATCH] Bug#57904 - Only one
 INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS was displayed per table from
 Innodb

---
 .../suite/innodb/r/innodb_bug57904.result     | 41 +++++++++++++++++++
 .../suite/innodb/t/innodb_bug57904.test       | 27 ++++++++++++
 storage/innobase/handler/ha_innodb.cc         |  2 +-
 3 files changed, 69 insertions(+), 1 deletion(-)
 create mode 100644 mysql-test/suite/innodb/r/innodb_bug57904.result
 create mode 100644 mysql-test/suite/innodb/t/innodb_bug57904.test

diff --git a/mysql-test/suite/innodb/r/innodb_bug57904.result b/mysql-test/suite/innodb/r/innodb_bug57904.result
new file mode 100644
index 0000000000..c3e980a6cf
--- /dev/null
+++ b/mysql-test/suite/innodb/r/innodb_bug57904.result
@@ -0,0 +1,41 @@
+CREATE TABLE product (category INT NOT NULL, id INT NOT NULL, 
+price DECIMAL, PRIMARY KEY(category, id)) ENGINE=INNODB;
+CREATE TABLE customer (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
+CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT, 
+product_category INT NOT NULL, 
+product_id INT NOT NULL, 
+customer_id INT NOT NULL, 
+PRIMARY KEY(no), 
+INDEX (product_category, product_id), 
+FOREIGN KEY (product_category, product_id) 
+REFERENCES product(category, id) ON UPDATE CASCADE ON DELETE RESTRICT, 
+INDEX (customer_id), 
+FOREIGN KEY (customer_id) 
+REFERENCES customer(id)
+) ENGINE=INNODB;
+SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;
+CONSTRAINT_CATALOG	def
+CONSTRAINT_SCHEMA	test
+CONSTRAINT_NAME	product_order_ibfk_1
+UNIQUE_CONSTRAINT_CATALOG	def
+UNIQUE_CONSTRAINT_SCHEMA	test
+UNIQUE_CONSTRAINT_NAME	PRIMARY
+MATCH_OPTION	NONE
+UPDATE_RULE	CASCADE
+DELETE_RULE	RESTRICT
+TABLE_NAME	product_order
+REFERENCED_TABLE_NAME	pro
+CONSTRAINT_CATALOG	def
+CONSTRAINT_SCHEMA	test
+CONSTRAINT_NAME	product_order_ibfk_2
+UNIQUE_CONSTRAINT_CATALOG	def
+UNIQUE_CONSTRAINT_SCHEMA	test
+UNIQUE_CONSTRAINT_NAME	PRIMARY
+MATCH_OPTION	NONE
+UPDATE_RULE	RESTRICT
+DELETE_RULE	RESTRICT
+TABLE_NAME	product_order
+REFERENCED_TABLE_NAME	cus
+DROP TABLE product_order;
+DROP TABLE product;
+DROP TABLE customer;
diff --git a/mysql-test/suite/innodb/t/innodb_bug57904.test b/mysql-test/suite/innodb/t/innodb_bug57904.test
new file mode 100644
index 0000000000..d283ad11c3
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb_bug57904.test
@@ -0,0 +1,27 @@
+#
+# Bug #57904 Missing constraint from information schema REFERENTIAL_CONSTRAINTS table
+#
+-- source include/have_innodb.inc
+
+CREATE TABLE product (category INT NOT NULL, id INT NOT NULL, 
+	price DECIMAL, PRIMARY KEY(category, id)) ENGINE=INNODB;
+CREATE TABLE customer (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
+CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT, 
+	product_category INT NOT NULL, 
+	product_id INT NOT NULL, 
+	customer_id INT NOT NULL, 
+	PRIMARY KEY(no), 
+	INDEX (product_category, product_id), 
+	FOREIGN KEY (product_category, product_id) 
+		REFERENCES product(category, id) ON UPDATE CASCADE ON DELETE RESTRICT, 
+	INDEX (customer_id), 
+	FOREIGN KEY (customer_id) 
+		REFERENCES customer(id)
+	) ENGINE=INNODB;
+
+query_vertical SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;
+
+DROP TABLE product_order;
+DROP TABLE product;
+DROP TABLE customer;
+
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 7f2e8a44a0..8386512074 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -8459,7 +8459,7 @@ ha_innobase::get_foreign_key_list(
 
 	for (foreign = UT_LIST_GET_FIRST(prebuilt->table->foreign_list);
 	     foreign != NULL;
-	     foreign = UT_LIST_GET_NEXT(referenced_list, foreign)) {
+	     foreign = UT_LIST_GET_NEXT(foreign_list, foreign)) {
 		pf_key_info = get_foreign_key_info(thd, foreign);
 		if (pf_key_info) {
 			f_key_list->push_back(pf_key_info);
-- 
2.30.9