Module org.firebirdsql.jaybird
Package org.firebirdsql.gds.ng.wire

# Class InlineBlobCache

java.lang.Object
org.firebirdsql.gds.ng.wire.InlineBlobCache

All Implemented Interfaces:
  `DatabaseListener`, `TransactionListener`

@NullMarked public final class InlineBlobCache extends Object implements DatabaseListener, TransactionListener
Cache for inline blobs of a single attachment.

Since:
  6.0.2
Author:
  Mark Rotteveel

## Constructor Summary

Constructors
Constructor
Description
`InlineBlobCache(FbDatabase database)`
Creates an inline blob cache with the `maxBlobCacheSize` configured for `database`.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`add(FbTransaction transaction, InlineBlob blob)`
Adds an inline blob to the cache for the transaction and blob id.
`void`
`detached(FbDatabase database)`
Called when the `database` connection has been detached
`Optional<InlineBlob>`
`getAndRemove(FbTransaction transaction, long blobId)`
Gets an inline blob for the transaction and blob id and removes it from the cache.
`int`
`maxSize()`
`int`
`size()`
`void`
`transactionStateChanged(FbTransaction transaction, TransactionState newState, TransactionState previousState)`
Signals that the transaction state changed.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.firebirdsql.gds.ng.listeners.DatabaseListener

`detaching, warningReceived`

## Constructor Details

### InlineBlobCache

public InlineBlobCache(FbDatabase database)
Creates an inline blob cache with the `maxBlobCacheSize` configured for `database`.

Parameters:
  `database` - database instance

## Method Details

### maxSize

public int maxSize()

Returns:
  the maximum cache size, `-1` if the cache is disabled

### size

public int size()

Returns:
  the current cache size

### getAndRemove

public Optional<InlineBlob> getAndRemove(FbTransaction transaction, long blobId)
Gets an inline blob for the transaction and blob id and removes it from the cache.

Parameters:
  `transaction` - transaction
  `blobId` - blob id
Returns:
  inline blob or empty if not present in the cache
See Also:
  - `getAndRemove(int, long)`

### add

public boolean add(FbTransaction transaction, InlineBlob blob)
Adds an inline blob to the cache for the transaction and blob id.

The inline blob is not stored in the cache if:

- `transaction` is not active
- `FbTransaction.getHandle()` is not equal to `InlineBlob.getTransactionHandle()`
- Adding the blob would exceed the maximum cache size

If the blob is stored, this cache is added as a transaction listener of `transaction`.

Parameters:
  `transaction` - transaction
  `blob` - inline blob
Returns:
  `true` if the blob was added to the cache, `false` otherwise

### transactionStateChanged

public void transactionStateChanged(FbTransaction transaction, TransactionState newState, TransactionState previousState)
Description copied from interface: `TransactionListener`
Signals that the transaction state changed.

Specified by:
  `transactionStateChanged` in interface `TransactionListener`
Parameters:
  `transaction` - `FbTransaction` that changed state

### detached

public void detached(FbDatabase database)
Description copied from interface: `DatabaseListener`
Called when the `database` connection has been detached

Specified by:
  `detached` in interface `DatabaseListener`
Parameters:
  `database` - The database object that was detached