KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > datadictionarysystem > IndexCharacteristics


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    /* using retriever in place of Select Query; using single query for index
31          columns instead of firing query every index
32     */

33    public void init() throws DException {
34    }
35
36    private int check(String JavaDoc 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 JavaDoc[] breakTableName(QualifiedIdentifier tableName) throws DException {
46       String JavaDoc[] breakedTable = new String JavaDoc[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 JavaDoc) 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 JavaDoc 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 JavaDoc[] {indexName});
73    }
74
75    public boolean isSutiableIndex(String JavaDoc[] columns) throws DException {
76       return false; //indexInformation == null ? null : IndexMaintained.getSuitableIndex(indexInformation,columns);
77
}
78
79
80    public void refresh() throws DException {
81       String JavaDoc[] breakedTable = breakTableName(tableName);
82       _SelectQueryIterator indexRetrieverIterator = getIterator(preparedStatementGetter.getIndexInfoExecuter(), breakedTable);
83       if (indexRetrieverIterator.first()) {
84          ArrayList indexInfoList = new ArrayList();
85          do {
86             Object JavaDoc[] record = (Object JavaDoc[]) indexRetrieverIterator.getObject();
87             String JavaDoc indexName = null;
88             try {
89                indexName = (String JavaDoc) record[SystemTablesFields.indexInfo_indexname];
90             } catch (ClassCastException JavaDoc ex) {
91                throw ex;
92             }
93             int ij = check(indexName);
94             if (ij == -1) {
95                _SelectQueryIterator columnsIterator = getIterator(preparedStatementGetter.getIndexColumnsExecuter(), new Object JavaDoc[] {breakedTable[0], breakedTable[1], breakedTable[2], indexName});
96                columnsIterator.first();
97                ArrayList columnList = new ArrayList();
98                ArrayList orderList = new ArrayList();
99                do {
100                   Object JavaDoc[] columnsRecord = (Object JavaDoc[]) columnsIterator.getObject();
101                   columnList.add( (String JavaDoc) columnsRecord[SystemTablesFields.indexColumns_column_name]);
102                   orderList.add( (Boolean JavaDoc) columnsRecord[SystemTablesFields.indexColumns_orderType]);
103                } while (columnsIterator.next());
104                String JavaDoc[] indexColumns = (String JavaDoc[]) columnList.toArray(new String JavaDoc[0]);
105                boolean[] orderTypes = getOrderType(orderList);
106                int[] columnIndexes = indexColumns == null ? null : columnCharacteristics.getColumnIndexes(indexColumns);
107                IndexInformation iinf = new IndexInformation(
108                    tableName, indexName, (String JavaDoc) record[SystemTablesFields.indexInfo_indextablename],
109                    indexColumns, columnIndexes, orderTypes, ( (Long JavaDoc) record[SystemTablesFields.indexInfo_rootNodeAddress]).longValue(),
110                    ( (Integer JavaDoc) record[SystemTablesFields.indexInfo_rootClusterSize]).intValue(), ( (Integer JavaDoc) record[SystemTablesFields.indexInfo_rootRecordNumber]).intValue(),
111                    ( (Integer JavaDoc) record[SystemTablesFields.indexInfo_numberofRecords]).intValue(), ( (Boolean JavaDoc) record[SystemTablesFields.indexInfo_fixedVariable]).booleanValue(), ( (Boolean JavaDoc) 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 JavaDoc[] parameters) throws DException {
123       return (_SelectQueryIterator) executer.executeForFresh(parameters);
124    }
125 }
126
Popular Tags