diff options
author | Jacob Mathew <jacob.mathew@mariadb.com> | 2017-03-28 16:56:18 -0700 |
---|---|---|
committer | Jacob Mathew <jacob.mathew@mariadb.com> | 2017-03-29 12:07:33 -0700 |
commit | 3c422e60bbee79bb636e65910c26ac193de70a84 (patch) | |
tree | 851ab6dddf07680adb7b1367aa746743df10c5ef | |
parent | 4ebdef2bcd28b641dc49aaef4a8c387442ae06dc (diff) | |
download | mariadb-git-bb-10.2-MDEV-11115.tar.gz |
MDEV-11115 CHECK constraints are not shown in I_S.TABLE_CONSTRAINTSbb-10.2-MDEV-11115
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
-rw-r--r-- | mysql-test/r/check_constraint_show.result | 17 | ||||
-rw-r--r-- | mysql-test/t/check_constraint_show.test | 8 | ||||
-rw-r--r-- | sql/sql_show.cc | 13 | ||||
-rw-r--r-- | sql/table.cc | 4 |
4 files changed, 42 insertions, 0 deletions
diff --git a/mysql-test/r/check_constraint_show.result b/mysql-test/r/check_constraint_show.result new file mode 100644 index 00000000000..def1c488758 --- /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 00000000000..4d57f247b5b --- /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 c45e27a2794..adba7ab4d33 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<FOREIGN_KEY_INFO> it(f_key_list); diff --git a/sql/table.cc b/sql/table.cc index 3a08d1e49ea..6b15c06cb91 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<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 */ @@ -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) { |