MDEV-14474 information_schema.check_constraints
Implement according to standard SQL specification 2008. The check_constraints table is used for fetching metadata about the constraints defined for tables in all databases.
This commit is contained in:
parent
7f73f5e4e5
commit
d526679efd
@ -51,6 +51,7 @@ c
|
|||||||
ALL_PLUGINS
|
ALL_PLUGINS
|
||||||
APPLICABLE_ROLES
|
APPLICABLE_ROLES
|
||||||
CHARACTER_SETS
|
CHARACTER_SETS
|
||||||
|
CHECK_CONSTRAINTS
|
||||||
CLIENT_STATISTICS
|
CLIENT_STATISTICS
|
||||||
COLLATIONS
|
COLLATIONS
|
||||||
COLLATION_CHARACTER_SET_APPLICABILITY
|
COLLATION_CHARACTER_SET_APPLICABILITY
|
||||||
@ -938,6 +939,7 @@ connection user10261;
|
|||||||
SELECT TABLE_NAME, COLUMN_NAME, PRIVILEGES FROM INFORMATION_SCHEMA.COLUMNS
|
SELECT TABLE_NAME, COLUMN_NAME, PRIVILEGES FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
where COLUMN_NAME='TABLE_NAME' and table_name not like 'innodb%';
|
where COLUMN_NAME='TABLE_NAME' and table_name not like 'innodb%';
|
||||||
TABLE_NAME COLUMN_NAME PRIVILEGES
|
TABLE_NAME COLUMN_NAME PRIVILEGES
|
||||||
|
CHECK_CONSTRAINTS TABLE_NAME select
|
||||||
COLUMNS TABLE_NAME select
|
COLUMNS TABLE_NAME select
|
||||||
COLUMN_PRIVILEGES TABLE_NAME select
|
COLUMN_PRIVILEGES TABLE_NAME select
|
||||||
FILES TABLE_NAME select
|
FILES TABLE_NAME select
|
||||||
|
@ -4,6 +4,7 @@ Tables_in_information_schema
|
|||||||
ALL_PLUGINS
|
ALL_PLUGINS
|
||||||
APPLICABLE_ROLES
|
APPLICABLE_ROLES
|
||||||
CHARACTER_SETS
|
CHARACTER_SETS
|
||||||
|
CHECK_CONSTRAINTS
|
||||||
CLIENT_STATISTICS
|
CLIENT_STATISTICS
|
||||||
COLLATIONS
|
COLLATIONS
|
||||||
COLLATION_CHARACTER_SET_APPLICABILITY
|
COLLATION_CHARACTER_SET_APPLICABILITY
|
||||||
@ -83,6 +84,7 @@ table_name column_name
|
|||||||
ALL_PLUGINS PLUGIN_NAME
|
ALL_PLUGINS PLUGIN_NAME
|
||||||
APPLICABLE_ROLES GRANTEE
|
APPLICABLE_ROLES GRANTEE
|
||||||
CHARACTER_SETS CHARACTER_SET_NAME
|
CHARACTER_SETS CHARACTER_SET_NAME
|
||||||
|
CHECK_CONSTRAINTS CONSTRAINT_SCHEMA
|
||||||
CLIENT_STATISTICS CLIENT
|
CLIENT_STATISTICS CLIENT
|
||||||
COLLATIONS COLLATION_NAME
|
COLLATIONS COLLATION_NAME
|
||||||
COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME
|
COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME
|
||||||
@ -162,6 +164,7 @@ table_name column_name
|
|||||||
ALL_PLUGINS PLUGIN_NAME
|
ALL_PLUGINS PLUGIN_NAME
|
||||||
APPLICABLE_ROLES GRANTEE
|
APPLICABLE_ROLES GRANTEE
|
||||||
CHARACTER_SETS CHARACTER_SET_NAME
|
CHARACTER_SETS CHARACTER_SET_NAME
|
||||||
|
CHECK_CONSTRAINTS CONSTRAINT_SCHEMA
|
||||||
CLIENT_STATISTICS CLIENT
|
CLIENT_STATISTICS CLIENT
|
||||||
COLLATIONS COLLATION_NAME
|
COLLATIONS COLLATION_NAME
|
||||||
COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME
|
COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME
|
||||||
@ -247,6 +250,7 @@ table_name group_concat(t.table_schema, '.', t.table_name) num1
|
|||||||
ALL_PLUGINS information_schema.ALL_PLUGINS 1
|
ALL_PLUGINS information_schema.ALL_PLUGINS 1
|
||||||
APPLICABLE_ROLES information_schema.APPLICABLE_ROLES 1
|
APPLICABLE_ROLES information_schema.APPLICABLE_ROLES 1
|
||||||
CHARACTER_SETS information_schema.CHARACTER_SETS 1
|
CHARACTER_SETS information_schema.CHARACTER_SETS 1
|
||||||
|
CHECK_CONSTRAINTS information_schema.CHECK_CONSTRAINTS 1
|
||||||
CLIENT_STATISTICS information_schema.CLIENT_STATISTICS 1
|
CLIENT_STATISTICS information_schema.CLIENT_STATISTICS 1
|
||||||
COLLATIONS information_schema.COLLATIONS 1
|
COLLATIONS information_schema.COLLATIONS 1
|
||||||
COLLATION_CHARACTER_SET_APPLICABILITY information_schema.COLLATION_CHARACTER_SET_APPLICABILITY 1
|
COLLATION_CHARACTER_SET_APPLICABILITY information_schema.COLLATION_CHARACTER_SET_APPLICABILITY 1
|
||||||
@ -315,6 +319,7 @@ Database: information_schema
|
|||||||
| ALL_PLUGINS |
|
| ALL_PLUGINS |
|
||||||
| APPLICABLE_ROLES |
|
| APPLICABLE_ROLES |
|
||||||
| CHARACTER_SETS |
|
| CHARACTER_SETS |
|
||||||
|
| CHECK_CONSTRAINTS |
|
||||||
| CLIENT_STATISTICS |
|
| CLIENT_STATISTICS |
|
||||||
| COLLATIONS |
|
| COLLATIONS |
|
||||||
| COLLATION_CHARACTER_SET_APPLICABILITY |
|
| COLLATION_CHARACTER_SET_APPLICABILITY |
|
||||||
@ -384,6 +389,7 @@ Database: INFORMATION_SCHEMA
|
|||||||
| ALL_PLUGINS |
|
| ALL_PLUGINS |
|
||||||
| APPLICABLE_ROLES |
|
| APPLICABLE_ROLES |
|
||||||
| CHARACTER_SETS |
|
| CHARACTER_SETS |
|
||||||
|
| CHECK_CONSTRAINTS |
|
||||||
| CLIENT_STATISTICS |
|
| CLIENT_STATISTICS |
|
||||||
| COLLATIONS |
|
| COLLATIONS |
|
||||||
| COLLATION_CHARACTER_SET_APPLICABILITY |
|
| COLLATION_CHARACTER_SET_APPLICABILITY |
|
||||||
@ -453,5 +459,5 @@ Wildcard: inf_rmation_schema
|
|||||||
| information_schema |
|
| information_schema |
|
||||||
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') GROUP BY TABLE_SCHEMA;
|
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') GROUP BY TABLE_SCHEMA;
|
||||||
table_schema count(*)
|
table_schema count(*)
|
||||||
information_schema 64
|
information_schema 65
|
||||||
mysql 31
|
mysql 31
|
||||||
|
144
mysql-test/suite/funcs_1/r/is_check_constraints.result
Normal file
144
mysql-test/suite/funcs_1/r/is_check_constraints.result
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
#
|
||||||
|
# MDEV-14474: Create INFORMATION_SCHEMA.CHECK_CONSTRAINTS
|
||||||
|
#
|
||||||
|
set check_constraint_checks=1;
|
||||||
|
use test;
|
||||||
|
create table t0
|
||||||
|
(
|
||||||
|
t int, check (t>32) # table constraint
|
||||||
|
) ENGINE=myisam;
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CONSTRAINT_1
|
||||||
|
TABLE_NAME t0
|
||||||
|
CHECK_CLAUSE `t` > 32
|
||||||
|
ALTER TABLE t0
|
||||||
|
ADD CONSTRAINT CHK_t0_t CHECK(t<100);
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CONSTRAINT_1
|
||||||
|
TABLE_NAME t0
|
||||||
|
CHECK_CLAUSE `t` > 32
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CHK_t0_t
|
||||||
|
TABLE_NAME t0
|
||||||
|
CHECK_CLAUSE `t` < 100
|
||||||
|
ALTER TABLE t0
|
||||||
|
DROP CONSTRAINT CHK_t0_t;
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CONSTRAINT_1
|
||||||
|
TABLE_NAME t0
|
||||||
|
CHECK_CLAUSE `t` > 32
|
||||||
|
CREATE TABLE t1
|
||||||
|
( t int CHECK(t>2), # field constraint
|
||||||
|
tt int, CONSTRAINT CHK_tt CHECK(tt<100) # table constraint
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME t
|
||||||
|
TABLE_NAME t1
|
||||||
|
CHECK_CLAUSE `t` > 2
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CHK_tt
|
||||||
|
TABLE_NAME t1
|
||||||
|
CHECK_CLAUSE `tt` < 100
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CONSTRAINT_1
|
||||||
|
TABLE_NAME t0
|
||||||
|
CHECK_CLAUSE `t` > 32
|
||||||
|
ALTER TABLE t1
|
||||||
|
DROP CONSTRAINT CHK_tt;
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME t
|
||||||
|
TABLE_NAME t1
|
||||||
|
CHECK_CLAUSE `t` > 2
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CONSTRAINT_1
|
||||||
|
TABLE_NAME t0
|
||||||
|
CHECK_CLAUSE `t` > 32
|
||||||
|
create table t2
|
||||||
|
(
|
||||||
|
name VARCHAR(30) CHECK(CHAR_LENGTH(name)>2), #field constraint
|
||||||
|
start_date DATE,
|
||||||
|
end_date DATE,
|
||||||
|
CONSTRAINT CHK_dates CHECK(start_date IS NULL) #table constraint
|
||||||
|
)ENGINE=Innodb;
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME name
|
||||||
|
TABLE_NAME t2
|
||||||
|
CHECK_CLAUSE char_length(`name`) > 2
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CHK_dates
|
||||||
|
TABLE_NAME t2
|
||||||
|
CHECK_CLAUSE `start_date` is null
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME t
|
||||||
|
TABLE_NAME t1
|
||||||
|
CHECK_CLAUSE `t` > 2
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CONSTRAINT_1
|
||||||
|
TABLE_NAME t0
|
||||||
|
CHECK_CLAUSE `t` > 32
|
||||||
|
ALTER TABLE t1
|
||||||
|
ADD CONSTRAINT CHK_new_ CHECK(t>tt);
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME name
|
||||||
|
TABLE_NAME t2
|
||||||
|
CHECK_CLAUSE char_length(`name`) > 2
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CHK_dates
|
||||||
|
TABLE_NAME t2
|
||||||
|
CHECK_CLAUSE `start_date` is null
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME t
|
||||||
|
TABLE_NAME t1
|
||||||
|
CHECK_CLAUSE `t` > 2
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CHK_new_
|
||||||
|
TABLE_NAME t1
|
||||||
|
CHECK_CLAUSE `t` > `tt`
|
||||||
|
CONSTRAINT_CATALOG def
|
||||||
|
CONSTRAINT_SCHEMA test
|
||||||
|
CONSTRAINT_NAME CONSTRAINT_1
|
||||||
|
TABLE_NAME t0
|
||||||
|
CHECK_CLAUSE `t` > 32
|
||||||
|
create table t3
|
||||||
|
(
|
||||||
|
a int,
|
||||||
|
b int check (b>0), # field constraint named 'b'
|
||||||
|
CONSTRAINT b check (b>10) # table constraint
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
select * from information_schema.check_constraints;
|
||||||
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_NAME CHECK_CLAUSE
|
||||||
|
def test b t3 `b` > 0
|
||||||
|
def test b t3 `b` > 10
|
||||||
|
def test name t2 char_length(`name`) > 2
|
||||||
|
def test CHK_dates t2 `start_date` is null
|
||||||
|
def test t t1 `t` > 2
|
||||||
|
def test CHK_new_ t1 `t` > `tt`
|
||||||
|
def test CONSTRAINT_1 t0 `t` > 32
|
||||||
|
drop table t0;
|
||||||
|
drop table t1;
|
||||||
|
drop table t2;
|
||||||
|
drop table t3;
|
@ -24,6 +24,11 @@ def information_schema CHARACTER_SETS CHARACTER_SET_NAME 1 '' NO varchar 32 96 N
|
|||||||
def information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 '' NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) select NEVER NULL
|
def information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 '' NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) select NEVER NULL
|
||||||
def information_schema CHARACTER_SETS DESCRIPTION 3 '' NO varchar 60 180 NULL NULL NULL utf8 utf8_general_ci varchar(60) select NEVER NULL
|
def information_schema CHARACTER_SETS DESCRIPTION 3 '' NO varchar 60 180 NULL NULL NULL utf8 utf8_general_ci varchar(60) select NEVER NULL
|
||||||
def information_schema CHARACTER_SETS MAXLEN 4 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(3) select NEVER NULL
|
def information_schema CHARACTER_SETS MAXLEN 4 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(3) select NEVER NULL
|
||||||
|
def information_schema CHECK_CONSTRAINTS CHECK_CLAUSE 5 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select NEVER NULL
|
||||||
|
def information_schema CHECK_CONSTRAINTS CONSTRAINT_CATALOG 1 '' NO varchar 512 1536 NULL NULL NULL utf8 utf8_general_ci varchar(512) select NEVER NULL
|
||||||
|
def information_schema CHECK_CONSTRAINTS CONSTRAINT_NAME 3 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select NEVER NULL
|
||||||
|
def information_schema CHECK_CONSTRAINTS CONSTRAINT_SCHEMA 2 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select NEVER NULL
|
||||||
|
def information_schema CHECK_CONSTRAINTS TABLE_NAME 4 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select NEVER NULL
|
||||||
def information_schema CLIENT_STATISTICS ACCESS_DENIED 22 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select NEVER NULL
|
def information_schema CLIENT_STATISTICS ACCESS_DENIED 22 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select NEVER NULL
|
||||||
def information_schema CLIENT_STATISTICS BINLOG_BYTES_WRITTEN 9 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select NEVER NULL
|
def information_schema CLIENT_STATISTICS BINLOG_BYTES_WRITTEN 9 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select NEVER NULL
|
||||||
def information_schema CLIENT_STATISTICS BUSY_TIME 5 0 NO double NULL NULL 21 NULL NULL NULL NULL double select NEVER NULL
|
def information_schema CLIENT_STATISTICS BUSY_TIME 5 0 NO double NULL NULL 21 NULL NULL NULL NULL double select NEVER NULL
|
||||||
@ -557,6 +562,11 @@ COL_CML TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH C
|
|||||||
3.0000 information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME varchar 32 96 utf8 utf8_general_ci varchar(32)
|
3.0000 information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME varchar 32 96 utf8 utf8_general_ci varchar(32)
|
||||||
3.0000 information_schema CHARACTER_SETS DESCRIPTION varchar 60 180 utf8 utf8_general_ci varchar(60)
|
3.0000 information_schema CHARACTER_SETS DESCRIPTION varchar 60 180 utf8 utf8_general_ci varchar(60)
|
||||||
NULL information_schema CHARACTER_SETS MAXLEN bigint NULL NULL NULL NULL bigint(3)
|
NULL information_schema CHARACTER_SETS MAXLEN bigint NULL NULL NULL NULL bigint(3)
|
||||||
|
3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_CATALOG varchar 512 1536 utf8 utf8_general_ci varchar(512)
|
||||||
|
3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_SCHEMA varchar 64 192 utf8 utf8_general_ci varchar(64)
|
||||||
|
3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_NAME varchar 64 192 utf8 utf8_general_ci varchar(64)
|
||||||
|
3.0000 information_schema CHECK_CONSTRAINTS TABLE_NAME varchar 64 192 utf8 utf8_general_ci varchar(64)
|
||||||
|
3.0000 information_schema CHECK_CONSTRAINTS CHECK_CLAUSE varchar 64 192 utf8 utf8_general_ci varchar(64)
|
||||||
3.0000 information_schema CLIENT_STATISTICS CLIENT varchar 64 192 utf8 utf8_general_ci varchar(64)
|
3.0000 information_schema CLIENT_STATISTICS CLIENT varchar 64 192 utf8 utf8_general_ci varchar(64)
|
||||||
NULL information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS bigint NULL NULL NULL NULL bigint(21)
|
NULL information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS bigint NULL NULL NULL NULL bigint(21)
|
||||||
NULL information_schema CLIENT_STATISTICS CONCURRENT_CONNECTIONS bigint NULL NULL NULL NULL bigint(21)
|
NULL information_schema CLIENT_STATISTICS CONCURRENT_CONNECTIONS bigint NULL NULL NULL NULL bigint(21)
|
||||||
|
@ -89,6 +89,31 @@ user_comment
|
|||||||
Separator -----------------------------------------------------
|
Separator -----------------------------------------------------
|
||||||
TABLE_CATALOG def
|
TABLE_CATALOG def
|
||||||
TABLE_SCHEMA information_schema
|
TABLE_SCHEMA information_schema
|
||||||
|
TABLE_NAME CHECK_CONSTRAINTS
|
||||||
|
TABLE_TYPE SYSTEM VIEW
|
||||||
|
ENGINE MEMORY
|
||||||
|
VERSION 11
|
||||||
|
ROW_FORMAT Fixed
|
||||||
|
TABLE_ROWS #TBLR#
|
||||||
|
AVG_ROW_LENGTH #ARL#
|
||||||
|
DATA_LENGTH #DL#
|
||||||
|
MAX_DATA_LENGTH #MDL#
|
||||||
|
INDEX_LENGTH #IL#
|
||||||
|
DATA_FREE #DF#
|
||||||
|
AUTO_INCREMENT NULL
|
||||||
|
CREATE_TIME #CRT#
|
||||||
|
UPDATE_TIME #UT#
|
||||||
|
CHECK_TIME #CT#
|
||||||
|
TABLE_COLLATION utf8_general_ci
|
||||||
|
CHECKSUM NULL
|
||||||
|
CREATE_OPTIONS #CO#
|
||||||
|
TABLE_COMMENT #TC#
|
||||||
|
MAX_INDEX_LENGTH #MIL#
|
||||||
|
TEMPORARY Y
|
||||||
|
user_comment
|
||||||
|
Separator -----------------------------------------------------
|
||||||
|
TABLE_CATALOG def
|
||||||
|
TABLE_SCHEMA information_schema
|
||||||
TABLE_NAME CLIENT_STATISTICS
|
TABLE_NAME CLIENT_STATISTICS
|
||||||
TABLE_TYPE SYSTEM VIEW
|
TABLE_TYPE SYSTEM VIEW
|
||||||
ENGINE MEMORY
|
ENGINE MEMORY
|
||||||
@ -1105,6 +1130,31 @@ user_comment
|
|||||||
Separator -----------------------------------------------------
|
Separator -----------------------------------------------------
|
||||||
TABLE_CATALOG def
|
TABLE_CATALOG def
|
||||||
TABLE_SCHEMA information_schema
|
TABLE_SCHEMA information_schema
|
||||||
|
TABLE_NAME CHECK_CONSTRAINTS
|
||||||
|
TABLE_TYPE SYSTEM VIEW
|
||||||
|
ENGINE MEMORY
|
||||||
|
VERSION 11
|
||||||
|
ROW_FORMAT Fixed
|
||||||
|
TABLE_ROWS #TBLR#
|
||||||
|
AVG_ROW_LENGTH #ARL#
|
||||||
|
DATA_LENGTH #DL#
|
||||||
|
MAX_DATA_LENGTH #MDL#
|
||||||
|
INDEX_LENGTH #IL#
|
||||||
|
DATA_FREE #DF#
|
||||||
|
AUTO_INCREMENT NULL
|
||||||
|
CREATE_TIME #CRT#
|
||||||
|
UPDATE_TIME #UT#
|
||||||
|
CHECK_TIME #CT#
|
||||||
|
TABLE_COLLATION utf8_general_ci
|
||||||
|
CHECKSUM NULL
|
||||||
|
CREATE_OPTIONS #CO#
|
||||||
|
TABLE_COMMENT #TC#
|
||||||
|
MAX_INDEX_LENGTH #MIL#
|
||||||
|
TEMPORARY Y
|
||||||
|
user_comment
|
||||||
|
Separator -----------------------------------------------------
|
||||||
|
TABLE_CATALOG def
|
||||||
|
TABLE_SCHEMA information_schema
|
||||||
TABLE_NAME CLIENT_STATISTICS
|
TABLE_NAME CLIENT_STATISTICS
|
||||||
TABLE_TYPE SYSTEM VIEW
|
TABLE_TYPE SYSTEM VIEW
|
||||||
ENGINE MEMORY
|
ENGINE MEMORY
|
||||||
|
69
mysql-test/suite/funcs_1/t/is_check_constraints.test
Normal file
69
mysql-test/suite/funcs_1/t/is_check_constraints.test
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-14474: Create INFORMATION_SCHEMA.CHECK_CONSTRAINTS
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
set check_constraint_checks=1;
|
||||||
|
|
||||||
|
use test;
|
||||||
|
create table t0
|
||||||
|
(
|
||||||
|
t int, check (t>32) # table constraint
|
||||||
|
) ENGINE=myisam;
|
||||||
|
|
||||||
|
--vertical_results
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
|
||||||
|
ALTER TABLE t0
|
||||||
|
ADD CONSTRAINT CHK_t0_t CHECK(t<100);
|
||||||
|
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
|
||||||
|
ALTER TABLE t0
|
||||||
|
DROP CONSTRAINT CHK_t0_t;
|
||||||
|
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
|
||||||
|
CREATE TABLE t1
|
||||||
|
( t int CHECK(t>2), # field constraint
|
||||||
|
tt int, CONSTRAINT CHK_tt CHECK(tt<100) # table constraint
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
|
||||||
|
ALTER TABLE t1
|
||||||
|
DROP CONSTRAINT CHK_tt;
|
||||||
|
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
|
||||||
|
create table t2
|
||||||
|
(
|
||||||
|
name VARCHAR(30) CHECK(CHAR_LENGTH(name)>2), #field constraint
|
||||||
|
start_date DATE,
|
||||||
|
end_date DATE,
|
||||||
|
CONSTRAINT CHK_dates CHECK(start_date IS NULL) #table constraint
|
||||||
|
)ENGINE=Innodb;
|
||||||
|
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
|
||||||
|
ALTER TABLE t1
|
||||||
|
ADD CONSTRAINT CHK_new_ CHECK(t>tt);
|
||||||
|
|
||||||
|
SELECT * from information_schema.check_constraints;
|
||||||
|
|
||||||
|
|
||||||
|
# Create table with same field and table check constraint name
|
||||||
|
create table t3
|
||||||
|
(
|
||||||
|
a int,
|
||||||
|
b int check (b>0), # field constraint named 'b'
|
||||||
|
CONSTRAINT b check (b>10) # table constraint
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
--horizontal_results
|
||||||
|
select * from information_schema.check_constraints;
|
||||||
|
|
||||||
|
drop table t0;
|
||||||
|
drop table t1;
|
||||||
|
drop table t2;
|
||||||
|
drop table t3;
|
@ -950,6 +950,7 @@ enum enum_schema_tables
|
|||||||
SCH_ALL_PLUGINS,
|
SCH_ALL_PLUGINS,
|
||||||
SCH_APPLICABLE_ROLES,
|
SCH_APPLICABLE_ROLES,
|
||||||
SCH_CHARSETS,
|
SCH_CHARSETS,
|
||||||
|
SCH_CHECK_CONSTRAINTS,
|
||||||
SCH_COLLATIONS,
|
SCH_COLLATIONS,
|
||||||
SCH_COLLATION_CHARACTER_SET_APPLICABILITY,
|
SCH_COLLATION_CHARACTER_SET_APPLICABILITY,
|
||||||
SCH_COLUMNS,
|
SCH_COLUMNS,
|
||||||
|
@ -2565,6 +2565,7 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident,
|
|||||||
|
|
||||||
case SCH_TABLE_NAMES:
|
case SCH_TABLE_NAMES:
|
||||||
case SCH_TABLES:
|
case SCH_TABLES:
|
||||||
|
case SCH_CHECK_CONSTRAINTS:
|
||||||
case SCH_VIEWS:
|
case SCH_VIEWS:
|
||||||
case SCH_TRIGGERS:
|
case SCH_TRIGGERS:
|
||||||
case SCH_EVENTS:
|
case SCH_EVENTS:
|
||||||
|
@ -6788,6 +6788,42 @@ store_constraints(THD *thd, TABLE *table, const LEX_CSTRING *db_name,
|
|||||||
return schema_table_store_record(thd, table);
|
return schema_table_store_record(thd, table);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int get_check_constraints_record(THD *thd, TABLE_LIST *tables,
|
||||||
|
TABLE *table, bool res,
|
||||||
|
const LEX_CSTRING *db_name,
|
||||||
|
const LEX_CSTRING *table_name)
|
||||||
|
{
|
||||||
|
DBUG_ENTER("get_check_constraints_record");
|
||||||
|
if (res)
|
||||||
|
{
|
||||||
|
if (thd->is_error())
|
||||||
|
push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
|
thd->get_stmt_da()->sql_errno(),
|
||||||
|
thd->get_stmt_da()->message());
|
||||||
|
thd->clear_error();
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
else if (!tables->view)
|
||||||
|
{
|
||||||
|
if (tables->table->s->table_check_constraints)
|
||||||
|
{
|
||||||
|
for (uint i= 0; i < tables->table->s->table_check_constraints; i++)
|
||||||
|
{
|
||||||
|
StringBuffer<MAX_FIELD_WIDTH> str(system_charset_info);
|
||||||
|
Virtual_column_info *check= tables->table->check_constraints[i];
|
||||||
|
restore_record(table, s->default_values);
|
||||||
|
table->field[0]->store(STRING_WITH_LEN("def"), system_charset_info);
|
||||||
|
table->field[1]->store(db_name->str, db_name->length, system_charset_info);
|
||||||
|
table->field[2]->store(check->name.str, check->name.length, system_charset_info);
|
||||||
|
table->field[3]->store(table_name->str, table_name->length, system_charset_info);
|
||||||
|
check->print(&str);
|
||||||
|
table->field[4]->store(str.ptr(), str.length(), system_charset_info);
|
||||||
|
schema_table_store_record(thd, table);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DBUG_RETURN(res);
|
||||||
|
}
|
||||||
|
|
||||||
static int get_schema_constraints_record(THD *thd, TABLE_LIST *tables,
|
static int get_schema_constraints_record(THD *thd, TABLE_LIST *tables,
|
||||||
TABLE *table, bool res,
|
TABLE *table, bool res,
|
||||||
@ -9708,6 +9744,18 @@ ST_FIELD_INFO spatial_ref_sys_fields_info[]=
|
|||||||
#endif /*HAVE_SPATIAL*/
|
#endif /*HAVE_SPATIAL*/
|
||||||
|
|
||||||
|
|
||||||
|
ST_FIELD_INFO check_constraints_fields_info[]=
|
||||||
|
{
|
||||||
|
{"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 0, 0, OPEN_FULL_TABLE},
|
||||||
|
{"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0,
|
||||||
|
OPEN_FULL_TABLE},
|
||||||
|
{"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0,
|
||||||
|
OPEN_FULL_TABLE},
|
||||||
|
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0, OPEN_FULL_TABLE},
|
||||||
|
{"CHECK_CLAUSE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0,
|
||||||
|
OPEN_FULL_TABLE},
|
||||||
|
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
|
||||||
|
};
|
||||||
/*
|
/*
|
||||||
Description of ST_FIELD_INFO in table.h
|
Description of ST_FIELD_INFO in table.h
|
||||||
|
|
||||||
@ -9723,6 +9771,8 @@ ST_SCHEMA_TABLE schema_tables[]=
|
|||||||
fill_schema_applicable_roles, 0, 0, -1, -1, 0, 0},
|
fill_schema_applicable_roles, 0, 0, -1, -1, 0, 0},
|
||||||
{"CHARACTER_SETS", charsets_fields_info, 0,
|
{"CHARACTER_SETS", charsets_fields_info, 0,
|
||||||
fill_schema_charsets, make_character_sets_old_format, 0, -1, -1, 0, 0},
|
fill_schema_charsets, make_character_sets_old_format, 0, -1, -1, 0, 0},
|
||||||
|
{"CHECK_CONSTRAINTS", check_constraints_fields_info, 0,
|
||||||
|
get_all_tables, 0, get_check_constraints_record, 1, 2, 0, OPTIMIZE_I_S_TABLE|OPEN_TABLE_ONLY},
|
||||||
{"COLLATIONS", collation_fields_info, 0,
|
{"COLLATIONS", collation_fields_info, 0,
|
||||||
fill_schema_collation, make_old_format, 0, -1, -1, 0, 0},
|
fill_schema_collation, make_old_format, 0, -1, -1, 0, 0},
|
||||||
{"COLLATION_CHARACTER_SET_APPLICABILITY", coll_charset_app_fields_info,
|
{"COLLATION_CHARACTER_SET_APPLICABILITY", coll_charset_app_fields_info,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user