proof_of_sql_planner/
error.rs1use arrow::datatypes::DataType;
2use datafusion::{
3 common::DataFusionError,
4 logical_expr::{
5 expr::{AggregateFunction, Placeholder},
6 Expr, LogicalPlan, Operator,
7 },
8 physical_plan,
9};
10use proof_of_sql::{base::math::decimal::DecimalError, sql::AnalyzeError};
11use snafu::Snafu;
12use sqlparser::parser::ParserError;
13
14#[derive(Debug, Snafu)]
16pub enum PlannerError {
17 #[snafu(transparent)]
19 AnalyzeError {
20 source: AnalyzeError,
22 },
23 #[snafu(transparent)]
25 DecimalError {
26 source: DecimalError,
28 },
29 #[snafu(transparent)]
31 SqlParserError {
32 source: ParserError,
34 },
35 #[snafu(transparent)]
37 DataFusionError {
38 source: DataFusionError,
40 },
41 #[snafu(display("Column not found"))]
43 ColumnNotFound,
44 #[snafu(display("Table not found: {}", table_name))]
46 TableNotFound {
47 table_name: String,
49 },
50 #[snafu(display("Placeholder id {id:?} is invalid"))]
52 InvalidPlaceholderId {
53 id: String,
55 },
56 #[snafu(display("Placeholder {placeholder:?} is untyped"))]
58 UntypedPlaceholder {
59 placeholder: Placeholder,
61 },
62 #[snafu(display("Unsupported datatype: {}", data_type))]
64 UnsupportedDataType {
65 data_type: DataType,
67 },
68 #[snafu(display("Binary operator {} is not supported", op))]
70 UnsupportedBinaryOperator {
71 op: Operator,
73 },
74 #[snafu(display("Aggregate operation {op:?} is not supported"))]
76 UnsupportedAggregateOperation {
77 op: physical_plan::aggregates::AggregateFunction,
79 },
80 #[snafu(display("AggregateFunction {function:?} is not supported"))]
82 UnsupportedAggregateFunction {
83 function: AggregateFunction,
85 },
86 #[snafu(display("Logical expression {:?} is not supported", expr))]
88 UnsupportedLogicalExpression {
89 expr: Box<Expr>,
91 },
92 #[snafu(display("LogicalPlan is not supported"))]
94 UnsupportedLogicalPlan {
95 plan: Box<LogicalPlan>,
97 },
98 #[snafu(display("LogicalPlan is not resolved"))]
100 UnresolvedLogicalPlan,
101 #[snafu(display("Catalog is not supported"))]
103 CatalogNotSupported,
104 #[snafu(transparent)]
106 PostprocessingError {
107 source: super::postprocessing::PostprocessingError,
109 },
110}
111
112pub type PlannerResult<T> = Result<T, PlannerError>;