@@ -2007,6 +2007,58 @@ fn parse_show_objects_with_like_regex() {
20072007 }
20082008}
20092009
2010+ #[ test]
2011+ fn parse_show_indexes ( ) {
2012+ let canonical_sql = "SHOW INDEXES FROM foo" ;
2013+ assert_eq ! (
2014+ verified_stmt( & canonical_sql) ,
2015+ Statement :: ShowIndexes {
2016+ table_name: ObjectName ( vec![ "foo" . into( ) ] ) ,
2017+ filter: None ,
2018+ }
2019+ ) ;
2020+ one_statement_parses_to ( "SHOW INDEXES IN foo" , & canonical_sql) ;
2021+ let index_alias = [ "INDEX" , "KEYS" ] ;
2022+ let from_alias = [ "FROM" , "IN" ] ;
2023+ for i in & index_alias {
2024+ for f in & from_alias {
2025+ let sql = format ! ( "SHOW {} {} foo" , i, f) ;
2026+ one_statement_parses_to ( & sql, & canonical_sql) ;
2027+ }
2028+ }
2029+ }
2030+
2031+ #[ test]
2032+ fn parse_show_indexes_with_where_expr ( ) {
2033+ let canonical_sql = "SHOW INDEXES FROM foo WHERE index_name = 'bar'" ;
2034+ match verified_stmt ( canonical_sql) {
2035+ Statement :: ShowIndexes { table_name, filter } => {
2036+ assert_eq ! (
2037+ filter. unwrap( ) ,
2038+ ShowStatementFilter :: Where ( Expr :: BinaryOp {
2039+ left: Box :: new( Expr :: Identifier ( Ident :: new( "index_name" ) ) ) ,
2040+ op: BinaryOperator :: Eq ,
2041+ right: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "bar" . to_string( ) ) ) ) ,
2042+ } )
2043+ ) ;
2044+ assert_eq ! ( table_name, ObjectName ( vec![ "foo" . into( ) ] ) ) ;
2045+ }
2046+ _ => panic ! ( "invalid SHOW INDEXES statement" ) ,
2047+ }
2048+ one_statement_parses_to (
2049+ "SHOW INDEXES IN foo WHERE index_name = 'bar'" ,
2050+ & canonical_sql,
2051+ ) ;
2052+ let index_alias = [ "INDEX" , "KEYS" ] ;
2053+ let from_alias = [ "FROM" , "IN" ] ;
2054+ for i in & index_alias {
2055+ for f in & from_alias {
2056+ let sql = format ! ( "SHOW {} {} foo WHERE index_name = 'bar'" , i, f) ;
2057+ one_statement_parses_to ( & sql, & canonical_sql) ;
2058+ }
2059+ }
2060+ }
2061+
20102062#[ test]
20112063fn parse_show_create_view ( ) {
20122064 assert_eq ! (
0 commit comments