MCPcopy Create free account
hub / github.com/clockworklabs/SpacetimeDB / update

Method update

crates/core/src/host/instance_env.rs:436–469  ·  view source on GitHub ↗
(&self, table_id: TableId, index_id: IndexId, buffer: &mut [u8])

Source from the content-addressed store, hash-verified

434 }
435
436 pub fn update(&self, table_id: TableId, index_id: IndexId, buffer: &mut [u8]) -> Result<usize, NodesError> {
437 let stdb = self.relational_db();
438 let tx = &mut *self.get_tx()?;
439
440 let (row_len, row_ptr, update_flags) = stdb
441 .update(tx, table_id, index_id, buffer)
442 .map(|(gen_cols, row_ref, update_flags)| {
443 let row_len = Self::project_cols_bsatn(buffer, gen_cols, row_ref);
444 (row_len, row_ref.pointer(), update_flags)
445 })
446 .inspect_err(
447 #[cold]
448 #[inline(never)]
449 |e| match e {
450 DBError::Datastore(DatastoreError::Index(IndexError::UniqueConstraintViolation(_))) => {}
451 _ => {
452 let res = stdb.table_name_from_id_mut(tx, table_id);
453 if let Ok(Some(table_name)) = res {
454 log::debug!("update(table: {table_name}, table_id: {table_id}, index_id: {index_id}): {e}")
455 } else {
456 log::debug!("update(table_id: {table_id}, index_id: {index_id}): {e}")
457 }
458 }
459 },
460 )?;
461
462 if update_flags.is_scheduler_table {
463 self.schedule_row(stdb, tx, table_id, row_ptr)?;
464 }
465 tx.metrics.bytes_written += buffer.len();
466 tx.metrics.rows_updated += 1;
467
468 Ok(row_len)
469 }
470
471 #[tracing::instrument(level = "trace", skip_all)]
472 pub fn datastore_delete_by_index_scan_point_bsatn(

Callers 1

update_metricsFunction · 0.45

Calls 8

get_txMethod · 0.80
pointerMethod · 0.80
schedule_rowMethod · 0.80
OkFunction · 0.50
relational_dbMethod · 0.45
mapMethod · 0.45
lenMethod · 0.45

Tested by 1

update_metricsFunction · 0.36