feat: integrate thiserror

This commit is contained in:
Jindřich Moravec 2024-01-27 16:34:44 +01:00
parent 677fd19bec
commit 5ced11c40d
2 changed files with 15 additions and 4 deletions

View file

@ -1,12 +1,15 @@
use minisql::{operation::Operation, schema::TableSchema}; use minisql::{operation::Operation, schema::TableSchema};
use nom::{branch::alt, multi::many0, IResult}; use nom::{branch::alt, multi::many0, IResult};
use thiserror::Error;
use crate::{parsing::{create::parse_create, delete::parse_delete, index::parse_create_index, insert::parse_insert, select::parse_select}, validation::{validate_operation, ValidationError}}; use crate::{parsing::{create::parse_create, delete::parse_delete, index::parse_create_index, insert::parse_insert, select::parse_select}, validation::{validate_operation, ValidationError}};
#[derive(Debug)] #[derive(Debug, Error)]
pub enum Error { pub enum Error {
#[error("parsing error: {0}")]
ParsingError(String), ParsingError(String),
ValidationError(ValidationError) #[error("validation error: {0}")]
ValidationError(#[from] ValidationError)
} }
pub fn parse_statement<'a>(input: &'a str) -> IResult<&str, Operation> { pub fn parse_statement<'a>(input: &'a str) -> IResult<&str, Operation> {
@ -31,7 +34,7 @@ pub fn parse_and_validate(query: String, db_metadata: &Vec<(String, &TableSchema
Error::ParsingError(err.to_string()) Error::ParsingError(err.to_string())
})?; })?;
validate_operation(&op, db_metadata).map_err(|err| Error::ValidationError(err))?; validate_operation(&op, db_metadata)?;
Ok(op) Ok(op)
} }

View file

@ -1,17 +1,25 @@
use std::collections::HashSet; use std::collections::HashSet;
use thiserror::Error;
use minisql::{operation::{ColumnSelection, Condition, InsertionValues, Operation}, schema::TableSchema, type_system::{DbType, IndexableValue, Value}}; use minisql::{operation::{ColumnSelection, Condition, InsertionValues, Operation}, schema::TableSchema, type_system::{DbType, IndexableValue, Value}};
#[derive(Debug)] #[derive(Debug, Error)]
pub enum ValidationError { pub enum ValidationError {
#[error("table {0} does not exist")]
TableDoesNotExist(String), TableDoesNotExist(String),
#[error("table {0} already exists")]
TableExists(String), TableExists(String),
#[error("column {0} does not exist")]
ColumnDoesNotExist(String), ColumnDoesNotExist(String),
#[error("bad column position {0}")]
BadColumnPosition(usize), BadColumnPosition(usize),
#[error("duplicate column {0}")]
DuplicateColumn(String), DuplicateColumn(String),
#[error("type mismatch")]
TypeMismatch, TypeMismatch,
#[error("value for required column {0} is missing")]
ValueForRequiredColumnIsMissing(String) ValueForRequiredColumnIsMissing(String)
} }