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 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}};
#[derive(Debug)]
#[derive(Debug, Error)]
pub enum Error {
#[error("parsing error: {0}")]
ParsingError(String),
ValidationError(ValidationError)
#[error("validation error: {0}")]
ValidationError(#[from] ValidationError)
}
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())
})?;
validate_operation(&op, db_metadata).map_err(|err| Error::ValidationError(err))?;
validate_operation(&op, db_metadata)?;
Ok(op)
}

View file

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