| 1 package com.quadcap.sql; 2 3 40 41 import java.io.BufferedInputStream ; 42 import java.io.BufferedOutputStream ; 43 import java.io.Externalizable ; 44 import java.io.IOException ; 45 import java.io.ObjectInput ; 46 import java.io.ObjectOutput ; 47 48 import java.sql.SQLException ; 49 50 import com.quadcap.sql.file.ByteUtil; 51 import com.quadcap.sql.file.PageManager; 52 import com.quadcap.sql.file.RandomAccess; 53 import com.quadcap.sql.file.RandomAccessInputStream; 54 import com.quadcap.sql.file.RandomAccessOutputStream; 55 56 import com.quadcap.sql.io.ObjectInputStream; 57 import com.quadcap.sql.io.ObjectOutputStream; 58 import com.quadcap.sql.io.Extern; 59 60 import com.quadcap.sql.index.Btree; 61 62 import com.quadcap.sql.types.Value; 63 import com.quadcap.sql.types.ValueNull; 64 65 import com.quadcap.io.CountedInputStream; 66 67 import com.quadcap.util.Debug; 68 69 74 public class AddColumn extends LogStep implements Externalizable { 75 transient Table table; 76 77 Column column; 78 String tableName = null; 79 int pos = -1; 80 81 84 public AddColumn() {} 85 86 89 public AddColumn(Session session, Table table, Column column, int pos) { 90 super(session); 91 this.table = table; 92 this.tableName = table.getName(); 93 this.column = column; 94 this.pos = pos; 95 } 96 97 100 Table getTable(Database db) throws IOException { 101 if (table == null) { 102 table = (Table)db.getRelation(tableName); 103 } 104 return table; 105 } 106 107 111 public void undo(Session session) throws IOException , SQLException { 112 Database db = session.getDatabase(); 113 getTable(db); 114 Column c = table.getColumn(column.getName()); 115 table.deleteColumn(c.getColumn()); 116 db.updateRelation(table); 117 } 118 119 123 public void redo(Session session) throws IOException , SQLException { 124 Database db = session.getDatabase(); 125 getTable(db); 126 if (pos > 0) { 127 table.addColumn(column, pos); 128 } else { 129 table.addColumn(column); 130 } 131 db.updateRelation(table); 132 } 133 134 137 public void readExternal(ObjectInput in) 138 throws IOException , ClassNotFoundException  139 { 140 super.readExternal(in); 141 this.column = (Column)in.readObject(); 142 this.tableName = (String )in.readObject(); 143 this.pos = in.readInt(); 144 } 145 146 149 public void writeExternal(ObjectOutput out) throws IOException { 150 super.writeExternal(out); 151 out.writeObject(column); 152 out.writeObject(tableName); 153 out.writeInt(pos); 154 } 155 156 160 public String toString() { 161 StringBuffer sb = new StringBuffer (super.toString()); 162 sb.append(" AddColumn("); 163 sb.append(tableName); 164 sb.append(','); 165 sb.append(column.toString()); 166 if (pos > 0) { 167 sb.append(','); 168 sb.append(pos); 169 } 170 sb.append(")"); 171 return sb.toString(); 172 } 173 175 178 static Extern extern; 179 public void setExtern(Extern extern) { AddColumn.extern = extern; } 180 public Extern getExtern() { return extern; } 181 } 182 | Popular Tags |