Subject | Re: [Firebird-Architect] Re: Nulls in CHECK Constraints |
---|---|
Author | Alex Peshkov |
Post date | 2005-10-26T15:36:34Z |
Dmitry Yemanov wrote:
create table t1 (f1 float);
create table t2 (f2 float check (f2 > (select sum(f1) from t1)));
commit;
-- avoid nulls - I don't have Dmitry's HEAD :)
insert into t1 values(0);
-- that's OK - constraint violated
insert into t2 values(-1);
Statement failed, SQLCODE = -297
Operation violates CHECK constraint INTEG_240 on view or table T2
-At trigger 'CHECK_241'
-- successfully add record
insert into t2 values(1);
-- now constraint becomes violated, but (as supposed) no error displayed
insert into t1 values(100);
No need to say, that next
insert into t2 values(1);
fires an error.
Is it up to standard that enabling cross-table check constraints makes
it virtually impossible to strictly follow them?
>>2) There are other issues around constraints, includingShould not we clarify one aspect of cross-table constraints. Have a look:
>>their use of other tables, an whether or not they are
>>invoked on delete. Here I agree with Dmitry that the
>>standards does not disallow cross-table constraints and
>>with everyone that constraint handling tends not to be
>>as solid as it should be. But that's for another day.
>
>
> OK. We also have a bugreport that check constraints should perform in the
> system context, i.e. work as "dirty read" (like our PK and FK behave). I
> don't have a clue how it corresponds to the SQL spec.
>
create table t1 (f1 float);
create table t2 (f2 float check (f2 > (select sum(f1) from t1)));
commit;
-- avoid nulls - I don't have Dmitry's HEAD :)
insert into t1 values(0);
-- that's OK - constraint violated
insert into t2 values(-1);
Statement failed, SQLCODE = -297
Operation violates CHECK constraint INTEG_240 on view or table T2
-At trigger 'CHECK_241'
-- successfully add record
insert into t2 values(1);
-- now constraint becomes violated, but (as supposed) no error displayed
insert into t1 values(100);
No need to say, that next
insert into t2 values(1);
fires an error.
Is it up to standard that enabling cross-table check constraints makes
it virtually impossible to strictly follow them?