Parsing and validation for Option
Add option type and option value parsers value->literal in parser, implement Option literal
This commit is contained in:
parent
de8c6164cf
commit
6245dba4f0
8 changed files with 322 additions and 109 deletions
|
|
@ -59,6 +59,8 @@ fn parse_column_definition(input: &str) -> IResult<&str, ColumnSchema> {
|
|||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use minisql::type_system::DbType;
|
||||
|
||||
use crate::parsing::create::parse_create;
|
||||
use crate::syntax::RawQuerySyntax;
|
||||
|
||||
|
|
@ -112,4 +114,45 @@ mod tests {
|
|||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_create_option() {
|
||||
let (_, create) = parse_create("CREATE TABLE games (id UUID PRIMARY KEY, name STRING, year Option(INT), price NUMBER)")
|
||||
.expect("should parse");
|
||||
assert!(matches!(create, RawQuerySyntax::CreateTable(_)));
|
||||
match create {
|
||||
RawQuerySyntax::CreateTable(schema) => {
|
||||
assert_eq!(schema.table_name, "games");
|
||||
assert_eq!(schema.number_of_columns(), 4);
|
||||
|
||||
let result_id = schema.get_column(&"id".to_string());
|
||||
assert!(matches!(result_id, Some(_)));
|
||||
let Some(id_column) = result_id else { panic!() };
|
||||
assert_eq!(id_column.column_name, "id".to_string());
|
||||
|
||||
let result_column1 = schema.get_column(&"name".to_string());
|
||||
assert!(matches!(result_column1, Some(_)));
|
||||
let Some(column1_column) = result_column1 else {
|
||||
panic!()
|
||||
};
|
||||
assert_eq!(column1_column.column_name, "name".to_string());
|
||||
assert_eq!(column1_column.type_, DbType::String);
|
||||
|
||||
let column = schema.get_column(&"year".to_string());
|
||||
let Some(column) = column else {
|
||||
panic!()
|
||||
};
|
||||
assert_eq!(column.column_name, "year".to_string());
|
||||
assert_eq!(column.type_, DbType::Option(Box::new(DbType::Int)));
|
||||
|
||||
let column = schema.get_column(&"price".to_string());
|
||||
let Some(column) = column else {
|
||||
panic!()
|
||||
};
|
||||
assert_eq!(column.column_name, "price".to_string());
|
||||
assert_eq!(column.type_, DbType::Number);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue