001: /*
002:
003: Derby - Class org.apache.derby.iapi.sql.execute.RowChanger
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.iapi.sql.execute;
023:
024: import org.apache.derby.iapi.services.context.ContextService;
025: import org.apache.derby.iapi.services.sanity.SanityManager;
026:
027: import org.apache.derby.iapi.error.StandardException;
028:
029: import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
030: import org.apache.derby.iapi.sql.dictionary.IndexRowGenerator;
031:
032: import org.apache.derby.iapi.store.access.ConglomerateController;
033: import org.apache.derby.iapi.types.RowLocation;
034: import org.apache.derby.iapi.store.access.TransactionController;
035:
036: /**
037: Perform row at a time DML operations of tables and maintain indexes.
038: */
039: public interface RowChanger {
040: /**
041: Open this RowChanger.
042:
043: <P>Note to avoid the cost of fixing indexes that do not
044: change during update operations use openForUpdate().
045: @param lockMode The lock mode to use
046: (row or table, see TransactionController)
047:
048: @exception StandardException thrown on failure to convert
049: */
050: public void open(int lockMode) throws StandardException;
051:
052: /**
053: * Set the row holder for this changer to use.
054: * If the row holder is set, it wont bother
055: * saving copies of rows needed for deferred
056: * processing. Also, it will never close the
057: * passed in rowHolder.
058: *
059: * @param rowHolder the row holder
060: */
061: public void setRowHolder(TemporaryRowHolder rowHolder);
062:
063: /**
064: * Sets the index names of the tables indices. Used for error reporting.
065: *
066: * @param indexNames Names of all the indices on this table.
067: */
068: public void setIndexNames(String[] indexNames);
069:
070: /**
071: Open this RowChanger to avoid fixing indexes that do not change
072: during update operations.
073:
074: @param fixOnUpdate fixOnUpdat[ix] == true ==> fix index 'ix' on
075: an update operation.
076: @param lockMode The lock mode to use
077: (row or table, see TransactionController)
078: @param wait If true, then the caller wants to wait for locks. False will be
079: when we using a nested user xaction - we want to timeout right away
080: if the parent holds the lock. (bug 4821)
081:
082: @exception StandardException thrown on failure to convert
083: */
084: public void openForUpdate(boolean[] fixOnUpdate, int lockMode,
085: boolean wait) throws StandardException;
086:
087: /**
088: Insert a row into the table and perform associated index maintenance.
089:
090: @param baseRow the row.
091: @exception StandardException Thrown on error
092: */
093: public void insertRow(ExecRow baseRow) throws StandardException;
094:
095: /**
096: Delete a row from the table and perform associated index maintenance.
097:
098: @param baseRow the row.
099: @param baseRowLocation the row's base conglomerate
100: location
101: @exception StandardException Thrown on error
102: */
103: public void deleteRow(ExecRow baseRow, RowLocation baseRowLocation)
104: throws StandardException;
105:
106: /**
107: Update a row in the table and perform associated index maintenance.
108:
109: @param oldBaseRow the old image of the row.
110: @param newBaseRow the new image of the row.
111: @param baseRowLocation the row's base conglomerate
112: location
113: @exception StandardException Thrown on error
114: */
115: public void updateRow(ExecRow oldBaseRow, ExecRow newBaseRow,
116: RowLocation baseRowLocation) throws StandardException;
117:
118: /**
119: Finish processing the changes. This means applying the deferred
120: inserts for updates to unique indexes.
121:
122: @exception StandardException Thrown on error
123: */
124: public void finish() throws StandardException;
125:
126: /**
127: Close this RowChanger.
128:
129: @exception StandardException Thrown on error
130: */
131: public void close() throws StandardException;
132:
133: /**
134: * Return the ConglomerateController from this RowChanger.
135: * This is useful when copying properties from heap to
136: * temp conglomerate on insert/update/delete.
137: *
138: * @return The ConglomerateController from this RowChanger.
139: */
140: public ConglomerateController getHeapConglomerateController();
141:
142: /**
143: Open this RowChanger.
144:
145: <P>Note to avoid the cost of fixing indexes that do not
146: change during update operations use openForUpdate().
147: @param lockMode The lock mode to use
148: (row or table, see TransactionController)
149: @param wait If true, then the caller wants to wait for locks. False will be
150: when we using a nested user xaction - we want to timeout right away
151: if the parent holds the lock.
152:
153: @exception StandardException thrown on failure to convert
154: */
155: public void open(int lockMode, boolean wait)
156: throws StandardException;
157: }
|