@@ -11460,3 +11460,79 @@ fn test_try_convert() {
1146011460 all_dialects_where ( |d| d. supports_try_convert ( ) && !d. convert_type_before_value ( ) ) ;
1146111461 dialects. verified_expr ( "TRY_CONVERT('foo', VARCHAR(MAX))" ) ;
1146211462}
11463+
11464+ #[ test]
11465+ fn parse_listen_channel ( ) {
11466+ let dialects = all_dialects_where ( |d| d. supports_listen_clause ( ) ) ;
11467+
11468+ match dialects. verified_stmt ( "LISTEN test1" ) {
11469+ Statement :: LISTEN { channel } => {
11470+ assert_eq ! ( Ident :: new( "test1" ) , channel) ;
11471+ }
11472+ _ => unreachable ! ( ) ,
11473+ } ;
11474+
11475+ assert_eq ! (
11476+ dialects. parse_sql_statements( "LISTEN *" ) . unwrap_err( ) ,
11477+ ParserError :: ParserError ( "Expected: identifier, found: *" . to_string( ) )
11478+ ) ;
11479+
11480+ let dialects = all_dialects_where ( |d| !d. supports_listen_clause ( ) ) ;
11481+
11482+ assert_eq ! (
11483+ dialects. parse_sql_statements( "LISTEN test1" ) . unwrap_err( ) ,
11484+ ParserError :: ParserError ( "Expected: an SQL statement, found: LISTEN" . to_string( ) )
11485+ ) ;
11486+ }
11487+
11488+ #[ test]
11489+ fn parse_notify_channel ( ) {
11490+ let dialects = all_dialects_where ( |d| d. supports_notify_clause ( ) ) ;
11491+
11492+ match dialects. verified_stmt ( "NOTIFY test1" ) {
11493+ Statement :: NOTIFY { channel, payload } => {
11494+ assert_eq ! ( Ident :: new( "test1" ) , channel) ;
11495+ assert_eq ! ( payload, None ) ;
11496+ }
11497+ _ => unreachable ! ( ) ,
11498+ } ;
11499+
11500+ match dialects. verified_stmt ( "NOTIFY test1, 'this is a test notification'" ) {
11501+ Statement :: NOTIFY {
11502+ channel,
11503+ payload : Some ( payload) ,
11504+ } => {
11505+ assert_eq ! ( Ident :: new( "test1" ) , channel) ;
11506+ assert_eq ! ( "this is a test notification" , payload) ;
11507+ }
11508+ _ => unreachable ! ( ) ,
11509+ } ;
11510+
11511+ assert_eq ! (
11512+ dialects. parse_sql_statements( "NOTIFY *" ) . unwrap_err( ) ,
11513+ ParserError :: ParserError ( "Expected: identifier, found: *" . to_string( ) )
11514+ ) ;
11515+ assert_eq ! (
11516+ dialects
11517+ . parse_sql_statements( "NOTIFY test1, *" )
11518+ . unwrap_err( ) ,
11519+ ParserError :: ParserError ( "Expected: literal string, found: *" . to_string( ) )
11520+ ) ;
11521+
11522+ let sql_statements = [
11523+ "NOTIFY test1" ,
11524+ "NOTIFY test1, 'this is a test notification'" ,
11525+ ] ;
11526+ let dialects = all_dialects_where ( |d| !d. supports_notify_clause ( ) ) ;
11527+
11528+ for & sql in & sql_statements {
11529+ assert_eq ! (
11530+ dialects. parse_sql_statements( sql) . unwrap_err( ) ,
11531+ ParserError :: ParserError ( "Expected: an SQL statement, found: NOTIFY" . to_string( ) )
11532+ ) ;
11533+ assert_eq ! (
11534+ dialects. parse_sql_statements( sql) . unwrap_err( ) ,
11535+ ParserError :: ParserError ( "Expected: an SQL statement, found: NOTIFY" . to_string( ) )
11536+ ) ;
11537+ }
11538+ }
0 commit comments