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

Dag H. Wanvik edited comment on DERBY-532 at 4/25/14 5:54 PM:
--------------------------------------------------------------

Patch derby-532-fk-6. Smaller changes relative to #5.
I intend to commit version this if no comments are made.

{panel:title=Patch 
details|borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1|bgColor=#FFFFCE}
Details:

M       
java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java
M       
java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java

Move logic related to constraints checking to
DeferredConstraintsMemory. 

M       
java/engine/org/apache/derby/impl/sql/execute/DeferredConstraintsMemory.java

New logic from LanguageConnectionContext; added logic for the case of
foreign key constraints violation memory and checking. Make old "if"s
on object type object oriented: new interface methods in
ValidationInfo: possiblyValidateOnReturn and validateConstraint which
are implemented differently for each constraint type.

M       java/engine/org/apache/derby/impl/sql/execute/InsertResultSet.java
M       java/engine/org/apache/derby/impl/sql/execute/UpdateResultSet.java
M       
java/engine/org/apache/derby/impl/sql/execute/ConstraintConstantAction.java

More fk info to bulk insert; smaller refactorings.

M       
java/engine/org/apache/derby/iapi/sql/dictionary/ReferencedKeyConstraintDescriptor.java

Change the method hasNonSelfReferencingFK to getNonSelfReferencingFK;
we need to get at them, see AlterTableConstantAction for truncate.

M       
java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java

Refactored logic to DeferredConstraintsMemory#compressOrTruncate.
Allow truncate (if deferred and NO_ACTION constraints only) of
deferenced table.

M       java/engine/org/apache/derby/iapi/types/SQLBoolean.java
M       java/engine/org/apache/derby/impl/sql/execute/IndexChanger.java
M       
java/engine/org/apache/derby/impl/sql/execute/ProjectRestrictResultSet.java

Minor refactorings.

M       java/engine/org/apache/derby/impl/sql/execute/FKInfo.java

Extended with information about deferred constraints; conglomerate ids and 
constrain ids.

M       java/engine/org/apache/derby/impl/sql/compile/DMLModStatementNode.java

More information collection to support extended FKInfo, see above.

M       java/engine/org/apache/derby/impl/sql/compile/TableElementList.java

Extra predicates to avoid logic for unique and primary key constraints to 
inferere with
deferred foreign keys.

M       
java/engine/org/apache/derby/impl/sql/execute/CreateConstraintConstantAction.java

Remove foreign keys as "not supported", minor refactorings.

M       java/engine/org/apache/derby/impl/sql/execute/DeleteResultSet.java

Added arguments, refactorings.

M       java/engine/org/apache/derby/impl/sql/execute/ForeignKeyRIChecker.java

This is where we actually defer when we see a fk violation at insert/update of 
referencing table.

M       java/engine/org/apache/derby/impl/sql/execute/GenericRIChecker.java

Minor interface changes: new member variable: lcc

M       java/engine/org/apache/derby/impl/sql/execute/RIBulkChecker.java

This is where we actually defer when we see a fk violation at bulk insert
into referencing table.


M       java/engine/org/apache/derby/impl/sql/execute/RISetChecker.java

Minor interface changes; added parameters.

M       
java/engine/org/apache/derby/impl/sql/execute/ReferencedKeyRIChecker.java

This is where we actually defer when we see a fk violation at delete or update 
of
a row in the referenced table.

M       
java/engine/org/apache/derby/impl/sql/execute/SetConstraintsConstantAction.java

Make SET CONSTRAINTS work also for foreign keys.

M       java/shared/org/apache/derby/shared/common/reference/SQLState.java
M       java/engine/org/apache/derby/loc/messages.xml

New error messages.

M       
java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConstraintCharacteristicsTest.java

Extended existing deferrable constraints to also work for foreign constraints.

A       
java/testing/org/apache/derbyTesting/functionTests/tests/lang/ForeignKeysDeferrableTest.java

New tests only for foreign key constraints.

M       
java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/Changes10_11.java

Remove asserts for not implemented on deferrable foreign key
constraints, check basic sanity iff hard upgraded.

M       java/testing/org/apache/derbyTesting/junit/BaseJDBCTestCase.java

Added assertCommitError; minor changes to support fk testing.
{panel}




was (Author: dagw):
Patch derby-532-fk-6. Smaller changes relative to #5.
I intend to commit version this if no comments are made.

{panel:title="Patch 
details"|borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1|bgColor=#FFFFCE}
Details:

M       
java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java
M       
java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java

Move logic related to constraints checking to
DeferredConstraintsMemory. 

M       
java/engine/org/apache/derby/impl/sql/execute/DeferredConstraintsMemory.java

New logic from LanguageConnectionContext; added logic for the case of
foreign key constraints violation memory and checking. Make old "if"s
on object type object oriented: new interface methods in
ValidationInfo: possiblyValidateOnReturn and validateConstraint which
are implemented differently for each constraint type.

M       java/engine/org/apache/derby/impl/sql/execute/InsertResultSet.java
M       java/engine/org/apache/derby/impl/sql/execute/UpdateResultSet.java
M       
java/engine/org/apache/derby/impl/sql/execute/ConstraintConstantAction.java

More fk info to bulk insert; smaller refactorings.

M       
java/engine/org/apache/derby/iapi/sql/dictionary/ReferencedKeyConstraintDescriptor.java

Change the method hasNonSelfReferencingFK to getNonSelfReferencingFK;
we need to get at them, see AlterTableConstantAction for truncate.

M       
java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java

Refactored logic to DeferredConstraintsMemory#compressOrTruncate.
Allow truncate (if deferred and NO_ACTION constraints only) of
deferenced table.

M       java/engine/org/apache/derby/iapi/types/SQLBoolean.java
M       java/engine/org/apache/derby/impl/sql/execute/IndexChanger.java
M       
java/engine/org/apache/derby/impl/sql/execute/ProjectRestrictResultSet.java

Minor refactorings.

M       java/engine/org/apache/derby/impl/sql/execute/FKInfo.java

Extended with information about deferred constraints; conglomerate ids and 
constrain ids.

M       java/engine/org/apache/derby/impl/sql/compile/DMLModStatementNode.java

More information collection to support extended FKInfo, see above.

M       java/engine/org/apache/derby/impl/sql/compile/TableElementList.java

Extra predicates to avoid logic for unique and primary key constraints to 
inferere with
deferred foreign keys.

M       
java/engine/org/apache/derby/impl/sql/execute/CreateConstraintConstantAction.java

Remove foreign keys as "not supported", minor refactorings.

M       java/engine/org/apache/derby/impl/sql/execute/DeleteResultSet.java

Added arguments, refactorings.

M       java/engine/org/apache/derby/impl/sql/execute/ForeignKeyRIChecker.java

This is where we actually defer when we see a fk violation at insert/update of 
referencing table.

M       java/engine/org/apache/derby/impl/sql/execute/GenericRIChecker.java

Minor interface changes: new member variable: lcc

M       java/engine/org/apache/derby/impl/sql/execute/RIBulkChecker.java

This is where we actually defer when we see a fk violation at bulk insert
into referencing table.


M       java/engine/org/apache/derby/impl/sql/execute/RISetChecker.java

Minor interface changes; added parameters.

M       
java/engine/org/apache/derby/impl/sql/execute/ReferencedKeyRIChecker.java

This is where we actually defer when we see a fk violation at delete or update 
of
a row in the referenced table.

M       
java/engine/org/apache/derby/impl/sql/execute/SetConstraintsConstantAction.java

Make SET CONSTRAINTS work also for foreign keys.

M       java/shared/org/apache/derby/shared/common/reference/SQLState.java
M       java/engine/org/apache/derby/loc/messages.xml

New error messages.

M       
java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConstraintCharacteristicsTest.java

Extended existing deferrable constraints to also work for foreign constraints.

A       
java/testing/org/apache/derbyTesting/functionTests/tests/lang/ForeignKeysDeferrableTest.java

New tests only for foreign key constraints.

M       
java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/Changes10_11.java

Remove asserts for not implemented on deferrable foreign key
constraints, check basic sanity iff hard upgraded.

M       java/testing/org/apache/derbyTesting/junit/BaseJDBCTestCase.java

Added assertCommitError; minor changes to support fk testing.
{panel}



> 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
>             Fix For: 10.11.0.0
>
>         Attachments: IndexDescriptor.html, IndexDescriptorImpl.html, 
> IndexRowGenerator.html, SortObserver.html, deferredConstraints.html, 
> deferredConstraints.html, deferredConstraints.html, deferredConstraints.html, 
> deferredConstraints.html, derby-532-allow-pk-unique-1.diff, 
> derby-532-allow-pk-unique-1.status, derby-532-check-constraints-1.diff, 
> derby-532-check-constraints-1.stat, derby-532-check-constraints-2.diff, 
> derby-532-check-constraints-2.stat, derby-532-fix-drop-not-nullable.diff, 
> derby-532-fix-drop-not-nullable.status, derby-532-fix-metadata-1.diff, 
> derby-532-fix-metadata-1.status, derby-532-fk-1.diff, derby-532-fk-3.diff, 
> derby-532-fk-3.stat, derby-532-fk-4.diff, derby-532-fk-5.diff, 
> derby-532-fk-5.stat, derby-532-fk-6.diff, derby-532-fk-6.stat, 
> derby-532-fk-baseline-2.diff, derby-532-fk-baseline.diff, 
> 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-nullableUniqueFix.diff, derby-532-nullableUniqueFix.status, 
> derby-532-post-scan-1.diff, derby-532-post-scan-1.stat, 
> derby-532-post-scan-2.diff, derby-532-post-scan-2.stat, 
> derby-532-post-scan-3.diff, derby-532-post-scan-3.stat, 
> derby-532-post-scan-4.diff, derby-532-post-scan-4.stat, 
> derby-532-serializable-scan-1.diff, derby-532-serializable-scan-2.diff, 
> derby-532-serializable-scan-2.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-test-speedup.diff, 
> derby-532-test-speedup.status, 
> derby-532-test-with-default-deferrable-all-over.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-upgrade-1.diff, derby-532-upgrade-1.status, 
> derby-532-upgrade-1b.diff, 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.2#6252)

Reply via email to