@Override public Table getTable() { return base.getTable(); }
/** * Redo a truncate. * * @param tableId the object id of the table */ void redoTruncate(int tableId) { Index index = metaObjects.get(tableId); Table table = index.getTable(); table.truncate(pageStoreSession); }
private static boolean canUseUniqueIndex(Index idx, Table table, IndexColumn[] cols) { if (idx.getTable() != table || !idx.getIndexType().isUnique()) { return false; } Column[] indexCols = idx.getColumns(); HashSet<Column> indexColsSet = new HashSet<>(); Collections.addAll(indexColsSet, indexCols); HashSet<Column> colsSet = new HashSet<>(); for (IndexColumn c : cols) { colsSet.add(c.column); } return colsSet.equals(indexColsSet); }
public void setIndex(Index index) { this.index = index; this.table = index.getTable(); Column[] columns = table.getColumns(); indexColumns = new IndexColumn[columns.length]; IndexColumn[] idxCols = index.getIndexColumns(); if (idxCols != null) { for (int i = 0, len = columns.length; i < len; i++) { int idx = index.getColumnIndex(columns[i]); if (idx >= 0) { indexColumns[i] = idxCols[idx]; } } } }
/** {@inheritDoc} */ @Override public Cursor find(Session session, SearchRow first, SearchRow last) { GridH2RowDescriptor desc = ((GridH2Table)idx.getTable()).rowDescriptor(); return idx.find(session, desc.prepareProxyIndexRow(first), desc.prepareProxyIndexRow(last)); }
/** * Remove the meta data of an index. * * @param index the index to remove * @param session the session */ public void removeMeta(Index index, Session session) { if (SysProperties.CHECK) { if (!index.getTable().isTemporary()) { // to prevent ABBA locking problems, we need to always take // the Database lock before we take the PageStore lock synchronized (database) { synchronized (this) { database.verifyMetaLocked(session); } } } } synchronized (this) { if (!recoveryRunning) { removeMetaIndex(index, session); metaObjects.remove(index.getId()); } } }
/** {@inheritDoc} */ @Override public boolean addSearchRows(SearchRow first, SearchRow last) { GridH2RowDescriptor desc = ((GridH2Table)idx.getTable()).rowDescriptor(); return target.addSearchRows(desc.prepareProxyIndexRow(first), desc.prepareProxyIndexRow(last)); }
private void removeMetaIndex(Index index, Session session) { int key = index.getId() + 1; Row row = metaIndex.getRow(session, key); if (row.getKey() != key) { throw DbException.get(ErrorCode.FILE_CORRUPTED_1, "key: " + key + " index: " + index + " table: " + index.getTable() + " row: " + row); } metaIndex.remove(session, row); }
/** {@inheritDoc} */ @Override public Cursor findByGeometry(TableFilter filter, SearchRow first, SearchRow last, SearchRow intersection) { GridH2RowDescriptor desc = ((GridH2Table)idx.getTable()).rowDescriptor(); return ((SpatialIndex)idx).findByGeometry(filter, desc.prepareProxyIndexRow(first), desc.prepareProxyIndexRow(last), desc.prepareProxyIndexRow(intersection)); } }
/** * Redo a change in a table. * * @param tableId the object id of the table * @param row the row * @param add true if the record is added, false if deleted */ void redo(int tableId, Row row, boolean add) { if (tableId == META_TABLE_ID) { if (add) { addMeta(row, pageStoreSession, true); } else { removeMeta(row); } } Index index = metaObjects.get(tableId); if (index == null) { throw DbException.throwInternalError( "Table not found: " + tableId + " " + row + " " + add); } Table table = index.getTable(); if (add) { table.addRow(pageStoreSession, row); } else { table.removeRow(pageStoreSession, row); } }
private static boolean canUseIndex(Index existingIndex, Table table, IndexColumn[] cols, boolean moreColumnsOk) { if (existingIndex.getTable() != table || existingIndex.getCreateSQL() == null) {
@Override public int update() { session.commit(true); Database db = session.getDatabase(); oldIndex = oldSchema.findIndex(session, oldIndexName); if (oldIndex == null) { if (!ifExists) { throw DbException.get(ErrorCode.INDEX_NOT_FOUND_1, newIndexName); } return 0; } if (oldSchema.findIndex(session, newIndexName) != null || newIndexName.equals(oldIndexName)) { throw DbException.get(ErrorCode.INDEX_ALREADY_EXISTS_1, newIndexName); } session.getUser().checkRight(oldIndex.getTable(), Right.ALL); db.renameSchemaObject(session, oldIndex, newIndexName); return 0; }
for (SchemaObject obj : database.getAllSchemaObjects(DbObject.INDEX)) { Index index = (Index) obj; if (index.getTable() == this) { DbException.throwInternalError("index not dropped: " + index.getName());
private boolean existsRow(Session session, Index searchIndex, SearchRow check, Row excluding) { Table searchTable = searchIndex.getTable(); searchTable.lock(session, false, false); Cursor cursor = searchIndex.find(session, check, check); while (cursor.next()) { SearchRow found; found = cursor.getSearchRow(); if (excluding != null && found.getKey() == excluding.getKey()) { continue; } Column[] cols = searchIndex.getColumns(); boolean allEqual = true; int len = Math.min(columns.length, cols.length); for (int i = 0; i < len; i++) { int idx = cols[i].getColumnId(); Value c = check.getValue(idx); Value f = found.getValue(idx); if (searchTable.compareTypeSafe(c, f) != 0) { allEqual = false; break; } } if (allEqual) { return true; } } return false; }
"Table not found:" + parent + " for " + row + " meta:" + metaObjects); RegularTable table = (RegularTable) p.getTable(); Column[] tableCols = table.getColumns(); int len = columns.length;
.getAllSchemaObjects(DbObject.INDEX)) { Index index = (Index) obj; if (index.getTable() == this) { DbException.throwInternalError("index not dropped: " + index.getName());
/** {@inheritDoc} */ @Override public void removeChildrenAndResources(Session ses) { lock(true); try { super.removeChildrenAndResources(ses); // Clear all user indexes registered in schema. while (idxs.size() > sysIdxsCnt) { Index idx = idxs.get(sysIdxsCnt); if (idx.getName() != null && idx.getSchema().findIndex(ses, idx.getName()) == idx) { // This call implicitly removes both idx and its proxy, if any, from idxs. database.removeSchemaObject(ses, idx); // We have to call destroy here if we are who has removed this index from the table. if (idx instanceof GridH2IndexBase) ((GridH2IndexBase)idx).destroy(rmIndex); } } if (SysProperties.CHECK) { for (SchemaObject obj : database.getAllSchemaObjects(DbObject.INDEX)) { Index idx = (Index) obj; if (idx.getTable() == this) DbException.throwInternalError("index not dropped: " + idx.getName()); } } database.removeMeta(ses, getId()); invalidate(); } finally { unlock(true); } }
Table table = index.getTable(); if (table.isTemporary() && !table.isGlobalTemporary()) { session.removeLocalTempTableIndex(index);
if (refIndex != null && refIndex.getTable() == refTable && canUseIndex(refIndex, refTable, refIndexColumns, false)) { isRefOwner = true;