private void removeLob(int tableId, long lobId) { if (TRACE) { trace("remove " + tableId + "/" + lobId); } Object[] value = lobMap.remove(lobId); if (value == null) { // already removed return; } byte[] streamStoreId = (byte[]) value[0]; Object[] key = new Object[] {streamStoreId, lobId}; refMap.remove(key); // check if there are more entries for this streamStoreId key = new Object[] {streamStoreId, 0L}; value = refMap.ceilingKey(key); boolean hasMoreEntries = false; if (value != null) { byte[] s2 = (byte[]) value[0]; if (Arrays.equals(streamStoreId, s2)) { hasMoreEntries = true; } } if (!hasMoreEntries) { streamStore.remove(streamStoreId); } }
/** * Get the smallest key that is larger or equal to this key. * * @param key the key (may not be null) * @return the result */ public K ceilingKey(K key) { // TODO transactional ceilingKey return map.ceilingKey(key); }