feat: integrate thiserror
This commit is contained in:
parent
677fd19bec
commit
5ced11c40d
2 changed files with 15 additions and 4 deletions
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue