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::{TransactionMultiVersion, transaction::serializable::TransactionSerializable};
14use reifydb_transaction::{
15	cdc::TransactionCdc,
16	single::{TransactionSingleVersion, TransactionSvl},
17};
18use reifydb_type::{Type, TypeConstraint};
19
20use crate::StandardCommandTransaction;
21
22pub fn create_test_command_transaction() -> StandardCommandTransaction {
23	let store = TransactionStore::testing_memory();
24
25	let event_bus = EventBus::new();
26	let single_svl = TransactionSvl::new(store.clone(), event_bus.clone());
27	let single = TransactionSingleVersion::SingleVersionLock(single_svl.clone());
28	let cdc = TransactionCdc::new(store.clone());
29	let multi_serializable = TransactionSerializable::new(store, single.clone(), event_bus.clone());
30	let multi = TransactionMultiVersion::Serializable(multi_serializable);
31
32	StandardCommandTransaction::new(multi, single, cdc, event_bus, MaterializedCatalog::new(), Interceptors::new())
33		.unwrap()
34}
35
36pub fn create_test_command_transaction_with_internal_schema() -> StandardCommandTransaction {
37	let store = TransactionStore::testing_memory();
38
39	let event_bus = EventBus::new();
40	let single_svl = TransactionSvl::new(store.clone(), event_bus.clone());
41	let single = TransactionSingleVersion::SingleVersionLock(single_svl.clone());
42	let cdc = TransactionCdc::new(store.clone());
43	let multi_serializable = TransactionSerializable::new(store.clone(), single.clone(), event_bus.clone());
44	let multi = TransactionMultiVersion::Serializable(multi_serializable);
45	let mut result = StandardCommandTransaction::new(
46		multi,
47		single,
48		cdc,
49		event_bus,
50		MaterializedCatalog::new(),
51		Interceptors::new(),
52	)
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	.unwrap();
63
64	CatalogStore::create_table(
65		&mut result,
66		TableToCreate {
67			fragment: None,
68			namespace: namespace.id,
69			table: "flows".to_string(),
70			columns: vec![
71				TableColumnToCreate {
72					name: "id".to_string(),
73					constraint: TypeConstraint::unconstrained(Type::Int8),
74					policies: vec![],
75					auto_increment: true,
76					fragment: None,
77				},
78				TableColumnToCreate {
79					name: "data".to_string(),
80					constraint: TypeConstraint::unconstrained(Type::Blob),
81					policies: vec![],
82					auto_increment: false,
83					fragment: None,
84				},
85			],
86			retention_policy: None,
87		},
88	)
89	.unwrap();
90
91	result
92}