@@ -2782,12 +2782,29 @@ pub enum Statement {
27822782 filter : Option < ShowStatementFilter > ,
27832783 } ,
27842784 /// ```sql
2785+ /// SHOW DATABASES [LIKE 'pattern']
2786+ /// ```
2787+ ShowDatabases { filter : Option < ShowStatementFilter > } ,
2788+ /// ```sql
2789+ /// SHOW SCHEMAS [LIKE 'pattern']
2790+ /// ```
2791+ ShowSchemas { filter : Option < ShowStatementFilter > } ,
2792+ /// ```sql
27852793 /// SHOW TABLES
27862794 /// ```
2787- /// Note: this is a MySQL-specific statement.
27882795 ShowTables {
27892796 extended : bool ,
27902797 full : bool ,
2798+ clause : Option < ShowClause > ,
2799+ db_name : Option < Ident > ,
2800+ filter : Option < ShowStatementFilter > ,
2801+ } ,
2802+ /// ```sql
2803+ /// SHOW VIEWS
2804+ /// ```
2805+ ShowViews {
2806+ materialized : bool ,
2807+ clause : Option < ShowClause > ,
27912808 db_name : Option < Ident > ,
27922809 filter : Option < ShowStatementFilter > ,
27932810 } ,
@@ -4363,9 +4380,24 @@ impl fmt::Display for Statement {
43634380 }
43644381 Ok ( ( ) )
43654382 }
4383+ Statement :: ShowDatabases { filter } => {
4384+ write ! ( f, "SHOW DATABASES" ) ?;
4385+ if let Some ( filter) = filter {
4386+ write ! ( f, " {filter}" ) ?;
4387+ }
4388+ Ok ( ( ) )
4389+ }
4390+ Statement :: ShowSchemas { filter } => {
4391+ write ! ( f, "SHOW SCHEMAS" ) ?;
4392+ if let Some ( filter) = filter {
4393+ write ! ( f, " {filter}" ) ?;
4394+ }
4395+ Ok ( ( ) )
4396+ }
43664397 Statement :: ShowTables {
43674398 extended,
43684399 full,
4400+ clause : show_clause,
43694401 db_name,
43704402 filter,
43714403 } => {
@@ -4375,8 +4407,33 @@ impl fmt::Display for Statement {
43754407 extended = if * extended { "EXTENDED " } else { "" } ,
43764408 full = if * full { "FULL " } else { "" } ,
43774409 ) ?;
4410+ if let Some ( show_clause) = show_clause {
4411+ write ! ( f, " {show_clause}" ) ?;
4412+ }
4413+ if let Some ( db_name) = db_name {
4414+ write ! ( f, " {db_name}" ) ?;
4415+ }
4416+ if let Some ( filter) = filter {
4417+ write ! ( f, " {filter}" ) ?;
4418+ }
4419+ Ok ( ( ) )
4420+ }
4421+ Statement :: ShowViews {
4422+ materialized,
4423+ clause : show_clause,
4424+ db_name,
4425+ filter,
4426+ } => {
4427+ write ! (
4428+ f,
4429+ "SHOW {}VIEWS" ,
4430+ if * materialized { "MATERIALIZED " } else { "" }
4431+ ) ?;
4432+ if let Some ( show_clause) = show_clause {
4433+ write ! ( f, " {show_clause}" ) ?;
4434+ }
43784435 if let Some ( db_name) = db_name {
4379- write ! ( f, " FROM {db_name}" ) ?;
4436+ write ! ( f, " {db_name}" ) ?;
43804437 }
43814438 if let Some ( filter) = filter {
43824439 write ! ( f, " {filter}" ) ?;
@@ -6057,6 +6114,7 @@ pub enum ShowStatementFilter {
60576114 Like ( String ) ,
60586115 ILike ( String ) ,
60596116 Where ( Expr ) ,
6117+ NoKeyword ( String ) ,
60606118}
60616119
60626120impl fmt:: Display for ShowStatementFilter {
@@ -6066,6 +6124,25 @@ impl fmt::Display for ShowStatementFilter {
60666124 Like ( pattern) => write ! ( f, "LIKE '{}'" , value:: escape_single_quote_string( pattern) ) ,
60676125 ILike ( pattern) => write ! ( f, "ILIKE {}" , value:: escape_single_quote_string( pattern) ) ,
60686126 Where ( expr) => write ! ( f, "WHERE {expr}" ) ,
6127+ NoKeyword ( pattern) => write ! ( f, "'{}'" , value:: escape_single_quote_string( pattern) ) ,
6128+ }
6129+ }
6130+ }
6131+
6132+ #[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
6133+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
6134+ #[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
6135+ pub enum ShowClause {
6136+ IN ,
6137+ FROM ,
6138+ }
6139+
6140+ impl fmt:: Display for ShowClause {
6141+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
6142+ use ShowClause :: * ;
6143+ match self {
6144+ FROM => write ! ( f, "FROM" ) ,
6145+ IN => write ! ( f, "IN" ) ,
60696146 }
60706147 }
60716148}
0 commit comments