1 24 25 package com.mckoi.database; 26 27 import java.io.*; 28 import java.util.ArrayList ; 29 import com.mckoi.debug.DebugLogger; 30 import com.mckoi.util.ByteArrayUtil; 31 import com.mckoi.util.IntegerListInterface; 32 33 39 40 class ConvertUtils { 41 42 43 44 52 static ArrayList convertIndexFiles1(File original_ijf, 53 IndexStore new_store, DataTableDef table_def, 54 DebugLogger logger) throws IOException { 55 56 int column_count = table_def.columnCount(); 57 58 FixedSizeDataStore ijf = 60 new FixedSizeDataStore(original_ijf, -1, false, logger); 61 ijf.open(false); 62 63 int block_size = 1024; 64 if (table_def.getTableName().getSchema().equals("SYS_INFO")) { 65 block_size = 128; 66 } 67 68 new_store.create(block_size); 70 new_store.init(); 71 new_store.addIndexLists(column_count + 1, (byte) 1); 72 new_store.flush(); 73 IndexSet index_set = new_store.getSnapshotIndexSet(); 74 75 int header_size = 8 + 4 + 4 + (column_count * 4); 77 byte[] index_header_data = new byte[header_size]; 78 byte[] reserved_header = new byte[64]; 79 ijf.readReservedBuffer(reserved_header, 0, 64); 80 long unique_id = ByteArrayUtil.getLong(reserved_header, 8); 82 int cur_header_sector = ByteArrayUtil.getInt(reserved_header, 0); 83 ijf.readAcross(cur_header_sector, 84 index_header_data, 0, index_header_data.length); 85 87 89 int mast_index_sector = ByteArrayUtil.getInt(index_header_data, 8); 92 InputStream sin = ijf.getSectorInputStream(mast_index_sector); 93 DataInputStream din = new DataInputStream(sin); 94 95 int ver = din.readInt(); if (ver != 1) { 97 throw new IOException("Unrecognised master index list version."); 98 } 99 100 IntegerListInterface master_index = index_set.getIndex(0); 102 int entries_count = din.readInt(); 103 int previous = -1; 104 for (int i = 0; i < entries_count; ++i) { 105 int entry = din.readInt(); 106 if (entry == previous) { 107 throw new IOException("Master index format corrupt - double entry."); 108 } 109 else if (entry < previous) { 110 throw new IOException("Master index format corrupt - not sorted."); 111 } 112 master_index.add(entry); 113 } 114 115 din.close(); 117 118 120 int journal_sector = ByteArrayUtil.getInt(index_header_data, 12); 123 sin = ijf.getSectorInputStream(journal_sector); 124 din = new DataInputStream(sin); 125 126 ver = din.readInt(); if (ver != 1) { 128 throw new Error ("Unrecognised journals list version."); 129 } 130 131 ArrayList transaction_mod_list = new ArrayList (); 132 int num_journals = din.readInt(); 133 for (int i = 0; i < num_journals; ++i) { 134 MasterTableJournal journal = new MasterTableJournal(); 135 journal.readFrom(din); 136 transaction_mod_list.add(journal); 137 } 138 139 din.close(); 141 142 144 IntegerListInterface[] column_indices = 147 new IntegerListInterface[column_count]; 148 149 for (int column = 0; column < column_count; ++column) { 151 if (table_def.columnAt(column).isIndexableType()) { 153 int scheme_sector = ByteArrayUtil.getInt(index_header_data, 155 16 + (column * 4)); 156 157 sin = ijf.getSectorInputStream(scheme_sector); 158 din = new DataInputStream(sin); 159 160 byte t = (byte) din.read(); 162 163 if (t == 1) { 164 IntegerListInterface col_index = index_set.getIndex(column + 1); 166 column_indices[column] = col_index; 167 168 int vec_size = din.readInt(); 170 for (int i = 0; i < vec_size; ++i) { 171 int row = din.readInt(); 172 col_index.add(row); 173 } 174 175 } 176 else { 177 } 179 180 din.close(); 182 183 } 185 } 187 189 new_store.commitIndexSet(index_set); 191 index_set.dispose(); 193 new_store.setUniqueID(unique_id); 195 new_store.flush(); 197 new_store.hardSynch(); 198 199 ijf.close(); 201 ijf.delete(); 202 203 return transaction_mod_list; 205 206 } 207 208 209 } 210 | Popular Tags |