mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-18 21:20:15 +00:00
Support SHOW TABLES
(#563)
This commit is contained in:
parent
221e9c2bab
commit
b6e36ad760
3 changed files with 137 additions and 12 deletions
|
@ -3727,17 +3727,19 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
|
||||
pub fn parse_show(&mut self) -> Result<Statement, ParserError> {
|
||||
let extended = self.parse_keyword(Keyword::EXTENDED);
|
||||
let full = self.parse_keyword(Keyword::FULL);
|
||||
if self
|
||||
.parse_one_of_keywords(&[
|
||||
Keyword::EXTENDED,
|
||||
Keyword::FULL,
|
||||
Keyword::COLUMNS,
|
||||
Keyword::FIELDS,
|
||||
])
|
||||
.parse_one_of_keywords(&[Keyword::COLUMNS, Keyword::FIELDS])
|
||||
.is_some()
|
||||
{
|
||||
self.prev_token();
|
||||
Ok(self.parse_show_columns()?)
|
||||
Ok(self.parse_show_columns(extended, full)?)
|
||||
} else if self.parse_keyword(Keyword::TABLES) {
|
||||
Ok(self.parse_show_tables(extended, full)?)
|
||||
} else if extended || full {
|
||||
Err(ParserError::ParserError(
|
||||
"EXTENDED/FULL are not supported with this type of SHOW query".to_string(),
|
||||
))
|
||||
} else if self.parse_one_of_keywords(&[Keyword::CREATE]).is_some() {
|
||||
Ok(self.parse_show_create()?)
|
||||
} else if self.parse_keyword(Keyword::VARIABLES)
|
||||
|
@ -3780,10 +3782,11 @@ impl<'a> Parser<'a> {
|
|||
Ok(Statement::ShowCreate { obj_type, obj_name })
|
||||
}
|
||||
|
||||
pub fn parse_show_columns(&mut self) -> Result<Statement, ParserError> {
|
||||
let extended = self.parse_keyword(Keyword::EXTENDED);
|
||||
let full = self.parse_keyword(Keyword::FULL);
|
||||
self.expect_one_of_keywords(&[Keyword::COLUMNS, Keyword::FIELDS])?;
|
||||
pub fn parse_show_columns(
|
||||
&mut self,
|
||||
extended: bool,
|
||||
full: bool,
|
||||
) -> Result<Statement, ParserError> {
|
||||
self.expect_one_of_keywords(&[Keyword::FROM, Keyword::IN])?;
|
||||
let object_name = self.parse_object_name()?;
|
||||
let table_name = match self.parse_one_of_keywords(&[Keyword::FROM, Keyword::IN]) {
|
||||
|
@ -3804,6 +3807,24 @@ impl<'a> Parser<'a> {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn parse_show_tables(
|
||||
&mut self,
|
||||
extended: bool,
|
||||
full: bool,
|
||||
) -> Result<Statement, ParserError> {
|
||||
let db_name = match self.parse_one_of_keywords(&[Keyword::FROM, Keyword::IN]) {
|
||||
Some(_) => Some(self.parse_identifier()?),
|
||||
None => None,
|
||||
};
|
||||
let filter = self.parse_show_statement_filter()?;
|
||||
Ok(Statement::ShowTables {
|
||||
extended,
|
||||
full,
|
||||
db_name,
|
||||
filter,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn parse_show_statement_filter(
|
||||
&mut self,
|
||||
) -> Result<Option<ShowStatementFilter>, ParserError> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue