Skip to main content

reifydb_store_column/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4#![cfg_attr(not(debug_assertions), deny(warnings))]
5
6pub mod backend;
7pub mod config;
8pub mod memory;
9pub mod partition;
10pub mod statistics;
11pub mod store;
12
13use partition::{Partition, PartitionKey};
14use reifydb_core::common::CommitVersion;
15
16pub mod memory_backend {}
17
18use reifydb_core::{
19	interface::version::{ComponentType, HasVersion, SystemVersion},
20	value::column::{
21		compressed::{CompressedColumn, CompressionType},
22		data::ColumnData,
23	},
24};
25use reifydb_type::{Result, value::Value};
26
27pub struct StoreColumnVersion;
28
29impl HasVersion for StoreColumnVersion {
30	fn version(&self) -> SystemVersion {
31		SystemVersion {
32			name: env!("CARGO_PKG_NAME")
33				.strip_prefix("reifydb-")
34				.unwrap_or(env!("CARGO_PKG_NAME"))
35				.to_string(),
36			version: env!("CARGO_PKG_VERSION").to_string(),
37			description: "Column-oriented storage for analytical queries".to_string(),
38			r#type: ComponentType::Module,
39		}
40	}
41}
42
43/// Trait for columnar storage backends
44pub trait ColumnStore: Send + Sync + Clone + 'static {
45	fn insert(&self, version: CommitVersion, columns: Vec<CompressedColumn>) -> Result<()>;
46
47	fn scan(&self, version: CommitVersion, column_indices: &[usize]) -> Result<Vec<ColumnData>>;
48
49	fn statistics(&self, column_index: usize) -> Option<ColumnStatistics>;
50
51	fn partition_count(&self) -> usize;
52
53	fn compressed_size(&self) -> usize;
54
55	fn uncompressed_size(&self) -> usize;
56}
57
58#[derive(Clone, Debug)]
59pub struct ColumnStatistics {
60	pub min_value: Option<Value>,
61	pub max_value: Option<Value>,
62	pub none_count: usize,
63	pub distinct_count: Option<usize>,
64	pub compression_type: CompressionType,
65	pub compression_ratio: f64,
66	pub compressed_size: usize,
67	pub uncompressed_size: usize,
68}