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