Skip to content

Commit 495ab59

Browse files
authored
Support SHOW FUNCTIONS (#620)
* support SHOW FUNCTIONS * Update keywords.rs * Update mod.rs * Update sqlparser_common.rs * Fix CI issues
1 parent fccae77 commit 495ab59

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

src/ast/mod.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,6 +1144,10 @@ pub enum Statement {
11441144
///
11451145
/// Note: this is a MySQL-specific statement.
11461146
SetNamesDefault {},
1147+
/// SHOW FUNCTIONS
1148+
///
1149+
/// Note: this is a Presto-specific statement.
1150+
ShowFunctions { filter: Option<ShowStatementFilter> },
11471151
/// SHOW <variable>
11481152
///
11491153
/// Note: this is a PostgreSQL-specific statement.
@@ -2033,6 +2037,13 @@ impl fmt::Display for Statement {
20332037
}
20342038
Ok(())
20352039
}
2040+
Statement::ShowFunctions { filter } => {
2041+
write!(f, "SHOW FUNCTIONS")?;
2042+
if let Some(filter) = filter {
2043+
write!(f, " {}", filter)?;
2044+
}
2045+
Ok(())
2046+
}
20362047
Statement::Use { db_name } => {
20372048
write!(f, "USE {}", db_name)?;
20382049
Ok(())

src/keywords.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ define_keywords!(
250250
FROM,
251251
FULL,
252252
FUNCTION,
253+
FUNCTIONS,
253254
FUSION,
254255
GET,
255256
GLOBAL,

src/parser.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3854,6 +3854,8 @@ impl<'a> Parser<'a> {
38543854
Ok(self.parse_show_columns(extended, full)?)
38553855
} else if self.parse_keyword(Keyword::TABLES) {
38563856
Ok(self.parse_show_tables(extended, full)?)
3857+
} else if self.parse_keyword(Keyword::FUNCTIONS) {
3858+
Ok(self.parse_show_functions()?)
38573859
} else if extended || full {
38583860
Err(ParserError::ParserError(
38593861
"EXTENDED/FULL are not supported with this type of SHOW query".to_string(),
@@ -3945,6 +3947,11 @@ impl<'a> Parser<'a> {
39453947
})
39463948
}
39473949

3950+
pub fn parse_show_functions(&mut self) -> Result<Statement, ParserError> {
3951+
let filter = self.parse_show_statement_filter()?;
3952+
Ok(Statement::ShowFunctions { filter })
3953+
}
3954+
39483955
pub fn parse_show_collation(&mut self) -> Result<Statement, ParserError> {
39493956
let filter = self.parse_show_statement_filter()?;
39503957
Ok(Statement::ShowCollation { filter })

tests/sqlparser_common.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5569,3 +5569,13 @@ fn parse_cursor() {
55695569
_ => unreachable!(),
55705570
}
55715571
}
5572+
5573+
#[test]
5574+
fn parse_show_functions() {
5575+
assert_eq!(
5576+
verified_stmt("SHOW FUNCTIONS LIKE 'pattern'"),
5577+
Statement::ShowFunctions {
5578+
filter: Some(ShowStatementFilter::Like("pattern".into())),
5579+
}
5580+
);
5581+
}

0 commit comments

Comments
 (0)