MCPcopy Create free account
hub / github.com/cosdata/cosdata / read

Method read

src/models/wal.rs:265–381  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

263 }
264
265 pub fn read(&self) -> Result<Option<VectorOp>, BufIoError> {
266 let guard = self.read_lock.lock();
267
268 let cursor_pos = self.bufman.cursor_position(self.cursor)?;
269 let file_size = self.bufman.file_size();
270
271 if cursor_pos >= file_size {
272 return Ok(None);
273 }
274
275 let len_with_tag = self.bufman.read_u32_with_cursor(self.cursor)?;
276 let (len, is_delete) = if len_with_tag & (1u32 << 31) != 0 {
277 (0x7FFFFFFF & len_with_tag, true)
278 } else {
279 (len_with_tag, false)
280 };
281 self.bufman
282 .seek_with_cursor(self.cursor, len as u64 + 4 + cursor_pos)?;
283
284 drop(guard);
285
286 let cursor = self.bufman.open_cursor()?;
287 self.bufman.seek_with_cursor(cursor, cursor_pos + 4)?;
288 let op = if is_delete {
289 let id = read_string(&self.bufman, cursor)?;
290 VectorOp::Delete(VectorId::from(id))
291 } else {
292 let len = read_len(&self.bufman, cursor)? as usize;
293 let mut vectors = Vec::with_capacity(len);
294
295 for _ in 0..len {
296 let id = VectorId::from(read_string(&self.bufman, cursor)?);
297 let document_id = read_opt_string(&self.bufman, cursor)?.map(DocumentId::from);
298 let dense_values_len = read_len(&self.bufman, cursor)? as usize;
299 let dense_values = if dense_values_len == 0 {
300 None
301 } else {
302 let mut values = Vec::with_capacity(dense_values_len);
303 for _ in 0..dense_values_len {
304 values.push(self.bufman.read_f32_with_cursor(cursor)?);
305 }
306 Some(values)
307 };
308 let metadata_len = read_len(&self.bufman, cursor)? as usize;
309 let metadata = if metadata_len == 0 {
310 None
311 } else {
312 let mut metadata = HashMap::with_capacity(metadata_len);
313
314 for _ in 0..metadata_len {
315 let field = read_string(&self.bufman, cursor)?;
316 let val = {
317 let variant = self.bufman.read_u8_with_cursor(cursor)?;
318 match variant {
319 0 => FieldValue::Int(self.bufman.read_i32_with_cursor(cursor)?),
320 1 => FieldValue::String(read_string(&self.bufman, cursor)?),
321 other => {
322 return Err(BufIoError::Io(io::Error::new(

Callers 15

ann_searchFunction · 0.45
preprocess_embeddingFunction · 0.45
index_embeddingsFunction · 0.45
index_embeddingFunction · 0.45
delete_embeddingFunction · 0.45
sample_embeddingsMethod · 0.45
newMethod · 0.45
insertMethod · 0.45
search_internalMethod · 0.45
insertMethod · 0.45

Calls 15

SparsePairClass · 0.85
cursor_positionMethod · 0.80
file_sizeMethod · 0.80
read_u32_with_cursorMethod · 0.80
seek_with_cursorMethod · 0.80
open_cursorMethod · 0.80
read_f32_with_cursorMethod · 0.80
read_u8_with_cursorMethod · 0.80
read_i32_with_cursorMethod · 0.80
read_with_cursorMethod · 0.80
read_stringFunction · 0.70
read_lenFunction · 0.70

Tested by 15

tests_basic_usageFunction · 0.36
test_seek_with_cursorFunction · 0.36
setup_testFunction · 0.36
setup_testFunction · 0.36