Skip to content

Commit de3b952

Browse files
committed
Include DELETE keyword in statement span
1 parent 9766366 commit de3b952

File tree

3 files changed

+11
-6
lines changed

3 files changed

+11
-6
lines changed

src/ast/dml.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ impl Display for Insert {
180180
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
181181
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
182182
pub struct Delete {
183+
/// Token for the `DELETE` keyword
184+
pub delete_token: AttachedToken,
183185
/// Multi tables delete are supported in mysql
184186
pub tables: Vec<ObjectName>,
185187
/// FROM

src/ast/spans.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,7 @@ impl Spanned for CopySource {
837837
impl Spanned for Delete {
838838
fn span(&self) -> Span {
839839
let Delete {
840+
delete_token,
840841
tables,
841842
from,
842843
using,
@@ -847,6 +848,7 @@ impl Spanned for Delete {
847848
} = self;
848849

849850
union_spans(
851+
core::iter::once(delete_token.0.span).chain(
850852
tables
851853
.iter()
852854
.map(|i| i.span())
@@ -860,7 +862,7 @@ impl Spanned for Delete {
860862
.chain(returning.iter().flat_map(|i| i.iter().map(|k| k.span())))
861863
.chain(order_by.iter().map(|i| i.span()))
862864
.chain(limit.iter().map(|i| i.span())),
863-
)
865+
))
864866
}
865867
}
866868

src/parser/mod.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ impl<'a> Parser<'a> {
586586
Keyword::DISCARD => self.parse_discard(),
587587
Keyword::DECLARE => self.parse_declare(),
588588
Keyword::FETCH => self.parse_fetch_statement(),
589-
Keyword::DELETE => self.parse_delete(),
589+
Keyword::DELETE => self.parse_delete(next_token),
590590
Keyword::INSERT => self.parse_insert(),
591591
Keyword::REPLACE => self.parse_replace(),
592592
Keyword::UNCACHE => self.parse_uncache_table(),
@@ -11812,8 +11812,8 @@ impl<'a> Parser<'a> {
1181211812
/// Parse a DELETE statement, returning a `Box`ed SetExpr
1181311813
///
1181411814
/// This is used to reduce the size of the stack frames in debug builds
11815-
fn parse_delete_setexpr_boxed(&mut self) -> Result<Box<SetExpr>, ParserError> {
11816-
Ok(Box::new(SetExpr::Delete(self.parse_delete()?)))
11815+
fn parse_delete_setexpr_boxed(&mut self, delete_token: TokenWithSpan) -> Result<Box<SetExpr>, ParserError> {
11816+
Ok(Box::new(SetExpr::Delete(self.parse_delete(delete_token)?)))
1181711817
}
1181811818

1181911819
/// Parse a MERGE statement, returning a `Box`ed SetExpr
@@ -11823,7 +11823,7 @@ impl<'a> Parser<'a> {
1182311823
Ok(Box::new(SetExpr::Merge(self.parse_merge()?)))
1182411824
}
1182511825

11826-
pub fn parse_delete(&mut self) -> Result<Statement, ParserError> {
11826+
pub fn parse_delete(&mut self, delete_token: TokenWithSpan) -> Result<Statement, ParserError> {
1182711827
let (tables, with_from_keyword) = if !self.parse_keyword(Keyword::FROM) {
1182811828
// `FROM` keyword is optional in BigQuery SQL.
1182911829
// https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax#delete_statement
@@ -11866,6 +11866,7 @@ impl<'a> Parser<'a> {
1186611866
};
1186711867

1186811868
Ok(Statement::Delete(Delete {
11869+
delete_token: delete_token.into(),
1186911870
tables,
1187011871
from: if with_from_keyword {
1187111872
FromTable::WithFromKeyword(from)
@@ -12023,7 +12024,7 @@ impl<'a> Parser<'a> {
1202312024
} else if self.parse_keyword(Keyword::DELETE) {
1202412025
Ok(Query {
1202512026
with,
12026-
body: self.parse_delete_setexpr_boxed()?,
12027+
body: self.parse_delete_setexpr_boxed(self.get_current_token().clone())?,
1202712028
limit_clause: None,
1202812029
order_by: None,
1202912030
fetch: None,

0 commit comments

Comments
 (0)