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 é:
Connection::open_blobenviaop_open_blob2(id + transação) e recebe um handle de blob.Blob::read_segmentenviaop_get_segmentrepetidamente; cada resposta traz um ou mais segmentos empacotados (comprimento(2 LE) + bytes) e um status que indica quando o blob acabou.Blob::closeenviaop_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
Connection::create_blobenviaop_create_blob2(transação) e recebe um handle + o blob_id atribuído pelo servidor.BlobWriter::writeenviaop_put_segmentem partes de no máximoMAX_SEGMENTbytes. Cada segmento vai empacotado como[len_lo, len_hi, bytes...]dentro de uma cstring XDR.BlobWriter::closeenviaop_close_blobe devolve o blob_id para usar comoValue::Blobem INSERT/UPDATE.
Para o caso comum, Connection::write_blob faz tudo e devolve o id.
Structs§
- Blob
- Um BLOB aberto para leitura no servidor.
- Blob
Writer - Um BLOB aberto para escrita no servidor.