001: package com.quadcap.sql;
002:
003: /* Copyright 1999 - 2003 Quadcap Software. All rights reserved.
004: *
005: * This software is distributed under the Quadcap Free Software License.
006: * This software may be used or modified for any purpose, personal or
007: * commercial. Open Source redistributions are permitted. Commercial
008: * redistribution of larger works derived from, or works which bundle
009: * this software requires a "Commercial Redistribution License"; see
010: * http://www.quadcap.com/purchase.
011: *
012: * Redistributions qualify as "Open Source" under one of the following terms:
013: *
014: * Redistributions are made at no charge beyond the reasonable cost of
015: * materials and delivery.
016: *
017: * Redistributions are accompanied by a copy of the Source Code or by an
018: * irrevocable offer to provide a copy of the Source Code for up to three
019: * years at the cost of materials and delivery. Such redistributions
020: * must allow further use, modification, and redistribution of the Source
021: * Code under substantially the same terms as this license.
022: *
023: * Redistributions of source code must retain the copyright notices as they
024: * appear in each source code file, these license terms, and the
025: * disclaimer/limitation of liability set forth as paragraph 6 below.
026: *
027: * Redistributions in binary form must reproduce this Copyright Notice,
028: * these license terms, and the disclaimer/limitation of liability set
029: * forth as paragraph 6 below, in the documentation and/or other materials
030: * provided with the distribution.
031: *
032: * The Software is provided on an "AS IS" basis. No warranty is
033: * provided that the Software is free of defects, or fit for a
034: * particular purpose.
035: *
036: * Limitation of Liability. Quadcap Software shall not be liable
037: * for any damages suffered by the Licensee or any third party resulting
038: * from use of the Software.
039: */
040:
041: import java.io.Externalizable;
042: import java.io.IOException;
043: import java.io.ObjectInput;
044: import java.io.ObjectOutput;
045:
046: import java.sql.SQLException;
047:
048: import com.quadcap.sql.file.BlockFile;
049: import com.quadcap.sql.file.ByteUtil;
050: import com.quadcap.sql.file.SubPageManager;
051: import com.quadcap.sql.io.Extern;
052:
053: import com.quadcap.sql.index.Btree;
054:
055: import com.quadcap.util.Debug;
056: import com.quadcap.util.Util;
057:
058: /**
059: * Log step to delete an index entry.
060: *
061: * @author Stan Bailes
062: */
063: public class DeleteIndexEntry extends ModIndexEntry implements
064: Externalizable {
065: byte[] data;
066:
067: /**
068: * Default constructor
069: */
070: public DeleteIndexEntry() {
071: }
072:
073: /**
074: * Explicit constructor
075: */
076: public DeleteIndexEntry(Session session, Constraint constraint,
077: byte[] key) {
078: super (session, constraint, key);
079: }
080:
081: public void redo(Session session) throws IOException, SQLException {
082: if (index == null)
083: getIndex(session);
084: index.delete(key);
085: }
086:
087: public void undo(Session session) throws IOException {
088: if (data != null) {
089: if (index == null)
090: getIndex(session);
091: long rowId = ByteUtil.getLong(data, 0);
092: ByteUtil
093: .putLong(data, 0, session.getLog().getRowMap(rowId));
094: index.set(key, data);
095: }
096: }
097:
098: public void prepare(Session session) throws IOException {
099: if (index == null)
100: getIndex(session);
101: this .data = index.get(key);
102: }
103:
104: /**
105: * Read me from a stream
106: *
107: * @exception IOException may be thrown
108: */
109: public void readExternal(ObjectInput in) throws IOException,
110: ClassNotFoundException {
111: super .readExternal(in);
112: this .data = null;
113: int cnt = in.readInt();
114: if (cnt > 0) {
115: data = new byte[cnt];
116: in.read(data);
117: }
118: }
119:
120: /**
121: * Write me to a stream
122: *
123: * @exception IOException may be thrown
124: */
125: public void writeExternal(ObjectOutput out) throws IOException {
126: super .writeExternal(out);
127: if (data == null) {
128: out.writeInt(0);
129: } else {
130: out.writeInt(data.length);
131: out.write(data);
132: }
133: }
134:
135: //#ifdef DEBUG
136: /**
137: * Return string representation for debugging
138: */
139: public String toString() {
140: return "Del: "
141: + super .toString()
142: + ", rowId = "
143: + (data != null && data.length >= 8 ? SubPageManager
144: .toString(ByteUtil.getLong(data, 0)) : "<NULL>");
145: }
146:
147: //#endif
148:
149: /**
150: * My class's extern object
151: */
152: static Extern extern;
153:
154: public void setExtern(Extern extern) {
155: DeleteIndexEntry.extern = extern;
156: }
157:
158: public Extern getExtern() {
159: return extern;
160: }
161: }
|