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 FullTextIndexCharacteristics implements _FullTextIndexCharacteristics { 13 14 private FullTextIndexInformation[] fullTextIndexInformation; 15 QualifiedIdentifier tableName; 16 PreparedStatementGetter preparedStatementGetter; 17 _ColumnCharacteristics columnCharacteristics; 18 19 public FullTextIndexCharacteristics(QualifiedIdentifier tableName, PreparedStatementGetter preparedStatementGetter0, _ColumnCharacteristics columnCharacteristics) throws DException { 20 this.tableName = tableName; 21 preparedStatementGetter = preparedStatementGetter0; 22 this.columnCharacteristics = columnCharacteristics; 23 if (tableName.equals(SystemTables.FULLTEXTINFO) || tableName.equals(SystemTables.FULLTEXTCOLUMNINFO)) { 24 fullTextIndexInformation = 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 (fullTextIndexInformation == null) 38 return -1; 39 for (int i = 0, length = fullTextIndexInformation.length; i < length; i++) { 40 if (fullTextIndexInformation[i].indexName.equalsIgnoreCase(indexName)) { 41 return i; 42 } 43 } 44 return -1; 45 } 46 47 private String [] breakTableName(QualifiedIdentifier tableName) throws DException { 48 String [] breakedTable = new String [3]; 49 breakedTable[0] = tableName.catalog; 50 breakedTable[1] = tableName.schema; 51 breakedTable[2] = tableName.name; 52 return breakedTable; 53 } 54 55 private boolean[] getOrderType(ArrayList orderList) throws DException { 56 int size = orderList.size(); 57 boolean[] str = new boolean[size]; 58 for (int i = 0; i < size; i++) 59 str[i] = ( (Boolean ) orderList.get(i)).booleanValue(); 60 return str; 61 } 62 63 public _FullTextIndexInformation[] getFullTextIndexInformations() throws DException { 64 return fullTextIndexInformation; 65 } 66 67 public _FullTextIndexInformation getFullTextIndexInformations(String indexName, boolean flag) throws DException { 68 throw new UnsupportedOperationException ("method getFullTextIndexInformations not yet implemented"); 69 } 70 71 public boolean isSutiableIndex(String [] columns) throws DException { 72 return false; } 74 75 76 public void refresh() throws DException { 77 String [] breakedTable = breakTableName(tableName); 78 _SelectQueryIterator indexRetrieverIterator = getIterator(preparedStatementGetter.getFullTextIndexExecuter(), breakedTable); 79 if (indexRetrieverIterator.first()) { 80 ArrayList indexInfoList = new ArrayList(); 81 do { 82 Object [] record = (Object []) indexRetrieverIterator.getObject(); 83 String indexName = null; 84 try { 85 indexName = (String ) record[SystemTablesFields.fulltextindex_indexname]; 86 } catch (ClassCastException ex) { 87 throw ex; 88 } 89 int ij = check(indexName); 90 if (ij == -1) { 91 _SelectQueryIterator columnsIterator = getIterator(preparedStatementGetter.getFullTextIndexColumnsExecuter(), new Object [] {breakedTable[0], breakedTable[1], breakedTable[2], indexName}); 92 columnsIterator.first(); 93 ArrayList columnList = new ArrayList(); 94 do { 95 Object [] columnsRecord = (Object []) columnsIterator.getObject(); 96 columnList.add( (String ) columnsRecord[SystemTablesFields.indexColumns_column_name]); 97 } while (columnsIterator.next()); 98 String [] indexColumns = (String []) columnList.toArray(new String [0]); 99 int[] columnIndexes = indexColumns == null ? null : columnCharacteristics.getColumnIndexes(indexColumns); 100 FullTextIndexInformation iinf = new FullTextIndexInformation( 101 tableName, indexName, (String ) record[SystemTablesFields.fulltextindex_table_name], indexColumns, columnIndexes); 102 indexInfoList.add(iinf); 103 } else { 104 indexInfoList.add(fullTextIndexInformation[ij]); 105 } 106 } while (indexRetrieverIterator.next()); 107 if (indexInfoList.size() != 0) 108 fullTextIndexInformation = (FullTextIndexInformation[]) indexInfoList.toArray(new FullTextIndexInformation[0]); 109 } else { 110 fullTextIndexInformation = null; 111 } 112 } 113 114 115 private _SelectQueryIterator getIterator(_Executer executer, Object [] parameters) throws DException { 116 return (_SelectQueryIterator) executer.executeForFresh(parameters); 117 } 118 } 119 | Popular Tags |