mariadb/mysql-test/suite/funcs_1/r/is_check_constraints.result
2022-12-14 09:18:30 +02:00

189 lines
6.7 KiB
Text

#
# MDEV-14474: Create INFORMATION_SCHEMA.CHECK_CONSTRAINTS
#
CREATE user boo1;
GRANT select,create,alter,drop on foo.* to boo1;
SHOW GRANTS for boo1;
Grants for boo1@%
GRANT USAGE ON *.* TO `boo1`@`%`
GRANT SELECT, CREATE, DROP, ALTER ON `foo`.* TO `boo1`@`%`
CREATE user boo2;
create database foo;
CONNECT con1,localhost, boo1,, foo;
SET check_constraint_checks=1;
CREATE TABLE t0
(
t int, check (t>32) # table constraint
) ENGINE=myisam;
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def foo t0 CONSTRAINT_1 Table `t` > 32
ALTER TABLE t0
ADD CONSTRAINT CHK_t0_t CHECK(t<100);
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def foo t0 CHK_t0_t Table `t` < 100
def foo t0 CONSTRAINT_1 Table `t` > 32
ALTER TABLE t0
DROP CONSTRAINT CHK_t0_t;
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def foo t0 CONSTRAINT_1 Table `t` > 32
ALTER TABLE t0
ADD CONSTRAINT CHECK(t<50);
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def foo t0 CONSTRAINT_1 Table `t` > 32
def foo t0 CONSTRAINT_2 Table `t` < 50
CREATE TABLE t1
( t int CHECK(t>2), # field constraint
tt int,
CONSTRAINT CHECK (tt > 32), CONSTRAINT CHECK (tt <50),# autogenerated names table constraints
CONSTRAINT CHK_tt CHECK(tt<100) # named table constraint
) ENGINE=InnoDB;
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def foo t0 CONSTRAINT_1 Table `t` > 32
def foo t0 CONSTRAINT_2 Table `t` < 50
def foo t1 CHK_tt Table `tt` < 100
def foo t1 CONSTRAINT_1 Table `tt` > 32
def foo t1 CONSTRAINT_2 Table `tt` < 50
def foo t1 t Column `t` > 2
ALTER TABLE t1
DROP CONSTRAINT CHK_tt;
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def foo t0 CONSTRAINT_1 Table `t` > 32
def foo t0 CONSTRAINT_2 Table `t` < 50
def foo t1 CONSTRAINT_1 Table `tt` > 32
def foo t1 CONSTRAINT_2 Table `tt` < 50
def foo t1 t Column `t` > 2
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 CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def foo t0 CONSTRAINT_1 Table `t` > 32
def foo t0 CONSTRAINT_2 Table `t` < 50
def foo t1 CONSTRAINT_1 Table `tt` > 32
def foo t1 CONSTRAINT_2 Table `tt` < 50
def foo t1 t Column `t` > 2
def foo t2 CHK_dates Table `start_date` is null
def foo t2 name Column char_length(`name`) > 2
ALTER TABLE t1
ADD CONSTRAINT CHK_new_ CHECK(t>tt);
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def foo t0 CONSTRAINT_1 Table `t` > 32
def foo t0 CONSTRAINT_2 Table `t` < 50
def foo t1 CHK_new_ Table `t` > `tt`
def foo t1 CONSTRAINT_1 Table `tt` > 32
def foo t1 CONSTRAINT_2 Table `tt` < 50
def foo t1 t Column `t` > 2
def foo t2 CHK_dates Table `start_date` is null
def foo t2 name Column char_length(`name`) > 2
CREATE TABLE t3
(
a int,
b int check (b>0), # field constraint named 'b'
CONSTRAINT b check (b>10), # table constraint
# `CHECK_CLAUSE` should allow more then `var(64)` constraints
CONSTRAINT b1 check (b<123456789012345678901234567890123456789012345678901234567890123456789)
) ENGINE=InnoDB;
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def foo t0 CONSTRAINT_1 Table `t` > 32
def foo t0 CONSTRAINT_2 Table `t` < 50
def foo t1 CHK_new_ Table `t` > `tt`
def foo t1 CONSTRAINT_1 Table `tt` > 32
def foo t1 CONSTRAINT_2 Table `tt` < 50
def foo t1 t Column `t` > 2
def foo t2 CHK_dates Table `start_date` is null
def foo t2 name Column char_length(`name`) > 2
def foo t3 b Column `b` > 0
def foo t3 b Table `b` > 10
def foo t3 b1 Table `b` < 123456789012345678901234567890123456789012345678901234567890123456789
disconnect con1;
CONNECT con2, localhost, boo2,,"*NO-ONE*";
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
disconnect con2;
CONNECT con1, localhost, boo1,,foo;
DROP TABLE t0;
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
DROP DATABASE foo;
disconnect con1;
connection default;
DROP USER boo1;
DROP USER boo2;
#
# MDEV-18440: Information_schema.check_constraints possible data leak
#
CREATE USER foo;
CREATE DATABASE db;
USE db;
CREATE TABLE t1 (a int, b int, CONSTRAINT CHECK (b > 0));
INSERT INTO t1 VALUES (1, 2), (2, 3);
GRANT SELECT (a) ON t1 TO foo;
SHOW GRANTS FOR foo;
Grants for foo@%
GRANT USAGE ON *.* TO `foo`@`%`
GRANT SELECT (`a`) ON `db`.`t1` TO `foo`@`%`
SELECT * FROM information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def db t1 CONSTRAINT_1 Table `b` > 0
def mysql global_priv Priv Column json_valid(`Priv`)
CONNECT con1,localhost, foo,, db;
SELECT a FROM t1;
a
1
2
SELECT * FROM information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
connection default;
DROP USER foo;
DROP DATABASE db;
#
# MDEV-24601: INFORMATION_SCHEMA doesn't differentiate between
# column and table-level CHECK constraints
#
use test;
create table t(check (t0>0),
t0 int,
t1 int check (t1<0),
t2 int check (t2<-1),
CONSTRAINT tc_1 check(t1 > 1),
CONSTRAINT t2 check(t2 > 1));
show create table t;
Table Create Table
t CREATE TABLE `t` (
`t0` int(11) DEFAULT NULL,
`t1` int(11) DEFAULT NULL CHECK (`t1` < 0),
`t2` int(11) DEFAULT NULL CHECK (`t2` < -1),
CONSTRAINT `CONSTRAINT_1` CHECK (`t0` > 0),
CONSTRAINT `tc_1` CHECK (`t1` > 1),
CONSTRAINT `t2` CHECK (`t2` > 1)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
select * from information_schema.table_constraints where CONSTRAINT_TYPE='CHECK';
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
def mysql Priv mysql global_priv CHECK
def test CONSTRAINT_1 test t CHECK
def test t1 test t CHECK
def test t2 test t CHECK
def test t2 test t CHECK
def test tc_1 test t CHECK
select * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME LEVEL CHECK_CLAUSE
def mysql global_priv Priv Column json_valid(`Priv`)
def test t CONSTRAINT_1 Table `t0` > 0
def test t t1 Column `t1` < 0
def test t t2 Column `t2` < -1
def test t t2 Table `t2` > 1
def test t tc_1 Table `t1` > 1
drop table t;