Skip to content

Commit 414fc39

Browse files
committed
Reuse parse_column_def for PARTITIONED BY column parsing
1 parent b00781c commit 414fc39

1 file changed

Lines changed: 12 additions & 24 deletions

File tree

src/parser/mod.rs

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)