001: /*
002:
003: Derby - Class org.apache.derby.impl.sql.execute.DeleteConstantAction
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.impl.sql.execute;
023:
024: import org.apache.derby.iapi.services.io.ArrayUtil;
025: import org.apache.derby.iapi.services.io.StoredFormatIds;
026: import org.apache.derby.iapi.services.io.FormatIdUtil;
027:
028: import org.apache.derby.iapi.sql.dictionary.IndexRowGenerator;
029:
030: import org.apache.derby.iapi.sql.execute.ConstantAction;
031: import org.apache.derby.iapi.sql.execute.ExecRow;
032:
033: import org.apache.derby.iapi.error.StandardException;
034:
035: import org.apache.derby.iapi.store.access.StaticCompiledOpenConglomInfo;
036:
037: import org.apache.derby.catalog.UUID;
038:
039: import org.apache.derby.iapi.services.io.FormatableBitSet;
040: import org.apache.derby.iapi.sql.ResultDescription;
041:
042: import java.io.ObjectOutput;
043: import java.io.ObjectInput;
044: import java.io.IOException;
045:
046: import java.util.Properties;
047:
048: /**
049: * This class describes compiled constants that are passed into
050: * DeleteResultSets.
051: *
052: * @author Rick Hillegas
053: */
054:
055: public class DeleteConstantAction extends WriteCursorConstantAction {
056: /********************************************************
057: **
058: ** This class implements Formatable. But it is NOT used
059: ** across either major or minor releases. It is only
060: ** written persistently in stored prepared statements,
061: ** not in the replication stage. SO, IT IS OK TO CHANGE
062: ** ITS read/writeExternal.
063: **
064: ********************************************************/
065:
066: int numColumns;
067: ConstantAction[] dependentCActions; //constant action for the dependent table
068: ResultDescription resultDescription; //required for dependent tables.
069:
070: // CONSTRUCTORS
071:
072: /**
073: * Public niladic constructor. Needed for Formatable interface to work.
074: *
075: */
076: public DeleteConstantAction() {
077: super ();
078: }
079:
080: /**
081: * Make the ConstantAction for an DELETE statement.
082: *
083: * @param conglomId Conglomerate ID.
084: * @param heapSCOCI StaticCompiledOpenConglomInfo for heap.
085: * @param irgs Index descriptors
086: * @param indexCIDS Conglomerate IDs of indices
087: * @param indexSCOCIs StaticCompiledOpenConglomInfos for indexes.
088: * @param emptyHeapRow Template for heap row.
089: * @param deferred True means process as a deferred insert.
090: * @param targetUUID UUID of target table
091: * @param lockMode The lock mode to use
092: * (row or table, see TransactionController)
093: * @param fkInfo Array of structures containing foreign key info, if any (may be null)
094: * @param triggerInfo Array of structures containing trigger info, if any (may be null)
095: * @param baseRowReadList Map of columns read in. 1 based.
096: * @param streamStorableHeapColIds Null for non rep. (0 based)
097: * @param numColumns Number of columns to read.
098: * @param singleRowSource Whether or not source is a single row source
099: */
100: public DeleteConstantAction(long conglomId,
101: StaticCompiledOpenConglomInfo heapSCOCI,
102: IndexRowGenerator[] irgs, long[] indexCIDS,
103: StaticCompiledOpenConglomInfo[] indexSCOCIs,
104: ExecRow emptyHeapRow, boolean deferred, UUID targetUUID,
105: int lockMode, FKInfo[] fkInfo, TriggerInfo triggerInfo,
106: FormatableBitSet baseRowReadList, int[] baseRowReadMap,
107: int[] streamStorableHeapColIds, int numColumns,
108: boolean singleRowSource,
109: ResultDescription resultDescription,
110: ConstantAction[] dependentCActions) {
111: super (conglomId, heapSCOCI, irgs,
112: indexCIDS,
113: indexSCOCIs,
114: null, // index names not needed for delete.
115: deferred, (Properties) null, targetUUID, lockMode,
116: fkInfo, triggerInfo, emptyHeapRow, baseRowReadList,
117: baseRowReadMap, streamStorableHeapColIds,
118: singleRowSource);
119:
120: this .numColumns = numColumns;
121: this .resultDescription = resultDescription;
122: this .dependentCActions = dependentCActions;
123: }
124:
125: // INTERFACE METHODS
126:
127: // Formatable methods
128:
129: /**
130: @see java.io.Externalizable#readExternal
131: @exception IOException thrown on error
132: @exception ClassNotFoundException thrown on error
133: */
134: public void readExternal(ObjectInput in) throws IOException,
135: ClassNotFoundException {
136: super .readExternal(in);
137: numColumns = in.readInt();
138:
139: //information required for cascade delete
140: dependentCActions = new ConstantAction[ArrayUtil
141: .readArrayLength(in)];
142: ArrayUtil.readArrayItems(in, dependentCActions);
143: resultDescription = (ResultDescription) in.readObject();
144:
145: }
146:
147: /**
148:
149: @exception IOException thrown on error
150: */
151: public void writeExternal(ObjectOutput out) throws IOException {
152: super .writeExternal(out);
153: out.writeInt(numColumns);
154:
155: //write cascade delete information
156: ArrayUtil.writeArray(out, dependentCActions);
157: out.writeObject(resultDescription);
158:
159: }
160:
161: /**
162: * Get the formatID which corresponds to this class.
163: *
164: * @return the formatID of this class
165: */
166: public int getTypeFormatId() {
167: return StoredFormatIds.DELETE_CONSTANT_ACTION_V01_ID;
168: }
169:
170: // KeyToBaseRowConstantAction METHODS
171: }
|