reifydb_engine/
test_utils.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_catalog::{
5	CatalogStore, MaterializedCatalog,
6	store::{
7		namespace::NamespaceToCreate,
8		table::{TableColumnToCreate, TableToCreate},
9	},
10};
11use reifydb_core::{event::EventBus, interceptor::Interceptors};
12use reifydb_store_transaction::TransactionStore;
13pub use reifydb_transaction::multi::TransactionMulti;
14use reifydb_transaction::{
15	cdc::TransactionCdc,
16	single::{TransactionSingle, TransactionSvl},
17};
18use reifydb_type::{Type, TypeConstraint};
19
20use crate::StandardCommandTransaction;
21
22pub async fn create_test_command_transaction() -> StandardCommandTransaction {
23	let store = TransactionStore::testing_memory().await;
24
25	let event_bus = EventBus::new();
26	let single_svl = TransactionSvl::new(store.clone(), event_bus.clone());
27	let single = TransactionSingle::SingleVersionLock(single_svl.clone());
28	let cdc = TransactionCdc::new(store.clone());
29	let multi = TransactionMulti::new(store, single.clone(), event_bus.clone()).await.unwrap();
30
31	StandardCommandTransaction::new(multi, single, cdc, event_bus, MaterializedCatalog::new(), Interceptors::new())
32		.await
33		.unwrap()
34}
35
36pub async fn create_test_command_transaction_with_internal_schema() -> StandardCommandTransaction {
37	let store = TransactionStore::testing_memory().await;
38
39	let event_bus = EventBus::new();
40	let single_svl = TransactionSvl::new(store.clone(), event_bus.clone());
41	let single = TransactionSingle::SingleVersionLock(single_svl.clone());
42	let cdc = TransactionCdc::new(store.clone());
43	let multi = TransactionMulti::new(store.clone(), single.clone(), event_bus.clone()).await.unwrap();
44	let mut result = StandardCommandTransaction::new(
45		multi,
46		single,
47		cdc,
48		event_bus,
49		MaterializedCatalog::new(),
50		Interceptors::new(),
51	)
52	.await
53	.unwrap();
54
55	let namespace = CatalogStore::create_namespace(
56		&mut result,
57		NamespaceToCreate {
58			namespace_fragment: None,
59			name: "reifydb".to_string(),
60		},
61	)
62	.await
63	.unwrap();
64
65	CatalogStore::create_table(
66		&mut result,
67		TableToCreate {
68			fragment: None,
69			namespace: namespace.id,
70			table: "flows".to_string(),
71			columns: vec![
72				TableColumnToCreate {
73					name: "id".to_string(),
74					constraint: TypeConstraint::unconstrained(Type::Int8),
75					policies: vec![],
76					auto_increment: true,
77					fragment: None,
78					dictionary_id: None,
79				},
80				TableColumnToCreate {
81					name: "data".to_string(),
82					constraint: TypeConstraint::unconstrained(Type::Blob),
83					policies: vec![],
84					auto_increment: false,
85					fragment: None,
86					dictionary_id: None,
87				},
88			],
89			retention_policy: None,
90		},
91	)
92	.await
93	.unwrap();
94
95	result
96}