apache/shardingsphere · error · FirebirdProtocolException

SEEK BLOB is not supported at the moment, blob handle: %d

Error message

SEEK BLOB is not supported at the moment, blob handle: %d

What it means

FirebirdProtocolException thrown unconditionally by FirebirdSeekBlobCommandExecutor: the SEEK BLOB operation of the Firebird blob sub-protocol is not implemented, so any request is rejected with the offending blob handle. Read/write of blob segments via GET/PUT SEGMENT paths is separate; only seek is refused.

Source

Thrown at proxy/frontend/dialect/firebird/src/main/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/blob/FirebirdSeekBlobCommandExecutor.java:38

import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.database.protocol.firebird.exception.FirebirdProtocolException;
import org.apache.shardingsphere.database.protocol.firebird.packet.command.query.blob.FirebirdSeekBlobCommandPacket;
import org.apache.shardingsphere.database.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.proxy.frontend.command.executor.CommandExecutor;

import java.util.Collection;

/**
 * Seek blob command executor for Firebird.
 */
@RequiredArgsConstructor
public final class FirebirdSeekBlobCommandExecutor implements CommandExecutor {
    
    private final FirebirdSeekBlobCommandPacket packet;
    
    @Override
    public Collection<DatabasePacket> execute() {
        throw new FirebirdProtocolException("SEEK BLOB is not supported at the moment, blob handle: %d", packet.getBlobHandle());
    }
}

View on GitHub (pinned to e952770a21)

Solutions

  1. Read blobs sequentially (open, get segments in order, close) instead of seeking to offsets.
  2. Materialize the whole blob client-side and slice it in application memory.
  3. Access such data through a direct Firebird connection rather than through the ShardingSphere proxy until SEEK is supported.
Defensive patterns

Strategy: fallback

Try / catch

catch (SQLException e) {
    if (e.getMessage().contains("SEEK BLOB is not supported")) { byte[] all = readWholeBlob(blobHandle); sliceLocally(all, offset, len); } else throw e;
}

Prevention

When it happens

Trigger: A client sends the Firebird op_seek_blob packet with a blob handle; execute() ignores everything else and throws 'SEEK BLOB is not supported at the moment, blob handle: %d'.

Common situations: clients using Firebird's segmented-blob random access (seek to offset then read) — e.g. multimedia or document-management applications reading middle-of-blob slices; ORB/tooling that always issues seek even for sequential access.

Related errors


AI-assisted analysis of apache/shardingsphere@e952770a21 (2026-08-14). Data as JSON: /api/errors/595ff670783f9ca7. Report an issue: GitHub.