mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-10-09 21:42:05 +00:00
Use IndexColumn
in all index definitions (#1900)
This commit is contained in:
parent
7865de015f
commit
5d63663bc6
5 changed files with 181 additions and 35 deletions
|
@ -6868,9 +6868,7 @@ impl<'a> Parser<'a> {
|
|||
None
|
||||
};
|
||||
|
||||
self.expect_token(&Token::LParen)?;
|
||||
let columns = self.parse_comma_separated(Parser::parse_create_index_expr)?;
|
||||
self.expect_token(&Token::RParen)?;
|
||||
let columns = self.parse_parenthesized_index_column_list()?;
|
||||
|
||||
let include = if self.parse_keyword(Keyword::INCLUDE) {
|
||||
self.expect_token(&Token::LParen)?;
|
||||
|
@ -8070,7 +8068,7 @@ impl<'a> Parser<'a> {
|
|||
let index_name = self.parse_optional_ident()?;
|
||||
let index_type = self.parse_optional_using_then_index_type()?;
|
||||
|
||||
let columns = self.parse_parenthesized_column_list(Mandatory, false)?;
|
||||
let columns = self.parse_parenthesized_index_column_list()?;
|
||||
let index_options = self.parse_index_options()?;
|
||||
let characteristics = self.parse_constraint_characteristics()?;
|
||||
Ok(Some(TableConstraint::Unique {
|
||||
|
@ -8092,7 +8090,7 @@ impl<'a> Parser<'a> {
|
|||
let index_name = self.parse_optional_ident()?;
|
||||
let index_type = self.parse_optional_using_then_index_type()?;
|
||||
|
||||
let columns = self.parse_parenthesized_column_list(Mandatory, false)?;
|
||||
let columns = self.parse_parenthesized_index_column_list()?;
|
||||
let index_options = self.parse_index_options()?;
|
||||
let characteristics = self.parse_constraint_characteristics()?;
|
||||
Ok(Some(TableConstraint::PrimaryKey {
|
||||
|
@ -8170,7 +8168,7 @@ impl<'a> Parser<'a> {
|
|||
};
|
||||
|
||||
let index_type = self.parse_optional_using_then_index_type()?;
|
||||
let columns = self.parse_parenthesized_column_list(Mandatory, false)?;
|
||||
let columns = self.parse_parenthesized_index_column_list()?;
|
||||
|
||||
Ok(Some(TableConstraint::Index {
|
||||
display_as_key,
|
||||
|
@ -8199,7 +8197,7 @@ impl<'a> Parser<'a> {
|
|||
|
||||
let opt_index_name = self.parse_optional_ident()?;
|
||||
|
||||
let columns = self.parse_parenthesized_column_list(Mandatory, false)?;
|
||||
let columns = self.parse_parenthesized_index_column_list()?;
|
||||
|
||||
Ok(Some(TableConstraint::FulltextOrSpatial {
|
||||
fulltext,
|
||||
|
@ -10601,6 +10599,14 @@ impl<'a> Parser<'a> {
|
|||
self.parse_parenthesized_column_list_inner(optional, allow_empty, |p| p.parse_identifier())
|
||||
}
|
||||
|
||||
/// Parses a parenthesized comma-separated list of index columns, which can be arbitrary
|
||||
/// expressions with ordering information (and an opclass in some dialects).
|
||||
fn parse_parenthesized_index_column_list(&mut self) -> Result<Vec<IndexColumn>, ParserError> {
|
||||
self.parse_parenthesized_column_list_inner(Mandatory, false, |p| {
|
||||
p.parse_create_index_expr()
|
||||
})
|
||||
}
|
||||
|
||||
/// Parses a parenthesized comma-separated list of qualified, possibly quoted identifiers.
|
||||
/// For example: `(db1.sc1.tbl1.col1, db1.sc1.tbl1."col 2", ...)`
|
||||
pub fn parse_parenthesized_qualified_column_list(
|
||||
|
@ -16527,6 +16533,20 @@ mod tests {
|
|||
}};
|
||||
}
|
||||
|
||||
fn mk_expected_col(name: &str) -> IndexColumn {
|
||||
IndexColumn {
|
||||
column: OrderByExpr {
|
||||
expr: Expr::Identifier(name.into()),
|
||||
options: OrderByOptions {
|
||||
asc: None,
|
||||
nulls_first: None,
|
||||
},
|
||||
with_fill: None,
|
||||
},
|
||||
operator_class: None,
|
||||
}
|
||||
}
|
||||
|
||||
let dialect =
|
||||
TestedDialects::new(vec![Box::new(GenericDialect {}), Box::new(MySqlDialect {})]);
|
||||
|
||||
|
@ -16537,7 +16557,7 @@ mod tests {
|
|||
display_as_key: false,
|
||||
name: None,
|
||||
index_type: None,
|
||||
columns: vec![Ident::new("c1")],
|
||||
columns: vec![mk_expected_col("c1")],
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -16548,7 +16568,7 @@ mod tests {
|
|||
display_as_key: true,
|
||||
name: None,
|
||||
index_type: None,
|
||||
columns: vec![Ident::new("c1")],
|
||||
columns: vec![mk_expected_col("c1")],
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -16559,7 +16579,7 @@ mod tests {
|
|||
display_as_key: false,
|
||||
name: Some(Ident::with_quote('\'', "index")),
|
||||
index_type: None,
|
||||
columns: vec![Ident::new("c1"), Ident::new("c2")],
|
||||
columns: vec![mk_expected_col("c1"), mk_expected_col("c2")],
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -16570,7 +16590,7 @@ mod tests {
|
|||
display_as_key: false,
|
||||
name: None,
|
||||
index_type: Some(IndexType::BTree),
|
||||
columns: vec![Ident::new("c1")],
|
||||
columns: vec![mk_expected_col("c1")],
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -16581,7 +16601,7 @@ mod tests {
|
|||
display_as_key: false,
|
||||
name: None,
|
||||
index_type: Some(IndexType::Hash),
|
||||
columns: vec![Ident::new("c1")],
|
||||
columns: vec![mk_expected_col("c1")],
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -16592,7 +16612,7 @@ mod tests {
|
|||
display_as_key: false,
|
||||
name: Some(Ident::new("idx_name")),
|
||||
index_type: Some(IndexType::BTree),
|
||||
columns: vec![Ident::new("c1")],
|
||||
columns: vec![mk_expected_col("c1")],
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -16603,7 +16623,7 @@ mod tests {
|
|||
display_as_key: false,
|
||||
name: Some(Ident::new("idx_name")),
|
||||
index_type: Some(IndexType::Hash),
|
||||
columns: vec![Ident::new("c1")],
|
||||
columns: vec![mk_expected_col("c1")],
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue