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 26 27 public class IndexTable implements _IndexTable, _IndexTableList { 28 31 private _Index[] btrees; 32 35 36 private _FullTextDML[] fullTextDML; 37 38 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 58 59 public _Index[] getIndexes() throws DException { 60 return btrees; 61 } 62 63 68 69 public void setIndexes(_Index btrees[]) throws DException { 70 this.btrees = btrees; 71 } 72 73 78 79 public void setFullTextDML(_FullTextDML fullTextDML[]) throws DException { 80 this.fullTextDML = fullTextDML; 81 } 82 83 88 89 public _FullTextDML[] getFullTextDML() throws DException { 90 return this.fullTextDML; 91 } 92 93 98 99 public _TableIterator getIterator() throws DException { 100 throw new java.lang.UnsupportedOperationException ("Method getIterator() not yet implemented."); 101 } 102 103 110 111 public Object insert(_TableIterator tableIterator, Object [] values, int index) throws DException { 112 ( (_TableOperations) tableIterator).insert(values); 113 Object btreeValue = tableIterator.getKey(); 114 Object keyToReturn = null; 115 if (btrees != null) { 116 int[] btreeColumns; 117 Object btreeKey, keys; 118 for (int i = 0; i < btrees.length; i++) { 119 btreeColumns = btrees[i].getIndexInformation().getColumnIndexes(); 120 btreeKey = getBTreeKey(btreeColumns, values); keys = btrees[i].insert(btreeKey, btreeValue); 122 if (i == index) { 123 keyToReturn = keys; 124 } 125 } 126 } 127 return keyToReturn; 128 } 129 130 137 138 public Object update(_TableIterator iterator, Object [] newValues, int index) throws DException { 139 Object btreeValue = iterator.getKey(); 140 Object [] oldValues = (Object []) iterator.getColumnValues(); 141 Object [] oldBtreeKeys = new Object [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 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 158 159 public Object delete(_TableIterator iterator, int index) throws DException { 160 Object btreeValue = iterator.getKey(); 161 Object [] values = (Object []) iterator.getColumnValues(); 162 Object 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 getBTreeKey(int[] btreeColumns, Object [] 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 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 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 ("Method getTableCharacteristics() not yet implemented."); 221 222 } 223 224 232 233 public Object insert(_TableIterator tableIterator, _DatabaseUser user, Object [] values, int index) throws DException { 234 ( (_UserTableOperations) tableIterator).insert(user, values); 235 Object btreeValue = tableIterator.getKey(); 236 Object keyToReturn = null; 237 if (btrees != null) { 238 int[] btreeColumns; 239 Object 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 260 261 public Object update(_TableIterator iterator, _DatabaseUser user, Object [] newValues, int index) throws DException { 262 Object oldBtreeValue = iterator.getKey(); 263 BufferRange[] oldValues = (BufferRange[]) iterator.getColumnValues(); 264 Object [] oldBtreeKeys = new Object [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 newBTreeValue = iterator.getKey(); 269 BufferRange[] newValues1 = (BufferRange[]) iterator.getColumnValues(); 270 Object 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 delete(_TableIterator iterator, _DatabaseUser user, int index) throws DException { 279 Object btreeValue = iterator.getKey(); 280 BufferRange[] values = (BufferRange[]) iterator.getColumnValues(); 281 Object 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 [tableCharacteristics.getColumnCount()]); 297 } 298 299 public _Iterator getIterator(int index) throws DException { 300 throw new UnsupportedOperationException ("METHOD NOT IMPLEMENTED"); 301 } 302 303 public void rollback() throws DException { 304 } 305 306 307 public _Iterator getDefaultIterator() throws DException { 308 throw new UnsupportedOperationException ("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 toString() { 317 String str = ""; 318 str = "[" + tableName.catalog + "][" + tableName.schema + "][" + tableName.name + "]"; return str; 320 } 321 322 public void setTable(_IndexTableList tableOperations) throws DException { 323 324 throw new java.lang.UnsupportedOperationException ("Method setTable() not yet implemented."); 325 } 326 327 public _IndexTableList getTable() { 328 throw new java.lang.UnsupportedOperationException ("Method getTable() not yet implemented."); 329 330 } 331 332 public Object getColumnObjects(_TableIterator iterator, int[] columns) throws DException { 333 334 throw new java.lang.UnsupportedOperationException ("Method getColumnObjects() not yet implemented."); 335 } 336 337 public Object getColumnObjects(_TableIterator iterator, int columns) throws DException { 338 339 throw new java.lang.UnsupportedOperationException ("Method getColumnObjects() not yet implemented."); 340 } 341 342 public Object getColumnObjects(_TableIterator iterator) throws DException { 343 344 throw new java.lang.UnsupportedOperationException ("Method getColumnObjects() not yet implemented."); 345 } 346 347 public Object seek(_Index btree, Object indexKey) throws DException { 348 349 throw new java.lang.UnsupportedOperationException ("Method seek() not yet implemented."); 350 } 351 352 public Object seekFromTopRelative(_Index btree, Object currentKey, Object indexKey) throws DException { 353 354 throw new java.lang.UnsupportedOperationException ("Method seekFromTopRelative() not yet implemented."); 355 } 356 357 public Object seekFromBottomRelative(_Index btree, Object currentKey, Object indexKey) throws DException { 358 359 throw new java.lang.UnsupportedOperationException ("Method seekFromBottomRelative() not yet implemented."); 360 } 361 362 public Object locateKey(_Index btree, Object indexKey, boolean flag) throws DException { 363 364 throw new java.lang.UnsupportedOperationException ("Method locateKey() not yet implemented."); 365 } 366 367 public Object update(_TableIterator iterator, _DatabaseUser user, int[] columns, Object [] newValues, int index) throws DException { 368 Object oldBtreeValue = iterator.getKey(); 369 int len = btrees.length; 370 boolean[] flags = new boolean[len]; 371 boolean isAnyFlagTrue = false; 372 Object [] oldBtreeKeys = new Object [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 newBTreeValue = iterator.getKey(); 387 BufferRange[] newValues1 = (BufferRange[]) iterator.getColumnValues(); 388 for (int i = 0; i < btrees.length; i++) { 389 if (flags[i]) { 390 Object 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 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 update(_TableIterator iterator, int[] columns, Object [] newValues, int index) throws DException { 417 Object btreeValue = iterator.getKey(); 418 Object [] oldValues = (Object []) iterator.getColumnValues(); 419 int len = btrees.length; 420 Object [] oldBtreeKeys = new Object [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 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 deleteBlobClobRecord(_TableIterator iterator, _DatabaseUser user, int index) throws DException { 473 return delete(iterator,user,index); 474 } 475 476 477 } 478 | Popular Tags |