mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
addition of "REFERENCED_TABLE_SCHEMA",
"REFERENCED_TABLE_NAME", "REFERENCED_COLUMN_NAME" fields into KEY_COLUMN_USAGE table
This commit is contained in:
@ -412,11 +412,11 @@ NULL test key_1 test t1 UNIQUE
|
|||||||
NULL test key_2 test t1 UNIQUE
|
NULL test key_2 test t1 UNIQUE
|
||||||
select * from information_schema.KEY_COLUMN_USAGE where
|
select * from information_schema.KEY_COLUMN_USAGE where
|
||||||
TABLE_SCHEMA= "test";
|
TABLE_SCHEMA= "test";
|
||||||
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
|
||||||
NULL test PRIMARY NULL test t1 a 1 NULL
|
NULL test PRIMARY NULL test t1 a 1 NULL NULL NULL NULL
|
||||||
NULL test constraint_1 NULL test t1 a 1 NULL
|
NULL test constraint_1 NULL test t1 a 1 NULL NULL NULL NULL
|
||||||
NULL test key_1 NULL test t1 a 1 NULL
|
NULL test key_1 NULL test t1 a 1 NULL NULL NULL NULL
|
||||||
NULL test key_2 NULL test t1 a 1 NULL
|
NULL test key_2 NULL test t1 a 1 NULL NULL NULL NULL
|
||||||
select table_name from information_schema.TABLES where table_schema like "test%";
|
select table_name from information_schema.TABLES where table_schema like "test%";
|
||||||
table_name
|
table_name
|
||||||
t1
|
t1
|
||||||
@ -560,7 +560,7 @@ TABLE_NAME= "vo";
|
|||||||
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
|
||||||
select * from information_schema.KEY_COLUMN_USAGE where
|
select * from information_schema.KEY_COLUMN_USAGE where
|
||||||
TABLE_NAME= "vo";
|
TABLE_NAME= "vo";
|
||||||
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
|
||||||
drop view vo;
|
drop view vo;
|
||||||
select TABLE_NAME,TABLE_TYPE,ENGINE
|
select TABLE_NAME,TABLE_TYPE,ENGINE
|
||||||
from information_schema.tables
|
from information_schema.tables
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
DROP TABLE IF EXISTS t1,t2;
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
|
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),
|
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 DELETE CASCADE,
|
||||||
FOREIGN KEY (t1_id) REFERENCES t1(id) ON UPDATE CASCADE) ENGINE=INNODB;
|
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
|
select * from information_schema.TABLE_CONSTRAINTS where
|
||||||
TABLE_SCHEMA= "test";
|
TABLE_SCHEMA= "test";
|
||||||
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
|
||||||
@ -10,11 +12,16 @@ NULL test PRIMARY test t1 PRIMARY KEY
|
|||||||
NULL test PRIMARY test t2 PRIMARY KEY
|
NULL test PRIMARY test t2 PRIMARY KEY
|
||||||
NULL test t2_ibfk_1 test t2 FOREIGN KEY
|
NULL test t2_ibfk_1 test t2 FOREIGN KEY
|
||||||
NULL test t2_ibfk_2 test t2 FOREIGN KEY
|
NULL test t2_ibfk_2 test t2 FOREIGN KEY
|
||||||
|
NULL test PRIMARY test t3 PRIMARY KEY
|
||||||
|
NULL test t3_ibfk_1 test t3 FOREIGN KEY
|
||||||
select * from information_schema.KEY_COLUMN_USAGE where
|
select * from information_schema.KEY_COLUMN_USAGE where
|
||||||
TABLE_SCHEMA= "test";
|
TABLE_SCHEMA= "test";
|
||||||
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
|
||||||
NULL test PRIMARY NULL test t1 id 1 NULL
|
NULL test PRIMARY NULL test t1 id 1 NULL NULL NULL NULL
|
||||||
NULL test PRIMARY NULL test t2 id 1 NULL
|
NULL test PRIMARY NULL test t2 id 1 NULL NULL NULL NULL
|
||||||
NULL test t2_ibfk_1 NULL test t2 t1_id 1 1
|
NULL test t2_ibfk_1 NULL test t2 t1_id 1 1 test t1 id
|
||||||
NULL test t2_ibfk_2 NULL test t2 t1_id 1 1
|
NULL test t2_ibfk_2 NULL test t2 t1_id 1 1 test t1 id
|
||||||
drop table t2, t1;
|
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;
|
||||||
|
@ -8,12 +8,16 @@ DROP TABLE IF EXISTS t1,t2;
|
|||||||
#
|
#
|
||||||
|
|
||||||
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
|
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),
|
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 DELETE CASCADE,
|
||||||
FOREIGN KEY (t1_id) REFERENCES t1(id) ON UPDATE CASCADE) ENGINE=INNODB;
|
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
|
select * from information_schema.TABLE_CONSTRAINTS where
|
||||||
TABLE_SCHEMA= "test";
|
TABLE_SCHEMA= "test";
|
||||||
select * from information_schema.KEY_COLUMN_USAGE where
|
select * from information_schema.KEY_COLUMN_USAGE where
|
||||||
TABLE_SCHEMA= "test";
|
TABLE_SCHEMA= "test";
|
||||||
|
|
||||||
drop table t2, t1;
|
drop table t3, t2, t1;
|
||||||
|
@ -3009,12 +3009,13 @@ static int get_schema_key_column_usage_record(THD *thd,
|
|||||||
while ((f_key_info= it++))
|
while ((f_key_info= it++))
|
||||||
{
|
{
|
||||||
LEX_STRING *f_info;
|
LEX_STRING *f_info;
|
||||||
|
LEX_STRING *r_info;
|
||||||
List_iterator_fast<LEX_STRING> it(f_key_info->foreign_fields),
|
List_iterator_fast<LEX_STRING> it(f_key_info->foreign_fields),
|
||||||
it1(f_key_info->referenced_fields);
|
it1(f_key_info->referenced_fields);
|
||||||
uint f_idx= 0;
|
uint f_idx= 0;
|
||||||
while ((f_info= it++))
|
while ((f_info= it++))
|
||||||
{
|
{
|
||||||
it1++; // Ignore r_info
|
r_info= it1++;
|
||||||
f_idx++;
|
f_idx++;
|
||||||
restore_record(table, s->default_values);
|
restore_record(table, s->default_values);
|
||||||
store_key_column_usage(table, base_name, file_name,
|
store_key_column_usage(table, base_name, file_name,
|
||||||
@ -3024,6 +3025,17 @@ static int get_schema_key_column_usage_record(THD *thd,
|
|||||||
(longlong) f_idx);
|
(longlong) f_idx);
|
||||||
table->field[8]->store((longlong) f_idx);
|
table->field[8]->store((longlong) f_idx);
|
||||||
table->field[8]->set_notnull();
|
table->field[8]->set_notnull();
|
||||||
|
table->field[9]->store(f_key_info->referenced_db->str,
|
||||||
|
f_key_info->referenced_db->length,
|
||||||
|
system_charset_info);
|
||||||
|
table->field[9]->set_notnull();
|
||||||
|
table->field[10]->store(f_key_info->referenced_table->str,
|
||||||
|
f_key_info->referenced_table->length,
|
||||||
|
system_charset_info);
|
||||||
|
table->field[10]->set_notnull();
|
||||||
|
table->field[11]->store(r_info->str, r_info->length,
|
||||||
|
system_charset_info);
|
||||||
|
table->field[11]->set_notnull();
|
||||||
if (schema_table_store_record(thd, table))
|
if (schema_table_store_record(thd, table))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
@ -3771,6 +3783,9 @@ ST_FIELD_INFO key_column_usage_fields_info[]=
|
|||||||
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||||
{"ORDINAL_POSITION", 10 ,MYSQL_TYPE_LONG, 0, 0, 0},
|
{"ORDINAL_POSITION", 10 ,MYSQL_TYPE_LONG, 0, 0, 0},
|
||||||
{"POSITION_IN_UNIQUE_CONSTRAINT", 10 ,MYSQL_TYPE_LONG, 0, 1, 0},
|
{"POSITION_IN_UNIQUE_CONSTRAINT", 10 ,MYSQL_TYPE_LONG, 0, 1, 0},
|
||||||
|
{"REFERENCED_TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||||
|
{"REFERENCED_TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||||
|
{"REFERENCED_COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user