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}