@@ -7139,11 +7139,13 @@ impl<'a> Parser<'a> {
71397139
71407140 fn parse_plain_option(&mut self) -> Result<Option<SqlOption>, ParserError> {
71417141 // Single parameter option
7142+ // <https://dev.mysql.com/doc/refman/8.4/en/create-table.html>
71427143 if self.parse_keywords(&[Keyword::START, Keyword::TRANSACTION]) {
71437144 return Ok(Some(SqlOption::Ident(Ident::new("START TRANSACTION"))));
71447145 }
71457146
71467147 // Custom option
7148+ // <https://dev.mysql.com/doc/refman/8.4/en/create-table.html>
71477149 if self.parse_keywords(&[Keyword::COMMENT]) {
71487150 let has_eq = self.consume_token(&Token::Eq);
71497151 let value = self.next_token();
@@ -7162,6 +7164,8 @@ impl<'a> Parser<'a> {
71627164 return comment;
71637165 }
71647166
7167+ // <https://dev.mysql.com/doc/refman/8.4/en/create-table.html>
7168+ // <https://clickhouse.com/docs/sql-reference/statements/create/table>
71657169 if self.parse_keywords(&[Keyword::ENGINE]) {
71667170 let _ = self.consume_token(&Token::Eq);
71677171 let value = self.next_token();
@@ -7177,8 +7181,8 @@ impl<'a> Parser<'a> {
71777181 Ok(Some(SqlOption::NamedParenthesizedList(
71787182 NamedParenthesizedList {
71797183 key: Ident::new("ENGINE"),
7180- value : Some(Ident::new(w.value)),
7181- parameters,
7184+ name : Some(Ident::new(w.value)),
7185+ values: parameters,
71827186 },
71837187 )))
71847188 }
@@ -7190,12 +7194,12 @@ impl<'a> Parser<'a> {
71907194 return engine;
71917195 }
71927196
7197+ // <https://dev.mysql.com/doc/refman/8.4/en/create-table.html>
71937198 if self.parse_keywords(&[Keyword::TABLESPACE]) {
71947199 let _ = self.consume_token(&Token::Eq);
71957200 let value = self.next_token();
71967201
71977202 let tablespace = match value.token {
7198- // TABLESPACE tablespace_name [STORAGE DISK] | [TABLESPACE tablespace_name] STORAGE MEMORY
71997203 Token::Word(Word { value: name, .. }) | Token::SingleQuotedString(name) => {
72007204 let storage = match self.parse_keyword(Keyword::STORAGE) {
72017205 true => {
@@ -7227,12 +7231,12 @@ impl<'a> Parser<'a> {
72277231 return tablespace;
72287232 }
72297233
7234+ // <https://dev.mysql.com/doc/refman/8.4/en/create-table.html>
72307235 if self.parse_keyword(Keyword::UNION) {
72317236 let _ = self.consume_token(&Token::Eq);
72327237 let value = self.next_token();
72337238
72347239 match value.token {
7235- // UNION [=] (tbl_name[,tbl_name]...)
72367240 Token::LParen => {
72377241 let tables: Vec<Ident> =
72387242 self.parse_comma_separated0(Parser::parse_identifier, Token::RParen)?;
@@ -7241,8 +7245,8 @@ impl<'a> Parser<'a> {
72417245 return Ok(Some(SqlOption::NamedParenthesizedList(
72427246 NamedParenthesizedList {
72437247 key: Ident::new("UNION"),
7244- value : None,
7245- parameters : tables,
7248+ name : None,
7249+ values : tables,
72467250 },
72477251 )));
72487252 }
@@ -7254,85 +7258,58 @@ impl<'a> Parser<'a> {
72547258
72557259 // Key/Value parameter option
72567260 let key = if self.parse_keywords(&[Keyword::DEFAULT, Keyword::CHARSET]) {
7257- // [DEFAULT] CHARACTER SET [=] charset_name
72587261 Ident::new("DEFAULT CHARSET")
72597262 } else if self.parse_keyword(Keyword::CHARSET) {
7260- // [DEFAULT] CHARACTER SET [=] charset_name
72617263 Ident::new("CHARSET")
72627264 } else if self.parse_keywords(&[Keyword::DEFAULT, Keyword::CHARACTER, Keyword::SET]) {
7263- // [DEFAULT] CHARACTER SET [=] charset_name
72647265 Ident::new("DEFAULT CHARACTER SET")
72657266 } else if self.parse_keywords(&[Keyword::CHARACTER, Keyword::SET]) {
7266- // [DEFAULT] CHARACTER SET [=] charset_name
72677267 Ident::new("CHARACTER SET")
72687268 } else if self.parse_keywords(&[Keyword::DEFAULT, Keyword::COLLATE]) {
7269- // [DEFAULT] COLLATE [=] collation_name
72707269 Ident::new("DEFAULT COLLATE")
72717270 } else if self.parse_keyword(Keyword::COLLATE) {
7272- // [DEFAULT] COLLATE [=] collation_name
72737271 Ident::new("COLLATE")
72747272 } else if self.parse_keywords(&[Keyword::DATA, Keyword::DIRECTORY]) {
7275- // {DATA | INDEX} DIRECTORY [=] 'absolute path to directory'
72767273 Ident::new("DATA DIRECTORY")
72777274 } else if self.parse_keywords(&[Keyword::INDEX, Keyword::DIRECTORY]) {
7278- // {DATA | INDEX} DIRECTORY [=] 'absolute path to directory'
72797275 Ident::new("INDEX DIRECTORY")
72807276 } else if self.parse_keyword(Keyword::KEY_BLOCK_SIZE) {
7281- // KEY_BLOCK_SIZE [=] value
72827277 Ident::new("KEY_BLOCK_SIZE")
72837278 } else if self.parse_keyword(Keyword::ROW_FORMAT) {
7284- // ROW_FORMAT [=] {DEFAULT | DYNAMIC | FIXED | COMPRESSED | REDUNDANT | COMPACT}
72857279 Ident::new("ROW_FORMAT")
72867280 } else if self.parse_keyword(Keyword::PACK_KEYS) {
7287- // PACK_KEYS [=] {0 | 1 | DEFAULT}
72887281 Ident::new("PACK_KEYS")
72897282 } else if self.parse_keyword(Keyword::STATS_AUTO_RECALC) {
7290- // STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1}
72917283 Ident::new("STATS_AUTO_RECALC")
72927284 } else if self.parse_keyword(Keyword::STATS_PERSISTENT) {
7293- //STATS_PERSISTENT [=] {DEFAULT | 0 | 1}
72947285 Ident::new("STATS_PERSISTENT")
72957286 } else if self.parse_keyword(Keyword::STATS_SAMPLE_PAGES) {
7296- // STATS_SAMPLE_PAGES [=] value
72977287 Ident::new("STATS_SAMPLE_PAGES")
72987288 } else if self.parse_keyword(Keyword::DELAY_KEY_WRITE) {
7299- // DELAY_KEY_WRITE [=] {0 | 1}
73007289 Ident::new("DELAY_KEY_WRITE")
73017290 } else if self.parse_keyword(Keyword::COMPRESSION) {
7302- // COMPRESSION [=] {'ZLIB' | 'LZ4' | 'NONE'}
73037291 Ident::new("COMPRESSION")
73047292 } else if self.parse_keyword(Keyword::ENCRYPTION) {
7305- // ENCRYPTION [=] {'Y' | 'N'}
73067293 Ident::new("ENCRYPTION")
73077294 } else if self.parse_keyword(Keyword::MAX_ROWS) {
7308- // MAX_ROWS [=] value
73097295 Ident::new("MAX_ROWS")
73107296 } else if self.parse_keyword(Keyword::MIN_ROWS) {
7311- // MIN_ROWS [=] value
73127297 Ident::new("MIN_ROWS")
73137298 } else if self.parse_keyword(Keyword::AUTOEXTEND_SIZE) {
7314- // AUTOEXTEND_SIZE [=] value
73157299 Ident::new("AUTOEXTEND_SIZE")
73167300 } else if self.parse_keyword(Keyword::AVG_ROW_LENGTH) {
7317- // AVG_ROW_LENGTH [=] value
73187301 Ident::new("AVG_ROW_LENGTH")
73197302 } else if self.parse_keyword(Keyword::CHECKSUM) {
7320- // CHECKSUM [=] {0 | 1}
73217303 Ident::new("CHECKSUM")
73227304 } else if self.parse_keyword(Keyword::CONNECTION) {
7323- // CONNECTION [=] 'connect_string'
73247305 Ident::new("CONNECTION")
73257306 } else if self.parse_keyword(Keyword::ENGINE_ATTRIBUTE) {
7326- // ENGINE_ATTRIBUTE [=] 'string'
73277307 Ident::new("ENGINE_ATTRIBUTE")
73287308 } else if self.parse_keyword(Keyword::PASSWORD) {
7329- // PASSWORD [=] 'string'
73307309 Ident::new("PASSWORD")
73317310 } else if self.parse_keyword(Keyword::SECONDARY_ENGINE_ATTRIBUTE) {
7332- // SECONDARY_ENGINE_ATTRIBUTE [=] 'string'
73337311 Ident::new("SECONDARY_ENGINE_ATTRIBUTE")
73347312 } else if self.parse_keyword(Keyword::INSERT_METHOD) {
7335- // INSERT_METHOD [=] { NO | FIRST | LAST }
73367313 Ident::new("INSERT_METHOD")
73377314 } else if self.parse_keyword(Keyword::AUTO_INCREMENT) {
73387315 Ident::new("AUTO_INCREMENT")
0 commit comments