mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-22 15:04:04 +00:00
feat: Support DESCRIBE table_name (#340)
* feat: Support DESCRIBE * feat: Support DESCRIBE table_name * Update src/ast/mod.rs Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org> * Update src/ast/mod.rs Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org> * Update src/ast/mod.rs Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org> Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
This commit is contained in:
parent
d8adb1708c
commit
d2d4fc0c58
3 changed files with 67 additions and 10 deletions
|
@ -141,7 +141,8 @@ impl<'a> Parser<'a> {
|
|||
pub fn parse_statement(&mut self) -> Result<Statement, ParserError> {
|
||||
match self.next_token() {
|
||||
Token::Word(w) => match w.keyword {
|
||||
Keyword::EXPLAIN => Ok(self.parse_explain()?),
|
||||
Keyword::DESCRIBE => Ok(self.parse_explain(true)?),
|
||||
Keyword::EXPLAIN => Ok(self.parse_explain(false)?),
|
||||
Keyword::ANALYZE => Ok(self.parse_analyze()?),
|
||||
Keyword::SELECT | Keyword::WITH | Keyword::VALUES => {
|
||||
self.prev_token();
|
||||
|
@ -2218,17 +2219,25 @@ impl<'a> Parser<'a> {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn parse_explain(&mut self) -> Result<Statement, ParserError> {
|
||||
pub fn parse_explain(&mut self, describe_alias: bool) -> Result<Statement, ParserError> {
|
||||
let analyze = self.parse_keyword(Keyword::ANALYZE);
|
||||
let verbose = self.parse_keyword(Keyword::VERBOSE);
|
||||
|
||||
let statement = Box::new(self.parse_statement()?);
|
||||
if let Some(statement) = self.maybe_parse(|parser| parser.parse_statement()) {
|
||||
Ok(Statement::Explain {
|
||||
describe_alias,
|
||||
analyze,
|
||||
verbose,
|
||||
statement: Box::new(statement),
|
||||
})
|
||||
} else {
|
||||
let table_name = self.parse_object_name()?;
|
||||
|
||||
Ok(Statement::Explain {
|
||||
analyze,
|
||||
verbose,
|
||||
statement,
|
||||
})
|
||||
Ok(Statement::ExplainTable {
|
||||
describe_alias,
|
||||
table_name,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// Parse a query expression, i.e. a `SELECT` statement optionally
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue