proof_of_sql/base/database/
table_operation_error.rs1use super::{ColumnField, ColumnOperationError, ColumnType};
2use alloc::vec::Vec;
3use core::result::Result;
4use snafu::Snafu;
5use sqlparser::ast::Ident;
6
7#[derive(Snafu, Debug, PartialEq, Eq)]
9pub enum TableOperationError {
10 #[snafu(display(
12 "Cannot union tables with incompatible schemas: {correct_schema:?} and {actual_schema:?}"
13 ))]
14 UnionIncompatibleSchemas {
15 correct_schema: Vec<ColumnField>,
17 actual_schema: Vec<ColumnField>,
19 },
20 #[snafu(display("Cannot union fewer than 2 tables"))]
22 UnionNotEnoughTables,
23 #[snafu(display(
25 "Cannot join tables with different numbers of columns: {left_num_columns} and {right_num_columns}"
26 ))]
27 JoinWithDifferentNumberOfColumns {
28 left_num_columns: usize,
30 right_num_columns: usize,
32 },
33 #[snafu(display(
35 "Cannot join tables on columns with incompatible types: {left_type:?} and {right_type:?}"
36 ))]
37 JoinIncompatibleTypes {
38 left_type: ColumnType,
40 right_type: ColumnType,
42 },
43 #[snafu(display("Column {column_ident:?} does not exist in table"))]
45 ColumnDoesNotExist {
46 column_ident: Ident,
48 },
49 #[snafu(display("Some column is duplicated in table"))]
51 DuplicateColumn,
52 #[snafu(transparent)]
54 ColumnOperationError {
55 source: ColumnOperationError,
57 },
58 #[snafu(display("Column index out of bounds: {column_index}"))]
60 ColumnIndexOutOfBounds {
61 column_index: usize,
63 },
64}
65
66pub type TableOperationResult<T> = Result<T, TableOperationError>;