Use RawQuerySyntax for parsing

This commit is contained in:
Yuriy Dupyn 2024-01-27 21:47:33 +01:00
parent 562e732138
commit 9771a89716
10 changed files with 65 additions and 62 deletions

View file

@ -1,4 +1,4 @@
use minisql::{operation::Operation, schema::TableSchema};
use minisql::{operation::OperationForInterpreter, interpreter::DbSchema};
use crate::syntax::RawQuerySyntax;
use nom::{branch::alt, multi::many0, IResult};
use thiserror::Error;
@ -13,7 +13,7 @@ pub enum Error {
ValidationError(#[from] ValidationError)
}
pub fn parse_statement<'a>(input: &'a str) -> IResult<&str, Operation> {
pub fn parse_statement<'a>(input: &'a str) -> IResult<&str, RawQuerySyntax> {
alt((
parse_insert,
parse_create,
@ -25,20 +25,17 @@ pub fn parse_statement<'a>(input: &'a str) -> IResult<&str, Operation> {
))(input)
}
pub fn parse_statements<'a>(input: &'a str) -> IResult<&str, Vec<Operation>> {
pub fn parse_statements<'a>(input: &'a str) -> IResult<&str, Vec<RawQuerySyntax>> {
many0(parse_statement)(input)
}
pub fn parse_and_validate(query: String, db_metadata: &Vec<(String, &TableSchema)>) -> Result<Operation, Error> {
pub fn parse_and_validate(query: String, db_schema: &DbSchema) -> Result<OperationForInterpreter, Error> {
let (_, op) = parse_statement(query.as_str())
.map_err(|err| {
Error::ParsingError(err.to_string())
})?;
// TODO
// validate_operation(&op, db_metadata)?;
todo!();
Ok(op)
Ok(validate_operation(op, db_schema)?)
}
// #[test]