@@ -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 } ,
@@ -4380,9 +4397,24 @@ impl fmt::Display for Statement {
43804397 }
43814398 Ok ( ( ) )
43824399 }
4400+ Statement :: ShowDatabases { filter } => {
4401+ write ! ( f, "SHOW DATABASES" ) ?;
4402+ if let Some ( filter) = filter {
4403+ write ! ( f, " {filter}" ) ?;
4404+ }
4405+ Ok ( ( ) )
4406+ }
4407+ Statement :: ShowSchemas { filter } => {
4408+ write ! ( f, "SHOW SCHEMAS" ) ?;
4409+ if let Some ( filter) = filter {
4410+ write ! ( f, " {filter}" ) ?;
4411+ }
4412+ Ok ( ( ) )
4413+ }
43834414 Statement :: ShowTables {
43844415 extended,
43854416 full,
4417+ clause : show_clause,
43864418 db_name,
43874419 filter,
43884420 } => {
@@ -4392,8 +4424,33 @@ impl fmt::Display for Statement {
43924424 extended = if * extended { "EXTENDED " } else { "" } ,
43934425 full = if * full { "FULL " } else { "" } ,
43944426 ) ?;
4427+ if let Some ( show_clause) = show_clause {
4428+ write ! ( f, " {show_clause}" ) ?;
4429+ }
4430+ if let Some ( db_name) = db_name {
4431+ write ! ( f, " {db_name}" ) ?;
4432+ }
4433+ if let Some ( filter) = filter {
4434+ write ! ( f, " {filter}" ) ?;
4435+ }
4436+ Ok ( ( ) )
4437+ }
4438+ Statement :: ShowViews {
4439+ materialized,
4440+ clause : show_clause,
4441+ db_name,
4442+ filter,
4443+ } => {
4444+ write ! (
4445+ f,
4446+ "SHOW {}VIEWS" ,
4447+ if * materialized { "MATERIALIZED " } else { "" }
4448+ ) ?;
4449+ if let Some ( show_clause) = show_clause {
4450+ write ! ( f, " {show_clause}" ) ?;
4451+ }
43954452 if let Some ( db_name) = db_name {
4396- write ! ( f, " FROM {db_name}" ) ?;
4453+ write ! ( f, " {db_name}" ) ?;
43974454 }
43984455 if let Some ( filter) = filter {
43994456 write ! ( f, " {filter}" ) ?;
@@ -6085,6 +6142,7 @@ pub enum ShowStatementFilter {
60856142 Like ( String ) ,
60866143 ILike ( String ) ,
60876144 Where ( Expr ) ,
6145+ NoKeyword ( String ) ,
60886146}
60896147
60906148impl fmt:: Display for ShowStatementFilter {
@@ -6094,6 +6152,25 @@ impl fmt::Display for ShowStatementFilter {
60946152 Like ( pattern) => write ! ( f, "LIKE '{}'" , value:: escape_single_quote_string( pattern) ) ,
60956153 ILike ( pattern) => write ! ( f, "ILIKE {}" , value:: escape_single_quote_string( pattern) ) ,
60966154 Where ( expr) => write ! ( f, "WHERE {expr}" ) ,
6155+ NoKeyword ( pattern) => write ! ( f, "'{}'" , value:: escape_single_quote_string( pattern) ) ,
6156+ }
6157+ }
6158+ }
6159+
6160+ #[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
6161+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
6162+ #[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
6163+ pub enum ShowClause {
6164+ IN ,
6165+ FROM ,
6166+ }
6167+
6168+ impl fmt:: Display for ShowClause {
6169+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
6170+ use ShowClause :: * ;
6171+ match self {
6172+ FROM => write ! ( f, "FROM" ) ,
6173+ IN => write ! ( f, "IN" ) ,
60976174 }
60986175 }
60996176}
0 commit comments