From fbd7bf1f72b84da64bce3d434a733eee31b9e598 Mon Sep 17 00:00:00 2001 From: Yuriy Dupyn <2153100+omedusyo@users.noreply.github.com> Date: Thu, 1 Feb 2024 14:45:29 +0100 Subject: [PATCH] Fix errors in parsing crate --- parser/src/parsing/literal.rs | 28 +++++++++++------------ parser/src/validation.rs | 42 +++++++++++++++++------------------ 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/parser/src/parsing/literal.rs b/parser/src/parsing/literal.rs index c37f963..8ca72e8 100644 --- a/parser/src/parsing/literal.rs +++ b/parser/src/parsing/literal.rs @@ -1,4 +1,4 @@ -use minisql::type_system::{IndexableValue, Value}; +use minisql::type_system::Value; use nom::{ branch::alt, character::complete::{char, digit1, none_of, u64}, @@ -34,13 +34,13 @@ pub fn parse_number(input: &str) -> IResult<&str, Value> { let value = format!("{}{}", sign.unwrap_or('+'), digits) .parse::() .map_err(|_| nom::Err::Failure(make_error(input, nom::error::ErrorKind::Fail)))?; - Ok((input, Value::Indexable(IndexableValue::Int(value)))) + Ok((input, Value::Int(value))) } } } pub fn parse_int(input: &str) -> IResult<&str, Value> { - u64(input).map(|(input, v)| (input, Value::Indexable(IndexableValue::Int(v)))) + u64(input).map(|(input, v)| (input, Value::Int(v))) } fn escape_tab(input: &str) -> IResult<&str, char> { @@ -85,19 +85,19 @@ pub fn parse_string(input: &str) -> IResult<&str, Value> { // Combine the characters into a string let value: String = content.into_iter().collect(); - Ok((input, Value::Indexable(IndexableValue::String(value)))) + Ok((input, Value::String(value))) } pub fn parse_uuid(input: &str) -> IResult<&str, Value> { let (input, value) = pair(char('u'), u64)(input) - .map(|(input, (_, v))| (input, Value::Indexable(IndexableValue::Uuid(v))))?; + .map(|(input, (_, v))| (input, Value::Uuid(v)))?; Ok((input, value)) } #[cfg(test)] mod tests { use crate::parsing::literal::{parse_db_value, parse_string, parse_uuid}; - use minisql::type_system::{IndexableValue, Value}; + use minisql::type_system::Value; #[test] fn test_string_parser() { @@ -105,21 +105,21 @@ mod tests { parse_string(r#""simple""#), Ok(( "", - Value::Indexable(IndexableValue::String(String::from("simple"))) + Value::String(String::from("simple")) )) ); assert_eq!( parse_string(r#""\"\t\r\n\\""#), Ok(( "", - Value::Indexable(IndexableValue::String(String::from("\"\t\r\n\\"))) + Value::String(String::from("\"\t\r\n\\")) )) ); assert_eq!( parse_string(r#""name is \"John\".""#), Ok(( "", - Value::Indexable(IndexableValue::String(String::from("name is \"John\"."))) + Value::String(String::from("name is \"John\".")) )) ); } @@ -128,7 +128,7 @@ mod tests { fn test_parse_db_value() { let (input, value) = parse_db_value("5").expect("should parse"); assert_eq!(input, ""); - assert_eq!(value, Value::Indexable(IndexableValue::Int(5))); + assert_eq!(value, Value::Int(5)); let (input, value) = parse_db_value("5.5").expect("should parse"); assert_eq!(input, ""); @@ -140,9 +140,9 @@ mod tests { assert_eq!(input, ""); assert_eq!( value, - Value::Indexable(IndexableValue::String( + Value::String( "abcdefghkjklmnopqrstuvwxyz!@#$%^&*()_+ ".to_string() - )) + ) ); } @@ -183,7 +183,7 @@ mod tests { fn test_parse_int() { assert_eq!( parse_db_value("5134616"), - Ok(("", Value::Indexable(IndexableValue::Int(5134616)))) + Ok(("", Value::Int(5134616))) ); } @@ -191,7 +191,7 @@ mod tests { fn test_parse_uuid() { assert_eq!( parse_uuid("u131515"), - Ok(("", Value::Indexable(IndexableValue::Uuid(131515)))) + Ok(("", Value::Uuid(131515))) ) } } diff --git a/parser/src/validation.rs b/parser/src/validation.rs index bd948a7..5bbf8e6 100644 --- a/parser/src/validation.rs +++ b/parser/src/validation.rs @@ -105,7 +105,7 @@ fn validate_table_schema(raw_table_schema: RawTableSchema) -> Result TableSchema { TableSchema::new( @@ -567,7 +565,7 @@ mod tests { let syntax: RawQuerySyntax = Select( "users".to_string(), ColumnSelection::All, - Some(Eq("age".to_string(), Indexable(Int(25)))), + Some(Eq("age".to_string(), Value::Int(25))), ); let result = validate_operation(syntax, &db_schema); assert!(matches!(result, Ok(Operation::Select(_, _, _)))); @@ -579,7 +577,7 @@ mod tests { assert!(table_position == users_position); assert!(column_selection == vec![id, name, age]); - assert!(condition == Some(operation::Condition::Eq(age, Indexable(Int(25))))); + assert!(condition == Some(operation::Condition::Eq(age, Value::Int(25)))); } #[test] @@ -634,7 +632,7 @@ mod tests { let syntax: RawQuerySyntax = Select( "users".to_string(), ColumnSelection::All, - Some(Eq("does_not_exist".to_string(), Indexable(Int(25)))), + Some(Eq("does_not_exist".to_string(), Value::Int(25))), ); let result = validate_operation(syntax, &db_schema); assert!(matches!(result, Err(ValidationError::ColumnsDoNotExist(_)))); @@ -648,7 +646,7 @@ mod tests { let syntax: RawQuerySyntax = Select( "users".to_string(), ColumnSelection::All, - Some(Eq("age".to_string(), Indexable(String("25".to_string())))), + Some(Eq("age".to_string(), Value::String("25".to_string()))), ); let result = validate_operation(syntax, &db_schema); assert!(matches!(result, Err(ValidationError::TypeMismatch { .. }))); @@ -665,9 +663,9 @@ mod tests { let syntax: RawQuerySyntax = Insert( "users".to_string(), vec![ - ("name".to_string(), Indexable(String("Alice".to_string()))), - ("id".to_string(), Indexable(Uuid(0))), - ("age".to_string(), Indexable(Int(25))), + ("name".to_string(), Value::String("Alice".to_string())), + ("id".to_string(), Value::Uuid(0)), + ("age".to_string(), Value::Int(25)), ], ); let result = validate_operation(syntax, &db_schema); @@ -685,9 +683,9 @@ mod tests { assert!( values == vec![ - Indexable(Uuid(0)), - Indexable(String("Alice".to_string())), - Indexable(Int(25)) + Value::Uuid(0), + Value::String("Alice".to_string()), + Value::Int(25) ] ); } @@ -700,10 +698,10 @@ mod tests { let syntax: RawQuerySyntax = Insert( "users".to_string(), vec![ - ("name".to_string(), Indexable(String("Alice".to_string()))), - ("id".to_string(), Indexable(Uuid(0))), - ("age".to_string(), Indexable(Int(25))), - ("does_not_exist".to_string(), Indexable(Int(25))), + ("name".to_string(), Value::String("Alice".to_string())), + ("id".to_string(), Value::Uuid(0)), + ("age".to_string(), Value::Int(25)), + ("does_not_exist".to_string(), Value::Int(25)), ], ); let result = validate_operation(syntax, &db_schema); @@ -718,9 +716,9 @@ mod tests { let syntax: RawQuerySyntax = Insert( "users".to_string(), vec![ - ("name".to_string(), Indexable(String("Alice".to_string()))), - ("id".to_string(), Indexable(Uuid(0))), - ("age".to_string(), Number(25.0)), + ("name".to_string(), Value::String("Alice".to_string())), + ("id".to_string(), Value::Uuid(0)), + ("age".to_string(), Value::Number(25.0)), ], ); let result = validate_operation(syntax, &db_schema); @@ -756,7 +754,7 @@ mod tests { let syntax: RawQuerySyntax = Delete( "users".to_string(), - Some(Eq("age".to_string(), Indexable(Int(25)))), + Some(Eq("age".to_string(), Value::Int(25))), ); let result = validate_operation(syntax, &db_schema); assert!(matches!( @@ -772,7 +770,7 @@ mod tests { assert!(table_position == users_position); assert!(column == age); - assert!(value == Indexable(Int(25))); + assert!(value == Value::Int(25)); } // ====CreateIndex====