diff --git a/src/parser.rs b/src/parser.rs index 693998cec..03d728e7f 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -2254,6 +2254,12 @@ impl<'a> Parser<'a> { Ok(Some(ColumnOption::DialectSpecific(vec![ Token::make_keyword("AUTOINCREMENT"), ]))) + } else if self.parse_keywords(&[Keyword::ON, Keyword::UPDATE]) + && dialect_of!(self is MySqlDialect) + { + Ok(Some(ColumnOption::DialectSpecific(vec![ + Token::make_keyword("ON UPDATE"), + ]))) } else { Ok(None) } diff --git a/tests/sqlparser_mysql.rs b/tests/sqlparser_mysql.rs index 10aa803f6..715ce7e8d 100644 --- a/tests/sqlparser_mysql.rs +++ b/tests/sqlparser_mysql.rs @@ -834,6 +834,31 @@ fn parse_kill() { ); } +#[test] +fn parse_table_colum_option_on_update() { + let sql1 = "CREATE TABLE foo (`modification_time` DATETIME ON UPDATE)"; + match mysql().verified_stmt(sql1) { + Statement::CreateTable { name, columns, .. } => { + assert_eq!(name.to_string(), "foo"); + assert_eq!( + vec![ColumnDef { + name: Ident::with_quote('`', "modification_time"), + data_type: DataType::Datetime, + collation: None, + options: vec![ColumnOptionDef { + name: None, + option: ColumnOption::DialectSpecific(vec![Token::make_keyword( + "ON UPDATE" + )]), + },], + }], + columns + ); + } + _ => unreachable!(), + } +} + fn mysql() -> TestedDialects { TestedDialects { dialects: vec![Box::new(MySqlDialect {})],