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

Dag H. Wanvik commented on DERBY-532:
-------------------------------------

Thanks, Mike. Your proposal makes sense to me and I agree on your architectural 
consideration that as far as keeping the store out of the language 
considerations here - I believe what you propose should work, but would be 
slightly less performant that what I currently do, in that we would be storing 
away (and checking at commit time) *all* inserted keys, not only those that are 
duplicates. But I agree it would be safer if we don't fully trust the current 
"left/right" checking, and also simpler, as far as reducing special code in the 
store. I'll have a closer look at such an approach and report back. 

Also with such a solution, at commit time two concurrent transactions both 
inserting duplicates would both be running checks. Could that give rise to 
dead-locks I wonder? Could both have a row level X write lock on a duplicate in 
addition to an existing (left-most) unlocked existing row, say? Or can we latch 
the X locked row in the BTree to detect a duplicate anyway?) 

As far as foreign constraints are concerned, I haven't looked closely at those 
yet, but my hunch is that we could reuse the mechanism developed for pk/unique.

> Support deferrable constraints
> ------------------------------
>
>                 Key: DERBY-532
>                 URL: https://issues.apache.org/jira/browse/DERBY-532
>             Project: Derby
>          Issue Type: Improvement
>          Components: SQL
>            Reporter: Jörg von Frantzius
>            Assignee: Dag H. Wanvik
>              Labels: derby_triage10_11
>         Attachments: deferredConstraints.html, deferredConstraints.html, 
> deferredConstraints.html, deferredConstraints.html, derby-532-import-1.diff, 
> derby-532-import-1.status, derby-532-import-2.diff, derby-532-import-3.diff, 
> derby-532-import-3.status, derby-532-more-tests-1.diff, 
> derby-532-more-tests-1.stat, derby-532-syntax-binding-dict-1.diff, 
> derby-532-syntax-binding-dict-1.status, derby-532-syntax-binding-dict-2.diff, 
> derby-532-syntax-binding-dict-2.status, 
> derby-532-syntax-binding-dict-all-1.diff, 
> derby-532-testAlterConstraintInvalidation.diff, 
> derby-532-testAlterConstraintInvalidation.status, derby-532-unique-pk-1.diff, 
> derby-532-unique-pk-1.status, derby-532-unique-pk-2.diff, 
> derby-532-unique-pk-3.diff, derby-532-unique-pk-3.status, 
> derby-532-xa-1.diff, derby-532-xa-2.diff, derby-532-xa-3.diff, 
> derby-532-xa-3.status
>
>
> In many situations it is desirable to have constraints checking taking place 
> only at transaction commit time, and not before. If e.g. there is a chain of 
> foreign key constraints between tables, insert statements have to be ordered 
> to avoid constraint violations. If foreign key references are circular, the 
> DML has to be split into insert statements and subsequent update statements 
> by the user.
> In other words, with deferred constraints checking, life is much easier for 
> the user. Also it can create problems with softwares such as 
> object-relational mapping tools that are not prepared for statement ordering 
> and thus depend on deferred constraints checking.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to