elasticube_core/
lib.rs

1//! ElastiCube Core Library
2//!
3//! A high-performance, embeddable OLAP cube builder and query library built on Apache Arrow.
4//!
5//! # Features
6//!
7//! - **Columnar Storage**: Efficient field-by-field storage using Apache Arrow
8//! - **No Pre-Aggregation**: Query raw data with dynamic aggregations
9//! - **Multi-Source**: Combine data from CSV, Parquet, JSON, and custom sources
10//! - **Fast**: Near C-level performance with parallel query execution
11//!
12//! # Example
13//!
14//! ```rust,ignore
15//! use elasticube_core::{ElastiCubeBuilder, AggFunc};
16//!
17//! #[tokio::main]
18//! async fn main() -> Result<()> {
19//!     let cube = ElastiCubeBuilder::new()
20//!         .add_dimension("region", DataType::Utf8)
21//!         .add_measure("sales", DataType::Float64, AggFunc::Sum)
22//!         .load_csv("data.csv")?
23//!         .build()?;
24//!
25//!     let results = cube.query()
26//!         .select(&["region", "sum(sales)"])
27//!         .group_by(&["region"])
28//!         .execute()
29//!         .await?;
30//!
31//!     Ok(())
32//! }
33//! ```
34
35pub mod builder;
36pub mod cache;
37pub mod cube;
38pub mod error;
39pub mod optimization;
40pub mod query;
41pub mod storage;
42pub mod sources;
43
44#[cfg(test)]
45mod query_materialization_tests;
46
47#[cfg(test)]
48mod cube_update_tests;
49
50// Re-export commonly used types
51pub use builder::ElastiCubeBuilder;
52pub use cache::{CacheStats, QueryCache, QueryCacheKey};
53pub use cube::{
54    AggFunc, CalculatedMeasure, CubeSchema, Dimension, ElastiCube, Hierarchy, Measure,
55    VirtualDimension,
56};
57pub use error::{Error, Result};
58pub use optimization::{ColumnStatistics, CubeStatistics, OptimizationConfig};
59pub use query::{QueryBuilder, QueryResult};
60pub use sources::{CsvSource, DataSource, JsonSource, ParquetSource, RecordBatchSource};
61
62// Re-export database sources when feature is enabled
63/// Database source connectors (PostgreSQL, MySQL, SQL Server, etc.)
64///
65/// These types are only available when the `database` feature is enabled:
66/// ```toml
67/// [dependencies]
68/// elasticube-core = { version = "0.2", features = ["database"] }
69/// ```
70///
71/// See [`ElastiCubeBuilder::load_postgres`], [`ElastiCubeBuilder::load_mysql`],
72/// and [`ElastiCubeBuilder::load_odbc`] for usage examples.
73#[cfg(feature = "database")]
74pub use sources::database::{MySqlSource, OdbcSource, PostgresSource};
75
76// Re-export REST API sources when feature is enabled
77/// REST API data source connector
78///
79/// This type is only available when the `rest-api` feature is enabled:
80/// ```toml
81/// [dependencies]
82/// elasticube-core = { version = "0.2", features = ["rest-api"] }
83/// ```
84///
85/// See [`ElastiCubeBuilder::load_rest_api`] for usage examples.
86#[cfg(feature = "rest-api")]
87pub use sources::rest::{HttpMethod, RestApiSource};
88
89// Re-export object storage sources when feature is enabled
90/// Object storage source connectors (AWS S3, Google Cloud Storage, Azure Blob Storage)
91///
92/// These types are only available when the `object-storage` feature is enabled:
93/// ```toml
94/// [dependencies]
95/// elasticube-core = { version = "0.2", features = ["object-storage"] }
96/// ```
97///
98/// Or enable all data sources at once:
99/// ```toml
100/// [dependencies]
101/// elasticube-core = { version = "0.2", features = ["all-sources"] }
102/// ```
103///
104/// See [`ElastiCubeBuilder::load_s3`], [`ElastiCubeBuilder::load_gcs`],
105/// and [`ElastiCubeBuilder::load_azure`] for usage examples.
106#[cfg(feature = "object-storage")]
107pub use sources::object_storage::{AzureSource, GcsSource, ObjectStorageSource, S3Source, StorageFileFormat};