1 package com.daffodilwoods.rmi.server; 2 3 import java.io.*; 4 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.Datatype; 5 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem. 6 DBlobUpdatable; 7 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem. 8 DClobUpdatable; 9 import com.daffodilwoods.rmi.RmiBlob; 10 import com.daffodilwoods.rmi.interfaces._RmiBlob; 11 import com.daffodilwoods.rmi.RmiClob; 12 import com.daffodilwoods.rmi.interfaces._RmiClob; 13 import com.daffodilwoods.daffodildb.utils.field.FieldBase; 14 import com.daffodilwoods.daffodildb.utils.BufferRange; 15 import java.math.BigDecimal ; 16 import com.daffodilwoods.daffodildb.utils.field.*; 17 import java.text.*; 18 import com.daffodilwoods.rmi.writers.*; 19 import com.daffodilwoods.rmi.readers.*; 20 21 public class SelectedRows 22 implements Externalizable { 23 24 private Object [] rows; 25 private int rowCount = -1; 26 private int columnCount; 27 private int[] dataTypes; 28 29 public SelectedRows() { 30 } 31 32 void setDataTypes(int[] dataTypes) { 33 this.dataTypes = dataTypes; 34 } 35 36 public void setRows(Object [] rows0) { 37 rows = rows0; 38 if (rows != null) { 39 rowCount = rows.length; 40 if (rowCount > 0) 41 columnCount = ( (Object []) rows[0]).length; 42 } 43 } 44 45 public Object [] getRows() { 46 return rows; 47 } 48 49 public void writeExternal(ObjectOutput ou) { 50 try { 51 ou.writeInt(rowCount); 52 ou.writeInt(columnCount); 53 ou.writeInt(dataTypes.length); 54 for (int i = 0; i < dataTypes.length; i++) { 55 ou.writeByte(dataTypes[i]); 56 } 57 if (rowCount != -1) { 58 _ObjectWriter[] objectWrites = getObjectWriters(); 59 for (int i = 0; i < rowCount; i++) { 60 Object [] row = (Object []) rows[i]; 61 for (int j = 0; j < columnCount; j++) { 62 boolean obj_null = ( (FieldBase) row[j]).getNull(); 63 ou.writeBoolean(obj_null); 64 if (obj_null == false) 65 objectWrites[j].write(row[j], ou); 66 } 67 } 68 } 69 } 70 catch (IOException ex) { 71 } 72 } 73 74 private _ObjectWriter[] getObjectWriters() { 75 _ObjectWriter[] objectWrites = new _ObjectWriter[columnCount]; 76 for (int j = 0; j < columnCount; j++) { 77 switch (dataTypes[j]) { 78 case Datatype.BYTE: 79 case Datatype.TINYINT: 80 case Datatype.SMALLINT: 81 case Datatype.SHORT: 82 case Datatype.INT: 83 case Datatype.INTEGER: 84 case Datatype.LONG: 85 case Datatype.BIGINT: 86 case Datatype.REAL: 87 case Datatype.FLOAT: 88 case Datatype.DOUBLE: 89 case Datatype.DOUBLEPRECISION: 90 case Datatype.BOOLEAN: 91 case Datatype.DATE: 92 case Datatype.TIME: 93 case Datatype.TIMESTAMP: 94 objectWrites[j] = NumberWriter.objectWriter; 95 break; 96 case Datatype.BIT: 97 case Datatype.BITVARYING: 98 case Datatype.CHAR: 99 case Datatype.CHARACTER: 100 case Datatype.CHARACTERVARYING: 101 case Datatype.CHARVARYING: 102 case Datatype.VARCHAR: 103 objectWrites[j] = CharacterWriter.objectWriter; 104 break; 105 case Datatype.BINARY: 106 case Datatype.VARBINARY: 107 objectWrites[j] = BinaryWriter.objectWriter; 108 break; 109 case Datatype.BIGDECIMAL: 110 case Datatype.DEC: 111 case Datatype.DECIMAL: 112 case Datatype.NUMERIC: 113 objectWrites[j] = BigDecimalWriter.objectWriter; 114 break; 115 case Datatype.BLOB: 116 case Datatype.BINARYLARGEOBJECT: 117 case Datatype.LONGVARBINARY: 118 objectWrites[j] = BlobWriter.objectWriter; 119 break; 120 case Datatype.CLOB: 121 case Datatype.CHARACTERLARGEOBJECT: 122 case Datatype.CHARLARGEOBJECT: 123 case Datatype.LONGVARCHAR: 124 objectWrites[j] = ClobWriter.objectWriter; 125 break; 126 default: 127 throw new RuntimeException ( 128 " Handle the case of externalizable for the data type " + 129 dataTypes[j]); 130 } 131 } 132 return objectWrites; 133 } 134 135 public void readExternal(ObjectInput in) { 136 try { 137 rowCount = in.readInt(); 138 columnCount = in.readInt(); 139 dataTypes = new int[in.readInt()]; 140 for (int i = 0; i < dataTypes.length; i++) { 141 dataTypes[i] = (int) in.readByte(); 142 } 143 144 if (rowCount != -1) { 145 rows = new Object [rowCount]; 146 _ObjectReader[] objectReaders = getObjectReaders(); 147 for (int i = 0; i < rowCount; i++) { 148 Object [] row = new Object [columnCount]; 149 for (int j = 0; j < columnCount; j++) { 150 if (!in.readBoolean()) 151 row[j] = objectReaders[j].read(in); 152 } 153 rows[i] = row; 154 } 155 } 156 } 157 catch (IOException ex) { 158 } 159 catch (ClassNotFoundException ex1) { 160 } 161 } 162 163 private _ObjectReader[] getObjectReaders(){ 164 _ObjectReader[] objectReaders= new _ObjectReader[columnCount]; 165 for (int i = 0; i < columnCount; i++) { 166 switch (dataTypes[i]) { 167 case Datatype.BYTE: 168 case Datatype.TINYINT: 169 objectReaders[i] = ByteReader.objectReader; 170 break; 171 case Datatype.SMALLINT: 172 case Datatype.SHORT: 173 objectReaders[i] = ShortReader.objectReader; 174 break; 175 case Datatype.INT: 176 case Datatype.INTEGER: 177 objectReaders[i] = IntReader.objectReader; 178 break; 179 case Datatype.LONG: 180 case Datatype.BIGINT: 181 objectReaders[i] = LongReader.objectReader; 182 break; 183 case Datatype.REAL: 184 objectReaders[i] = FloatReader.objectReader; 185 break; 186 case Datatype.FLOAT: 187 case Datatype.DOUBLE: 188 case Datatype.DOUBLEPRECISION: 189 objectReaders[i] = DoubleReader.objectReader; 190 break; 191 case Datatype.BOOLEAN: 192 objectReaders[i] = BooleanReader.objectReader; 193 break; 194 case Datatype.DATE: 195 objectReaders[i] = DateReader.objectReader; 196 break; 197 case Datatype.TIME: 198 objectReaders[i] = TimeReader.objectReader; 199 break; 200 case Datatype.TIMESTAMP: 201 objectReaders[i] = TimestampReader.objectReader; 202 break; 203 204 case Datatype.BIT: 205 case Datatype.BITVARYING: 206 case Datatype.CHAR: 207 case Datatype.CHARACTER: 208 case Datatype.CHARACTERVARYING: 209 case Datatype.CHARVARYING: 210 case Datatype.VARCHAR: 211 objectReaders[i] = CharacterReader.objectReader; 212 break; 213 case Datatype.BIGDECIMAL: 214 case Datatype.DEC: 215 case Datatype.DECIMAL: 216 case Datatype.NUMERIC: 217 objectReaders[i] = BigDecimalReader.objectReader; 218 break; 219 case Datatype.BINARY: 220 case Datatype.VARBINARY: 221 objectReaders[i] = BinaryReader.objectReader; 222 break; 223 case Datatype.BLOB: 224 case Datatype.BINARYLARGEOBJECT: 225 case Datatype.LONGVARBINARY: 226 objectReaders[i] = BlobReader.objectReader; 227 break; 228 case Datatype.CLOB: 229 case Datatype.CHARACTERLARGEOBJECT: 230 case Datatype.CHARLARGEOBJECT: 231 case Datatype.LONGVARCHAR: 232 objectReaders[i] = ClobReader.objectReader; 233 break; 234 default: 235 throw new RuntimeException ( 236 "Handle the read of the data Type in SelectedRows class " + 237 dataTypes[i]); 238 } 239 } 240 return objectReaders; 241 } 242 } 243 | Popular Tags |