Skip to main content

oxidelake_api/
lib.rs

1//! Public API facade (docs/SPEC.md §2.8): the fluent DataFrame API and SQL entry
2//! points over the runtime — [`OxideSession`] for sessions (embedded or
3//! cluster), [`OxideFrame`] for queries, and the `l2_distance` /
4//! `cosine_distance` SQL UDFs registered on every session.
5//!
6//! ```no_run
7//! use oxidelake_api::prelude::*;
8//!
9//! # async fn demo() -> Result<(), EngineError> {
10//! let session = OxideSession::local()?;
11//! session.register_parquet("t", "data/").await?;
12//! let top = session
13//!     .table("t")
14//!     .await?
15//!     .filter(col("k").gt_eq(lit(2)))?
16//!     .vector_distance("emb", &[0.0; 8], DistanceMetric::L2, "d")?
17//!     .sort(vec![col("d").sort(true, false)])?
18//!     .limit(10)?
19//!     .collect()
20//!     .await?;
21//! # let _ = top; Ok(())
22//! # }
23//! ```
24//!
25//! Dependency direction: depends on `oxidelake-runtime` (and `oxidelake-core`).
26
27mod frame;
28
29pub use frame::{OxideFrame, OxideSessionExt};
30pub use oxidelake_core::params::DistanceMetric;
31pub use oxidelake_core::{BackendKind, EngineError};
32pub use oxidelake_runtime::{OxideSession, SessionMode};
33
34/// Commonly used imports: the session and frame types plus the DataFusion
35/// expression builders the verbs take.
36pub mod prelude {
37    pub use datafusion::functions_aggregate::expr_fn::{avg, count, max, min, sum};
38    pub use datafusion::prelude::{Expr, col, lit};
39
40    pub use crate::{
41        BackendKind, DistanceMetric, EngineError, OxideFrame, OxideSession, OxideSessionExt,
42        SessionMode,
43    };
44}