@@ -73,9 +73,8 @@ pub use self::value::{
7373 TrimWhereField , Value ,
7474} ;
7575
76- use crate :: {
77- ast:: helpers:: stmt_data_loading:: { DataLoadingOptions , StageLoadSelectItem , StageParamsObject } ,
78- keywords:: Keyword ,
76+ use crate :: ast:: helpers:: stmt_data_loading:: {
77+ DataLoadingOptions , StageLoadSelectItem , StageParamsObject ,
7978} ;
8079#[ cfg( feature = "visitor" ) ]
8180pub use visitor:: * ;
@@ -2785,28 +2784,27 @@ pub enum Statement {
27852784 /// ```sql
27862785 /// SHOW DATABASES [LIKE 'pattern']
27872786 /// ```
2788- ShowDatabases { pattern : Option < String > } ,
2787+ ShowDatabases { filter : Option < ShowStatementFilter > } ,
27892788 /// ```sql
27902789 /// SHOW SCHEMAS [LIKE 'pattern']
27912790 /// ```
2792- ShowSchemas { pattern : Option < String > } ,
2791+ ShowSchemas { filter : Option < ShowStatementFilter > } ,
27932792 /// ```sql
27942793 /// SHOW TABLES
27952794 /// ```
27962795 ShowTables {
27972796 extended : bool ,
27982797 full : bool ,
2799- // The keyword used to indicate the DB name (IN/FROM)
2800- db_name_keyword : Option < Keyword > ,
2798+ clause : Option < ShowClause > ,
28012799 db_name : Option < Ident > ,
28022800 filter : Option < ShowStatementFilter > ,
28032801 } ,
28042802 /// ```sql
28052803 /// SHOW VIEWS
28062804 /// ```
28072805 ShowViews {
2808- // The keyword used to indicate the DB name (IN/FROM)
2809- db_name_keyword : Option < Keyword > ,
2806+ materialized : bool ,
2807+ clause : Option < ShowClause > ,
28102808 db_name : Option < Ident > ,
28112809 filter : Option < ShowStatementFilter > ,
28122810 } ,
@@ -4382,24 +4380,24 @@ impl fmt::Display for Statement {
43824380 }
43834381 Ok ( ( ) )
43844382 }
4385- Statement :: ShowDatabases { pattern } => {
4383+ Statement :: ShowDatabases { filter } => {
43864384 write ! ( f, "SHOW DATABASES" ) ?;
4387- if let Some ( pattern ) = pattern {
4388- write ! ( f, " LIKE '{}'" , pattern ) ?;
4385+ if let Some ( filter ) = filter {
4386+ write ! ( f, " {filter}" ) ?;
43894387 }
43904388 Ok ( ( ) )
43914389 }
4392- Statement :: ShowSchemas { pattern } => {
4390+ Statement :: ShowSchemas { filter } => {
43934391 write ! ( f, "SHOW SCHEMAS" ) ?;
4394- if let Some ( pattern ) = pattern {
4395- write ! ( f, " LIKE '{}'" , pattern ) ?;
4392+ if let Some ( filter ) = filter {
4393+ write ! ( f, " {filter}" ) ?;
43964394 }
43974395 Ok ( ( ) )
43984396 }
43994397 Statement :: ShowTables {
44004398 extended,
44014399 full,
4402- db_name_keyword ,
4400+ clause : show_clause ,
44034401 db_name,
44044402 filter,
44054403 } => {
@@ -4409,32 +4407,29 @@ impl fmt::Display for Statement {
44094407 extended = if * extended { "EXTENDED " } else { "" } ,
44104408 full = if * full { "FULL " } else { "" } ,
44114409 ) ?;
4410+ if let Some ( show_clause) = show_clause {
4411+ write ! ( f, " {show_clause}" ) ?;
4412+ }
44124413 if let Some ( db_name) = db_name {
4413- let keyword = match & db_name_keyword {
4414- Some ( Keyword :: FROM ) => "FROM" ,
4415- Some ( Keyword :: IN ) => "IN" ,
4416- _ => unreachable ! ( ) ,
4417- } ;
4418- write ! ( f, " {} {db_name}" , keyword) ?;
4414+ write ! ( f, " {db_name}" ) ?;
44194415 }
44204416 if let Some ( filter) = filter {
44214417 write ! ( f, " {filter}" ) ?;
44224418 }
44234419 Ok ( ( ) )
44244420 }
44254421 Statement :: ShowViews {
4426- db_name_keyword,
4422+ materialized,
4423+ clause : show_clause,
44274424 db_name,
44284425 filter,
44294426 } => {
4430- write ! ( f, "SHOW VIEWS" ) ?;
4427+ write ! ( f, "SHOW {}VIEWS" , if * materialized { "MATERIALIZED " } else { "" } ) ?;
4428+ if let Some ( show_clause) = show_clause {
4429+ write ! ( f, " {show_clause}" ) ?;
4430+ }
44314431 if let Some ( db_name) = db_name {
4432- let keyword = match & db_name_keyword {
4433- Some ( Keyword :: FROM ) => "FROM" ,
4434- Some ( Keyword :: IN ) => "IN" ,
4435- _ => unreachable ! ( ) ,
4436- } ;
4437- write ! ( f, " {} {db_name}" , keyword) ?;
4432+ write ! ( f, " {db_name}" ) ?;
44384433 }
44394434 if let Some ( filter) = filter {
44404435 write ! ( f, " {filter}" ) ?;
@@ -6130,6 +6125,24 @@ impl fmt::Display for ShowStatementFilter {
61306125 }
61316126}
61326127
6128+ #[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
6129+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
6130+ #[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
6131+ pub enum ShowClause {
6132+ IN ,
6133+ FROM ,
6134+ }
6135+
6136+ impl fmt:: Display for ShowClause {
6137+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
6138+ use ShowClause :: * ;
6139+ match self {
6140+ FROM => write ! ( f, "FROM" ) ,
6141+ IN => write ! ( f, "IN" ) ,
6142+ }
6143+ }
6144+ }
6145+
61336146/// Sqlite specific syntax
61346147///
61356148/// See [Sqlite documentation](https://sqlite.org/lang_conflict.html)
0 commit comments