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::{ColumnName, TableSchema}, type_system::DbType};
use minisql::{schema::{ColumnName, TableSchema}, type_system::DbType};
use nom::{
bytes::complete::tag,
character::complete::{char, multispace0, multispace1},
@ -8,8 +8,9 @@ use nom::{
};
use super::common::{parse_table_name, parse_identifier, parse_db_type};
use crate::syntax::RawQuerySyntax;
pub fn parse_create(input: &str) -> IResult<&str, Operation> {
pub fn parse_create(input: &str) -> IResult<&str, RawQuerySyntax> {
let (input, _) = tag("CREATE")(input)?;
let (input, _) = multispace1(input)?;
let (input, _) = tag("TABLE")(input)?;
@ -41,7 +42,7 @@ pub fn parse_create(input: &str) -> IResult<&str, Operation> {
);
Ok((
input,
Operation::CreateTable(table_name.to_string(), schema),
RawQuerySyntax::CreateTable(table_name.to_string(), schema),
))
}
@ -68,8 +69,8 @@ pub fn parse_column_definition(input: &str) -> IResult<&str, (ColumnName, DbType
#[cfg(test)]
mod tests {
use minisql::operation::Operation;
use crate::parsing::create::parse_create;
use crate::syntax::RawQuerySyntax;
#[test]
fn test_parse_create_no_spaces() {
@ -94,9 +95,9 @@ mod tests {
#[test]
fn test_parse_create() {
let (_, create) = parse_create("CREATE TABLE \"Table1\"( id UUID , column1 INT );").expect("should parse");
assert!(matches!(create, Operation::CreateTable(_ ,_)));
assert!(matches!(create, RawQuerySyntax::CreateTable(_ ,_)));
match create {
Operation::CreateTable(name, schema) => {
RawQuerySyntax::CreateTable(name, schema) => {
assert_eq!(name, "Table1");
assert_eq!(schema.number_of_columns(), 2);
assert_eq!(schema.column_position_from_column_name(&"id".to_string()).unwrap(), 0);