@@ -1240,8 +1240,8 @@ impl Spanned for Insert {
12401240 } = self ;
12411241
12421242 union_spans (
1243- core:: iter:: once ( table . span ( ) )
1244- . chain ( core:: iter:: once ( insert_token . 0 . span ) )
1243+ core:: iter:: once ( insert_token . 0 . span )
1244+ . chain ( core:: iter:: once ( table . span ( ) ) )
12451245 . chain ( table_alias. as_ref ( ) . map ( |i| i. span ) )
12461246 . chain ( columns. iter ( ) . map ( |i| i. span ) )
12471247 . chain ( source. as_ref ( ) . map ( |q| q. span ( ) ) )
@@ -2560,4 +2560,55 @@ ALTER TABLE users
25602560 assert_eq ! ( stmt_span. start, ( 2 , 7 ) . into( ) ) ;
25612561 assert_eq ! ( stmt_span. end, ( 5 , 17 ) . into( ) ) ;
25622562 }
2563+
2564+ #[ test]
2565+ fn test_insert_statement_span ( ) {
2566+ let sql = r#"
2567+ /* foo */ INSERT INTO FOO (X, Y, Z) VALUES (1, 2, 3 )
2568+ ;"# ;
2569+
2570+ let r = Parser :: parse_sql ( & crate :: dialect:: GenericDialect , sql) . unwrap ( ) ;
2571+ assert_eq ! ( 1 , r. len( ) ) ;
2572+
2573+ let stmt_span = r[ 0 ] . span ( ) ;
2574+
2575+ assert_eq ! ( stmt_span. start, ( 2 , 11 ) . into( ) ) ;
2576+ // XXX to be enabled once #2050 is fixed
2577+ // assert_eq!(stmt_span.end, (2, 60).into());
2578+ }
2579+
2580+ #[ test]
2581+ fn test_replace_statement_span ( ) {
2582+ let sql = r#"
2583+ /* foo */ REPLACE INTO public.customer (id, name, active) VALUES (1, 2, 3)
2584+ ;"# ;
2585+
2586+ let r = Parser :: parse_sql ( & crate :: dialect:: GenericDialect , sql) . unwrap ( ) ;
2587+ assert_eq ! ( 1 , r. len( ) ) ;
2588+
2589+ dbg ! ( & r[ 0 ] ) ;
2590+
2591+ let stmt_span = r[ 0 ] . span ( ) ;
2592+
2593+ assert_eq ! ( stmt_span. start, ( 2 , 11 ) . into( ) ) ;
2594+ // XXX to be enabled once #2050 is fixed
2595+ // assert_eq!(stmt_span.end, (2, 75).into());
2596+ }
2597+
2598+ #[ test]
2599+ fn test_delete_statement_span ( ) {
2600+ let sql = r#"-- foo
2601+ DELETE /* quux */
2602+ FROM foo
2603+ WHERE foo.x = 42
2604+ ;"# ;
2605+
2606+ let r = Parser :: parse_sql ( & crate :: dialect:: GenericDialect , sql) . unwrap ( ) ;
2607+ assert_eq ! ( 1 , r. len( ) ) ;
2608+
2609+ let stmt_span = r[ 0 ] . span ( ) ;
2610+
2611+ assert_eq ! ( stmt_span. start, ( 2 , 7 ) . into( ) ) ;
2612+ assert_eq ! ( stmt_span. end, ( 4 , 24 ) . into( ) ) ;
2613+ }
25632614}
0 commit comments