diff --git a/mysql-test/r/check_constraint_show.result b/mysql-test/r/check_constraint_show.result new file mode 100644 index 0000000000000..def1c48875801 --- /dev/null +++ b/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; diff --git a/mysql-test/t/check_constraint_show.test b/mysql-test/t/check_constraint_show.test new file mode 100644 index 0000000000000..4d57f247b5b6c --- /dev/null +++ b/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; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index c45e27a2794ad..adba7ab4d3328 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -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 it(f_key_list); diff --git a/sql/table.cc b/sql/table.cc index 3a08d1e49ea94..6b15c06cb9190 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -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(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 */ @@ -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(reg_field->field_name); + vcol_info->name.length = strlen(reg_field->field_name); + } vcol_screen_pos+= name_length + expr_length; switch (type) {