reifydb_catalog/store/view/
list.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use 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}