1#![deny(missing_docs)]
31#![warn(clippy::all, clippy::pedantic)]
32#![allow(clippy::module_name_repetitions)]
33#![allow(clippy::doc_markdown)]
34#![allow(clippy::uninlined_format_args)]
35
36pub mod datafusion;
37pub mod error;
38pub mod parser;
39pub mod planner;
40pub mod translator;
41
42pub use parser::{parse_streaming_sql, StreamingStatement};
44pub use planner::StreamingPlanner;
45pub use translator::{OrderOperatorConfig, WindowOperatorConfig, WindowType};
46
47pub use datafusion::execute::execute_streaming_sql;
49pub use datafusion::{
50 register_streaming_functions, register_streaming_functions_with_watermark, DdlResult,
51 QueryResult, StreamingSqlResult,
52};
53
54pub type Result<T> = std::result::Result<T, Error>;
56
57#[derive(Debug, thiserror::Error)]
59pub enum Error {
60 ParseError(#[from] parser::ParseError),
62
63 PlanningError(#[from] planner::PlanningError),
65
66 DataFusionError(#[from] datafusion_common::DataFusionError),
68
69 UnsupportedFeature(String),
71}
72
73impl std::fmt::Display for Error {
74 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
75 match self {
76 Self::ParseError(e) => write!(f, "SQL parse error: {e}"),
77 Self::PlanningError(e) => write!(f, "Planning error: {e}"),
78 Self::DataFusionError(e) => {
79 let translated = error::translate_datafusion_error(&e.to_string());
80 write!(f, "{translated}")
81 }
82 Self::UnsupportedFeature(msg) => {
83 write!(f, "Unsupported feature: {msg}")
84 }
85 }
86 }
87}