KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > fulltext > dml > DaffodilFullTextModifications


1
2 package com.daffodilwoods.daffodildb.server.sql99.fulltext.dml;
3
4 import com.daffodilwoods.fulltext.common._FullTextModifications;
5 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._IndexTable;
6 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._DatabaseUser;
7 import com.daffodilwoods.database.resource.DException;
8 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator._Iterator;
9 import com.daffodilwoods.daffodildb.server.sql99.common.ColumnDetails;
10 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.Datatype;
11 import com.daffodilwoods.daffodildb.utils.FieldUtility;
12 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexInformation;
13 import com.daffodilwoods.daffodildb.server.sql99.common.GeneralPurposeStaticClass;
14 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.condition.NonIndexedFilterIterator;
15 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.condition.IndexedFilterIterator;
16 import com.daffodilwoods.daffodildb.server.sql99.utils.ConditionVariableValue;
17 import com.daffodilwoods.daffodildb.server.sql99.utils._VariableValues;
18 import com.daffodilwoods.daffodildb.server.sql99.utils.VariableValues;
19 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._UserTableOperations;
20 import com.daffodilwoods.daffodildb.server.sql99.utils.parser.ConditionParser;
21 import com.daffodilwoods.daffodildb.server.sql99.utils.parser.SessionConditionParser;
22 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.booleanvalueexpression;
23 import com.daffodilwoods.daffodildb.server.sql99.common.TableDetails;
24 import com.daffodilwoods.daffodildb.server.sql99.utils._Reference;
25 import com.daffodilwoods.database.utility.P;
26 import com.daffodilwoods.daffodildb.server.sql99.common.Datatypes;
27
28 /**
29  *
30  * <p>Title: DaffodilFullTextModifications </p>
31  * <p>Description: This Class handles the seperate requirements for token
32  * and location table. Two instances of this class are created one for token and
33  * other for location table. </p>
34  * <p>Copyright: Copyright (c) 2003</p>
35  * <p>Company: </p>
36  * @author not attributable
37  * @version 1.0
38  */

39 public class DaffodilFullTextModifications implements _FullTextModifications{
40
41   /**
42    * Instance variable describing one of the internal table characteristics.
43    */

44   private _IndexTable indexTable;
45   /**
46     * Instance variable that is used to proceed calls to perform actual
47     * manipulation into internal tables used for full-text search.
48     */

49    private _UserTableOperations tableOperations;
50    /**
51     * Internal table iterator on which manipulation is to be done.
52     */

53    private _Iterator iterator;
54    /**
55     * document id i.e. used as a KEY to delete correspoding records from token
56     * and location tables.
57     */

58    private _Reference[] refDocumentid;
59
60    /**
61     * Iterator of TOKEN table data indexed on column 'pk'.
62     */

63    private _Iterator pkIterator;
64    /**
65     * Variable having the detatils of PK column of Token table.
66     */

67    private ColumnDetails pkColumnDetails;
68
69    public DaffodilFullTextModifications(_IndexTable indexTable0) throws DException{
70       indexTable = indexTable0;
71       booleanvalueexpression bve = GeneralPurposeStaticClass.getCondition("documentId = ?",Datatypes.LONG);//SessionConditionParser.parseCondition("documentId = ?");
72
initializeDocumentIdColumn(bve);
73       _Iterator iter = indexTable.getIterator(getIndex(indexTable.getIndexInformations(),"documentId"));
74       iterator = GeneralPurposeStaticClass.getIndexedFilteredIterator(iter,bve);
75       tableOperations = (_UserTableOperations)iter;
76       initializePKColumn();
77    }
78
79    /**
80     * Initialises the pkColumnDetails used for calculation of last-rowid
81     * from the token table.
82     * @throws DException
83     */

84    private void initializePKColumn() throws DException{
85       pkColumnDetails = new ColumnDetails();
86       pkColumnDetails.setColumnName(new String JavaDoc[]{"pk"});
87       pkColumnDetails.setDatatype(Datatype.LONG);
88       pkColumnDetails.setSize(Datatype.LONGSIZE);
89    }
90
91    /**
92     * Sets the value of documentid corresponding to which row
93     * maniupulation is being made.
94     * @param bve
95     * @throws DException
96     */

97    private void initializeDocumentIdColumn(booleanvalueexpression bve) throws DException{
98      refDocumentid = bve.getReferences(null);
99    }
100
101    /**
102     * Performs the actual insertion into internal tables corresponding to
103     * a specific user.
104     * @param user name of the user
105     * @param values values to insert
106     * @throws DException
107     */

108    public void insert(_DatabaseUser user,Object JavaDoc[] values) throws DException{
109       tableOperations.insert(user,values);
110    }
111
112    public void update(_DatabaseUser user,Object JavaDoc oldColumnValue,Object JavaDoc newColumnValue,Object JavaDoc documentId) throws DException{
113       throw new UnsupportedOperationException JavaDoc("Method update() yet not implemented");
114    }
115
116    /**
117     * Performs the actual deletion from token/location table corresponding to
118     * a specific user using the document-id corresponding to which manipulation
119     * is done.
120     * @param user name of the user
121     * @param documentId - used as key for delete a row
122     * @throws DException
123     */

124    public void delete(_DatabaseUser user,Object JavaDoc documentId) throws DException{
125       iterator.setConditionVariableValue(refDocumentid,new Object JavaDoc[]{documentId},0);
126       boolean flag = iterator.first();
127       while(flag){
128          ((_UserTableOperations)iterator).delete(user);
129          flag = iterator.next();
130       }
131    }
132
133    /**
134     * This method is specific to Token Table. This method is required to calculate
135     * the next pk value in the token table.
136     * @return row-id to be inserted into token table
137     * @throws DException
138     */

139
140    public Object JavaDoc getLastPK() throws DException{
141       if(pkIterator == null){
142          _IndexInformation[] indexInfo = indexTable.getIndexInformations();
143          pkIterator = indexTable.getIterator(getIndex(indexInfo,"pk"));
144       }
145       return pkIterator.last() ? pkIterator.getColumnValues(pkColumnDetails)
146             : FieldUtility.getField(Datatype.LONG,new Long JavaDoc(0));
147    }
148
149    /**
150     * This method is required to retrieve index created on column passed.
151     * @param indexInfo Information of all the indexes created on internal table
152     * @param name name of the column
153     * @return index of indexes created on passed column in the table,
154     * -1 if no index found on column passed
155     * @throws DException
156     */

157    private int getIndex(_IndexInformation[] indexInfo,String JavaDoc name) throws DException{
158       for (int i = 0; i < indexInfo.length; i++) {
159          String JavaDoc[] columns = indexInfo[i].getColumns();
160          if(columns[0].equalsIgnoreCase(name))
161             return i;
162       }
163       return -1;
164    }
165
166 }
167
Popular Tags