-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard
MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
- Loading branch information
Showing
165 changed files
with
5,793 additions
and
6,325 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
set @save_check_constraint=@@check_constraint_checks; | ||
create table t1 (a int check(a>10), b int check (b > 20), constraint `min` check (a+b > 100), constraint `max` check (a+b <500)) engine=myisam; | ||
show create table t1; | ||
Table Create Table | ||
t1 CREATE TABLE `t1` ( | ||
`a` int(11) DEFAULT NULL CHECK (a>10), | ||
`b` int(11) DEFAULT NULL CHECK (b > 20), | ||
CONSTRAINT `min` CHECK (a+b > 100), | ||
CONSTRAINT `max` CHECK (a+b <500) | ||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 | ||
insert into t1 values (100,100); | ||
insert into t1 values (1,1); | ||
ERROR HY000: CONSTRAINT 'a' failed for 'test.t1' | ||
insert into t1 values (20,1); | ||
ERROR HY000: CONSTRAINT 'b' failed for 'test.t1' | ||
insert into t1 values (20,30); | ||
ERROR HY000: CONSTRAINT 'min' failed for 'test.t1' | ||
insert into t1 values (500,500); | ||
ERROR HY000: CONSTRAINT 'max' failed for 'test.t1' | ||
insert into t1 values (101,101),(102,102),(600,600),(103,103); | ||
ERROR HY000: CONSTRAINT 'max' failed for 'test.t1' | ||
select * from t1; | ||
a b | ||
100 100 | ||
101 101 | ||
102 102 | ||
truncate table t1; | ||
insert ignore into t1 values (101,101),(102,102),(600,600),(103,103); | ||
Warnings: | ||
Warning 1369 CONSTRAINT 'max' failed for 'test.t1' | ||
select * from t1; | ||
a b | ||
101 101 | ||
102 102 | ||
103 103 | ||
set check_constraint_checks=0; | ||
truncate table t1; | ||
insert into t1 values (101,101),(102,102),(600,600),(103,103); | ||
select * from t1; | ||
a b | ||
101 101 | ||
102 102 | ||
600 600 | ||
103 103 | ||
set check_constraint_checks=@save_check_constraint; | ||
alter table t1 add c int default 0 check (c < 10); | ||
ERROR HY000: CONSTRAINT 'max' failed for table | ||
set check_constraint_checks=0; | ||
alter table t1 add c int default 0 check (c < 10); | ||
alter table t1 add check (a+b+c < 500); | ||
set check_constraint_checks=@save_check_constraint; | ||
show create table t1; | ||
Table Create Table | ||
t1 CREATE TABLE `t1` ( | ||
`a` int(11) DEFAULT NULL CHECK (a>10), | ||
`b` int(11) DEFAULT NULL CHECK (b > 20), | ||
`c` int(11) DEFAULT '0' CHECK (c < 10), | ||
CONSTRAINT `min` CHECK (a+b > 100), | ||
CONSTRAINT `max` CHECK (a+b <500), | ||
CONSTRAINT `CONSTRAINT_1` CHECK (a+b+c < 500) | ||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 | ||
insert into t1 values(105,105,105); | ||
ERROR HY000: CONSTRAINT 'c' failed for 'test.t1' | ||
insert into t1 values(249,249,9); | ||
ERROR HY000: CONSTRAINT 'CONSTRAINT_1' failed for 'test.t1' | ||
insert into t1 values(105,105,9); | ||
select * from t1; | ||
a b c | ||
101 101 0 | ||
102 102 0 | ||
600 600 0 | ||
103 103 0 | ||
105 105 9 | ||
create table t2 like t1; | ||
show create table t2; | ||
Table Create Table | ||
t2 CREATE TABLE `t2` ( | ||
`a` int(11) DEFAULT NULL CHECK (a>10), | ||
`b` int(11) DEFAULT NULL CHECK (b > 20), | ||
`c` int(11) DEFAULT '0' CHECK (c < 10), | ||
CONSTRAINT `min` CHECK (a+b > 100), | ||
CONSTRAINT `max` CHECK (a+b <500), | ||
CONSTRAINT `CONSTRAINT_1` CHECK (a+b+c < 500) | ||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 | ||
alter table t2 drop constraint c; | ||
ERROR 42000: Can't DROP 'c'; check that constraint/column/key exists | ||
alter table t2 drop constraint min; | ||
show create table t2; | ||
Table Create Table | ||
t2 CREATE TABLE `t2` ( | ||
`a` int(11) DEFAULT NULL CHECK (a>10), | ||
`b` int(11) DEFAULT NULL CHECK (b > 20), | ||
`c` int(11) DEFAULT '0' CHECK (c < 10), | ||
CONSTRAINT `max` CHECK (a+b <500), | ||
CONSTRAINT `CONSTRAINT_1` CHECK (a+b+c < 500) | ||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 | ||
drop table t1,t2; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.