Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
193b5ed5
Commit
193b5ed5
authored
Dec 13, 2019
by
Vicențiu Ciorbaru
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '10.2' into 10.3
parents
3466b47b
a134f1eb
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
223 additions
and
372 deletions
+223
-372
mysql-test/suite/funcs_1/r/is_check_constraint.result
mysql-test/suite/funcs_1/r/is_check_constraint.result
+0
-121
mysql-test/suite/funcs_1/r/is_check_constraints.result
mysql-test/suite/funcs_1/r/is_check_constraints.result
+119
-116
mysql-test/suite/funcs_1/t/is_check_constraint.test
mysql-test/suite/funcs_1/t/is_check_constraint.test
+0
-92
mysql-test/suite/funcs_1/t/is_check_constraints.test
mysql-test/suite/funcs_1/t/is_check_constraints.test
+76
-27
sql/sql_show.cc
sql/sql_show.cc
+28
-16
No files found.
mysql-test/suite/funcs_1/r/is_check_constraint.result
deleted
100644 → 0
View file @
3466b47b
#
# MDEV-17323: Backport INFORMATION_SCHEMA.CHECK_CONSTRAINTS to 10.2
#
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 CONSTRAINT_NAME TABLE_NAME CHECK_CLAUSE
def foo CONSTRAINT_1 t0 `t` > 32
ALTER TABLE t0
ADD CONSTRAINT CHK_t0_t CHECK(t<100);
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_NAME CHECK_CLAUSE
def foo CHK_t0_t t0 `t` < 100
def foo CONSTRAINT_1 t0 `t` > 32
ALTER TABLE t0
DROP CONSTRAINT CHK_t0_t;
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_NAME CHECK_CLAUSE
def foo CONSTRAINT_1 t0 `t` > 32
ALTER TABLE t0
ADD CONSTRAINT CHECK(t<50);
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_NAME CHECK_CLAUSE
def foo CONSTRAINT_1 t0 `t` > 32
def foo CONSTRAINT_2 t0 `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 CONSTRAINT_NAME TABLE_NAME CHECK_CLAUSE
def foo CHK_tt t1 `tt` < 100
def foo CONSTRAINT_1 t0 `t` > 32
def foo CONSTRAINT_1 t1 `tt` > 32
def foo CONSTRAINT_2 t0 `t` < 50
def foo CONSTRAINT_2 t1 `tt` < 50
def foo t t1 `t` > 2
ALTER TABLE t1
DROP CONSTRAINT CHK_tt;
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_NAME CHECK_CLAUSE
def foo CONSTRAINT_1 t0 `t` > 32
def foo CONSTRAINT_1 t1 `tt` > 32
def foo CONSTRAINT_2 t0 `t` < 50
def foo CONSTRAINT_2 t1 `tt` < 50
def foo t t1 `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 CONSTRAINT_NAME TABLE_NAME CHECK_CLAUSE
def foo CHK_dates t2 `start_date` is null
def foo CONSTRAINT_1 t0 `t` > 32
def foo CONSTRAINT_1 t1 `tt` > 32
def foo CONSTRAINT_2 t0 `t` < 50
def foo CONSTRAINT_2 t1 `tt` < 50
def foo name t2 char_length(`name`) > 2
def foo t t1 `t` > 2
ALTER TABLE t1
ADD CONSTRAINT CHK_new_ CHECK(t>tt);
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_NAME CHECK_CLAUSE
def foo CHK_dates t2 `start_date` is null
def foo CHK_new_ t1 `t` > `tt`
def foo CONSTRAINT_1 t0 `t` > 32
def foo CONSTRAINT_1 t1 `tt` > 32
def foo CONSTRAINT_2 t0 `t` < 50
def foo CONSTRAINT_2 t1 `tt` < 50
def foo name t2 char_length(`name`) > 2
def foo t t1 `t` > 2
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 foo CHK_dates t2 `start_date` is null
def foo CHK_new_ t1 `t` > `tt`
def foo CONSTRAINT_1 t0 `t` > 32
def foo CONSTRAINT_1 t1 `tt` > 32
def foo CONSTRAINT_2 t0 `t` < 50
def foo CONSTRAINT_2 t1 `tt` < 50
def foo b t3 `b` > 0
def foo b t3 `b` > 10
def foo name t2 char_length(`name`) > 2
def foo t t1 `t` > 2
disconnect con1;
CONNECT con2, localhost, boo2,, test;
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_NAME 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;
mysql-test/suite/funcs_1/r/is_check_constraints.result
View file @
193b5ed5
#
# MDEV-14474: Create INFORMATION_SCHEMA.CHECK_CONSTRAINTS
#
set check_constraint_checks=1;
use test;
create table t0
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 order by check_clause;
CONSTRAINT_CATALOG def
CONSTRAINT_SCHEMA test
CONSTRAINT_NAME CONSTRAINT_1
TABLE_NAME t0
CHECK_CLAUSE `t` > 32
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
def foo t0 CONSTRAINT_1 `t` > 32
ALTER TABLE t0
ADD CONSTRAINT CHK_t0_t CHECK(t<100);
SELECT * from information_schema.check_constraints order by check_clause;
CONSTRAINT_CATALOG def
CONSTRAINT_SCHEMA test
CONSTRAINT_NAME CHK_t0_t
TABLE_NAME t0
CHECK_CLAUSE `t` < 100
CONSTRAINT_CATALOG def
CONSTRAINT_SCHEMA test
CONSTRAINT_NAME CONSTRAINT_1
TABLE_NAME t0
CHECK_CLAUSE `t` > 32
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
def foo t0 CHK_t0_t `t` < 100
def foo t0 CONSTRAINT_1 `t` > 32
ALTER TABLE t0
DROP CONSTRAINT CHK_t0_t;
SELECT * from information_schema.check_constraints order by check_clause;
CONSTRAINT_CATALOG def
CONSTRAINT_SCHEMA test
CONSTRAINT_NAME CONSTRAINT_1
TABLE_NAME t0
CHECK_CLAUSE `t` > 32
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
def foo t0 CONSTRAINT_1 `t` > 32
ALTER TABLE t0
ADD CONSTRAINT CHECK(t<50);
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
def foo t0 CONSTRAINT_1 `t` > 32
def foo t0 CONSTRAINT_2 `t` < 50
CREATE TABLE t1
( t int CHECK(t>2), # field constraint
tt int, CONSTRAINT CHK_tt CHECK(tt<100) # table 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 order by check_clause;
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 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
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
def foo t0 CONSTRAINT_1 `t` > 32
def foo t0 CONSTRAINT_2 `t` < 50
def foo t1 CHK_tt `tt` < 100
def foo t1 CONSTRAINT_1 `tt` > 32
def foo t1 CONSTRAINT_2 `tt` < 50
def foo t1 t `t` > 2
ALTER TABLE t1
DROP CONSTRAINT CHK_tt;
SELECT * from information_schema.check_constraints order by check_clause;
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
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
def foo t0 CONSTRAINT_1 `t` > 32
def foo t0 CONSTRAINT_2 `t` < 50
def foo t1 CONSTRAINT_1 `tt` > 32
def foo t1 CONSTRAINT_2 `tt` < 50
def foo t1 t `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 order by check_clause;
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
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
def foo t0 CONSTRAINT_1 `t` > 32
def foo t0 CONSTRAINT_2 `t` < 50
def foo t1 CONSTRAINT_1 `tt` > 32
def foo t1 CONSTRAINT_2 `tt` < 50
def foo t1 t `t` > 2
def foo t2 CHK_dates `start_date` is null
def foo t2 name char_length(`name`) > 2
ALTER TABLE t1
ADD CONSTRAINT CHK_new_ CHECK(t>tt);
SELECT * from information_schema.check_constraints order by check_clause;
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
CONSTRAINT_CATALOG def
CONSTRAINT_SCHEMA test
CONSTRAINT_NAME CHK_new_
TABLE_NAME t1
CHECK_CLAUSE `t` > `tt`
create table t3
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
def foo t0 CONSTRAINT_1 `t` > 32
def foo t0 CONSTRAINT_2 `t` < 50
def foo t1 CHK_new_ `t` > `tt`
def foo t1 CONSTRAINT_1 `tt` > 32
def foo t1 CONSTRAINT_2 `tt` < 50
def foo t1 t `t` > 2
def foo t2 CHK_dates `start_date` is null
def foo t2 name 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
) ENGINE=InnoDB;
select * from information_schema.check_constraints order by check_clause;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_NAME CHECK_CLAUSE
def test name t2 char_length(`name`) > 2
def test b t3 `b` > 0
def test b t3 `b` > 10
def test CHK_dates t2 `start_date` is null
def test t t1 `t` > 2
def test CONSTRAINT_1 t0 `t` > 32
def test CHK_new_ t1 `t` > `tt`
drop table t0;
drop table t1;
drop table t2;
drop table t3;
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
def foo t0 CONSTRAINT_1 `t` > 32
def foo t0 CONSTRAINT_2 `t` < 50
def foo t1 CHK_new_ `t` > `tt`
def foo t1 CONSTRAINT_1 `tt` > 32
def foo t1 CONSTRAINT_2 `tt` < 50
def foo t1 t `t` > 2
def foo t2 CHK_dates `start_date` is null
def foo t2 name char_length(`name`) > 2
def foo t3 b `b` > 0
def foo t3 b `b` > 10
disconnect con1;
CONNECT con2, localhost, boo2,, test;
SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME 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 CHECK_CLAUSE
def db t1 CONSTRAINT_1 `b` > 0
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 CHECK_CLAUSE
connection default;
DROP USER foo;
DROP DATABASE db;
mysql-test/suite/funcs_1/t/is_check_constraint.test
deleted
100644 → 0
View file @
3466b47b
--
source
include
/
have_innodb
.
inc
--
source
include
/
not_embedded
.
inc
--
echo
#
--
echo
# MDEV-17323: Backport INFORMATION_SCHEMA.CHECK_CONSTRAINTS to 10.2
--
echo
#
CREATE
user
boo1
;
GRANT
select
,
create
,
alter
,
drop
on
foo
.*
to
boo1
;
SHOW
GRANTS
for
boo1
;
CREATE
user
boo2
;
create
database
foo
;
# Connect with user boo1
CONNECT
(
con1
,
localhost
,
boo1
,,
foo
);
SET
check_constraint_checks
=
1
;
CREATE
TABLE
t0
(
t
int
,
check
(
t
>
32
)
# table constraint
)
ENGINE
=
myisam
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
ALTER
TABLE
t0
ADD
CONSTRAINT
CHK_t0_t
CHECK
(
t
<
100
);
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
ALTER
TABLE
t0
DROP
CONSTRAINT
CHK_t0_t
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
ALTER
TABLE
t0
ADD
CONSTRAINT
CHECK
(
t
<
50
);
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
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
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
ALTER
TABLE
t1
DROP
CONSTRAINT
CHK_tt
;
--
sorted_result
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
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
ALTER
TABLE
t1
ADD
CONSTRAINT
CHK_new_
CHECK
(
t
>
tt
);
--
sorted_result
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
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
DISCONNECT
con1
;
CONNECT
(
con2
,
localhost
,
boo2
,,
test
);
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
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
;
mysql-test/suite/funcs_1/t/is_check_constraints.test
View file @
193b5ed5
--
source
include
/
have_innodb
.
inc
--
source
include
/
not_embedded
.
inc
--
echo
#
--
echo
# MDEV-14474: Create INFORMATION_SCHEMA.CHECK_CONSTRAINTS
--
echo
#
set
check_constraint_checks
=
1
;
CREATE
user
boo1
;
GRANT
select
,
create
,
alter
,
drop
on
foo
.*
to
boo1
;
SHOW
GRANTS
for
boo1
;
CREATE
user
boo2
;
create
database
foo
;
# Connect with user boo1
CONNECT
(
con1
,
localhost
,
boo1
,,
foo
);
use
test
;
create
table
t0
SET
check_constraint_checks
=
1
;
CREATE
TABLE
t0
(
t
int
,
check
(
t
>
32
)
# table constraint
)
ENGINE
=
myisam
;
--
vertical_results
SELECT
*
from
information_schema
.
check_constraints
order
by
check_clause
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
ALTER
TABLE
t0
ADD
CONSTRAINT
CHK_t0_t
CHECK
(
t
<
100
);
SELECT
*
from
information_schema
.
check_constraints
order
by
check_clause
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
ALTER
TABLE
t0
DROP
CONSTRAINT
CHK_t0_t
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
SELECT
*
from
information_schema
.
check_constraints
order
by
check_clause
;
ALTER
TABLE
t0
ADD
CONSTRAINT
CHECK
(
t
<
50
);
--
sorted_result
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
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
order
by
check_clause
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
ALTER
TABLE
t1
DROP
CONSTRAINT
CHK_tt
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
SELECT
*
from
information_schema
.
check_constraints
order
by
check_clause
;
create
table
t2
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
order
by
check_clause
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
ALTER
TABLE
t1
ADD
CONSTRAINT
CHK_new_
CHECK
(
t
>
tt
);
SELECT
*
from
information_schema
.
check_constraints
order
by
check_clause
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
# Create table with same field and table check constraint name
create
table
t3
CREATE
TABLE
t3
(
a
int
,
b
int
check
(
b
>
0
),
# field constraint named 'b'
CONSTRAINT
b
check
(
b
>
10
)
# table constraint
)
ENGINE
=
InnoDB
;
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
DISCONNECT
con1
;
CONNECT
(
con2
,
localhost
,
boo2
,,
test
);
--
sorted_result
SELECT
*
from
information_schema
.
check_constraints
;
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
;
--
echo
#
--
echo
# MDEV-18440: Information_schema.check_constraints possible data leak
--
echo
#
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
;
--
sorted_result
SELECT
*
FROM
information_schema
.
check_constraints
;
CONNECT
(
con1
,
localhost
,
foo
,,
db
);
SELECT
a
FROM
t1
;
--
sorted_result
SELECT
*
FROM
information_schema
.
check_constraints
;
--
horizontal_results
select
*
from
information_schema
.
check_constraints
order
by
check_clause
;
--
CONNECTION
default
drop
table
t0
;
drop
table
t1
;
drop
table
t2
;
drop
table
t3
;
DROP
USER
foo
;
DROP
DATABASE
db
;
sql/sql_show.cc
View file @
193b5ed5
...
...
@@ -6865,23 +6865,35 @@ static int get_check_constraints_record(THD *thd, TABLE_LIST *tables,
thd
->
clear_error
();
DBUG_RETURN
(
0
);
}
else
if
(
!
tables
->
view
)
if
(
!
tables
->
view
)
{
if
(
tables
->
table
->
s
->
table_check_constraints
)
StringBuffer
<
MAX_FIELD_WIDTH
>
str
(
system_charset_info
);
#ifndef NO_EMBEDDED_ACCESS_CHECKS
TABLE_LIST
table_acl_check
;
bzero
((
char
*
)
&
table_acl_check
,
sizeof
(
table_acl_check
));
#endif
for
(
uint
i
=
0
;
i
<
tables
->
table
->
s
->
table_check_constraints
;
i
++
)
{
for
(
uint
i
=
0
;
i
<
tables
->
table
->
s
->
table_check_constraints
;
i
++
)
#ifndef NO_EMBEDDED_ACCESS_CHECKS
if
(
!
(
thd
->
col_access
&
TABLE_ACLS
))
{
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
);
table_acl_check
.
db
=
*
db_name
;
table_acl_check
.
table_name
=
*
table_name
;
table_acl_check
.
grant
.
privilege
=
thd
->
col_access
;
if
(
check_grant
(
thd
,
TABLE_ACLS
,
&
table_acl_check
,
FALSE
,
1
,
TRUE
))
continue
;
}
#endif
Virtual_column_info
*
check
=
tables
->
table
->
check_constraints
[
i
];
table
->
field
[
0
]
->
store
(
STRING_WITH_LEN
(
"def"
),
system_charset_info
);
table
->
field
[
3
]
->
store
(
check
->
name
.
str
,
check
->
name
.
length
,
system_charset_info
);
/* Make sure the string is empty between each print. */
str
.
length
(
0
);
check
->
print
(
&
str
);
table
->
field
[
4
]
->
store
(
str
.
ptr
(),
str
.
length
(),
system_charset_info
);
if
(
schema_table_store_record
(
thd
,
table
))
DBUG_RETURN
(
1
);
}
}
DBUG_RETURN
(
res
);
...
...
@@ -9806,9 +9818,9 @@ 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
},
{
"TABLE_NAME"
,
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
}
...
...
@@ -9828,8 +9840,8 @@ ST_SCHEMA_TABLE schema_tables[]=
fill_schema_applicable_roles
,
0
,
0
,
-
1
,
-
1
,
0
,
0
},
{
"CHARACTER_SETS"
,
charsets_fields_info
,
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
},
{
"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
,
fill_schema_collation
,
make_old_format
,
0
,
-
1
,
-
1
,
0
,
0
},
{
"COLLATION_CHARACTER_SET_APPLICABILITY"
,
coll_charset_app_fields_info
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment