@@ -1245,8 +1245,8 @@ impl Spanned for Insert {
12451245 } = self ;
12461246
12471247 union_spans (
1248- core:: iter:: once ( table . span ( ) )
1249- . chain ( core:: iter:: once ( insert_token . 0 . span ) )
1248+ core:: iter:: once ( insert_token . 0 . span )
1249+ . chain ( core:: iter:: once ( table . span ( ) ) )
12501250 . chain ( table_alias. as_ref ( ) . map ( |i| i. span ) )
12511251 . chain ( columns. iter ( ) . map ( |i| i. span ) )
12521252 . chain ( source. as_ref ( ) . map ( |q| q. span ( ) ) )
@@ -2565,4 +2565,62 @@ ALTER TABLE users
25652565 assert_eq ! ( stmt_span. start, ( 2 , 7 ) . into( ) ) ;
25662566 assert_eq ! ( stmt_span. end, ( 5 , 17 ) . into( ) ) ;
25672567 }
2568+
2569+ #[ test]
2570+ fn test_insert_statement_span ( ) {
2571+ let sql = r#"
2572+ /* foo */ INSERT INTO FOO (X, Y, Z)
2573+ SELECT x + 1, y + 2, z + 3
2574+ FROM DUAL
2575+ ;"# ;
2576+
2577+ let r = Parser :: parse_sql ( & crate :: dialect:: GenericDialect , sql) . unwrap ( ) ;
2578+ assert_eq ! ( 1 , r. len( ) ) ;
2579+
2580+ let stmt_span = r[ 0 ] . span ( ) ;
2581+
2582+ assert_eq ! ( stmt_span. start, ( 2 , 11 ) . into( ) ) ;
2583+ assert_eq ! ( stmt_span. end, ( 4 , 12 ) . into( ) ) ;
2584+ }
2585+
2586+ #[ test]
2587+ fn test_replace_statement_span ( ) {
2588+ let sql = r#"
2589+ /* foo */ REPLACE INTO
2590+ cities(name,population)
2591+ SELECT
2592+ name,
2593+ population
2594+ FROM
2595+ cities
2596+ WHERE id = 1
2597+ ;"# ;
2598+
2599+ let r = Parser :: parse_sql ( & crate :: dialect:: GenericDialect , sql) . unwrap ( ) ;
2600+ assert_eq ! ( 1 , r. len( ) ) ;
2601+
2602+ dbg ! ( & r[ 0 ] ) ;
2603+
2604+ let stmt_span = r[ 0 ] . span ( ) ;
2605+
2606+ assert_eq ! ( stmt_span. start, ( 2 , 11 ) . into( ) ) ;
2607+ assert_eq ! ( stmt_span. end, ( 9 , 13 ) . into( ) ) ;
2608+ }
2609+
2610+ #[ test]
2611+ fn test_delete_statement_span ( ) {
2612+ let sql = r#"-- foo
2613+ DELETE /* quux */
2614+ FROM foo
2615+ WHERE foo.x = 42
2616+ ;"# ;
2617+
2618+ let r = Parser :: parse_sql ( & crate :: dialect:: GenericDialect , sql) . unwrap ( ) ;
2619+ assert_eq ! ( 1 , r. len( ) ) ;
2620+
2621+ let stmt_span = r[ 0 ] . span ( ) ;
2622+
2623+ assert_eq ! ( stmt_span. start, ( 2 , 7 ) . into( ) ) ;
2624+ assert_eq ! ( stmt_span. end, ( 4 , 24 ) . into( ) ) ;
2625+ }
25682626}
0 commit comments