1use authentication::AuthenticationKey;
5use binding::BindingKey;
6use cdc_consumer::CdcConsumerKey;
7use column::ColumnKey;
8use column_sequence::ColumnSequenceKey;
9use column_snapshot::{ColumnSnapshotKey, SeriesColumnSnapshotKey, TableColumnSnapshotKey};
10use columns::ColumnsKey;
11use dictionary::{DictionaryEntryIndexKey, DictionaryEntryKey, DictionaryKey};
12use flow::FlowKey;
13use granted_role::GrantedRoleKey;
14use handler::HandlerKey;
15use identity::IdentityKey;
16use identity_attribute::IdentityAttributeKey;
17use identity_attribute_value::IdentityAttributeValueKey;
18use index::IndexKey;
19use index_entry::IndexEntryKey;
20use kind::KeyKind;
21use namespace::NamespaceKey;
22use namespace_binding::NamespaceBindingKey;
23use namespace_dictionary::NamespaceDictionaryKey;
24use namespace_flow::NamespaceFlowKey;
25use namespace_handler::NamespaceHandlerKey;
26use namespace_procedure::NamespaceProcedureKey;
27use namespace_queue::NamespaceQueueKey;
28use namespace_ringbuffer::NamespaceRingBufferKey;
29use namespace_series::NamespaceSeriesKey;
30use namespace_sink::NamespaceSinkKey;
31use namespace_source::NamespaceSourceKey;
32use namespace_sumtype::NamespaceSumTypeKey;
33use namespace_table::NamespaceTableKey;
34use namespace_view::NamespaceViewKey;
35use operator_state::OperatorStateKey;
36use output_frontier::OutputFrontierKey;
37use partition::PartitionKey;
38use partitioned_row::PartitionedRowKey;
39use policy::PolicyKey;
40use policy_op::PolicyOpKey;
41use primary_key::PrimaryKeyKey;
42use procedure::ProcedureKey;
43use procedure_param::ProcedureParamKey;
44use property::ColumnPropertyKey;
45use queue::QueueKey;
46use queue_deduplication::QueueDeduplicationKey;
47use reifydb_codec::{
48 key as keycode,
49 key::encoded::{EncodedKey, EncodedKeyRange},
50};
51use relationship::RelationshipKey;
52use ringbuffer::{RingBufferKey, RingBufferMetadataKey};
53use role::RoleKey;
54use row::RowKey;
55use row_sequence::RowSequenceKey;
56use series::{SeriesKey, SeriesMetadataKey};
57use sink::SinkKey;
58use source::SourceKey;
59use sumtype::SumTypeKey;
60use system_sequence::SystemSequenceKey;
61use system_version::SystemVersionKey;
62use table::TableKey;
63use token::TokenKey;
64use transaction_version::TransactionVersionKey;
65use version_epoch::VersionEpochKey;
66use view::ViewKey;
67
68pub mod authentication;
69pub mod binding;
70pub mod catalog;
71pub mod cdc_consumer;
72pub mod cdc_exclude;
73pub mod column;
74pub mod column_sequence;
75pub mod column_snapshot;
76pub mod columns;
77pub mod config;
78pub mod dictionary;
79pub mod flow;
80pub mod flow_edge;
81pub mod flow_version;
82pub mod granted_role;
83pub mod handler;
84pub mod identity;
85pub mod identity_attribute;
86pub mod identity_attribute_value;
87pub mod index;
88pub mod index_entry;
89pub mod kind;
90pub mod migration;
91pub mod migration_event;
92pub mod namespace;
93pub mod namespace_binding;
94pub mod namespace_dictionary;
95pub mod namespace_flow;
96pub mod namespace_handler;
97pub mod namespace_procedure;
98pub mod namespace_queue;
99pub mod namespace_ringbuffer;
100pub mod namespace_series;
101pub mod namespace_sink;
102pub mod namespace_source;
103pub mod namespace_sumtype;
104pub mod namespace_table;
105pub mod namespace_view;
106pub mod operator;
107pub mod operator_settings;
108pub mod operator_state;
109pub mod output_frontier;
110pub mod partition;
111pub mod partitioned_row;
112pub mod policy;
113pub mod policy_op;
114pub mod primary_key;
115pub mod procedure;
116pub mod procedure_param;
117pub mod property;
118pub mod queue;
119pub mod queue_deduplication;
120pub mod relationship;
121pub mod ringbuffer;
122pub mod role;
123pub mod row;
124pub mod row_sequence;
125pub mod row_settings;
126pub mod row_shape;
127pub mod series;
128pub mod series_row;
129pub mod sink;
130pub mod source;
131pub mod sumtype;
132pub mod system_sequence;
133pub mod system_version;
134pub mod table;
135pub mod token;
136pub mod transaction_version;
137pub mod variant_handler;
138pub mod version_epoch;
139pub mod view;
140#[derive(Debug)]
141pub enum Key {
142 CdcConsumer(CdcConsumerKey),
143 Namespace(NamespaceKey),
144 NamespaceTable(NamespaceTableKey),
145 NamespaceView(NamespaceViewKey),
146 NamespaceFlow(NamespaceFlowKey),
147 SystemSequence(SystemSequenceKey),
148 Table(TableKey),
149 Flow(FlowKey),
150 Column(ColumnKey),
151 Columns(ColumnsKey),
152 Index(IndexKey),
153 IndexEntry(IndexEntryKey),
154 OperatorState(OperatorStateKey),
155 OutputFrontier(OutputFrontierKey),
156 PrimaryKey(PrimaryKeyKey),
157 Row(RowKey),
158 PartitionedRow(PartitionedRowKey),
159 Partition(PartitionKey),
160 RowSequence(RowSequenceKey),
161 TableColumnSequence(ColumnSequenceKey),
162 TableColumnProperty(ColumnPropertyKey),
163 SystemVersion(SystemVersionKey),
164 TransactionVersion(TransactionVersionKey),
165 VersionEpoch(VersionEpochKey),
166 View(ViewKey),
167 Queue(QueueKey),
168 NamespaceQueue(NamespaceQueueKey),
169 QueueDeduplication(QueueDeduplicationKey),
170 RingBuffer(RingBufferKey),
171 RingBufferMetadata(RingBufferMetadataKey),
172 NamespaceRingBuffer(NamespaceRingBufferKey),
173 Dictionary(DictionaryKey),
174 DictionaryEntry(DictionaryEntryKey),
175 DictionaryEntryIndex(DictionaryEntryIndexKey),
176 NamespaceDictionary(NamespaceDictionaryKey),
177 SumType(SumTypeKey),
178 NamespaceSumType(NamespaceSumTypeKey),
179 Handler(HandlerKey),
180 NamespaceHandler(NamespaceHandlerKey),
181 Series(SeriesKey),
182 SeriesMetadata(SeriesMetadataKey),
183 NamespaceSeries(NamespaceSeriesKey),
184 Identity(IdentityKey),
185 IdentityAttribute(IdentityAttributeKey),
186 IdentityAttributeValue(IdentityAttributeValueKey),
187 Authentication(AuthenticationKey),
188 Role(RoleKey),
189 GrantedRole(GrantedRoleKey),
190 Policy(PolicyKey),
191 PolicyOp(PolicyOpKey),
192 Token(TokenKey),
193 Source(SourceKey),
194 NamespaceSource(NamespaceSourceKey),
195 Sink(SinkKey),
196 NamespaceSink(NamespaceSinkKey),
197 Procedure(ProcedureKey),
198 NamespaceProcedure(NamespaceProcedureKey),
199 ProcedureParam(ProcedureParamKey),
200 Binding(BindingKey),
201 NamespaceBinding(NamespaceBindingKey),
202 ColumnSnapshot(ColumnSnapshotKey),
203 SeriesColumnSnapshot(SeriesColumnSnapshotKey),
204 TableColumnSnapshot(TableColumnSnapshotKey),
205 Relationship(RelationshipKey),
206}
207
208impl Key {
209 pub fn encode(&self) -> EncodedKey {
210 match &self {
211 Key::CdcConsumer(key) => key.encode(),
212 Key::Namespace(key) => key.encode(),
213 Key::NamespaceTable(key) => key.encode(),
214 Key::NamespaceView(key) => key.encode(),
215 Key::NamespaceFlow(key) => key.encode(),
216 Key::Table(key) => key.encode(),
217 Key::Flow(key) => key.encode(),
218 Key::Column(key) => key.encode(),
219 Key::Columns(key) => key.encode(),
220 Key::TableColumnProperty(key) => key.encode(),
221 Key::Index(key) => key.encode(),
222 Key::IndexEntry(key) => key.encode(),
223 Key::OperatorState(key) => key.encode(),
224 Key::OutputFrontier(key) => key.encode(),
225 Key::PrimaryKey(key) => key.encode(),
226 Key::Row(key) => key.encode(),
227 Key::PartitionedRow(key) => key.encode(),
228 Key::Partition(key) => key.encode(),
229 Key::RowSequence(key) => key.encode(),
230 Key::TableColumnSequence(key) => key.encode(),
231 Key::SystemSequence(key) => key.encode(),
232 Key::SystemVersion(key) => key.encode(),
233 Key::TransactionVersion(key) => key.encode(),
234 Key::VersionEpoch(key) => key.encode(),
235 Key::View(key) => key.encode(),
236 Key::Queue(key) => key.encode(),
237 Key::NamespaceQueue(key) => key.encode(),
238 Key::QueueDeduplication(key) => key.encode(),
239 Key::RingBuffer(key) => key.encode(),
240 Key::RingBufferMetadata(key) => key.encode(),
241 Key::NamespaceRingBuffer(key) => key.encode(),
242 Key::Dictionary(key) => key.encode(),
243 Key::DictionaryEntry(key) => key.encode(),
244 Key::DictionaryEntryIndex(key) => key.encode(),
245 Key::NamespaceDictionary(key) => key.encode(),
246 Key::SumType(key) => key.encode(),
247 Key::NamespaceSumType(key) => key.encode(),
248 Key::Handler(key) => key.encode(),
249 Key::NamespaceHandler(key) => key.encode(),
250 Key::Series(key) => key.encode(),
251 Key::SeriesMetadata(key) => key.encode(),
252 Key::NamespaceSeries(key) => key.encode(),
253 Key::Identity(key) => key.encode(),
254 Key::IdentityAttribute(key) => key.encode(),
255 Key::IdentityAttributeValue(key) => key.encode(),
256 Key::Authentication(key) => key.encode(),
257 Key::Role(key) => key.encode(),
258 Key::GrantedRole(key) => key.encode(),
259 Key::Policy(key) => key.encode(),
260 Key::PolicyOp(key) => key.encode(),
261 Key::Token(key) => key.encode(),
262 Key::Source(key) => key.encode(),
263 Key::NamespaceSource(key) => key.encode(),
264 Key::Sink(key) => key.encode(),
265 Key::NamespaceSink(key) => key.encode(),
266 Key::Procedure(key) => key.encode(),
267 Key::NamespaceProcedure(key) => key.encode(),
268 Key::ProcedureParam(key) => key.encode(),
269 Key::Binding(key) => key.encode(),
270 Key::NamespaceBinding(key) => key.encode(),
271 Key::ColumnSnapshot(key) => key.encode(),
272 Key::SeriesColumnSnapshot(key) => key.encode(),
273 Key::TableColumnSnapshot(key) => key.encode(),
274 Key::Relationship(key) => key.encode(),
275 }
276 }
277}
278
279pub trait EncodableKey {
280 const KIND: KeyKind;
281
282 fn encode(&self) -> EncodedKey;
283
284 fn decode(key: &EncodedKey) -> Option<Self>
285 where
286 Self: Sized;
287}
288
289pub trait EncodableKeyRange {
290 const KIND: KeyKind;
291
292 fn start(&self) -> Option<EncodedKey>;
293
294 fn end(&self) -> Option<EncodedKey>;
295
296 fn decode(range: &EncodedKeyRange) -> (Option<Self>, Option<Self>)
297 where
298 Self: Sized;
299}
300
301impl Key {
302 pub fn kind(key: impl AsRef<[u8]>) -> Option<KeyKind> {
303 let key = key.as_ref();
304 if key.is_empty() {
305 return None;
306 }
307
308 keycode::deserialize(&key[0..1]).ok()
309 }
310
311 pub fn decode(key: &EncodedKey) -> Option<Self> {
312 if key.is_empty() {
313 return None;
314 }
315
316 let kind: KeyKind = keycode::deserialize(&key[0..1]).ok()?;
317 match kind {
318 KeyKind::CdcConsumer => CdcConsumerKey::decode(key).map(Self::CdcConsumer),
319 KeyKind::Columns => ColumnsKey::decode(key).map(Self::Columns),
320 KeyKind::ColumnProperty => ColumnPropertyKey::decode(key).map(Self::TableColumnProperty),
321 KeyKind::Namespace => NamespaceKey::decode(key).map(Self::Namespace),
322 KeyKind::NamespaceTable => NamespaceTableKey::decode(key).map(Self::NamespaceTable),
323 KeyKind::NamespaceView => NamespaceViewKey::decode(key).map(Self::NamespaceView),
324 KeyKind::NamespaceFlow => NamespaceFlowKey::decode(key).map(Self::NamespaceFlow),
325 KeyKind::Table => TableKey::decode(key).map(Self::Table),
326 KeyKind::Flow => FlowKey::decode(key).map(Self::Flow),
327 KeyKind::Column => ColumnKey::decode(key).map(Self::Column),
328 KeyKind::Index => IndexKey::decode(key).map(Self::Index),
329 KeyKind::IndexEntry => IndexEntryKey::decode(key).map(Self::IndexEntry),
330 KeyKind::OperatorState => OperatorStateKey::decode(key).map(Self::OperatorState),
331 KeyKind::OutputFrontier => OutputFrontierKey::decode(key).map(Self::OutputFrontier),
332 KeyKind::Row => RowKey::decode(key).map(Self::Row),
333 KeyKind::PartitionedRow => PartitionedRowKey::decode(key).map(Self::PartitionedRow),
334 KeyKind::Partition => PartitionKey::decode(key).map(Self::Partition),
335 KeyKind::RowSequence => RowSequenceKey::decode(key).map(Self::RowSequence),
336 KeyKind::ColumnSequence => ColumnSequenceKey::decode(key).map(Self::TableColumnSequence),
337 KeyKind::SystemSequence => SystemSequenceKey::decode(key).map(Self::SystemSequence),
338 KeyKind::SystemVersion => SystemVersionKey::decode(key).map(Self::SystemVersion),
339 KeyKind::TransactionVersion => TransactionVersionKey::decode(key).map(Self::TransactionVersion),
340 KeyKind::VersionEpoch => VersionEpochKey::decode(key).map(Self::VersionEpoch),
341 KeyKind::View => ViewKey::decode(key).map(Self::View),
342 KeyKind::PrimaryKey => PrimaryKeyKey::decode(key).map(Self::PrimaryKey),
343 KeyKind::Queue => QueueKey::decode(key).map(Self::Queue),
344 KeyKind::NamespaceQueue => NamespaceQueueKey::decode(key).map(Self::NamespaceQueue),
345 KeyKind::QueueDeduplication => QueueDeduplicationKey::decode(key).map(Self::QueueDeduplication),
346 KeyKind::RingBuffer => RingBufferKey::decode(key).map(Self::RingBuffer),
347 KeyKind::RingBufferMetadata => RingBufferMetadataKey::decode(key).map(Self::RingBufferMetadata),
348 KeyKind::NamespaceRingBuffer => {
349 NamespaceRingBufferKey::decode(key).map(Self::NamespaceRingBuffer)
350 }
351 KeyKind::Operator
352 | KeyKind::OperatorByFlow
353 | KeyKind::FlowEdge
354 | KeyKind::FlowEdgeByFlow
355 | KeyKind::FlowVersion => None,
356 KeyKind::Dictionary => DictionaryKey::decode(key).map(Self::Dictionary),
357 KeyKind::DictionaryEntry => DictionaryEntryKey::decode(key).map(Self::DictionaryEntry),
358 KeyKind::DictionaryEntryIndex => {
359 DictionaryEntryIndexKey::decode(key).map(Self::DictionaryEntryIndex)
360 }
361 KeyKind::NamespaceDictionary => {
362 NamespaceDictionaryKey::decode(key).map(Self::NamespaceDictionary)
363 }
364 KeyKind::SumType => SumTypeKey::decode(key).map(Self::SumType),
365 KeyKind::NamespaceSumType => NamespaceSumTypeKey::decode(key).map(Self::NamespaceSumType),
366 KeyKind::Handler => HandlerKey::decode(key).map(Self::Handler),
367 KeyKind::NamespaceHandler => NamespaceHandlerKey::decode(key).map(Self::NamespaceHandler),
368 KeyKind::VariantHandler => None,
369 KeyKind::Metric => None,
370 KeyKind::Subscription | KeyKind::SubscriptionColumn | KeyKind::SubscriptionRow => None,
371 KeyKind::RowShape | KeyKind::RowShapeField => None,
372 KeyKind::Series => SeriesKey::decode(key).map(Self::Series),
373 KeyKind::NamespaceSeries => NamespaceSeriesKey::decode(key).map(Self::NamespaceSeries),
374 KeyKind::SeriesMetadata => SeriesMetadataKey::decode(key).map(Self::SeriesMetadata),
375 KeyKind::Identity => IdentityKey::decode(key).map(Self::Identity),
376 KeyKind::IdentityAttribute => IdentityAttributeKey::decode(key).map(Self::IdentityAttribute),
377 KeyKind::IdentityAttributeValue => {
378 IdentityAttributeValueKey::decode(key).map(Self::IdentityAttributeValue)
379 }
380 KeyKind::Authentication => AuthenticationKey::decode(key).map(Self::Authentication),
381 KeyKind::Role => RoleKey::decode(key).map(Self::Role),
382 KeyKind::GrantedRole => GrantedRoleKey::decode(key).map(Self::GrantedRole),
383 KeyKind::Policy => PolicyKey::decode(key).map(Self::Policy),
384 KeyKind::PolicyOp => PolicyOpKey::decode(key).map(Self::PolicyOp),
385 KeyKind::Migration | KeyKind::MigrationEvent => None,
386 KeyKind::Token => TokenKey::decode(key).map(Self::Token),
387 KeyKind::ConfigStorage => None,
388 KeyKind::Source
389 | KeyKind::NamespaceSource
390 | KeyKind::Sink
391 | KeyKind::NamespaceSink
392 | KeyKind::SourceCheckpoint => None,
393 KeyKind::RowSettings => None,
394 KeyKind::OperatorSettings => None,
395 KeyKind::Procedure => ProcedureKey::decode(key).map(Self::Procedure),
396 KeyKind::NamespaceProcedure => NamespaceProcedureKey::decode(key).map(Self::NamespaceProcedure),
397 KeyKind::ProcedureParam => ProcedureParamKey::decode(key).map(Self::ProcedureParam),
398 KeyKind::Binding => BindingKey::decode(key).map(Self::Binding),
399 KeyKind::NamespaceBinding => None,
400 KeyKind::ColumnSnapshot => ColumnSnapshotKey::decode(key).map(Self::ColumnSnapshot),
401 KeyKind::SeriesColumnSnapshot => {
402 SeriesColumnSnapshotKey::decode(key).map(Self::SeriesColumnSnapshot)
403 }
404 KeyKind::TableColumnSnapshot => {
405 TableColumnSnapshotKey::decode(key).map(Self::TableColumnSnapshot)
406 }
407 KeyKind::Relationship => RelationshipKey::decode(key).map(Self::Relationship),
408 }
409 }
410}
411
412#[cfg(test)]
413pub mod tests {
414 use reifydb_value::value::{row_number::RowNumber, sumtype::SumTypeId};
415
416 use crate::{
417 interface::catalog::{
418 flow::OperatorId,
419 id::{ColumnId, ColumnPropertyId, IndexId, NamespaceId, RelationshipId, SequenceId, TableId},
420 object::ObjectId,
421 storage::StorageId,
422 },
423 key::{
424 Key,
425 column::ColumnKey,
426 column_sequence::ColumnSequenceKey,
427 columns::ColumnsKey,
428 index::IndexKey,
429 namespace::NamespaceKey,
430 namespace_sumtype::NamespaceSumTypeKey,
431 namespace_table::NamespaceTableKey,
432 operator_state::{GroupId, Keyspace, OperatorStateKey},
433 property::ColumnPropertyKey,
434 relationship::RelationshipKey,
435 row::RowKey,
436 row_sequence::RowSequenceKey,
437 sumtype::SumTypeKey,
438 system_sequence::SystemSequenceKey,
439 table::TableKey,
440 transaction_version::TransactionVersionKey,
441 },
442 };
443
444 #[test]
445 fn test_table_columns() {
446 let key = Key::Columns(ColumnsKey {
447 column: ColumnId(42),
448 });
449
450 let encoded = key.encode();
451 let decoded = Key::decode(&encoded).expect("Failed to decode key");
452
453 match decoded {
454 Key::Columns(decoded_inner) => {
455 assert_eq!(decoded_inner.column, 42);
456 }
457 _ => unreachable!(),
458 }
459 }
460
461 #[test]
462 fn test_column() {
463 let key = Key::Column(ColumnKey {
464 object: ObjectId::table(1),
465 column: ColumnId(42),
466 });
467
468 let encoded = key.encode();
469 let decoded = Key::decode(&encoded).expect("Failed to decode key");
470
471 match decoded {
472 Key::Column(decoded_inner) => {
473 assert_eq!(decoded_inner.object, ObjectId::table(1));
474 assert_eq!(decoded_inner.column, 42);
475 }
476 _ => unreachable!(),
477 }
478 }
479
480 #[test]
481 fn test_column_property() {
482 let key = Key::TableColumnProperty(ColumnPropertyKey {
483 column: ColumnId(42),
484 property: ColumnPropertyId(999_999),
485 });
486
487 let encoded = key.encode();
488 let decoded = Key::decode(&encoded).expect("Failed to decode key");
489
490 match decoded {
491 Key::TableColumnProperty(decoded_inner) => {
492 assert_eq!(decoded_inner.column, 42);
493 assert_eq!(decoded_inner.property, 999_999);
494 }
495 _ => unreachable!(),
496 }
497 }
498
499 #[test]
500 fn test_namespace() {
501 let key = Key::Namespace(NamespaceKey {
502 namespace: NamespaceId(42),
503 });
504
505 let encoded = key.encode();
506 let decoded = Key::decode(&encoded).expect("Failed to decode key");
507
508 match decoded {
509 Key::Namespace(decoded_inner) => {
510 assert_eq!(decoded_inner.namespace, 42);
511 }
512 _ => unreachable!(),
513 }
514 }
515
516 #[test]
517 fn test_namespace_table() {
518 let key = Key::NamespaceTable(NamespaceTableKey {
519 namespace: NamespaceId(42),
520 table: TableId(999_999),
521 });
522
523 let encoded = key.encode();
524 let decoded = Key::decode(&encoded).expect("Failed to decode key");
525
526 match decoded {
527 Key::NamespaceTable(decoded_inner) => {
528 assert_eq!(decoded_inner.namespace, 42);
529 assert_eq!(decoded_inner.table, 999_999);
530 }
531 _ => unreachable!(),
532 }
533 }
534
535 #[test]
536 fn test_system_sequence() {
537 let key = Key::SystemSequence(SystemSequenceKey {
538 sequence: SequenceId(42),
539 });
540
541 let encoded = key.encode();
542 let decoded = Key::decode(&encoded).expect("Failed to decode key");
543
544 match decoded {
545 Key::SystemSequence(decoded_inner) => {
546 assert_eq!(decoded_inner.sequence, 42);
547 }
548 _ => unreachable!(),
549 }
550 }
551
552 #[test]
553 fn test_table() {
554 let key = Key::Table(TableKey {
555 table: TableId(42),
556 });
557
558 let encoded = key.encode();
559 let decoded = Key::decode(&encoded).expect("Failed to decode key");
560
561 match decoded {
562 Key::Table(decoded_inner) => {
563 assert_eq!(decoded_inner.table, 42);
564 }
565 _ => unreachable!(),
566 }
567 }
568
569 #[test]
570 fn test_index() {
571 let key = Key::Index(IndexKey {
572 object: ObjectId::table(42),
573 index: IndexId::primary(999_999),
574 });
575
576 let encoded = key.encode();
577 let decoded = Key::decode(&encoded).expect("Failed to decode key");
578
579 match decoded {
580 Key::Index(decoded_inner) => {
581 assert_eq!(decoded_inner.object, ObjectId::table(42));
582 assert_eq!(decoded_inner.index, 999_999);
583 }
584 _ => unreachable!(),
585 }
586 }
587
588 #[test]
589 fn test_row() {
590 let key = Key::Row(RowKey {
591 storage: StorageId::table(42),
592 row: RowNumber(999_999),
593 });
594
595 let encoded = key.encode();
596 let decoded = Key::decode(&encoded).expect("Failed to decode key");
597
598 match decoded {
599 Key::Row(decoded_inner) => {
600 assert_eq!(decoded_inner.storage, StorageId::table(42));
601 assert_eq!(decoded_inner.row, 999_999);
602 }
603 _ => unreachable!(),
604 }
605 }
606
607 #[test]
608 fn test_row_sequence() {
609 let key = Key::RowSequence(RowSequenceKey {
610 object: ObjectId::table(42),
611 });
612
613 let encoded = key.encode();
614 let decoded = Key::decode(&encoded).expect("Failed to decode key");
615
616 match decoded {
617 Key::RowSequence(decoded_inner) => {
618 assert_eq!(decoded_inner.object, ObjectId::table(42));
619 }
620 _ => unreachable!(),
621 }
622 }
623
624 #[test]
625 fn test_column_sequence() {
626 let key = Key::TableColumnSequence(ColumnSequenceKey {
627 object: ObjectId::table(42),
628 column: ColumnId(123),
629 });
630
631 let encoded = key.encode();
632 let decoded = Key::decode(&encoded).expect("Failed to decode key");
633
634 match decoded {
635 Key::TableColumnSequence(decoded_inner) => {
636 assert_eq!(decoded_inner.object, ObjectId::table(42));
637 assert_eq!(decoded_inner.column, 123);
638 }
639 _ => unreachable!(),
640 }
641 }
642
643 #[test]
644 fn test_transaction_version() {
645 let key = Key::TransactionVersion(TransactionVersionKey {});
646 let encoded = key.encode();
647 Key::decode(&encoded).expect("Failed to decode key");
648 }
649
650 #[test]
651 fn test_operator_state() {
652 let key = Key::OperatorState(OperatorStateKey {
653 operator: OperatorId(0xCAFEBABE),
654 group: GroupId::ROOT,
655 keyspace: Keyspace::CUSTOM,
656 suffix: vec![1, 2, 3],
657 });
658
659 let encoded = key.encode();
660 let decoded = Key::decode(&encoded).expect("Failed to decode key");
661
662 match decoded {
663 Key::OperatorState(decoded_inner) => {
664 assert_eq!(decoded_inner.operator, 0xCAFEBABE);
665 assert_eq!(decoded_inner.suffix, vec![1, 2, 3]);
666 }
667 _ => unreachable!(),
668 }
669 }
670
671 #[test]
672 fn test_sumtype_key() {
673 let key = Key::SumType(SumTypeKey {
674 sumtype: SumTypeId(42),
675 });
676
677 let encoded = key.encode();
678 let decoded = Key::decode(&encoded).expect("Failed to decode key");
679
680 match decoded {
681 Key::SumType(decoded_inner) => {
682 assert_eq!(decoded_inner.sumtype, 42);
683 }
684 _ => unreachable!(),
685 }
686 }
687
688 #[test]
689 fn test_relationship() {
690 let key = Key::Relationship(RelationshipKey {
691 relationship: RelationshipId(42),
692 });
693
694 let encoded = key.encode();
695 let decoded = Key::decode(&encoded).expect("Failed to decode key");
696
697 match decoded {
698 Key::Relationship(decoded_inner) => {
699 assert_eq!(decoded_inner.relationship, 42);
700 }
701 _ => unreachable!(),
702 }
703 }
704
705 #[test]
706 fn test_namespace_sumtype_key() {
707 let key = Key::NamespaceSumType(NamespaceSumTypeKey {
708 namespace: NamespaceId(42),
709 sumtype: SumTypeId(999_999),
710 });
711
712 let encoded = key.encode();
713 let decoded = Key::decode(&encoded).expect("Failed to decode key");
714
715 match decoded {
716 Key::NamespaceSumType(decoded_inner) => {
717 assert_eq!(decoded_inner.namespace, 42);
718 assert_eq!(decoded_inner.sumtype, 999_999);
719 }
720 _ => unreachable!(),
721 }
722 }
723}