Skip to main content

Module blob

Module blob 

Source
Expand description

Leitura e escrita de BLOBs.

§Leitura

Uma coluna BLOB chega numa linha como um id de 8 bytes (Value::Blob); o conteúdo é buscado à parte. O fluxo clássico é:

  1. Connection::open_blob envia op_open_blob2 (id + transação) e recebe um handle de blob.
  2. Blob::read_segment envia op_get_segment repetidamente; cada resposta traz um ou mais segmentos empacotados (comprimento(2 LE) + bytes) e um status que indica quando o blob acabou.
  3. Blob::close envia op_close_blob.

Para o caso comum, Connection::read_blob faz tudo de uma vez e devolve os bytes. Os BLOBs são lidos pelo protocolo clássico (não inline): ver a nota sobre inline_blob_size em statement.rs.

§Escrita

  1. Connection::create_blob envia op_create_blob2 (transação) e recebe um handle + o blob_id atribuído pelo servidor.
  2. BlobWriter::write envia op_put_segment em partes de no máximo MAX_SEGMENT bytes. Cada segmento vai empacotado como [len_lo, len_hi, bytes...] dentro de uma cstring XDR.
  3. BlobWriter::close envia op_close_blob e devolve o blob_id para usar como Value::Blob em INSERT/UPDATE.

Para o caso comum, Connection::write_blob faz tudo e devolve o id.

Structs§

Blob
Um BLOB aberto para leitura no servidor.
BlobWriter
Um BLOB aberto para escrita no servidor.