KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > datasystem > indexsystem > IndexTable


1 package com.daffodilwoods.daffodildb.server.datasystem.indexsystem;
2
3 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator._Iterator;
4
5 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*;
6 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.*;
7 import com.daffodilwoods.daffodildb.server.datasystem.utility.*;
8 import com.daffodilwoods.database.general.QualifiedIdentifier;
9 import com.daffodilwoods.database.resource.*;
10 import com.daffodilwoods.database.utility.*;
11 import com.daffodilwoods.daffodildb.server.datasystem.btree.*;
12 import com.daffodilwoods.daffodildb.utils.*;
13 import com.daffodilwoods.fulltext.common._FullTextDML;
14 import com.daffodilwoods.daffodildb.server.sql99.fulltext.dml._FullTextIndexInformation;
15 import com.daffodilwoods.daffodildb.utils.field.FieldBase;
16 import com.daffodilwoods.daffodildb.utils.field.FieldLong;
17 import com.daffodilwoods.daffodildb.server.sql99.common.Datatypes;
18
19
20 /**
21  *
22  * <p>Title: Index Table</p>
23  * <p>Description: Maintains insert, delete, update and retrieve
24  * operations on Table</p>
25  */

26
27 public class IndexTable implements _IndexTable, _IndexTableList {
28    /**
29     * Btrees To insert,delete,update and retrieve values
30     */

31    private _Index[] btrees;
32    /**
33     * FullTextDML's To insert,delete,update and retrieve values
34     */

35
36    private _FullTextDML[] fullTextDML;
37
38    /**
39     * Table Structure
40     */

41    private _TableCharacteristics tableCharacteristics;
42    public QualifiedIdentifier tableName;
43    private ReadWriteLock rwLock;
44    private _Database database;
45
46    public IndexTable(QualifiedIdentifier tableName0, _Index[] bt) throws DException {
47      btrees = bt;
48      tableName = tableName0;
49      rwLock = new SimpleFIFOReadWriteLocker();
50
51    }
52
53    /**
54     * return all btrees on Table
55     * @return all btrees on Table
56     * @throws DException
57     */

58
59    public _Index[] getIndexes() throws DException {
60       return btrees;
61    }
62
63    /**
64     * sets all Btrees on table
65     * @param btrees all Btrees on table
66     * @throws DException
67     */

68
69    public void setIndexes(_Index btrees[]) throws DException {
70       this.btrees = btrees;
71    }
72
73    /**
74     * sets all FullTextDML on table
75     * @param fullTextDMLs all fullTextDMLs on table
76     * @throws DException
77     */

78
79    public void setFullTextDML(_FullTextDML fullTextDML[]) throws DException {
80       this.fullTextDML = fullTextDML;
81    }
82
83    /**
84     * return all fullTextDML on Table
85     * @return all fullTextDMLs on Table
86     * @throws DException
87     */

88
89    public _FullTextDML[] getFullTextDML() throws DException {
90       return this.fullTextDML;
91    }
92
93    /**
94     * returns Iterator on first Index Of Table
95     * @return Iterator on first Index Of Table
96     * @throws DException
97     */

98
99    public _TableIterator getIterator() throws DException {
100       throw new java.lang.UnsupportedOperationException JavaDoc("Method getIterator() not yet implemented.");
101    }
102
103    /**
104     * Inserts values In Memory or File and inserts values in BTree
105     * @param tableIterator Memory or File Iterator
106     * @param values values which has to insert
107     * @return
108     * @throws DException
109     */

110
111    public Object JavaDoc insert(_TableIterator tableIterator, Object JavaDoc[] values, int index) throws DException {
112       ( (_TableOperations) tableIterator).insert(values);
113       Object JavaDoc btreeValue = tableIterator.getKey();
114       Object JavaDoc keyToReturn = null;
115       if (btrees != null) {
116          int[] btreeColumns;
117          Object JavaDoc btreeKey, keys;
118          for (int i = 0; i < btrees.length; i++) {
119             btreeColumns = btrees[i].getIndexInformation().getColumnIndexes();
120             btreeKey = getBTreeKey(btreeColumns, values); //(BufferRange[])tableIterator.getColumnValues(btreeColumns);//
121
keys = btrees[i].insert(btreeKey, btreeValue);
122             if (i == index) {
123                keyToReturn = keys;
124             }
125          }
126       }
127       return keyToReturn;
128    }
129
130    /**
131     * Update values In Memory or File and Updates Btrees
132     * @param iterator Memory or File Iterator
133     * @param newValues new values
134     * @return
135     * @throws DException
136     */

137
138    public Object JavaDoc update(_TableIterator iterator, Object JavaDoc[] newValues, int index) throws DException {
139       Object JavaDoc btreeValue = iterator.getKey();
140       Object JavaDoc[] oldValues = (Object JavaDoc[]) iterator.getColumnValues();
141       Object JavaDoc[] oldBtreeKeys = new Object JavaDoc[btrees.length];
142       for (int i = 0; i < btrees.length; i++)
143          oldBtreeKeys[i] = getBTreeKey(btrees[i].getIndexInformation().getColumnIndexes(), oldValues);
144       ( (_TableOperations) iterator).update(newValues);
145       Object JavaDoc newBtreeKeys;
146       for (int i = 0; i < btrees.length; i++) {
147          newBtreeKeys = getBTreeKey(btrees[i].getIndexInformation().getColumnIndexes(), newValues);
148          btrees[i].update(null, oldBtreeKeys[i], newBtreeKeys, btreeValue, btreeValue);
149       }
150       return btreeValue;
151    }
152
153    /**
154     * Deletes values from Memory or File and from BTrees
155     * @param iterator Memory or File Iterator
156     * @throws DException
157     */

158
159    public Object JavaDoc delete(_TableIterator iterator, int index) throws DException {
160       Object JavaDoc btreeValue = iterator.getKey();
161       Object JavaDoc[] values = (Object JavaDoc[]) iterator.getColumnValues();
162       Object JavaDoc keyToReturn = null, btreeKey, key;
163
164       for (int i = 0; i < btrees.length; i++) {
165          btreeKey = getBTreeKey(btrees[i].getIndexInformation().
166                                 getColumnIndexes(), values);
167          key = btrees[i].delete(btreeKey, btreeValue);
168          if (i == index) {
169             keyToReturn = key;
170          }
171       }
172       ( (_TableOperations) iterator).delete();
173       return keyToReturn;
174    }
175
176
177    private Object JavaDoc getBTreeKey(int[] btreeColumns, Object JavaDoc[] values) throws DException {
178       int len = btreeColumns.length;
179       if (len > 1) {
180          BufferRange[] temp = new BufferRange[len];
181          for (int i = 0; i < len; i++) {
182             temp[i] = (BufferRange) values[btreeColumns[i]];
183          }
184          return temp;
185       } else {
186          BufferRange temp = null;
187          temp = (BufferRange) values[btreeColumns[0]];
188          return temp;
189       }
190    }
191
192    /**
193     * return btree on required position
194     * @param position position on which BTree are required
195     * @return
196     */

197
198    public _Index getIndex(int position) {
199       return btrees[position];
200    }
201
202    public int getIndexType() throws DException {
203       return -1;
204    }
205
206    /**
207     * return all IndexInformations on table
208     * @return all IndexInformations on table
209     * @throws DException
210     */

211
212    public _IndexInformation[] getIndexInformations() throws DException {
213       _IndexInformation[] iinfs = new _IndexInformation[btrees.length];
214       for (int i = 0; i < btrees.length; i++)
215          iinfs[i] = btrees[i].getIndexInformation();
216       return iinfs;
217    }
218
219    public _TableCharacteristics getTableCharacteristics() throws DException {
220       throw new java.lang.UnsupportedOperationException JavaDoc("Method getTableCharacteristics() not yet implemented.");
221
222    }
223
224    /**
225     * Inserts values In Memory or File and inserts values in BTree
226     * @param tableIterator Memory or File Iterator
227     * @param user _DatabaseUser
228     * @param values values which has to insert
229     * @return
230     * @throws DException
231     */

232
233    public Object JavaDoc insert(_TableIterator tableIterator, _DatabaseUser user, Object JavaDoc[] values, int index) throws DException {
234       ( (_UserTableOperations) tableIterator).insert(user, values);
235       Object JavaDoc btreeValue = tableIterator.getKey();
236       Object JavaDoc keyToReturn = null;
237       if (btrees != null) {
238          int[] btreeColumns;
239          Object JavaDoc val, keys;
240          for (int i = 0; i < btrees.length; i++) {
241             btreeColumns = btrees[i].getIndexInformation().getColumnIndexes();
242             val = getBTreeKey(btreeColumns, values);
243             keys = btrees[i].insert(user, val, btreeValue);
244             if (i == index) {
245                keyToReturn = keys;
246             }
247          }
248       }
249       return keyToReturn;
250    }
251
252    /**
253     * Update values In Memory or File and Updates Btrees
254     * @param iterator Memory or File Iterator
255     * @param user _DatabaseUser
256     * @param newValues new values
257     * @return
258     * @throws DException
259     */

260
261    public Object JavaDoc update(_TableIterator iterator, _DatabaseUser user, Object JavaDoc[] newValues, int index) throws DException {
262       Object JavaDoc oldBtreeValue = iterator.getKey();
263       BufferRange[] oldValues = (BufferRange[]) iterator.getColumnValues();
264       Object JavaDoc[] oldBtreeKeys = new Object JavaDoc[btrees.length];
265       for (int i = 0; i < btrees.length; i++)
266          oldBtreeKeys[i] = getBTreeKey(btrees[i].getIndexInformation().getColumnIndexes(), oldValues);
267       ( (_UserTableOperations) iterator).update(user, newValues);
268       Object JavaDoc newBTreeValue = iterator.getKey();
269       BufferRange[] newValues1 = (BufferRange[]) iterator.getColumnValues();
270       Object JavaDoc newBtreeKeys;
271       for (int i = 0; i < btrees.length; i++) {
272          newBtreeKeys = getBTreeKey(btrees[i].getIndexInformation().getColumnIndexes(), newValues1);
273          btrees[i].update(user, oldBtreeKeys[i], newBtreeKeys, oldBtreeValue, newBTreeValue);
274       }
275       return oldBtreeValue;
276    }
277
278    public Object JavaDoc delete(_TableIterator iterator, _DatabaseUser user, int index) throws DException {
279       Object JavaDoc btreeValue = iterator.getKey();
280       BufferRange[] values = (BufferRange[]) iterator.getColumnValues();
281       Object JavaDoc keyToReturn = null, btreeKey, key;
282       for (int i = 0; i < btrees.length; i++) {
283          btreeKey = getBTreeKey(btrees[i].getIndexInformation().
284                                 getColumnIndexes(), values);
285          key = btrees[i].delete(user, btreeKey, btreeValue);
286
287          if (i == index)
288             keyToReturn = key;
289       }
290       ( (_UserTableOperations) iterator).delete(user);
291       return keyToReturn;
292
293    }
294
295    public _Record getBlankRecord() throws DException {
296       return new Record(tableCharacteristics, new Object JavaDoc[tableCharacteristics.getColumnCount()]);
297    }
298
299    public _Iterator getIterator(int index) throws DException {
300       throw new UnsupportedOperationException JavaDoc("METHOD NOT IMPLEMENTED");
301    }
302
303    public void rollback() throws DException {
304    }
305
306
307    public _Iterator getDefaultIterator() throws DException {
308       throw new UnsupportedOperationException JavaDoc("METHOD NOT IMPLEMENTED");
309    }
310
311    public int getEstimatedRowCount() throws DException {
312       int size = btrees[0].getSize();
313       return size;
314    }
315
316    public String JavaDoc toString() {
317       String JavaDoc str = "";
318       str = "[" + tableName.catalog + "][" + tableName.schema + "][" + tableName.name + "]"; //COLUMNS :: "+java.util.Arrays.asList(tableCharacteristics.getColumnNames());
319
return str;
320    }
321
322    public void setTable(_IndexTableList tableOperations) throws DException {
323       /**@todo Implement this com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexTableList method*/
324       throw new java.lang.UnsupportedOperationException JavaDoc("Method setTable() not yet implemented.");
325    }
326
327    public _IndexTableList getTable() {
328       throw new java.lang.UnsupportedOperationException JavaDoc("Method getTable() not yet implemented.");
329
330    }
331
332    public Object JavaDoc getColumnObjects(_TableIterator iterator, int[] columns) throws DException {
333       /**@todo Implement this com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexTableList method*/
334       throw new java.lang.UnsupportedOperationException JavaDoc("Method getColumnObjects() not yet implemented.");
335    }
336
337    public Object JavaDoc getColumnObjects(_TableIterator iterator, int columns) throws DException {
338       /**@todo Implement this com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexTableList method*/
339       throw new java.lang.UnsupportedOperationException JavaDoc("Method getColumnObjects() not yet implemented.");
340    }
341
342    public Object JavaDoc getColumnObjects(_TableIterator iterator) throws DException {
343       /**@todo Implement this com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexTableList method*/
344       throw new java.lang.UnsupportedOperationException JavaDoc("Method getColumnObjects() not yet implemented.");
345    }
346
347    public Object JavaDoc seek(_Index btree, Object JavaDoc indexKey) throws DException {
348       /**@todo Implement this com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexTableList method*/
349       throw new java.lang.UnsupportedOperationException JavaDoc("Method seek() not yet implemented.");
350    }
351
352    public Object JavaDoc seekFromTopRelative(_Index btree, Object JavaDoc currentKey, Object JavaDoc indexKey) throws DException {
353       /**@todo Implement this com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexTableList method*/
354       throw new java.lang.UnsupportedOperationException JavaDoc("Method seekFromTopRelative() not yet implemented.");
355    }
356
357    public Object JavaDoc seekFromBottomRelative(_Index btree, Object JavaDoc currentKey, Object JavaDoc indexKey) throws DException {
358       /**@todo Implement this com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexTableList method*/
359       throw new java.lang.UnsupportedOperationException JavaDoc("Method seekFromBottomRelative() not yet implemented.");
360    }
361
362    public Object JavaDoc locateKey(_Index btree, Object JavaDoc indexKey, boolean flag) throws DException {
363       /**@todo Implement this com.daffodilwoods.daffodildb.server.datasystem.indexsystem._IndexTableList method*/
364       throw new java.lang.UnsupportedOperationException JavaDoc("Method locateKey() not yet implemented.");
365    }
366
367    public Object JavaDoc update(_TableIterator iterator, _DatabaseUser user, int[] columns, Object JavaDoc[] newValues, int index) throws DException {
368       Object JavaDoc oldBtreeValue = iterator.getKey();
369       int len = btrees.length;
370       boolean[] flags = new boolean[len];
371       boolean isAnyFlagTrue = false;
372       Object JavaDoc[] oldBtreeKeys = new Object JavaDoc[btrees.length];
373       for (int i = 0; i < len; i++) {
374          flags[i] = checkUpdateColumnsInBtree(columns, btrees[i].getIndexInformation().getColumnIndexes());
375          if (flags[i])
376             isAnyFlagTrue = true;
377       }
378       if (isAnyFlagTrue) {
379          BufferRange[] oldValues = (BufferRange[]) iterator.getColumnValues();
380          for (int i = 0; i < len; i++)
381             oldBtreeKeys[i] = flags[i] ? getBTreeKey(btrees[i].getIndexInformation().getColumnIndexes(), oldValues) : null;
382       }
383       ( (_UserTableOperations) iterator).update(user, newValues);
384
385       if (isAnyFlagTrue) {
386          Object JavaDoc newBTreeValue = iterator.getKey();
387          BufferRange[] newValues1 = (BufferRange[]) iterator.getColumnValues();
388          for (int i = 0; i < btrees.length; i++) {
389             if (flags[i]) {
390                Object JavaDoc newBtreeKeys = getBTreeKey(btrees[i].getIndexInformation().getColumnIndexes(), newValues1);
391                btrees[i].update(user, oldBtreeKeys[i], newBtreeKeys, oldBtreeValue, newBTreeValue);
392             }
393          }
394       }
395       return oldBtreeValue;
396    }
397
398    /**
399     * It returns all the objects which is seted in DML object
400     * it have the objects of daffodilFullTextIndexInformation.
401     * @return
402     */

403    public _FullTextIndexInformation[] getFullTextIndexInformation() {
404       if (fullTextDML != null) {
405          _FullTextIndexInformation fullTextIndexInformation[] = new
406              _FullTextIndexInformation[fullTextDML.length];
407          for (int i = 0; i < fullTextDML.length; i++) {
408             fullTextIndexInformation[i] = fullTextDML[i].
409                 getFullTextIndexInformation();
410          }
411          return fullTextIndexInformation;
412       }
413       return null;
414    }
415
416    public Object JavaDoc update(_TableIterator iterator, int[] columns, Object JavaDoc[] newValues, int index) throws DException {
417       Object JavaDoc btreeValue = iterator.getKey();
418       Object JavaDoc[] oldValues = (Object JavaDoc[]) iterator.getColumnValues();
419       int len = btrees.length;
420       Object JavaDoc[] oldBtreeKeys = new Object JavaDoc[len];
421       boolean[] flags = new boolean[len];
422       for (int i = 0; i < len; i++)
423          flags[i] = checkUpdateColumnsInBtree(columns, btrees[i].getIndexInformation().getColumnIndexes());
424       for (int i = 0; i < len; i++)
425          oldBtreeKeys[i] = flags[i] ? getBTreeKey(btrees[i].getIndexInformation().getColumnIndexes(), oldValues) : null;
426        ( (_TableOperations) iterator).update(newValues);
427       for (int i = 0; i < len; i++) {
428          if (flags[i]) {
429             Object JavaDoc newBtreeKeys = getBTreeKey(btrees[i].getIndexInformation().getColumnIndexes(), newValues);
430             btrees[i].update(oldBtreeKeys[i], newBtreeKeys, btreeValue, btreeValue);
431          }
432       }
433       return btreeValue;
434    }
435
436    private boolean checkUpdateColumnsInBtree(int[] updateColumns, int[] btreeColumns) {
437       for (int i = 0; i < updateColumns.length; i++) {
438          for (int j = 0; j < btreeColumns.length; j++) {
439             if (updateColumns[i] == btreeColumns[j])
440                return true;
441          }
442       }
443       return false;
444    }
445
446    public ReadWriteLock getLock() {
447       return rwLock;
448    }
449
450    public boolean isAnyIndexUpdated(int[] columns) throws DException {
451       boolean flag = false;
452       for (int i = 0; i < btrees.length && !flag; i++) {
453          flag = checkUpdateColumnsInBtree(columns, btrees[i].getIndexInformation().getColumnIndexes());
454       }
455       return flag;
456    }
457
458    public void setDatabase(_Database database0) throws DException {
459       database = database0;
460    }
461
462    public _Database getDatabase() throws DException {
463       return database;
464    }
465
466    public void setDuplicateKeysAllowedInBtrees() throws DException {
467       if (btrees != null)
468          for (int i = 0; i < btrees.length; i++) {
469             btrees[i].setDuplicateAllowed(true);
470          }
471    }
472    public Object JavaDoc deleteBlobClobRecord(_TableIterator iterator, _DatabaseUser user, int index) throws DException {
473     return delete(iterator,user,index);
474   }
475
476
477 }
478
Popular Tags