@@ -7884,37 +7884,15 @@ impl<'a> Parser<'a> {
78847884 pub fn parse_hive_distribution(&mut self) -> Result<HiveDistributionStyle, ParserError> {
78857885 if self.parse_keywords(&[Keyword::PARTITIONED, Keyword::BY]) {
78867886 self.expect_token(&Token::LParen)?;
7887- let columns = self.parse_comma_separated(Parser::parse_partitioned_by_column_def)?;
7887+ let columns =
7888+ self.parse_comma_separated(|parser| parser.parse_column_def_inner(true))?;
78887889 self.expect_token(&Token::RParen)?;
78897890 Ok(HiveDistributionStyle::PARTITIONED { columns })
78907891 } else {
78917892 Ok(HiveDistributionStyle::NONE)
78927893 }
78937894 }
78947895
7895- /// Parse column definition for `PARTITIONED BY` clause.
7896- ///
7897- /// Allows partition columns without types when referencing
7898- /// columns already defined in the table specification:
7899- /// ```sql
7900- /// CREATE TABLE t (col1 STRING, col2 INT) PARTITIONED BY (col1)
7901- /// CREATE TABLE t (col1 STRING) PARTITIONED BY (col2 INT)
7902- /// ```
7903- ///
7904- /// [Databricks](https://docs.databricks.com/en/sql/language-manual/sql-ref-partition.html)
7905- fn parse_partitioned_by_column_def(&mut self) -> Result<ColumnDef, ParserError> {
7906- let name = self.parse_identifier()?;
7907- let data_type = self
7908- .maybe_parse(|parser| parser.parse_data_type())?
7909- .unwrap_or(DataType::Unspecified);
7910-
7911- Ok(ColumnDef {
7912- name,
7913- data_type,
7914- options: vec![],
7915- })
7916- }
7917-
79187896 /// Parse Hive formats.
79197897 pub fn parse_hive_formats(&mut self) -> Result<Option<HiveFormat>, ParserError> {
79207898 let mut hive_format: Option<HiveFormat> = None;
@@ -8731,9 +8709,19 @@ impl<'a> Parser<'a> {
87318709
87328710 /// Parse column definition.
87338711 pub fn parse_column_def(&mut self) -> Result<ColumnDef, ParserError> {
8712+ self.parse_column_def_inner(false)
8713+ }
8714+
8715+ fn parse_column_def_inner(
8716+ &mut self,
8717+ optional_data_type: bool,
8718+ ) -> Result<ColumnDef, ParserError> {
87348719 let col_name = self.parse_identifier()?;
87358720 let data_type = if self.is_column_type_sqlite_unspecified() {
87368721 DataType::Unspecified
8722+ } else if optional_data_type {
8723+ self.maybe_parse(|parser| parser.parse_data_type())?
8724+ .unwrap_or(DataType::Unspecified)
87378725 } else {
87388726 self.parse_data_type()?
87398727 };
0 commit comments