| 892 | } |
| 893 | |
| 894 | fn open_or_create_view(&mut self, name: &str) -> PristineResult<ViewState> { |
| 895 | // Check if view exists |
| 896 | { |
| 897 | let table = self.txn.open_table(VIEWS)?; |
| 898 | let result = table.get(name)?; |
| 899 | if let Some(value) = result { |
| 900 | return deserialize_view_state(value.value()); |
| 901 | } |
| 902 | } |
| 903 | |
| 904 | // Create new view (defaults to Shared, no parent for backward compat) |
| 905 | let id = self.next_view_id.fetch_add(1, Ordering::SeqCst); |
| 906 | let state = ViewState::new(id, name.to_string()); |
| 907 | |
| 908 | // Save it |
| 909 | { |
| 910 | let mut table = self.txn.open_table(VIEWS)?; |
| 911 | let bytes = serialize_view_state(&state); |
| 912 | table.insert(name, bytes.as_slice())?; |
| 913 | } |
| 914 | |
| 915 | Ok(state) |
| 916 | } |
| 917 | |
| 918 | fn create_view( |
| 919 | &mut self, |