Insert a raw edge record (for snapshot restore). Takes the tenant + versioned composite key + raw value bytes (payload or sentinel). The composite key must already include the `{system_from:020}` suffix. Reverse-index mirror is maintained with the same suffix.
(
&self,
tid: TenantId,
composite_key: &str,
value: &[u8],
)
| 113 | /// The composite key must already include the `{system_from:020}` suffix. |
| 114 | /// Reverse-index mirror is maintained with the same suffix. |
| 115 | pub fn put_edge_raw( |
| 116 | &self, |
| 117 | tid: TenantId, |
| 118 | composite_key: &str, |
| 119 | value: &[u8], |
| 120 | ) -> crate::Result<()> { |
| 121 | let t = tid.as_u64(); |
| 122 | let (collection, src, label, dst, sys) = parse_versioned_edge_key(composite_key) |
| 123 | .ok_or_else(|| crate::Error::BadRequest { |
| 124 | detail: format!("put_edge_raw: malformed versioned key {composite_key:?}"), |
| 125 | })?; |
| 126 | let rev_key = versioned_edge_key(collection, dst, label, src, sys)?; |
| 127 | let rev_value: &[u8] = if is_sentinel(value) { value } else { &[] }; |
| 128 | |
| 129 | let write_txn = self |
| 130 | .db |
| 131 | .begin_write() |
| 132 | .map_err(|e| redb_err("begin_write", e))?; |
| 133 | { |
| 134 | let mut edges = write_txn |
| 135 | .open_table(EDGES) |
| 136 | .map_err(|e| redb_err("open edges", e))?; |
| 137 | edges |
| 138 | .insert((t, composite_key), value) |
| 139 | .map_err(|e| redb_err("insert edge", e))?; |
| 140 | let mut rev_t = write_txn |
| 141 | .open_table(REVERSE_EDGES) |
| 142 | .map_err(|e| redb_err("open reverse", e))?; |
| 143 | rev_t |
| 144 | .insert((t, rev_key.as_str()), rev_value) |
| 145 | .map_err(|e| redb_err("insert reverse", e))?; |
| 146 | } |
| 147 | write_txn.commit().map_err(|e| redb_err("commit edge", e))?; |
| 148 | Ok(()) |
| 149 | } |
| 150 | |
| 151 | /// Get an edge's current-state properties. `None` if no live version. |
| 152 | pub fn get_edge( |