1mod error;
4mod registry;
5
6pub use error::{MvError, MvState};
7pub use registry::{MaterializedView, MvRegistry};
8
9#[cfg(test)]
10mod tests {
11 use super::*;
12 use arrow_schema::{DataType, Field, Schema};
13 use std::sync::Arc;
14
15 #[test]
16 fn test_dependency_chain() {
17 let mut registry = MvRegistry::new();
18 registry.register_base_table("trades");
19
20 let schema = Arc::new(Schema::new(vec![Field::new("v", DataType::Int64, false)]));
21 let mv = |n: &str, s: Vec<&str>| {
22 MaterializedView::new(
23 n,
24 "",
25 s.into_iter().map(String::from).collect(),
26 schema.clone(),
27 )
28 };
29
30 registry.register(mv("a", vec!["trades"])).unwrap();
31 registry.register(mv("b", vec!["a"])).unwrap();
32 registry.register(mv("c", vec!["b"])).unwrap();
33
34 let chain = registry.dependency_chain("c");
35 assert_eq!(chain, vec!["a", "b", "c"]);
36 }
37
38 #[test]
39 fn test_show_dependencies_equivalent() {
40 let mut registry = MvRegistry::new();
41 registry.register_base_table("trades");
42
43 let schema = Arc::new(Schema::new(vec![Field::new("v", DataType::Int64, false)]));
44 let mv = |n: &str, s: Vec<&str>| {
45 MaterializedView::new(
46 n,
47 "",
48 s.into_iter().map(String::from).collect(),
49 schema.clone(),
50 )
51 };
52
53 registry.register(mv("ohlc_1s", vec!["trades"])).unwrap();
54 registry.register(mv("ohlc_1m", vec!["ohlc_1s"])).unwrap();
55 registry.register(mv("ohlc_1h", vec!["ohlc_1m"])).unwrap();
56
57 let chain = registry.dependency_chain("ohlc_1h");
58 assert_eq!(chain, vec!["ohlc_1s", "ohlc_1m", "ohlc_1h"]);
59
60 let direct: Vec<_> = registry.get_dependencies("ohlc_1h").collect();
61 assert_eq!(direct, vec!["ohlc_1m"]);
62 }
63}