diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 77e47eaed..b579830f3 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -1218,7 +1218,7 @@ impl fmt::Display for Statement { location, managed_location, } => { - write!(f, "CREATE")?; + write!(f, "CREATE DATABASE")?; if *if_not_exists { write!(f, " IF NOT EXISTS")?; } diff --git a/src/parser.rs b/src/parser.rs index 896e8aef8..efc640625 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -1521,6 +1521,8 @@ impl<'a> Parser<'a> { self.parse_create_virtual_table() } else if self.parse_keyword(Keyword::SCHEMA) { self.parse_create_schema() + } else if self.parse_keyword(Keyword::DATABASE) { + self.parse_create_database() } else { self.expected("an object type after CREATE", self.peek_token()) } diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index 8f4d7a180..c9ba26220 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -3297,10 +3297,9 @@ fn parse_scalar_subqueries() { assert_matches!( verified_expr(sql), Expr::BinaryOp { - op: BinaryOperator::Plus, .. - //left: box Subquery { .. }, - //right: box Subquery { .. }, - } + op: BinaryOperator::Plus, + .. + } ); } @@ -3386,6 +3385,44 @@ fn parse_exists_subquery() { ); } +#[test] +fn parse_create_database() { + let sql = "CREATE DATABASE mydb"; + match verified_stmt(sql) { + Statement::CreateDatabase { + db_name, + if_not_exists, + location, + managed_location, + } => { + assert_eq!("mydb", db_name.to_string()); + assert!(!if_not_exists); + assert_eq!(None, location); + assert_eq!(None, managed_location); + } + _ => unreachable!(), + } +} + +#[test] +fn parse_create_database_ine() { + let sql = "CREATE DATABASE IF NOT EXISTS mydb"; + match verified_stmt(sql) { + Statement::CreateDatabase { + db_name, + if_not_exists, + location, + managed_location, + } => { + assert_eq!("mydb", db_name.to_string()); + assert!(if_not_exists); + assert_eq!(None, location); + assert_eq!(None, managed_location); + } + _ => unreachable!(), + } +} + #[test] fn parse_create_view() { let sql = "CREATE VIEW myschema.myview AS SELECT foo FROM bar";