diff --git a/src/dialect/mysql.rs b/src/dialect/mysql.rs index e0b4e21c4..a4aaafe6b 100644 --- a/src/dialect/mysql.rs +++ b/src/dialect/mysql.rs @@ -30,4 +30,8 @@ impl Dialect for MySqlDialect { fn is_identifier_part(&self, ch: char) -> bool { self.is_identifier_start(ch) || (ch >= '0' && ch <= '9') } + + fn is_delimited_identifier_start(&self, ch: char) -> bool { + ch == '`' + } } diff --git a/tests/sqlparser_mysql.rs b/tests/sqlparser_mysql.rs index 4e49a6348..c0fc8c8ba 100644 --- a/tests/sqlparser_mysql.rs +++ b/tests/sqlparser_mysql.rs @@ -106,7 +106,7 @@ fn parse_create_table_auto_increment() { assert_eq!(name.to_string(), "foo"); assert_eq!( vec![ColumnDef { - name: "bar".into(), + name: Ident::new("bar"), data_type: DataType::Int, collation: None, options: vec![ @@ -129,6 +129,29 @@ fn parse_create_table_auto_increment() { } } +#[test] +fn parse_quote_identifiers() { + let sql = "CREATE TABLE `PRIMARY` (`BEGIN` INT PRIMARY KEY)"; + match mysql().verified_stmt(sql) { + Statement::CreateTable { name, columns, .. } => { + assert_eq!(name.to_string(), "`PRIMARY`"); + assert_eq!( + vec![ColumnDef { + name: Ident::with_quote('`', "BEGIN"), + data_type: DataType::Int, + collation: None, + options: vec![ColumnOptionDef { + name: None, + option: ColumnOption::Unique { is_primary: true } + }], + }], + columns + ); + } + _ => unreachable!(), + } +} + fn mysql() -> TestedDialects { TestedDialects { dialects: vec![Box::new(MySqlDialect {})],