1 package com.quadcap.sql.file; 2 3 40 41 import java.io.Externalizable ; 42 import java.io.IOException ; 43 import java.io.ObjectInput ; 44 import java.io.ObjectOutput ; 45 46 import java.util.Vector ; 47 48 import java.sql.SQLException ; 49 50 import com.quadcap.sql.io.Extern; 51 import com.quadcap.sql.io.Externable; 52 53 import com.quadcap.sql.lock.Transaction; 54 55 import com.quadcap.util.Debug; 56 57 65 public class LogEntry implements LogOp, Externable { 66 public static final int BEGIN_TRANSACTION = 1; 68 public static final int BEGIN_STATEMENT = 2; 69 public static final int COMMIT = 3; 70 public static final int ROLLBACK = 4; 71 public static final int CHECKPOINT = 5; 72 public static final int BLOCK_WRITE = 6; 73 public static final int CLOSE = 7; 74 public static final int FLUSH = 8; 75 public static final int STEP = 9; 76 public static final int SYNC = 10; 77 public static final int MAX_CODES = 11; 78 79 public static final int DONE = 0; 81 public static final int UNDONE = 1; 82 83 int redoState = DONE; 84 int code; 85 long transId = -1; 86 int stmtId = -1; 87 int prev = -1; 88 89 transient int position; 92 93 public LogEntry() {} 94 95 public LogEntry(int code) { this.code = code; } 96 97 public LogEntry(long transId, int code) { 98 this.transId = transId; 99 this.code = code; 100 } 101 102 public LogEntry(long transId, int stmtId, int code) { 103 this.transId = transId; 104 this.stmtId = stmtId; 105 this.code = code; 106 } 107 108 public final int getCode() { return code; } 109 110 113 public final void setTransactionId(long transId) { 114 this.transId = transId; 115 } 116 117 120 public final long getTransactionId() { return transId; } 121 122 125 public final void setStatementId(int stmtId) { 126 this.stmtId = stmtId; 127 } 128 129 132 public final int getStatementId() { return stmtId; } 133 134 public final int getPosition() { return position; } 135 136 final void setPosition(int position) { this.position = position; } 137 138 final void setPrev(int prev) { this.prev = prev; } 139 140 final int getPrev() { return prev; } 141 142 public final int getRedoState() { return redoState; } 143 144 public final void setRedoState(int redo) { redoState = redo; } 145 146 public void readExternal(ObjectInput in) 147 throws IOException , ClassNotFoundException 148 { 149 redoState = in.read(); 150 code = in.read(); 151 transId = in.readLong(); 152 stmtId = in.readInt(); 153 prev = in.readInt(); 154 } 155 156 public void writeExternal(ObjectOutput out) throws IOException { 157 out.write(redoState); 158 out.write(code); 159 out.writeLong(transId); 160 out.writeInt(stmtId); 161 out.writeInt(prev); 162 } 163 164 public String toString() { 166 StringBuffer sb = new StringBuffer (); 167 sb.append("[T"); 168 sb.append(Long.toString(transId)); 169 if (stmtId >= 0) { 170 sb.append(","); 171 sb.append(String.valueOf(stmtId)); 172 } 173 sb.append("] (pos=" + position + " prev=" + prev + ") "); 174 switch (code) { 175 case BEGIN_TRANSACTION: 176 sb.append("BEGIN TRANSACTION"); 177 break; 178 case BEGIN_STATEMENT: 179 sb.append("BEGIN_STATEMENT"); 180 break; 181 case COMMIT: 182 sb.append("COMMIT"); 183 break; 184 case ROLLBACK: 185 sb.append("ROLLBACK"); 186 break; 187 case CHECKPOINT: 188 sb.append("CHECKPOINT"); 189 break; 190 case BLOCK_WRITE: 191 sb.append("BLOCK_WRITE"); 192 break; 193 case FLUSH: 194 sb.append("FLUSH"); 195 break; 196 case CLOSE: 197 sb.append("CLOSE"); 198 break; 199 case SYNC: 200 sb.append("SYNC"); 201 break; 202 case STEP: 203 String s = this.getClass().getName(); 204 int idx = s.lastIndexOf('.'); 205 if (idx > 0) s = s.substring(idx+1); 206 s = s + ((redoState == DONE) ? "" : " [UNDONE]"); 207 sb.append("STEP " + s); 208 break; 209 default: 210 sb.append(Integer.toString(code)); 211 break; 212 } 213 return sb.toString(); 214 } 215 217 static Extern extern = null; 218 public Extern getExtern() { return extern; } 219 public void setExtern(Extern extern) { LogEntry.extern = extern; } 220 221 public void handle(Log log) throws Exception { 222 log.reallyAddEntry(this); 223 } 224 225 229 public void redo(Transaction t, Datafile db) 230 throws IOException , DatafileException 231 { 232 } 233 234 238 public void undo(Transaction t, Datafile db) 239 throws IOException , DatafileException 240 { 241 } 242 243 public void discard(Datafile db) throws IOException {} 244 } 245 | Popular Tags |