mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-19 13:40:15 +00:00
Support SHOW COLUMNS FROM tbl FROM db
(#562)
This commit is contained in:
parent
e2b943799a
commit
71c3ec057b
2 changed files with 14 additions and 10 deletions
|
@ -3739,10 +3739,16 @@ impl<'a> Parser<'a> {
|
|||
let full = self.parse_keyword(Keyword::FULL);
|
||||
self.expect_one_of_keywords(&[Keyword::COLUMNS, Keyword::FIELDS])?;
|
||||
self.expect_one_of_keywords(&[Keyword::FROM, Keyword::IN])?;
|
||||
let table_name = self.parse_object_name()?;
|
||||
// MySQL also supports FROM <database> here. In other words, MySQL
|
||||
// allows both FROM <table> FROM <database> and FROM <database>.<table>,
|
||||
// while we only support the latter for now.
|
||||
let object_name = self.parse_object_name()?;
|
||||
let table_name = match self.parse_one_of_keywords(&[Keyword::FROM, Keyword::IN]) {
|
||||
Some(_) => {
|
||||
let db_name = vec![self.parse_identifier()?];
|
||||
let ObjectName(table_name) = object_name;
|
||||
let object_name = db_name.into_iter().chain(table_name.into_iter()).collect();
|
||||
ObjectName(object_name)
|
||||
}
|
||||
None => object_name,
|
||||
};
|
||||
let filter = self.parse_show_statement_filter()?;
|
||||
Ok(Statement::ShowColumns {
|
||||
extended,
|
||||
|
|
|
@ -110,12 +110,10 @@ fn parse_show_columns() {
|
|||
.one_statement_parses_to("SHOW COLUMNS IN mytable", "SHOW COLUMNS FROM mytable");
|
||||
mysql_and_generic()
|
||||
.one_statement_parses_to("SHOW FIELDS IN mytable", "SHOW COLUMNS FROM mytable");
|
||||
|
||||
// unhandled things are truly unhandled
|
||||
match mysql_and_generic().parse_sql_statements("SHOW COLUMNS FROM mytable FROM mydb") {
|
||||
Err(_) => {}
|
||||
Ok(val) => panic!("unexpected successful parse: {:?}", val),
|
||||
}
|
||||
mysql_and_generic().one_statement_parses_to(
|
||||
"SHOW COLUMNS FROM mytable FROM mydb",
|
||||
"SHOW COLUMNS FROM mydb.mytable",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue