Commit 3c422e60 authored by Jacob Mathew's avatar Jacob Mathew

MDEV-11115 CHECK constraints are not shown in I_S.TABLE_CONSTRAINTS

Added CHECK constraints to I_S.TABLE_CONSTRAINTS.
Fixed a bug regarding virtual column definitions whose name is the field name.
Added test case: check_constraint_show
parent 4ebdef2b
create or replace table t1( c1 int check( c1 > 0 ), c2 int check( c2 > 0 ), c3 int, constraint `range` check( ( c3 >= c1 ) and ( c3 <= c2 ) ), primary key( c1 ) );
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL CHECK (`c1` > 0),
`c2` int(11) DEFAULT NULL CHECK (`c2` > 0),
`c3` int(11) DEFAULT NULL,
PRIMARY KEY (`c1`),
CONSTRAINT `range` CHECK (`c3` >= `c1` and `c3` <= `c2`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
select * from information_schema.table_constraints where table_name = 't1';
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
def test PRIMARY test t1 PRIMARY KEY
def test c1 test t1 CHECK
def test c2 test t1 CHECK
def test range test t1 CHECK
drop table t1;
# Table with 2 column-level check constraints and 1 table-level check constraint
create or replace table t1( c1 int check( c1 > 0 ), c2 int check( c2 > 0 ), c3 int, constraint `range` check( ( c3 >= c1 ) and ( c3 <= c2 ) ), primary key( c1 ) );
show create table t1;
# Show all constraints, including check constraints
select * from information_schema.table_constraints where table_name = 't1';
drop table t1;
...@@ -6386,6 +6386,19 @@ static int get_schema_constraints_record(THD *thd, TABLE_LIST *tables, ...@@ -6386,6 +6386,19 @@ static int get_schema_constraints_record(THD *thd, TABLE_LIST *tables,
} }
} }
// Table check constraints
for ( uint i = 0; i < show_table->s->table_check_constraints; i++ )
{
Virtual_column_info *check = show_table->check_constraints[ i ];
if ( store_constraints( thd, table, db_name, table_name, check->name.str,
check->name.length,
STRING_WITH_LEN( "CHECK" ) ) )
{
DBUG_RETURN( 1 );
}
}
show_table->file->get_foreign_key_list(thd, &f_key_list); show_table->file->get_foreign_key_list(thd, &f_key_list);
FOREIGN_KEY_INFO *f_key_info; FOREIGN_KEY_INFO *f_key_info;
List_iterator_fast<FOREIGN_KEY_INFO> it(f_key_list); List_iterator_fast<FOREIGN_KEY_INFO> it(f_key_list);
......
...@@ -1987,6 +1987,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, ...@@ -1987,6 +1987,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
if (vcol_info) if (vcol_info)
{ {
vcol_info->name.str= const_cast<char*>(reg_field->field_name); vcol_info->name.str= const_cast<char*>(reg_field->field_name);
vcol_info->name.length = strlen(reg_field->field_name);
if (mysql57_null_bits && !vcol_info->stored_in_db) if (mysql57_null_bits && !vcol_info->stored_in_db)
{ {
/* MySQL 5.7 has null bits last */ /* MySQL 5.7 has null bits last */
...@@ -2374,7 +2375,10 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, ...@@ -2374,7 +2375,10 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
vcol_info->name.str= strmake_root(&share->mem_root, vcol_info->name.str= strmake_root(&share->mem_root,
(char*)vcol_screen_pos, name_length); (char*)vcol_screen_pos, name_length);
else else
{
vcol_info->name.str= const_cast<char*>(reg_field->field_name); vcol_info->name.str= const_cast<char*>(reg_field->field_name);
vcol_info->name.length = strlen(reg_field->field_name);
}
vcol_screen_pos+= name_length + expr_length; vcol_screen_pos+= name_length + expr_length;
switch (type) { switch (type) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment