[Commits] 1ee6b0ff748: MDEV-11115 CHECK constraints are not shown in I_S.TABLE_CONSTRAINTS

jacob.mathew at mariadb.com jacob.mathew at mariadb.com
Fri Mar 17 03:35:57 EET 2017


revision-id: 1ee6b0ff74858dccd779c7974858c6d084c1cde5 (mariadb-10.2.3-246-g1ee6b0ff748)
parent(s): 9f33288dde950343c46e6c5d6a4f233de191f477
author: Jacob Mathew
committer: Jacob Mathew
timestamp: 2017-03-16 18:31:11 -0700
message:

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

Fixed handling of column-level CHECK constraints in I_S.TABLE_CONSTRAINTS.
Fixed a bug regarding virtual column definitions whose name is the field name.
Fixed column-level CHECK constraint syntax in the test case.

---
 mysql-test/r/check_constraint_show.result | 14 ++++++--------
 mysql-test/t/check_constraint_show.test   |  2 +-
 sql/sql_show.cc                           |  2 +-
 sql/table.cc                              |  4 ++++
 4 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/mysql-test/r/check_constraint_show.result b/mysql-test/r/check_constraint_show.result
index 795c6133802..def1c488758 100644
--- a/mysql-test/r/check_constraint_show.result
+++ b/mysql-test/r/check_constraint_show.result
@@ -1,19 +1,17 @@
-create or replace table t1( c1 int, c2 int, c3 int, primary key( c1 ), constraint `c1_min` check( c1 > 0 ), constraint `c3_min` check( c3 > 0 ), constraint `range`  check( ( c2 >= c1 ) and ( c2 <= c3 ) ) );
+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,
-  `c2` int(11) DEFAULT NULL,
+  `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 `c1_min` CHECK (`c1` > 0),
-  CONSTRAINT `c3_min` CHECK (`c3` > 0),
-  CONSTRAINT `range` CHECK (`c2` >= `c1` and `c2` <= `c3`)
+  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_min	test	t1	CHECK
-def	test	c3_min	test	t1	CHECK
+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
index 0e2f45883df..4d57f247b5b 100644
--- a/mysql-test/t/check_constraint_show.test
+++ b/mysql-test/t/check_constraint_show.test
@@ -1,5 +1,5 @@
 # Table with 2 column-level check constraints and 1 table-level check constraint
-create or replace table t1( c1 int, c2 int, c3 int, primary key( c1 ), constraint `c1_min` check( c1 > 0 ), constraint `c3_min` check( c3 > 0 ), constraint `range`  check( ( c2 >= c1 ) and ( c2 <= c3 ) ) );
+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
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index ed369f9b6fe..a4f15f03afb 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -6378,7 +6378,7 @@ 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->s->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,
diff --git a/sql/table.cc b/sql/table.cc
index 404c43bef17..ef85cea3229 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -1986,6 +1986,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 */
@@ -2373,7 +2374,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) {


More information about the commits mailing list