| 418 | } |
| 419 | |
| 420 | fn open_or_create_view(&mut self, name: &str) -> PristineResult<ViewState> { |
| 421 | // Check if view exists |
| 422 | { |
| 423 | let table = self.txn.open_table(VIEWS)?; |
| 424 | let result = table.get(name)?; |
| 425 | if let Some(value) = result { |
| 426 | return deserialize_view_state(value.value()); |
| 427 | } |
| 428 | } |
| 429 | |
| 430 | // Create new view (defaults to Shared, no parent for backward compat) |
| 431 | let id = self.next_view_id.fetch_add(1, Ordering::SeqCst); |
| 432 | let state = ViewState::new(id, name.to_string()); |
| 433 | |
| 434 | // Save it |
| 435 | { |
| 436 | let mut table = self.txn.open_table(VIEWS)?; |
| 437 | let bytes = serialize_view_state(&state); |
| 438 | table.insert(name, bytes.as_slice())?; |
| 439 | } |
| 440 | |
| 441 | Ok(state) |
| 442 | } |
| 443 | |
| 444 | fn create_view( |
| 445 | &mut self, |