Add support for ClickHouse DDL query syntax (on cluster) (#527)

* Add on_cluster to Statement::CreateTable

* Add printing of on_cluster

* Update src/ast/mod.rs

Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>

* Fix fmt + nostd

* Remove unintended diff

Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
This commit is contained in:
Andy Richardson 2022-07-28 19:44:05 +01:00 committed by GitHub
parent f74753436a
commit 16af309c74
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 0 deletions

View file

@ -1826,6 +1826,7 @@ impl<'a> Parser<'a> {
engine: None,
collation: None,
on_commit: None,
on_cluster: None,
})
}
@ -2107,6 +2108,18 @@ impl<'a> Parser<'a> {
) -> Result<Statement, ParserError> {
let if_not_exists = self.parse_keywords(&[Keyword::IF, Keyword::NOT, Keyword::EXISTS]);
let table_name = self.parse_object_name()?;
// Clickhouse has `ON CLUSTER 'cluster'` syntax for DDLs
let on_cluster = if self.parse_keywords(&[Keyword::ON, Keyword::CLUSTER]) {
match self.next_token() {
Token::SingleQuotedString(s) => Some(s),
Token::Word(s) => Some(s.to_string()),
unexpected => self.expected("identifier or cluster literal", unexpected)?,
}
} else {
None
};
let like = if self.parse_keyword(Keyword::LIKE) || self.parse_keyword(Keyword::ILIKE) {
self.parse_object_name().ok()
} else {
@ -2207,6 +2220,7 @@ impl<'a> Parser<'a> {
default_charset,
collation,
on_commit,
on_cluster,
})
}