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

Method append

src/models/wal.rs:173–263  ·  view source on GitHub ↗
(&self, op: VectorOp)

Source from the content-addressed store, hash-verified

171 }
172
173 pub fn append(&self, op: VectorOp) -> Result<(), BufIoError> {
174 let mut buf = Vec::new();
175
176 buf.extend([u8::MAX; 4]);
177
178 match op {
179 VectorOp::Upsert(vectors) => {
180 self.records_upserted
181 .fetch_add(vectors.len() as u32, Ordering::Relaxed);
182 write_len(&mut buf, vectors.len() as u32);
183 for vector in &*vectors {
184 write_len(&mut buf, vector.id.len() as u32);
185 buf.extend(vector.id.as_bytes());
186 if let Some(document_id) = &vector.document_id {
187 write_len(&mut buf, document_id.len() as u32);
188 buf.extend(document_id.as_bytes());
189 } else {
190 write_len(&mut buf, 0);
191 }
192 if let Some(dense_values) = &vector.dense_values {
193 write_len(&mut buf, dense_values.len() as u32);
194 for val in dense_values {
195 buf.extend(val.to_le_bytes());
196 }
197 } else {
198 write_len(&mut buf, 0);
199 }
200 if let Some(metadata) = &vector.metadata {
201 write_len(&mut buf, metadata.len() as u32);
202 for (field, val) in metadata {
203 write_len(&mut buf, field.len() as u32);
204 buf.extend(field.as_bytes());
205
206 match val {
207 FieldValue::Int(int) => {
208 buf.push(0);
209 buf.extend(int.to_le_bytes());
210 }
211 FieldValue::String(str) => {
212 buf.push(1);
213 write_len(&mut buf, str.len() as u32);
214 buf.extend(str.as_bytes());
215 }
216 }
217 }
218 } else {
219 write_len(&mut buf, 0);
220 }
221
222 if let Some(sparse_values) = &vector.sparse_values {
223 write_len(&mut buf, sparse_values.len() as u32);
224 for pair in sparse_values {
225 buf.extend(pair.0.to_le_bytes());
226 buf.extend(pair.1.to_le_bytes());
227 }
228 } else {
229 write_len(&mut buf, 0);
230 }

Callers 15

weighted_dimensionsMethod · 0.45
delete_vector_by_idFunction · 0.45
run_uploadMethod · 0.45
load_hnsw_indexMethod · 0.45
initMethod · 0.45

Calls 4

write_to_end_of_fileMethod · 0.80
write_lenFunction · 0.70
lenMethod · 0.45
pushMethod · 0.45

Tested by 15

setup_testFunction · 0.36
prepare_glove_datasetFunction · 0.36
read_single_parquet_fileFunction · 0.36
process_parquet_filesFunction · 0.36