1 package com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.versioninfo; 2 3 import com.daffodilwoods.database.resource.DException; 4 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.Cluster; 5 import com.daffodilwoods.daffodildb.utils.byteconverter.CCzufDpowfsufs; 6 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem. 7 PersistentDatabase; 8 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem. 9 TableManager; 10 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._DatabaseUser; 11 import com.daffodilwoods.daffodildb.server.datadictionarysystem.SystemTables; 12 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem. 13 DatabaseProperties; 14 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.PartialFixedRecordCluster; 15 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem._RecordCluster; 16 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.TableProperties; 17 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.FixedRecordCluster; 18 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.PartialVariableRecordCluster; 19 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.VariableRecordCluster; 20 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._Index; 21 import com.daffodilwoods.daffodildb.utils.comparator.SuperComparator; 22 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem._BTreeCharacteristics; 23 import com.daffodilwoods.daffodildb.server.datasystem.btree._NodeManager; 24 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem.IndexColumnInformation; 25 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._ClusterProvider; 26 import com.daffodilwoods.daffodildb.utils.byteconverter.CbCUsffWbmvfIboemfs; 27 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexInformation; 28 import com.daffodilwoods.database.general.QualifiedIdentifier; 29 import com.daffodilwoods.daffodildb.utils.BufferRange; 30 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.Utility; 31 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem.IndexInformations; 32 import com.daffodilwoods.daffodildb.server.datasystem.btree.BTree; 33 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem.FileNodeManager; 34 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._TableIterator; 35 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._TableCharacteristics; 36 import com.daffodilwoods.database.general.SystemFields; 37 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.DatabaseConstants; 38 39 public class VersionHandler3_2 extends VersionHandler { 40 int clusterSize = 16384; 41 public void writeInfoForSystemTables(Cluster startCluster, 42 PersistentDatabase persistentDatabase) throws 43 DException { 44 45 for (int i = 0, a = 0; i < 7; i++) { 46 a = 2 * i + 1; 47 persistentDatabase.writeInfoForSystemTable(a, startCluster); 48 } 49 if (persistentDatabase.getDatabaseName().equalsIgnoreCase(SYSTEMDATABASE)) { 50 persistentDatabase.writeInfoForSystemTable(15, startCluster); 51 persistentDatabase.writeInfoForSystemTable(17, startCluster); 52 persistentDatabase.writeInfoForSystemTable(19, startCluster); 53 } 54 persistentDatabase.writeInfoForSystemTable(21, startCluster); 55 } 56 57 public void initializeSystemTables(TableManager tableManager, 58 _DatabaseUser user, byte[] bytes, 59 String databaseName) throws 60 DException { 61 tableManager.addSystemTables(SystemTables.TABLEINFO, user, 1, bytes); 62 tableManager.addSystemTables(SystemTables.COLUMNINFO, user, 3, bytes); 63 tableManager.addSystemTables(SystemTables.CLUSTERINFO, user, 5, bytes); 64 tableManager.addSystemTables(SystemTables.DATABASEINDEXINFO, user, 7, bytes); 65 tableManager.addSystemTables(SystemTables.DATABASEINDEXCOLUMNS, user, 9, 66 bytes); 67 tableManager.addSystemTables(SystemTables.FREESPACEINFO, user, 11, bytes); 68 tableManager.addSystemTables(SystemTables.DATABASEFULLTEXTINFO, user, 13, 69 bytes); 70 if (databaseName.equalsIgnoreCase(SYSTEMDATABASE)) { 71 tableManager.addSystemTables(SystemTables.DATABASEINFO, user, 15, bytes); 72 tableManager.addSystemTables(SystemTables.DATABASEFILEINFO, user, 17, 73 bytes); 74 tableManager.addSystemTables(SystemTables.SCHEDULEINFO, user, 19, bytes); 75 } 76 tableManager.addSystemTables(SystemTables.DATABASEFULLTEXTCOLUMNINFO, user, 77 21, bytes); 78 tableManager.initializeFreeClusterList(); 79 } 80 81 public DatabaseProperties getDatabaseProperties() throws DException { 82 return new DatabaseProperties3_1(clusterSize, this); 83 } 84 85 public void setClusterSize(int clusterSize0) { 86 clusterSize = clusterSize0; 87 88 } 89 90 public _RecordCluster getRecordCluster(TableProperties tableProperties, DatabaseProperties databaseProperties) throws DException { 91 _RecordCluster recordCluster = null; 92 int recordType = getRecordType(databaseProperties, tableProperties); 93 if (recordType == PARTIALFIXEDRECORDCLUSTER) 94 return recordCluster = new PartialFixedRecordCluster(tableProperties, 95 databaseProperties, this); 96 else if (recordType == FIXEDRECORDCLUSTER) 97 return recordCluster = new FixedRecordCluster(tableProperties, 98 databaseProperties, this); 99 else if (recordType == PARTIALVARIABLERECORDCLUSTER) 100 return recordCluster = new PartialVariableRecordCluster(tableProperties, 101 databaseProperties, this); 102 else 103 return recordCluster = new VariableRecordCluster(tableProperties, 104 databaseProperties, this); 105 } 106 107 private int getRecordType(DatabaseProperties databaseProperties, TableProperties tableProperties) { 108 if (tableProperties.recordType != -1) 109 return tableProperties.recordType; 110 if (tableProperties.fixedTable) { 111 tableProperties.recordType = (tableProperties.recordSize + ACTIVE_DELETE + FULL_PARTIAL + tableProperties.columnCount + LENGTH) > 112 (databaseProperties.CLUSTERFREESPACE + UPDATEBYTES) 113 ? PARTIALFIXEDRECORDCLUSTER 114 : FIXEDRECORDCLUSTER; 115 return tableProperties.recordType; 116 } else { 117 tableProperties.recordSize = 0; 118 for (int i = 0; i < tableProperties.columnCount; i++) 119 tableProperties.recordSize += tableProperties.size[i]; 120 121 int clusterSize = (tableProperties.recordSize + ACTIVE_DELETE + 122 FULL_PARTIAL + tableProperties.columnCount + 123 tableProperties.variableColumns * LENGTH + LENGTH); 124 125 tableProperties.recordType = clusterSize > 126 databaseProperties.CLUSTERFREESPACE 127 ? PARTIALVARIABLERECORDCLUSTER 128 : VARIABLERECORDCLUSTER; 129 return tableProperties.recordType; 130 } 131 } 132 133 public boolean isFullTextSupported() { 134 return true; 135 } 136 137 public boolean isBackUpSupported() { 138 return true; 139 } 140 141 public _Index getIndex(SuperComparator comparator0, _BTreeCharacteristics btreeCharacteristics0, IndexColumnInformation iinf1, _ClusterProvider clusterProvider0, int address, CbCUsffWbmvfIboemfs handler0,boolean isDefault) throws DException { 142 return new BTree(comparator0, btreeCharacteristics0, getFileNodemanager(iinf1, clusterProvider0, address, handler0,isDefault)); 143 } 144 145 private _NodeManager getFileNodemanager(IndexColumnInformation iinf1, _ClusterProvider clusterProvider0, int address, CbCUsffWbmvfIboemfs handler0,boolean isDefault) throws DException { 146 return new FileNodeManager(iinf1, clusterProvider0, address, handler0,isDefault); 147 } 148 149 public _IndexInformation getIndexInformation(QualifiedIdentifier tableName, String indexName, QualifiedIdentifier indexTableName, _TableIterator iterator, _TableCharacteristics tc) throws DException { 150 Object [][] columnInformation; 151 if (tableName.equals(SystemTables.FREESPACEINFO)) { 152 columnInformation = new Object [][] { {"CatalogName", Boolean.TRUE, new Integer (0)} 153 , {"SchemaName", Boolean.TRUE, new Integer (1)} 154 , {"TableName", Boolean.TRUE, new Integer (2)} 155 , {"ClusterAddress", Boolean.TRUE, new Integer (3)} 156 }; 157 } 158 if (tableName.equals(SystemTables.COLUMNINFO)) { 159 columnInformation = new Object [][] { {"CatalogName", Boolean.TRUE, new Integer (0)} 160 , {"SchemaName", Boolean.TRUE, new Integer (1)} 161 , {"TableName", Boolean.TRUE, new Integer (2)} 162 , {"ColumnIndex", Boolean.TRUE, new Integer (6)} 163 }; 164 } else { 165 columnInformation = new Object [][] { {"CatalogName", Boolean.TRUE, new Integer (0)} 166 , {"SchemaName", Boolean.TRUE, new Integer (1)} 167 , {"TableName", Boolean.TRUE, new Integer (2)} 168 }; 169 } 170 int[] cols = new int[] {4}; 171 Object [] values = Utility.convertIntoFieldBase( (Object []) tc.getObject(cols, (BufferRange[]) iterator.getColumnValues(cols))); 172 return new IndexInformations(tableName, indexName, values[0].hashCode(), true, columnInformation, this); 173 } 174 175 public double getDbVersion() { 176 return 3.2; 177 } 178 public String getVersionCode(){ 179 return DatabaseConstants.DATABASEVERSION_3_2 ; 180 } 181 182 public boolean isDefault(String [] indexColumnNames) { 183 return indexColumnNames.length == 1 && indexColumnNames[0].equalsIgnoreCase(SystemFields.systemFields[SystemFields.rowId]); 184 } 185 186 public Object [][] getDefaultIndexStructure() { 187 return new Object [][] { { 188 SystemFields.systemFields[SystemFields.rowId], Boolean.TRUE, 189 new Integer (0), new Integer (0)} 190 }; 191 } 192 public String getDefaultClusterSize(){ 193 return "16384"; 194 } 195 public int getClusterSize(){ 196 return clusterSize; 197 } 198 199 } 200 | Popular Tags |