summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Mathew <jacob.mathew@mariadb.com>2017-03-28 16:56:18 -0700
committerJacob Mathew <jacob.mathew@mariadb.com>2017-03-29 12:07:33 -0700
commit3c422e60bbee79bb636e65910c26ac193de70a84 (patch)
tree851ab6dddf07680adb7b1367aa746743df10c5ef
parent4ebdef2bcd28b641dc49aaef4a8c387442ae06dc (diff)
downloadmariadb-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.result17
-rw-r--r--mysql-test/t/check_constraint_show.test8
-rw-r--r--sql/sql_show.cc13
-rw-r--r--sql/table.cc4
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) {