00001 package com.quadcap.sql;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
import java.io.BufferedInputStream;
00042
import java.io.BufferedOutputStream;
00043
import java.io.Externalizable;
00044
import java.io.IOException;
00045
import java.io.ObjectInput;
00046
import java.io.ObjectOutput;
00047
00048
import java.sql.SQLException;
00049
00050
import com.quadcap.sql.file.ByteUtil;
00051
import com.quadcap.sql.file.PageManager;
00052
import com.quadcap.sql.file.RandomAccess;
00053
import com.quadcap.sql.file.RandomAccessInputStream;
00054
import com.quadcap.sql.file.RandomAccessOutputStream;
00055
00056
import com.quadcap.sql.io.ObjectInputStream;
00057
import com.quadcap.sql.io.ObjectOutputStream;
00058
import com.quadcap.sql.io.Extern;
00059
00060
import com.quadcap.sql.index.Btree;
00061
00062
import com.quadcap.sql.types.Value;
00063
import com.quadcap.sql.types.ValueNull;
00064
00065
import com.quadcap.io.CountedInputStream;
00066
00067
import com.quadcap.util.Debug;
00068
00069
00070
00071
00072
00073
00074 public class AddColumn extends LogStep implements
Externalizable {
00075 transient Table table;
00076
00077 Column column;
00078 String
tableName = null;
00079 int pos = -1;
00080
00081
00082
00083
00084 public AddColumn() {}
00085
00086
00087
00088
00089 public AddColumn(
Session session,
Table table,
Column column,
int pos) {
00090 super(session);
00091
this.table = table;
00092
this.tableName = table.
getName();
00093
this.column = column;
00094
this.pos = pos;
00095 }
00096
00097
00098
00099
00100 Table getTable(
Database db)
throws IOException {
00101
if (
table == null) {
00102
table = (
Table)db.getRelation(
tableName);
00103 }
00104
return table;
00105 }
00106
00107
00108
00109
00110
00111 public void undo(
Session session)
throws IOException, SQLException {
00112
Database db = session.getDatabase();
00113 getTable(db);
00114
Column c =
table.
getColumn(
column.
getName());
00115
table.
deleteColumn(c.
getColumn());
00116 db.
updateRelation(
table);
00117 }
00118
00119
00120
00121
00122
00123 public void redo(
Session session)
throws IOException, SQLException {
00124
Database db = session.getDatabase();
00125 getTable(db);
00126
if (
pos > 0) {
00127
table.
addColumn(
column,
pos);
00128 }
else {
00129
table.
addColumn(
column);
00130 }
00131 db.
updateRelation(
table);
00132 }
00133
00134
00135
00136
00137 public void readExternal(ObjectInput in)
00138
throws IOException, ClassNotFoundException
00139 {
00140 super.readExternal(in);
00141
this.column = (
Column)in.readObject();
00142
this.tableName = (String)in.readObject();
00143
this.pos = in.readInt();
00144 }
00145
00146
00147
00148
00149 public void writeExternal(ObjectOutput out)
throws IOException {
00150 super.writeExternal(out);
00151 out.writeObject(
column);
00152 out.writeObject(
tableName);
00153 out.writeInt(
pos);
00154 }
00155
00156
00157
00158
00159
00160 public String
toString() {
00161 StringBuffer sb =
new StringBuffer(super.toString());
00162 sb.append(
" AddColumn(");
00163 sb.append(
tableName);
00164 sb.append(
',');
00165 sb.append(
column.
toString());
00166
if (
pos > 0) {
00167 sb.append(
',');
00168 sb.append(
pos);
00169 }
00170 sb.append(
")");
00171
return sb.toString();
00172 }
00173
00174
00175
00176
00177
00178 static Extern
extern;
00179 public void setExtern(Extern
extern) {
AddColumn.extern =
extern; }
00180 public Extern
getExtern() {
return extern; }
00181 }