Skip to content

Commit 554a300

Browse files
committed
Add test coverage for INSERT/DELETE statement spans
1 parent 80f1f95 commit 554a300

File tree

1 file changed

+60
-2
lines changed

1 file changed

+60
-2
lines changed

src/ast/spans.rs

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)