1 package com.daffodilwoods.daffodildb.server.datadictionarysystem; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem.*; 6 import com.daffodilwoods.daffodildb.server.sql99.*; 7 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 8 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 9 import com.daffodilwoods.database.general.*; 10 import com.daffodilwoods.database.resource.*; 11 12 public class IndexCharacteristics implements _IndexCharacteristics { 13 14 private IndexInformation[] indexInformation; 15 QualifiedIdentifier tableName; 16 PreparedStatementGetter preparedStatementGetter; 17 _ColumnCharacteristics columnCharacteristics; 18 19 public IndexCharacteristics(QualifiedIdentifier tableName, PreparedStatementGetter preparedStatementGetter0, _ColumnCharacteristics columnCharacteristics) throws DException { 20 this.tableName = tableName; 21 preparedStatementGetter = preparedStatementGetter0; 22 this.columnCharacteristics = columnCharacteristics; 23 if (tableName.equals(SystemTables.INDEXINFO) || tableName.equals(SystemTables.INDEXCOLUMNS)) { 24 indexInformation = null; 25 return; 26 } 27 init(); 28 } 29 30 33 public void init() throws DException { 34 } 35 36 private int check(String indexName) throws DException { 37 if (indexInformation == null) 38 return -1; 39 for (int i = 0, length = indexInformation.length; i < length; i++) 40 if (indexInformation[i].indexName.equalsIgnoreCase(indexName)) 41 return i; 42 return -1; 43 } 44 45 private String [] breakTableName(QualifiedIdentifier tableName) throws DException { 46 String [] breakedTable = new String [3]; 47 breakedTable[0] = tableName.catalog; 48 breakedTable[1] = tableName.schema; 49 breakedTable[2] = tableName.name; 50 return breakedTable; 51 } 52 53 private boolean[] getOrderType(ArrayList orderList) throws DException { 54 int size = orderList.size(); 55 boolean[] str = new boolean[size]; 56 for (int i = 0; i < size; i++) 57 str[i] = ( (Boolean ) orderList.get(i)).booleanValue(); 58 return str; 59 } 60 61 public _IndexInformation[] getIndexInformations() throws DException { 62 return indexInformation; 63 } 64 65 public _IndexInformation getIndexInformations(String indexName, boolean flag) throws DException { 66 if (indexInformation == null) 67 return null; 68 for (int i = 0; i < indexInformation.length; i++) 69 if (indexInformation[i].indexName.equalsIgnoreCase(indexName)) { 70 return indexInformation[i]; 71 } 72 throw new DException("DSE482", new Object [] {indexName}); 73 } 74 75 public boolean isSutiableIndex(String [] columns) throws DException { 76 return false; } 78 79 80 public void refresh() throws DException { 81 String [] breakedTable = breakTableName(tableName); 82 _SelectQueryIterator indexRetrieverIterator = getIterator(preparedStatementGetter.getIndexInfoExecuter(), breakedTable); 83 if (indexRetrieverIterator.first()) { 84 ArrayList indexInfoList = new ArrayList(); 85 do { 86 Object [] record = (Object []) indexRetrieverIterator.getObject(); 87 String indexName = null; 88 try { 89 indexName = (String ) record[SystemTablesFields.indexInfo_indexname]; 90 } catch (ClassCastException ex) { 91 throw ex; 92 } 93 int ij = check(indexName); 94 if (ij == -1) { 95 _SelectQueryIterator columnsIterator = getIterator(preparedStatementGetter.getIndexColumnsExecuter(), new Object [] {breakedTable[0], breakedTable[1], breakedTable[2], indexName}); 96 columnsIterator.first(); 97 ArrayList columnList = new ArrayList(); 98 ArrayList orderList = new ArrayList(); 99 do { 100 Object [] columnsRecord = (Object []) columnsIterator.getObject(); 101 columnList.add( (String ) columnsRecord[SystemTablesFields.indexColumns_column_name]); 102 orderList.add( (Boolean ) columnsRecord[SystemTablesFields.indexColumns_orderType]); 103 } while (columnsIterator.next()); 104 String [] indexColumns = (String []) columnList.toArray(new String [0]); 105 boolean[] orderTypes = getOrderType(orderList); 106 int[] columnIndexes = indexColumns == null ? null : columnCharacteristics.getColumnIndexes(indexColumns); 107 IndexInformation iinf = new IndexInformation( 108 tableName, indexName, (String ) record[SystemTablesFields.indexInfo_indextablename], 109 indexColumns, columnIndexes, orderTypes, ( (Long ) record[SystemTablesFields.indexInfo_rootNodeAddress]).longValue(), 110 ( (Integer ) record[SystemTablesFields.indexInfo_rootClusterSize]).intValue(), ( (Integer ) record[SystemTablesFields.indexInfo_rootRecordNumber]).intValue(), 111 ( (Integer ) record[SystemTablesFields.indexInfo_numberofRecords]).intValue(), ( (Boolean ) record[SystemTablesFields.indexInfo_fixedVariable]).booleanValue(), ( (Boolean ) record[SystemTablesFields.indexInfo_is_system_generated]).booleanValue()); 112 indexInfoList.add(iinf); 113 } else 114 indexInfoList.add(indexInformation[ij]); 115 } while (indexRetrieverIterator.next()); 116 if (indexInfoList.size() != 0) 117 indexInformation = (IndexInformation[]) indexInfoList.toArray(new IndexInformation[0]); 118 } 119 } 120 121 122 private _SelectQueryIterator getIterator(_Executer executer, Object [] parameters) throws DException { 123 return (_SelectQueryIterator) executer.executeForFresh(parameters); 124 } 125 } 126 | Popular Tags |