1 package com.daffodilwoods.daffodildb.server.datasystem.mergesystem; 2 3 import java.util.*; 4 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem.*; 5 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*; 6 import com.daffodilwoods.daffodildb.utils.comparator.*; 7 import com.daffodilwoods.database.general.*; 8 import com.daffodilwoods.database.resource.*; 9 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.versioninfo.VersionHandler; 10 import com.daffodilwoods.daffodildb.server.sessionsystem.sessionversioninfo.SessionVersionHandler; 11 import java.io.File ; 12 import java.io.*; 13 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexInformation; 14 15 22 public class MergeDatabase implements _IndexDatabase { 23 24 27 private _IndexDatabase fileDatabase; 28 29 32 private _IndexDatabase memoryDatabase; 33 34 37 38 private WeakOrderedKeyList tablesMap; 39 40 41 SessionVersionHandler sessionVersionHandler; 42 VersionHandler versionHandler; 43 50 51 public MergeDatabase(_IndexDatabase fileMemoryDatabase0, _IndexDatabase fileDatabase0) throws DException { 52 fileDatabase = fileDatabase0; 53 memoryDatabase = fileMemoryDatabase0; 54 tablesMap = new WeakOrderedKeyList(new CTusjohDbtfJoTfotjujwfDpnqbsbups()); 55 versionHandler = ( (IndexDatabase) fileDatabase).getVersionHandler(); 56 try { 57 if (versionHandler.getDbVersion() >= 3.2) { 58 sessionVersionHandler = (SessionVersionHandler) Class.forName("com.daffodilwoods.daffodildb.server.sessionsystem.sessionversioninfo.SessionVersionHandler3_2").newInstance(); 59 } else 60 sessionVersionHandler = (SessionVersionHandler) Class.forName("com.daffodilwoods.daffodildb.server.sessionsystem.sessionversioninfo.SessionVersionHandlerUpto3_1").newInstance(); 61 } catch (ClassNotFoundException ex) { 62 throw new DException("DSE5591", null); 63 } catch (IllegalAccessException ex) { 64 throw new DException("DSE5591", null); 65 } catch (InstantiationException ex) { 66 throw new DException("DSE5591", null); 67 } 68 69 } 70 71 79 80 public synchronized void createTable(QualifiedIdentifier tableName, Object columnInformation) throws DException { 81 _Table table = (_Table) tablesMap.get(tableName.getIdentifier()); 82 if (table != null) 83 throw new DException("DSE1135", new Object [] {tableName.toString()}); 84 fileDatabase.createTable(tableName, columnInformation); 85 } 86 87 93 94 public synchronized void dropTable(QualifiedIdentifier tableName) throws DException { 95 fileDatabase.dropTable(tableName); 96 tablesMap.remove(tableName.getIdentifier()); 97 } 98 99 106 107 public synchronized _Table getTable(QualifiedIdentifier tableName) throws DException { 108 _Table table = (_Table) tablesMap.get(tableName.getIdentifier()); 109 if (table != null) 110 return table; 111 _IndexTable fileTable = (_IndexTable) fileDatabase.getTable(tableName); 112 _IndexInformation[] iinfs = fileTable.getIndexInformations(); 113 _IndexTable memoryTable = null; 114 try { 115 memoryTable = (_IndexTable) ( (_IndexDatabase) memoryDatabase).getTable(tableName, iinfs); 116 } catch (DException e) { 117 memoryDatabase.createTable(tableName, ( (_IndexTable) fileTable).getTableCharacteristics()); 118 memoryTable = (_IndexTable) ( (_IndexDatabase) memoryDatabase).getTable(tableName, iinfs); 119 } 120 table = new MergeTable(tableName, (_IndexTable) memoryTable, (_IndexTable) fileTable, sessionVersionHandler, this); 121 tablesMap.put(tableName.getIdentifier(), table); 122 return table; 123 } 124 125 129 130 public synchronized ArrayList getAllTables() throws DException { 131 ArrayList tables = new ArrayList(); 132 WeakOrderedKeyList.WeakOrderedKeyListIterator iterator = tablesMap.getWeakOrderedKeyListIterator(); 133 if (iterator.top()) { 134 tables.add(iterator.getKey()); 135 } 136 return tables; 137 } 138 139 145 146 public synchronized void createTemporaryIndex(QualifiedIdentifier tableName, String indexName, _IndexInformation indexInformationGetter) throws DException { 147 memoryDatabase.createTemporaryIndex(tableName, indexName, indexInformationGetter); 148 } 149 150 156 157 public synchronized void createPermanantIndex(QualifiedIdentifier tableName, String indexName, _IndexInformation indexInformationGetter, _DatabaseUser user) throws DException { 158 fileDatabase.createPermanantIndex(tableName, indexName, indexInformationGetter, user); 159 memoryDatabase.createTemporaryIndex(tableName, indexName, indexInformationGetter); 160 } 161 162 167 168 public void dropTemporaryIndex(QualifiedIdentifier tableName, String indexName) throws DException { 169 memoryDatabase.dropTemporaryIndex(tableName, indexName); 170 } 171 172 177 178 public synchronized void dropPeramanantIndex(QualifiedIdentifier tableName, String indexName, _DatabaseUser user) throws DException { 179 fileDatabase.dropPeramanantIndex(tableName, indexName, user); 180 } 181 182 public _DatabaseUser getDatabaseUser() throws DException { 183 return fileDatabase.getDatabaseUser(); 184 } 185 186 public _Table getSystemTable(QualifiedIdentifier parm1) throws com.daffodilwoods.database.resource.DException { 187 188 throw new java.lang.UnsupportedOperationException ("Method getSystemTable() not yet implemented."); 189 } 190 191 public synchronized void removeTable(QualifiedIdentifier tableName) throws DException { 192 tablesMap.remove(tableName.getIdentifier()); 193 fileDatabase.removeTable(tableName); 194 memoryDatabase.removeTable(tableName); 195 } 196 197 public void alterTable(QualifiedIdentifier tableName, Object columnInfo, _AlterRecord alterRecord, Object defaultValue, _DatabaseUser user) throws DException { 198 fileDatabase.alterTable(tableName, columnInfo, alterRecord, defaultValue, user); 199 try { 200 memoryDatabase.dropTable(tableName); 201 } catch (DException ex) { 202 if (!ex.getDseCode().equalsIgnoreCase("DSE959")) 203 throw ex; 204 } 205 } 206 207 public _DatabaseUser getTempDatabaseUser() throws DException { 208 return fileDatabase.getTempDatabaseUser(); 209 } 210 211 public _IndexDatabase getMemoryDatabase() throws DException { 212 return memoryDatabase; 213 } 214 215 public _IndexDatabase getFileDatabase() throws DException { 216 return fileDatabase; 217 } 218 219 public _DatabaseUser getDatabaseUser(ArrayList tableNames) throws DException { 220 return fileDatabase.getDatabaseUser(tableNames); 221 } 222 223 public void addFreeCluster(_DatabaseUser user, int address) throws DException { 224 } 225 226 public void getStatus() throws DException { 227 ( (IndexDatabase) fileDatabase).getStatus(); 228 ( (TempIndexDatabase) memoryDatabase).getStatus(); 229 } 230 231 public void createFullTextIndex(QualifiedIdentifier tableName, String indexName, String [] columnName) throws DException { 232 if (!getVersionHandler().isFullTextSupported()) 233 throw new DException("DSE5590", new Object [] {"createFullTextIndex"}); 234 fileDatabase.createFullTextIndex(tableName, indexName, columnName); 235 } 236 237 public void dropFullTextIndex(QualifiedIdentifier tableName, String indexName) throws DException { 238 fileDatabase.dropFullTextIndex(tableName, indexName); 239 } 240 241 public void setDropStatus(QualifiedIdentifier tableName, boolean dropTable) throws DException { 242 _MergeTable mergeTable = (_MergeTable) tablesMap.get(tableName.getIdentifier()); 243 if (mergeTable != null) 244 (mergeTable).setTableDropped(dropTable); 245 246 } 247 248 public VersionHandler getVersionHandler() { 249 return versionHandler; 250 } 251 252 public SessionVersionHandler getSessionVersionHandler() { 253 return sessionVersionHandler; 254 } 255 256 public _Table getTable(QualifiedIdentifier tableName, _IndexInformation[] iinf) throws DException { 257 throw new java.lang.UnsupportedOperationException ("Method getTable(QualifiedIdentifier tableName,_IndexInformation[] iinf) not yet implemented."); 258 } 259 273 274 public synchronized void releaseTable(QualifiedIdentifier tableName, _IndexTable memoryTable) throws DException { 275 _Table table = (_Table)tablesMap.get(tableName.getIdentifier() ) ; 276 if(table != null ) 277 if( ((MergeTable)table).isToBeFinalized ) 278 tablesMap.remove(tableName.getIdentifier()); 279 else 280 return ; 281 282 fileDatabase.removeTable(tableName); 283 284 _IndexInformation[] iinf = memoryTable.getIndexInformations(); 285 for (int i = 0; i < iinf.length; i++) { 286 memoryDatabase.dropTemporaryIndex(tableName, iinf[i].getIndexName()); 287 } 288 memoryDatabase.dropTable(tableName); 289 } 290 } 291 | Popular Tags |