1 package com.daffodilwoods.daffodildb.server.sql99.fulltext.database; 2 3 import com.daffodilwoods.fulltext.common._FullTextCreator; 4 import com.daffodilwoods.database.resource.DException; 5 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._IndexDatabase; 6 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.Datatype; 7 import com.daffodilwoods.database.general.QualifiedIdentifier; 8 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexInformation; 9 import com.daffodilwoods.daffodildb.server.datadictionarysystem.IndexInformation; 10 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.ColumnInformation; 11 import java.util.ArrayList ; 12 import com.daffodilwoods.daffodildb.server.datadictionarysystem.SystemTables; 13 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._DatabaseUser; 14 15 public class DaffodilFullTextIndexCreator implements _FullTextCreator{ 16 17 23 24 28 private _IndexDatabase indexDataBase; 29 public final static Integer SQLIdentifierSize = new Integer (128); 30 31 public DaffodilFullTextIndexCreator(_IndexDatabase indexDataBase0){ 32 indexDataBase = indexDataBase0; 33 } 34 35 45 public Object createFullTextIndex(Object tableName,String indexName,String [] columnName) throws DException{ 46 QualifiedIdentifier identifier = (QualifiedIdentifier)tableName; 47 String tokenTableName = createTokenTable(identifier,indexName); 48 String locationTableName = createLocationTable(identifier,indexName); 49 return new String []{tokenTableName,locationTableName}; 50 } 51 52 60 private String createTokenTable(QualifiedIdentifier table,String indexName) throws DException{ 61 String tableName = indexName+"_token_"+System.currentTimeMillis(); 62 QualifiedIdentifier token = new QualifiedIdentifier(table.catalog,table.schema,tableName); 63 indexDataBase.createTable(token,createTokenTableStructure()); 64 createIndexOnToken(token,tableName); 65 return tableName; 66 } 67 68 76 private void createIndexOnToken(QualifiedIdentifier table,String tableName) throws DException{ 77 String indexName = tableName+"_termdocumentidindex"; 78 String indexTableName = indexName+"_termdocumentidtable"; 79 String [] columns = new String []{"term","documentid"}; 80 int[] columnIndexes = new int[]{1,2}; 81 boolean[] orderType = new boolean[]{true,true}; 82 83 ArrayList tablesToLock = new ArrayList (); 84 QualifiedIdentifier tableName1 = new QualifiedIdentifier(table.catalog, table.schema,tableName); 85 tablesToLock.add(tableName1); 86 tablesToLock.add(SystemTables.DATABASEINDEXINFO); 87 tablesToLock.add(SystemTables.DATABASEINDEXCOLUMNS); 88 _DatabaseUser user = indexDataBase.getDatabaseUser(tablesToLock); 89 try{ 90 _IndexInformation indexInfo = new IndexInformation(table,indexName,indexTableName,columns,columnIndexes,orderType,0,0,0,0,true,false); 91 ((IndexInformation)indexInfo).setDefault(); 92 indexDataBase.createPermanantIndex(table, indexName, indexInfo, user); 93 94 indexName = tableName+"_documentidindex"; 95 indexTableName = indexName+"_documentidtable"; 96 columns = new String []{"documentid"}; 97 columnIndexes = new int[]{2}; 98 orderType = new boolean[]{true}; 99 indexInfo = new IndexInformation(table,indexName,indexTableName,columns,columnIndexes,orderType,0,0,0,0,false,false); 100 ((IndexInformation)indexInfo).setDefault(); 101 indexDataBase.createPermanantIndex(table, indexName, indexInfo, user); 102 103 indexName = tableName+"_pkindex"; 104 indexTableName = indexName+"_pktable"; 105 columns = new String []{"pk"}; 106 columnIndexes = new int[]{0}; 107 orderType = new boolean[]{true}; 108 indexInfo = new IndexInformation(table,indexName,indexTableName,columns,columnIndexes,orderType,0,0,0,0,false,false); 109 ((IndexInformation)indexInfo).setDefault(); 110 indexDataBase.createPermanantIndex(table, indexName, indexInfo, user); 111 user.writeToFile(); 112 }catch(DException ex){ 113 user.rollback(); 114 }finally{ 115 user.releaseCluster(); 116 } 117 } 118 119 128 private String createLocationTable(QualifiedIdentifier table,String indexName) throws DException{ 129 String tableName = indexName+"_location_"+System.currentTimeMillis(); 130 QualifiedIdentifier location = new QualifiedIdentifier(table.catalog,table.schema,tableName); 131 indexDataBase.createTable(location,createLocationTableStructure()); 132 createIndexOnLocation(location,tableName); 133 return tableName; 134 } 135 136 147 private void createIndexOnLocation(QualifiedIdentifier table,String tableName) throws DException{ 148 String indexName = tableName+"_fpklocationindex"; 149 String indexTableName = indexName+"_fpklocationtable"; 150 String [] columns = new String []{"fpk","location"}; 151 int[] columnIndexes = new int[]{0,1}; 152 boolean[] orderType = new boolean[]{true,true}; 153 ArrayList tablesToLock = new ArrayList (); 154 QualifiedIdentifier tab = new QualifiedIdentifier(table.catalog,table.schema,tableName); 155 tablesToLock.add(tab); 156 tablesToLock.add(SystemTables.DATABASEINDEXINFO); 157 tablesToLock.add(SystemTables.DATABASEINDEXCOLUMNS); 158 _DatabaseUser user = indexDataBase.getDatabaseUser(tablesToLock); 159 try{ 160 161 _IndexInformation indexInfo = new IndexInformation(table,indexName,indexTableName,columns,columnIndexes,orderType,0,0,0,0,false,false); 162 ((IndexInformation)indexInfo).setDefault(); 163 indexDataBase.createPermanantIndex(table, indexName, indexInfo, user); 164 165 166 indexName = tableName+"_documentidindex"; 167 indexTableName = indexName+"_documentidtable"; 168 columns = new String []{"documentid"}; 169 columnIndexes = new int[]{2}; 170 orderType = new boolean[]{true}; 171 indexInfo = new IndexInformation(table,indexName,indexTableName,columns,columnIndexes,orderType,0,0,0,0,false,false); 172 ((IndexInformation)indexInfo).setDefault(); 173 indexDataBase.createPermanantIndex(table, indexName, indexInfo,user); 174 user.writeToFile(); 175 }catch(DException ex){ 176 user.rollback(); 177 }finally{ 178 user.releaseCluster(); 179 } 180 181 } 182 183 187 private ColumnInformation createTokenTableStructure(){ 188 ColumnInformation ci = new ColumnInformation(); 189 ci.setObjects( new Object [][]{ 190 {"pk",new Long (Datatype.LONG),new Integer (Datatype.LONGSIZE),new Long (0) }, 191 {"term",new Long (Datatype.VARCHAR),SQLIdentifierSize, new Long (1)}, 192 {"documentId" ,new Long (Datatype.LONG),new Integer (Datatype.LONGSIZE),new Long (2) }, 193 194 }); 195 return ci; 196 } 197 198 202 private ColumnInformation createLocationTableStructure(){ 203 ColumnInformation ci = new ColumnInformation(); 204 ci.setObjects( new Object [][]{ 205 {"fpk",new Long (Datatype.LONG),new Integer (Datatype.LONGSIZE),new Long (0) }, 206 {"location",new Long (Datatype.LONG),new Integer (Datatype.LONGSIZE),new Long (1) }, 207 {"documentId" ,new Long (Datatype.LONG),new Integer (Datatype.LONGSIZE),new Long (2) }, 208 209 }); 210 return ci; 211 } 212 } 213 | Popular Tags |