mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-04 06:18:17 +00:00
Support CREATE TABLE ON UPDATE <expr>
Function (#685)
* feat : OnUpdate Function Implement * feat : add GenericDialect Options
This commit is contained in:
parent
b1a000f149
commit
3e990466f8
3 changed files with 13 additions and 8 deletions
|
@ -558,6 +558,7 @@ pub enum ColumnOption {
|
|||
DialectSpecific(Vec<Token>),
|
||||
CharacterSet(ObjectName),
|
||||
Comment(String),
|
||||
OnUpdate(Expr),
|
||||
}
|
||||
|
||||
impl fmt::Display for ColumnOption {
|
||||
|
@ -592,6 +593,7 @@ impl fmt::Display for ColumnOption {
|
|||
DialectSpecific(val) => write!(f, "{}", display_separated(val, " ")),
|
||||
CharacterSet(n) => write!(f, "CHARACTER SET {}", n),
|
||||
Comment(v) => write!(f, "COMMENT '{}'", escape_single_quote_string(v)),
|
||||
OnUpdate(expr) => write!(f, "ON UPDATE {}", expr),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3474,11 +3474,10 @@ impl<'a> Parser<'a> {
|
|||
Token::make_keyword("AUTOINCREMENT"),
|
||||
])))
|
||||
} else if self.parse_keywords(&[Keyword::ON, Keyword::UPDATE])
|
||||
&& dialect_of!(self is MySqlDialect)
|
||||
&& dialect_of!(self is MySqlDialect | GenericDialect)
|
||||
{
|
||||
Ok(Some(ColumnOption::DialectSpecific(vec![
|
||||
Token::make_keyword("ON UPDATE"),
|
||||
])))
|
||||
let expr = self.parse_expr()?;
|
||||
Ok(Some(ColumnOption::OnUpdate(expr)))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
|
|
|
@ -1031,7 +1031,7 @@ fn parse_kill() {
|
|||
|
||||
#[test]
|
||||
fn parse_table_colum_option_on_update() {
|
||||
let sql1 = "CREATE TABLE foo (`modification_time` DATETIME ON UPDATE)";
|
||||
let sql1 = "CREATE TABLE foo (`modification_time` DATETIME ON UPDATE CURRENT_TIMESTAMP())";
|
||||
match mysql().verified_stmt(sql1) {
|
||||
Statement::CreateTable { name, columns, .. } => {
|
||||
assert_eq!(name.to_string(), "foo");
|
||||
|
@ -1042,9 +1042,13 @@ fn parse_table_colum_option_on_update() {
|
|||
collation: None,
|
||||
options: vec![ColumnOptionDef {
|
||||
name: None,
|
||||
option: ColumnOption::DialectSpecific(vec![Token::make_keyword(
|
||||
"ON UPDATE"
|
||||
)]),
|
||||
option: ColumnOption::OnUpdate(Expr::Function(Function {
|
||||
name: ObjectName(vec![Ident::new("CURRENT_TIMESTAMP")]),
|
||||
args: vec![],
|
||||
over: None,
|
||||
distinct: false,
|
||||
special: false,
|
||||
})),
|
||||
},],
|
||||
}],
|
||||
columns
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue