File tree 3 files changed +66
-0
lines changed
3 files changed +66
-0
lines changed Original file line number Diff line number Diff line change @@ -1955,6 +1955,16 @@ pub enum Statement {
1955
1955
/// Note: this is a PostgreSQL-specific statement.
1956
1956
ShowVariable { variable : Vec < Ident > } ,
1957
1957
/// ```sql
1958
+ /// SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern' | WHERE expr]
1959
+ /// ```
1960
+ ///
1961
+ /// Note: this is a MySQL-specific statement.
1962
+ ShowStatus {
1963
+ filter : Option < ShowStatementFilter > ,
1964
+ global : bool ,
1965
+ session : bool ,
1966
+ } ,
1967
+ /// ```sql
1958
1968
/// SHOW VARIABLES
1959
1969
/// ```
1960
1970
///
@@ -3387,6 +3397,24 @@ impl fmt::Display for Statement {
3387
3397
}
3388
3398
Ok ( ( ) )
3389
3399
}
3400
+ Statement :: ShowStatus {
3401
+ filter,
3402
+ global,
3403
+ session,
3404
+ } => {
3405
+ write ! ( f, "SHOW" ) ?;
3406
+ if * global {
3407
+ write ! ( f, " GLOBAL" ) ?;
3408
+ }
3409
+ if * session {
3410
+ write ! ( f, " SESSION" ) ?;
3411
+ }
3412
+ write ! ( f, " STATUS" ) ?;
3413
+ if filter. is_some ( ) {
3414
+ write ! ( f, " {}" , filter. as_ref( ) . unwrap( ) ) ?;
3415
+ }
3416
+ Ok ( ( ) )
3417
+ }
3390
3418
Statement :: ShowVariables {
3391
3419
filter,
3392
3420
global,
Original file line number Diff line number Diff line change @@ -7097,6 +7097,14 @@ impl<'a> Parser<'a> {
7097
7097
session,
7098
7098
global,
7099
7099
} )
7100
+ } else if self . parse_keyword ( Keyword :: STATUS )
7101
+ && dialect_of ! ( self is MySqlDialect | GenericDialect )
7102
+ {
7103
+ Ok ( Statement :: ShowStatus {
7104
+ filter : self . parse_show_statement_filter ( ) ?,
7105
+ session,
7106
+ global,
7107
+ } )
7100
7108
} else {
7101
7109
Ok ( Statement :: ShowVariable {
7102
7110
variable : self . parse_identifiers ( ) ?,
Original file line number Diff line number Diff line change @@ -288,6 +288,36 @@ fn parse_show_columns() {
288
288
) ;
289
289
}
290
290
291
+ #[ test]
292
+ fn parse_show_status ( ) {
293
+ assert_eq ! (
294
+ mysql_and_generic( ) . verified_stmt( "SHOW SESSION STATUS LIKE 'ssl_cipher'" ) ,
295
+ Statement :: ShowStatus {
296
+ filter: Some ( ShowStatementFilter :: Like ( "ssl_cipher" . into( ) ) ) ,
297
+ session: true ,
298
+ global: false
299
+ }
300
+ ) ;
301
+ assert_eq ! (
302
+ mysql_and_generic( ) . verified_stmt( "SHOW GLOBAL STATUS LIKE 'ssl_cipher'" ) ,
303
+ Statement :: ShowStatus {
304
+ filter: Some ( ShowStatementFilter :: Like ( "ssl_cipher" . into( ) ) ) ,
305
+ session: false ,
306
+ global: true
307
+ }
308
+ ) ;
309
+ assert_eq ! (
310
+ mysql_and_generic( ) . verified_stmt( "SHOW STATUS WHERE value = 2" ) ,
311
+ Statement :: ShowStatus {
312
+ filter: Some ( ShowStatementFilter :: Where (
313
+ mysql_and_generic( ) . verified_expr( "value = 2" )
314
+ ) ) ,
315
+ session: false ,
316
+ global: false
317
+ }
318
+ ) ;
319
+ }
320
+
291
321
#[ test]
292
322
fn parse_show_tables ( ) {
293
323
assert_eq ! (
You can’t perform that action at this time.
0 commit comments