| 986 | } |
| 987 | |
| 988 | fn open_or_create_view(&mut self, name: &str) -> PristineResult<ViewState> { |
| 989 | // Check if view exists |
| 990 | { |
| 991 | let table = self.txn.open_table(VIEWS)?; |
| 992 | let result = table.get(name)?; |
| 993 | if let Some(value) = result { |
| 994 | return deserialize_view_state(value.value()); |
| 995 | } |
| 996 | } |
| 997 | |
| 998 | // Create new view (defaults to Shared, no parent for backward compat) |
| 999 | let id = self.next_view_id.fetch_add(1, Ordering::SeqCst); |
| 1000 | let state = ViewState::new(id, name.to_string()); |
| 1001 | |
| 1002 | // Save it |
| 1003 | { |
| 1004 | let mut table = self.txn.open_table(VIEWS)?; |
| 1005 | let bytes = serialize_view_state(&state); |
| 1006 | table.insert(name, bytes.as_slice())?; |
| 1007 | } |
| 1008 | |
| 1009 | Ok(state) |
| 1010 | } |
| 1011 | |
| 1012 | fn create_view( |
| 1013 | &mut self, |