blob: 740bdcdd09b40c9a79a9912d75ac88803821eadc [file] [log] [blame]
/*-
* Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.je;
/**
* The interface implemented for setting single-valued foreign keys to null.
*
* <p>A key nullifier is used with a secondary database that is configured to
* have a foreign key integrity constraint and a delete action of {@link
* ForeignKeyDeleteAction#NULLIFY}. The key nullifier is specified by calling
* {@link SecondaryConfig#setForeignKeyNullifier}.</p>
*
* <p>When a referenced record in the foreign key database is deleted and the
* foreign key delete action is <code>NULLIFY</code>, the {@link
* ForeignKeyNullifier#nullifyForeignKey} method is called. This method sets
* the foreign key reference to null in the datum of the primary database. The
* primary database is then updated to contain the modified datum. The result
* is that the secondary key is deleted.</p>
*
* This interface may be used along with {@link SecondaryKeyCreator} for
* many-to-one and one-to-one relationships. It may <em>not</em> be used with
* {@link SecondaryMultiKeyCreator} because the secondary key is not passed as
* a parameter to the nullifyForeignKey method and this method would not know
* which key to nullify. When using {@link SecondaryMultiKeyCreator}, use
* {@link ForeignMultiKeyNullifier} instead.
*/
public interface ForeignKeyNullifier {
/**
* Sets the foreign key reference to null in the datum of the primary
* database.
*
* @param secondary the database in which the foreign key integrity
* constraint is defined. This parameter is passed for informational
* purposes but is not commonly used.
*
* @param data the existing primary datum in which the foreign key
* reference should be set to null. This parameter should be updated by
* this method if it returns true.
*
* @return true if the datum was modified, or false to indicate that the
* key is not present.
*
* @throws DatabaseException if an error occurs attempting to clear the key
* reference.
*/
public boolean nullifyForeignKey(SecondaryDatabase secondary,
DatabaseEntry data)
throws DatabaseException;
}