@@ -7222,11 +7222,13 @@ impl<'a> Parser<'a> {
72227222
72237223 fn parse_plain_option(&mut self) -> Result<Option<SqlOption>, ParserError> {
72247224 // Single parameter option
7225+ // <https://dev.mysql.com/doc/refman/8.4/en/create-table.html>
72257226 if self.parse_keywords(&[Keyword::START, Keyword::TRANSACTION]) {
72267227 return Ok(Some(SqlOption::Ident(Ident::new("START TRANSACTION"))));
72277228 }
72287229
72297230 // Custom option
7231+ // <https://dev.mysql.com/doc/refman/8.4/en/create-table.html>
72307232 if self.parse_keywords(&[Keyword::COMMENT]) {
72317233 let has_eq = self.consume_token(&Token::Eq);
72327234 let value = self.next_token();
@@ -7245,6 +7247,8 @@ impl<'a> Parser<'a> {
72457247 return comment;
72467248 }
72477249
7250+ // <https://dev.mysql.com/doc/refman/8.4/en/create-table.html>
7251+ // <https://clickhouse.com/docs/sql-reference/statements/create/table>
72487252 if self.parse_keywords(&[Keyword::ENGINE]) {
72497253 let _ = self.consume_token(&Token::Eq);
72507254 let value = self.next_token();
@@ -7260,8 +7264,8 @@ impl<'a> Parser<'a> {
72607264 Ok(Some(SqlOption::NamedParenthesizedList(
72617265 NamedParenthesizedList {
72627266 key: Ident::new("ENGINE"),
7263- value : Some(Ident::new(w.value)),
7264- parameters,
7267+ name : Some(Ident::new(w.value)),
7268+ values: parameters,
72657269 },
72667270 )))
72677271 }
@@ -7273,12 +7277,12 @@ impl<'a> Parser<'a> {
72737277 return engine;
72747278 }
72757279
7280+ // <https://dev.mysql.com/doc/refman/8.4/en/create-table.html>
72767281 if self.parse_keywords(&[Keyword::TABLESPACE]) {
72777282 let _ = self.consume_token(&Token::Eq);
72787283 let value = self.next_token();
72797284
72807285 let tablespace = match value.token {
7281- // TABLESPACE tablespace_name [STORAGE DISK] | [TABLESPACE tablespace_name] STORAGE MEMORY
72827286 Token::Word(Word { value: name, .. }) | Token::SingleQuotedString(name) => {
72837287 let storage = match self.parse_keyword(Keyword::STORAGE) {
72847288 true => {
@@ -7310,12 +7314,12 @@ impl<'a> Parser<'a> {
73107314 return tablespace;
73117315 }
73127316
7317+ // <https://dev.mysql.com/doc/refman/8.4/en/create-table.html>
73137318 if self.parse_keyword(Keyword::UNION) {
73147319 let _ = self.consume_token(&Token::Eq);
73157320 let value = self.next_token();
73167321
73177322 match value.token {
7318- // UNION [=] (tbl_name[,tbl_name]...)
73197323 Token::LParen => {
73207324 let tables: Vec<Ident> =
73217325 self.parse_comma_separated0(Parser::parse_identifier, Token::RParen)?;
@@ -7324,8 +7328,8 @@ impl<'a> Parser<'a> {
73247328 return Ok(Some(SqlOption::NamedParenthesizedList(
73257329 NamedParenthesizedList {
73267330 key: Ident::new("UNION"),
7327- value : None,
7328- parameters : tables,
7331+ name : None,
7332+ values : tables,
73297333 },
73307334 )));
73317335 }
@@ -7337,85 +7341,58 @@ impl<'a> Parser<'a> {
73377341
73387342 // Key/Value parameter option
73397343 let key = if self.parse_keywords(&[Keyword::DEFAULT, Keyword::CHARSET]) {
7340- // [DEFAULT] CHARACTER SET [=] charset_name
73417344 Ident::new("DEFAULT CHARSET")
73427345 } else if self.parse_keyword(Keyword::CHARSET) {
7343- // [DEFAULT] CHARACTER SET [=] charset_name
73447346 Ident::new("CHARSET")
73457347 } else if self.parse_keywords(&[Keyword::DEFAULT, Keyword::CHARACTER, Keyword::SET]) {
7346- // [DEFAULT] CHARACTER SET [=] charset_name
73477348 Ident::new("DEFAULT CHARACTER SET")
73487349 } else if self.parse_keywords(&[Keyword::CHARACTER, Keyword::SET]) {
7349- // [DEFAULT] CHARACTER SET [=] charset_name
73507350 Ident::new("CHARACTER SET")
73517351 } else if self.parse_keywords(&[Keyword::DEFAULT, Keyword::COLLATE]) {
7352- // [DEFAULT] COLLATE [=] collation_name
73537352 Ident::new("DEFAULT COLLATE")
73547353 } else if self.parse_keyword(Keyword::COLLATE) {
7355- // [DEFAULT] COLLATE [=] collation_name
73567354 Ident::new("COLLATE")
73577355 } else if self.parse_keywords(&[Keyword::DATA, Keyword::DIRECTORY]) {
7358- // {DATA | INDEX} DIRECTORY [=] 'absolute path to directory'
73597356 Ident::new("DATA DIRECTORY")
73607357 } else if self.parse_keywords(&[Keyword::INDEX, Keyword::DIRECTORY]) {
7361- // {DATA | INDEX} DIRECTORY [=] 'absolute path to directory'
73627358 Ident::new("INDEX DIRECTORY")
73637359 } else if self.parse_keyword(Keyword::KEY_BLOCK_SIZE) {
7364- // KEY_BLOCK_SIZE [=] value
73657360 Ident::new("KEY_BLOCK_SIZE")
73667361 } else if self.parse_keyword(Keyword::ROW_FORMAT) {
7367- // ROW_FORMAT [=] {DEFAULT | DYNAMIC | FIXED | COMPRESSED | REDUNDANT | COMPACT}
73687362 Ident::new("ROW_FORMAT")
73697363 } else if self.parse_keyword(Keyword::PACK_KEYS) {
7370- // PACK_KEYS [=] {0 | 1 | DEFAULT}
73717364 Ident::new("PACK_KEYS")
73727365 } else if self.parse_keyword(Keyword::STATS_AUTO_RECALC) {
7373- // STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1}
73747366 Ident::new("STATS_AUTO_RECALC")
73757367 } else if self.parse_keyword(Keyword::STATS_PERSISTENT) {
7376- //STATS_PERSISTENT [=] {DEFAULT | 0 | 1}
73777368 Ident::new("STATS_PERSISTENT")
73787369 } else if self.parse_keyword(Keyword::STATS_SAMPLE_PAGES) {
7379- // STATS_SAMPLE_PAGES [=] value
73807370 Ident::new("STATS_SAMPLE_PAGES")
73817371 } else if self.parse_keyword(Keyword::DELAY_KEY_WRITE) {
7382- // DELAY_KEY_WRITE [=] {0 | 1}
73837372 Ident::new("DELAY_KEY_WRITE")
73847373 } else if self.parse_keyword(Keyword::COMPRESSION) {
7385- // COMPRESSION [=] {'ZLIB' | 'LZ4' | 'NONE'}
73867374 Ident::new("COMPRESSION")
73877375 } else if self.parse_keyword(Keyword::ENCRYPTION) {
7388- // ENCRYPTION [=] {'Y' | 'N'}
73897376 Ident::new("ENCRYPTION")
73907377 } else if self.parse_keyword(Keyword::MAX_ROWS) {
7391- // MAX_ROWS [=] value
73927378 Ident::new("MAX_ROWS")
73937379 } else if self.parse_keyword(Keyword::MIN_ROWS) {
7394- // MIN_ROWS [=] value
73957380 Ident::new("MIN_ROWS")
73967381 } else if self.parse_keyword(Keyword::AUTOEXTEND_SIZE) {
7397- // AUTOEXTEND_SIZE [=] value
73987382 Ident::new("AUTOEXTEND_SIZE")
73997383 } else if self.parse_keyword(Keyword::AVG_ROW_LENGTH) {
7400- // AVG_ROW_LENGTH [=] value
74017384 Ident::new("AVG_ROW_LENGTH")
74027385 } else if self.parse_keyword(Keyword::CHECKSUM) {
7403- // CHECKSUM [=] {0 | 1}
74047386 Ident::new("CHECKSUM")
74057387 } else if self.parse_keyword(Keyword::CONNECTION) {
7406- // CONNECTION [=] 'connect_string'
74077388 Ident::new("CONNECTION")
74087389 } else if self.parse_keyword(Keyword::ENGINE_ATTRIBUTE) {
7409- // ENGINE_ATTRIBUTE [=] 'string'
74107390 Ident::new("ENGINE_ATTRIBUTE")
74117391 } else if self.parse_keyword(Keyword::PASSWORD) {
7412- // PASSWORD [=] 'string'
74137392 Ident::new("PASSWORD")
74147393 } else if self.parse_keyword(Keyword::SECONDARY_ENGINE_ATTRIBUTE) {
7415- // SECONDARY_ENGINE_ATTRIBUTE [=] 'string'
74167394 Ident::new("SECONDARY_ENGINE_ATTRIBUTE")
74177395 } else if self.parse_keyword(Keyword::INSERT_METHOD) {
7418- // INSERT_METHOD [=] { NO | FIRST | LAST }
74197396 Ident::new("INSERT_METHOD")
74207397 } else if self.parse_keyword(Keyword::AUTO_INCREMENT) {
74217398 Ident::new("AUTO_INCREMENT")
0 commit comments