@@ -5313,6 +5313,19 @@ impl<'a> Parser<'a> {
53135313 }
53145314 }
53155315
5316+ fn parse_optional_on_cluster ( & mut self ) -> Result < Option < String > , ParserError > {
5317+ if self . parse_keywords ( & [ Keyword :: ON , Keyword :: CLUSTER ] ) {
5318+ let next_token = self . next_token ( ) ;
5319+ match next_token. token {
5320+ Token :: SingleQuotedString ( s) => Ok ( Some ( format ! ( "'{}'" , s) ) ) ,
5321+ Token :: Word ( s) => Ok ( Some ( s. to_string ( ) ) ) ,
5322+ _ => self . expected ( "identifier or cluster literal" , next_token) ?,
5323+ }
5324+ } else {
5325+ Ok ( None )
5326+ }
5327+ }
5328+
53165329 pub fn parse_create_table (
53175330 & mut self ,
53185331 or_replace : bool ,
@@ -5325,16 +5338,7 @@ impl<'a> Parser<'a> {
53255338 let table_name = self . parse_object_name ( allow_unquoted_hyphen) ?;
53265339
53275340 // Clickhouse has `ON CLUSTER 'cluster'` syntax for DDLs
5328- let on_cluster = if self . parse_keywords ( & [ Keyword :: ON , Keyword :: CLUSTER ] ) {
5329- let next_token = self . next_token ( ) ;
5330- match next_token. token {
5331- Token :: SingleQuotedString ( s) => Some ( s) ,
5332- Token :: Word ( s) => Some ( s. to_string ( ) ) ,
5333- _ => self . expected ( "identifier or cluster literal" , next_token) ?,
5334- }
5335- } else {
5336- None
5337- } ;
5341+ let on_cluster = self . parse_optional_on_cluster ( ) ?;
53385342
53395343 let like = if self . parse_keyword ( Keyword :: LIKE ) || self . parse_keyword ( Keyword :: ILIKE ) {
53405344 self . parse_object_name ( allow_unquoted_hyphen) . ok ( )
@@ -6499,6 +6503,7 @@ impl<'a> Parser<'a> {
64996503 let if_exists = self . parse_keywords ( & [ Keyword :: IF , Keyword :: EXISTS ] ) ;
65006504 let only = self . parse_keyword ( Keyword :: ONLY ) ; // [ ONLY ]
65016505 let table_name = self . parse_object_name ( false ) ?;
6506+ let on_cluster = self . parse_optional_on_cluster ( ) ?;
65026507 let operations = self . parse_comma_separated ( Parser :: parse_alter_table_operation) ?;
65036508
65046509 let mut location = None ;
@@ -6520,6 +6525,7 @@ impl<'a> Parser<'a> {
65206525 only,
65216526 operations,
65226527 location,
6528+ on_cluster,
65236529 } )
65246530 }
65256531 Keyword :: INDEX => {
0 commit comments