reifydb_core/interface/catalog/
view.rs1use reifydb_codec::row::shape::RowFamily;
5use reifydb_value::value::sumtype::SumTypeId;
6use serde::{Deserialize, Serialize};
7
8use crate::{
9 interface::catalog::{
10 column::{Column, ColumnIndex},
11 id::{NamespaceId, RingBufferId, SeriesId, TableId, ViewId},
12 key::PrimaryKey,
13 series::SeriesKey,
14 storage::StorageId,
15 },
16 sort::SortDirection,
17};
18
19#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
20pub struct ViewSortKey {
21 pub column: ColumnIndex,
22 pub direction: SortDirection,
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
26pub enum ViewKind {
27 Deferred,
28 Transactional,
29}
30
31#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
32#[repr(u8)]
33pub enum ViewStorageKind {
34 Table = 1,
35 RingBuffer = 2,
36 Series = 3,
37}
38
39impl ViewStorageKind {
40 pub fn row_family(self) -> RowFamily {
41 match self {
42 Self::Table => RowFamily::Table,
43 Self::RingBuffer => RowFamily::RingBuffer,
44 Self::Series => RowFamily::Series,
45 }
46 }
47}
48
49#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
50pub struct TableView {
51 pub id: ViewId,
52 pub namespace: NamespaceId,
53 pub name: String,
54 pub kind: ViewKind,
55 pub columns: Vec<Column>,
56 pub primary_key: Option<PrimaryKey>,
57 pub storage: TableId,
58 pub sort: Vec<ViewSortKey>,
59}
60
61#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
62pub struct RingBufferView {
63 pub id: ViewId,
64 pub namespace: NamespaceId,
65 pub name: String,
66 pub kind: ViewKind,
67 pub columns: Vec<Column>,
68 pub primary_key: Option<PrimaryKey>,
69 pub storage: RingBufferId,
70 pub capacity: u64,
71 pub sort: Vec<ViewSortKey>,
72}
73
74#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
75pub struct SeriesView {
76 pub id: ViewId,
77 pub namespace: NamespaceId,
78 pub name: String,
79 pub kind: ViewKind,
80 pub columns: Vec<Column>,
81 pub primary_key: Option<PrimaryKey>,
82 pub storage: SeriesId,
83 pub key: SeriesKey,
84 pub tag: Option<SumTypeId>,
85 pub sort: Vec<ViewSortKey>,
86}
87
88#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
89pub enum View {
90 Table(TableView),
91 RingBuffer(RingBufferView),
92 Series(SeriesView),
93}
94
95impl View {
96 pub fn id(&self) -> ViewId {
97 match self {
98 View::Table(t) => t.id,
99 View::RingBuffer(rb) => rb.id,
100 View::Series(s) => s.id,
101 }
102 }
103
104 pub fn namespace(&self) -> NamespaceId {
105 match self {
106 View::Table(t) => t.namespace,
107 View::RingBuffer(rb) => rb.namespace,
108 View::Series(s) => s.namespace,
109 }
110 }
111
112 pub fn name(&self) -> &str {
113 match self {
114 View::Table(t) => &t.name,
115 View::RingBuffer(rb) => &rb.name,
116 View::Series(s) => &s.name,
117 }
118 }
119
120 pub fn kind(&self) -> ViewKind {
121 match self {
122 View::Table(t) => t.kind,
123 View::RingBuffer(rb) => rb.kind,
124 View::Series(s) => s.kind,
125 }
126 }
127
128 pub fn columns(&self) -> &[Column] {
129 match self {
130 View::Table(t) => &t.columns,
131 View::RingBuffer(rb) => &rb.columns,
132 View::Series(s) => &s.columns,
133 }
134 }
135
136 pub fn columns_mut(&mut self) -> &mut Vec<Column> {
137 match self {
138 View::Table(t) => &mut t.columns,
139 View::RingBuffer(rb) => &mut rb.columns,
140 View::Series(s) => &mut s.columns,
141 }
142 }
143
144 pub fn primary_key(&self) -> Option<&PrimaryKey> {
145 match self {
146 View::Table(t) => t.primary_key.as_ref(),
147 View::RingBuffer(rb) => rb.primary_key.as_ref(),
148 View::Series(s) => s.primary_key.as_ref(),
149 }
150 }
151
152 pub fn sort(&self) -> &[ViewSortKey] {
153 match self {
154 View::Table(t) => &t.sort,
155 View::RingBuffer(rb) => &rb.sort,
156 View::Series(s) => &s.sort,
157 }
158 }
159
160 pub fn storage_kind(&self) -> ViewStorageKind {
161 match self {
162 View::Table(_) => ViewStorageKind::Table,
163 View::RingBuffer(_) => ViewStorageKind::RingBuffer,
164 View::Series(_) => ViewStorageKind::Series,
165 }
166 }
167
168 pub fn storage_id(&self) -> StorageId {
169 match self {
170 View::Table(t) => StorageId::Table(t.storage),
171 View::RingBuffer(rb) => StorageId::RingBuffer(rb.storage),
172 View::Series(s) => StorageId::Series(s.storage),
173 }
174 }
175
176 pub fn set_name(&mut self, new_name: String) {
177 match self {
178 View::Table(t) => t.name = new_name,
179 View::RingBuffer(rb) => rb.name = new_name,
180 View::Series(s) => s.name = new_name,
181 }
182 }
183
184 pub fn set_namespace(&mut self, new_namespace: NamespaceId) {
185 match self {
186 View::Table(t) => t.namespace = new_namespace,
187 View::RingBuffer(rb) => rb.namespace = new_namespace,
188 View::Series(s) => s.namespace = new_namespace,
189 }
190 }
191}