/** * * @param partsMap Partitions map. * @param parts Partitions. * @return Result. */ private static Map<ClusterNode, IntArray> narrowForQuery(Map<ClusterNode, IntArray> partsMap, int[] parts) { if (parts == null) return partsMap; Map<ClusterNode, IntArray> cp = U.newHashMap(partsMap.size()); for (Map.Entry<ClusterNode, IntArray> entry : partsMap.entrySet()) { IntArray filtered = new IntArray(parts.length); IntArray orig = entry.getValue(); for (int i = 0; i < orig.size(); i++) { int p = orig.get(i); if (Arrays.binarySearch(parts, p) >= 0) filtered.add(p); } if (filtered.size() > 0) cp.put(entry.getKey(), filtered); } return cp.isEmpty() ? null : cp; }
@Override public boolean equals(Object obj) { if (!(obj instanceof IntArray)) { return false; } IntArray other = (IntArray) obj; if (hashCode() != other.hashCode() || size != other.size) { return false; } for (int i = 0; i < size; i++) { if (data[i] != other.data[i]) { return false; } } return true; }
/** * Allocate a number of pages. * * @param list the list where to add the allocated pages * @param pagesToAllocate the number of pages to allocate * @param exclude the exclude list * @param after all allocated pages are higher than this page */ void allocatePages(IntArray list, int pagesToAllocate, BitField exclude, int after) { list.ensureCapacity(list.size() + pagesToAllocate); for (int i = 0; i < pagesToAllocate; i++) { int page = allocatePage(exclude, after); after = page; list.add(page); } }
private void freeLogPages(IntArray pages) { if (trace.isDebugEnabled()) { trace.debug("log frees " + pages.get(0) + ".." + pages.get(pages.size() - 1)); } Data buffer = getBuffer(); buffer.writeByte((byte) FREE_LOG); int size = pages.size(); buffer.writeVarInt(size); for (int i = 0; i < size; i++) { buffer.writeVarInt(pages.get(i)); } write(buffer); }
public int allocate(int blockCount) throws SQLException { if (freeList.size() > 0) { synchronized (database) { BitField used = file.getUsed(); for (int i = 0; i < freeList.size(); i++) { int px = freeList.get(i); if (used.get(px)) { // sometime there may stay some entries in the freeList // that are not free (free 2, free 1, allocate 1+2) // these entries are removed right here freeList.remove(i--); } else { if (isFreeAndMine(px, blockCount)) { int pos = px; freeList.remove(i--); file.setUsed(pos, blockCount); return pos; } } } } } int pos = file.allocate(this, blockCount); file.setUsed(pos, blockCount); return pos; }
public BtreePage split(Session session, int splitPoint) throws SQLException { ObjectArray data = new ObjectArray(); IntArray children = new IntArray(); splitPoint++; int max = pageData.size(); if (SysProperties.CHECK && index.getDatabase().getLogIndexChanges() && !getDeleted()) { // page must have been deleted already before calling // getSplitPoint() throw Message.getInternalError(); } for (int i = splitPoint; i < max; i++) { data.add(getData(splitPoint)); children.add(getChild(splitPoint)); pageData.remove(splitPoint); pageChildren.remove(splitPoint); } children.add(getChild(splitPoint)); pageData.remove(splitPoint - 1); pageChildren.remove(splitPoint); BtreeNode n2 = new BtreeNode(index, children, data); index.updatePage(session, this); index.addPage(session, n2); return n2; }
private void initNextData() { int nextData = trunk == null ? -1 : trunk.getPageData(trunkIndex++); if (nextData == -1) { int parent = trunkPageId; if (trunkNext != 0) { trunkPageId = trunkNext; } int len = PageStreamTrunk.getPagesAddressed(store.getPageSize()); int[] pageIds = new int[len]; for (int i = 0; i < len; i++) { pageIds[i] = reservedPages.get(i); } trunkNext = reservedPages.get(len); logKey++; trunk = PageStreamTrunk.create(store, parent, trunkPageId, trunkNext, logKey, pageIds); trunkIndex = 0; pageCount++; trunk.write(); reservedPages.removeRange(0, len + 1); nextData = trunk.getPageData(trunkIndex++); } data = PageStreamData.create(store, nextData, trunk.getPos(), logKey); pageCount++; data.initWrite(); }
int getChild(int i) { return pageChildren.get(i); }
int pageIndex = -1; if (record == null) { if (pages.size() == 0) { return -1; lastCheckedPage = pages.get(0); next = lastCheckedPage * DiskFile.BLOCKS_PER_PAGE; } else { if (lastCheckedPage != page) { if (pageIndex < 0) { pageIndex = pages.findNextValueIndex(page); } else { pageIndex++; if (pageIndex >= pages.size()) { return -1; lastCheckedPage = pages.get(pageIndex); next = Math.max(next, DiskFile.BLOCKS_PER_PAGE * lastCheckedPage);
BtreePage page = index.getPage(session, pageChildren.get(at)); int splitPoint = page.add(newRow, session); if (splitPoint == 0) { BtreePage page2 = page.split(session, splitPoint); index.deletePage(session, this); pageChildren.add(at + 1, page2.getPos()); pageData.add(at, pivot); splitPoint = getSplitPoint();
public void truncate(Session session) throws SQLException { freeList = new IntArray(); recordCount = 0; file.truncateStorage(session, this, pages); }
target.set(idx, param); paramIdxs.add(idx);
public void add(int i, int value) { if (SysProperties.CHECK && i > size) { throw new ArrayIndexOutOfBoundsException("i=" + i + " size=" + size); } checkCapacity(); if (i == size) { add(value); } else { System.arraycopy(data, i, data, i + 1, size - i); data[i] = value; size++; } }