Skip to content

Commit

Permalink
MDEV-11115 CHECK constraints are not shown in I_S.TABLE_CONSTRAINTS
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Jacob Mathew committed Mar 29, 2017
1 parent 4ebdef2 commit 3c422e6
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 0 deletions.
17 changes: 17 additions & 0 deletions mysql-test/r/check_constraint_show.result
@@ -0,0 +1,17 @@
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;
8 changes: 8 additions & 0 deletions mysql-test/t/check_constraint_show.test
@@ -0,0 +1,8 @@
# 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;
13 changes: 13 additions & 0 deletions sql/sql_show.cc
Expand Up @@ -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);
FOREIGN_KEY_INFO *f_key_info;
List_iterator_fast<FOREIGN_KEY_INFO> it(f_key_list);
Expand Down
4 changes: 4 additions & 0 deletions sql/table.cc
Expand Up @@ -1987,6 +1987,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
if (vcol_info)
{
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)
{
/* MySQL 5.7 has null bits last */
Expand Down Expand Up @@ -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,
(char*)vcol_screen_pos, name_length);
else
{
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;

switch (type) {
Expand Down

0 comments on commit 3c422e6

Please sign in to comment.