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