reifydb_catalog/store/view/
list.rs1use reifydb_core::interface::{Key, NamespaceId, QueryTransaction, ViewDef, ViewKey, ViewKind};
5
6use crate::{CatalogStore, store::view::layout::view};
7
8impl CatalogStore {
9 pub async fn list_views_all(rx: &mut impl QueryTransaction) -> crate::Result<Vec<ViewDef>> {
10 let mut result = Vec::new();
11
12 let batch = rx.range(ViewKey::full_scan()).await?;
13
14 for entry in batch.items {
15 if let Some(key) = Key::decode(&entry.key) {
16 if let Key::View(view_key) = key {
17 let view_id = view_key.view;
18
19 let namespace_id =
20 NamespaceId(view::LAYOUT.get_u64(&entry.values, view::NAMESPACE));
21
22 let name = view::LAYOUT.get_utf8(&entry.values, view::NAME).to_string();
23
24 let kind_value = view::LAYOUT.get_u8(&entry.values, view::KIND);
25 let kind = if kind_value == 0 {
26 ViewKind::Deferred
27 } else {
28 ViewKind::Transactional
29 };
30
31 let primary_key = Self::find_primary_key(rx, view_id).await?;
32
33 let columns = Self::list_columns(rx, view_id).await?;
34
35 let view_def = ViewDef {
36 id: view_id,
37 namespace: namespace_id,
38 name,
39 kind,
40 columns,
41 primary_key,
42 };
43
44 result.push(view_def);
45 }
46 }
47 }
48
49 Ok(result)
50 }
51}