[ 
https://issues.apache.org/jira/browse/DERBY-3944?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12647041#action_12647041
 ] 

Andrew McIntyre commented on DERBY-3944:
----------------------------------------

I checked yesterday and contrary to the way the docs read, DB2 doesn't actually 
allow user defined functions in SQL  in check constraints either. I suspect 
this may simply be an overlooked corner in the SQL spec, since none of the 
major vendors support user-defined functions in check constraints and built-in 
functions never need a schema qualifier.

> CHECK constraints involving user-coded functions may return different results 
> depending on who performs the trigging INSERT/UPDATE
> ----------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-3944
>                 URL: https://issues.apache.org/jira/browse/DERBY-3944
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.5.0.0
>            Reporter: Rick Hillegas
>
> When compiling a CHECK constraint on behalf of an INSERT/UPDATE statement, 
> Derby uses the current schema in order to resolve unqualified function names 
> which appear in the CHECK constraint. This means that the CHECK constraint 
> may evaluate true for some users, false for others, and for others the CHECK 
> constraint may raise an error saying that Derby can't resolve the function 
> reference. This behavior violates the "retrospective determinacy" of CHECK 
> constraints as specified by part 2 of the ANSI/ISO standard:
> 1) section 11.9 (<check constraint definition>), syntax rule 5
> 2) same section, general rule 1
> 3) section 11.6 (<table constraint definition>), general rule 3
> 4) section 4.16 (Determinism)
> For more discussion, please see this email thread: 
> http://www.nabble.com/Problem-with-CHECK-constraints-td20445344.html#a20445344
> The following script demonstrates this problem:
> connect 
> 'jdbc:derby:derbyauth;create=true;user=test_dbo;password=test_dbopassword' as 
> test_dbo_conn;
> drop table t_bp_2;
> drop function f_fp_minus;
> create function f_fp_minus
> (
>     a int
> )
> returns int
> language java
> deterministic
> parameter style java
> no sql
> external name 
> 'org.apache.derbyTesting.functionTests.tests.lang.GeneratedColumnsTest.minus'
> ;
> create table t_bp_2( a int, constraint t_bp_2_check check ( f_fp_minus( a ) < 
> 0 ) );
> grant insert on t_bp_2 to public;
> insert into test_dbo.t_bp_2( a ) values ( 100 );
> connect 'jdbc:derby:derbyauth;create=true;user=janet;password=janetpassword' 
> as janet_conn;
> insert into test_dbo.t_bp_2( a ) values ( 100 );

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to