| 1 package com.daffodilwoods.daffodildb.server.datasystem.mergesystem; 2 3 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator._Iterator; 4 5 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*; 6 import com.daffodilwoods.daffodildb.server.datasystem.utility.*; 7 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexInformation; 8 import com.daffodilwoods.database.resource.*; 9 import com.daffodilwoods.database.general.QualifiedIdentifier; 10 import com.daffodilwoods.daffodildb.utils.comparator.SuperComparator; 11 import com.daffodilwoods.daffodildb.utils.FieldUtility; 12 import com.daffodilwoods.database.general.SystemFields; 13 import com.daffodilwoods.daffodildb.server.sql99.fulltext.dml._FullTextIndexInformation; 14 import com.daffodilwoods.daffodildb.server.sessionsystem.sessionversioninfo.SessionVersionHandler; 15 16 21 public class MergeTable implements _MergeTable { 22 23 private _IndexTable fileTable; 24 private _IndexTable memoryTable; 25 QualifiedIdentifier tableName; 26 boolean isTableDropped = false; 27 static SuperComparator comparator = new KeyComparator(); 28 private _DropTableInfo dropTableInfo; 29 SessionVersionHandler sessionVersionHandler; 30 _Iterator fileIterator; 31 private _Database mergeDatabase; 32 public boolean isToBeFinalized; 33 39 40 public MergeTable(QualifiedIdentifier tableName0, _IndexTable fileMemoryTable0, _IndexTable fileTable0, SessionVersionHandler sessionVersionHandler0, _Database mergeDatabase0) { 41 fileTable = fileTable0; 42 memoryTable = fileMemoryTable0; 43 mergeDatabase = mergeDatabase0; 44 tableName = tableName0; 45 sessionVersionHandler = sessionVersionHandler0; 46 dropTableInfo = new DropTableInfo(this); 47 try { 48 fileIterator = fileTable.getDefaultIterator(); 49 } catch (DException ex) {} 50 } 51 52 62 63 static int cnt; 64 65 public void makePersistentForInsertedXA(_DatabaseUser user, _Iterator newIterator) throws DException { 66 _Iterator fileIterator = fileTable.getDefaultIterator(); 67 boolean boo = newIterator.first(); 68 if (boo) { 69 int[] btreeColumns = (int[]) fileIterator.getUniqueColumnReference()[0]; 70 SuperComparator comp = ( (_IndexIteratorInfo) ( (IteratorWrapper) fileIterator).getIndexIterator()).getComparator(); 71 Object valuesToInsert; 72 do { 73 valuesToInsert = newIterator.getColumnValues(); 74 ( (_UserTableOperations) fileIterator).insert(user, newIterator.getColumnValues()); 75 ( (_TableOperations) newIterator).delete(); 76 } while (newIterator.next()); 77 } 78 } 79 80 public void makePersistentForInserted(_DatabaseUser user, _Iterator newIterator, Object transactionId, boolean changeInCommittedRecord) throws DException { 81 82 boolean boo = newIterator.first(); 83 if (boo) { 84 Object [] key = new Object [1]; 85 Object [] valuesToInsert; 86 do { 87 valuesToInsert = (Object []) newIterator.getColumnValues(); 88 valuesToInsert[SystemFields.transactionId] = transactionId; 89 key[0] = valuesToInsert[0]; 90 if (changeInCommittedRecord && fileIterator.seek(key)) { 91 ( (_UserTableOperations) fileIterator).update(user, valuesToInsert); 92 110 } else { 111 ( (_UserTableOperations) fileIterator).insert(user, valuesToInsert); 112 } 113 } while (newIterator.next()); 114 } 115 } 116 117 128 129 public void makePersistentForUpdatedXA(_DatabaseUser user, _Iterator memoryIterator, _Iterator fileIterator, int[] columns, Object [] values) throws DException { 130 if (memoryIterator.first()) { 131 int[] btreeColumns = (int[]) fileIterator.getUniqueColumnReference()[0]; 132 SuperComparator comp = ( (_IndexIteratorInfo) ( (IteratorWrapper) fileIterator).getIndexIterator()).getComparator(); 133 Object actualKey, key; 134 do { 135 actualKey = ( (_IndexIteratorInfo) memoryIterator).getActualKey(); 136 key = ( (_Key) actualKey).getKeyValue(); 137 fileIterator.seek(key); 138 ( (_UserTableOperations) fileIterator).update(user, columns, values); 139 140 ( (_TableOperations) memoryIterator).delete(); 141 } while (memoryIterator.next()); 142 143 } 144 } 145 146 public void makePersistentForUpdated(_DatabaseUser user, _Iterator memoryIterator, _Iterator fileIterator, int[] columns, Object [] values) throws DException { 147 if (memoryIterator.first()) { 148 Object actualKey, key; 149 boolean flag; 150 do { 151 actualKey = ( (_IndexIteratorInfo) memoryIterator).getActualKey(); 152 key = ( (_Key) actualKey).getKeyValue(); 153 flag = sessionVersionHandler.recordFound( (_Iterator) fileIterator, (Object []) key); 154 if (flag) { 155 ( (_UserTableOperations) fileIterator).delete(user); 156 } 157 } while (memoryIterator.next()); 158 159 } 160 } 161 162 209 216 217 void transferRecordFromMemoryToFile(UnionIterator[] iterators, _Record record) throws DException { 218 for (int i = 0; i < iterators.length; i++) { 219 int[] btreeColumns = (int[]) ( (_IndexIterator) iterators[i]).getUniqueColumnReference()[0]; 220 Object keyToCompare = record.getObject(btreeColumns); 221 ( (_UnionIterator) iterators[i]).reAdjustFirst(keyToCompare); 222 } 223 } 224 225 public int getIndexType() throws DException { 226 return -1; 227 } 228 229 public _TableCharacteristics getTableCharacteristics() throws DException { 230 return fileTable.getTableCharacteristics(); 231 } 232 233 238 239 public _IndexInformation[] getIndexInformations() throws DException { 240 return ( (_IndexTable) fileTable).getIndexInformations(); 241 } 242 243 247 248 public _Record getBlankRecord() throws DException { 249 _TableCharacteristics tc = fileTable.getTableCharacteristics(); 250 return new Record(tc, FieldUtility.getBlankFields(tc.getColumnTypes(), tc.getCollator())); 251 } 252 253 260 261 public _Iterator getIterator(int index) throws DException { 262 if (isTableDropped) 263 throw new DException("DSE5584", null); 264 _IndexIterator fileIterator = ( (IteratorWrapper) fileTable.getIterator(index)).getIndexIterator(); 265 _IndexIterator fileMemoryIterator = ( (IteratorWrapper) memoryTable.getIterator(index)).getIndexIterator(); 266 _IndexIterator defaultMemoryIterator = ( (IteratorWrapper) memoryTable.getDefaultIterator()).getIndexIterator(); 267 _IndexIterator mergeIterator = new MergeIterator(defaultMemoryIterator, fileMemoryIterator, fileIterator, this, sessionVersionHandler); 268 IteratorWrapper iw = new IteratorWrapper(mergeIterator); 269 iw.setTableName(tableName); 270 return iw; 271 } 272 273 public _IndexTable getFileTable() { 274 return fileTable; 275 } 276 277 public _IndexTable getMemoryTable() { 278 return memoryTable; 279 } 280 281 287 288 public _Iterator getDefaultIterator() throws com.daffodilwoods.database.resource.DException { 289 if (isTableDropped) 290 throw new DException("DSE5584", null); 291 _IndexIterator fileIterator = ( (IteratorWrapper) fileTable.getDefaultIterator()).getIndexIterator(); 292 _IndexIterator fileMemoryIterator = ( (IteratorWrapper) memoryTable.getDefaultIterator()).getIndexIterator(); 293 _IndexIterator defaultMemoryIterator = ( (IteratorWrapper) memoryTable.getDefaultIterator()).getIndexIterator(); 294 _IndexIterator mergeIterator = new MergeIterator(defaultMemoryIterator, fileMemoryIterator, fileIterator, this, sessionVersionHandler); 295 IteratorWrapper iw = new IteratorWrapper(mergeIterator); 296 iw.setTableName(tableName); 297 return iw; 298 } 299 300 public int getEstimatedRowCount() throws DException { 301 return memoryTable.getEstimatedRowCount() + fileTable.getEstimatedRowCount(); 302 } 303 304 331 public _FullTextIndexInformation[] getFullTextIndexInformation() throws DException { 332 return fileTable.getFullTextIndexInformation(); 333 } 334 335 public _Database getDatabase() throws DException { 336 return fileTable.getDatabase(); 337 } 338 339 public boolean hasRecordsInMemory() throws DException { 340 if (isTableDropped) { 341 throw new DException("DSE5584", null); 342 } 343 return ( (IteratorWrapper) getMemoryTable().getDefaultIterator()).hasAnyRecords(); 344 } 345 346 public void setDuplicateKeysAllowedInBtrees() throws DException { 347 throw new java.lang.UnsupportedOperationException ( 348 "Method setDuplicateKeysAllowedInBtrees() not yet implemented."); 349 } 350 351 public _DropTableInfo getDropTableInfo() throws DException { 352 return dropTableInfo; 353 } 354 355 public void setTableDropped(boolean tableDropped) throws DException { 356 isTableDropped = tableDropped; 357 } 358 359 public boolean isTableDropped() throws DException { 360 return isTableDropped; 361 } 362 363 protected void finalize() { 364 try { 365 ( (MergeDatabase) mergeDatabase).releaseTable(tableName, memoryTable); 366 isToBeFinalized = true; 367 } catch (DException ex) { 368 } 369 } 370 } 371 | Popular Tags |