Skip to content

Commit a6b0ce5

Browse files
committed
pretty-print DELETE
1 parent 15dc440 commit a6b0ce5

File tree

3 files changed

+42
-14
lines changed

3 files changed

+42
-14
lines changed

src/ast/dml.rs

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ use serde::{Deserialize, Serialize};
2929
#[cfg(feature = "visitor")]
3030
use sqlparser_derive::{Visit, VisitMut};
3131

32+
use crate::display_utils::{indented_list, Indent, SpaceOrNewline};
33+
3234
pub use super::ddl::{ColumnDef, TableConstraint};
3335

3436
use super::{
@@ -649,32 +651,45 @@ pub struct Delete {
649651

650652
impl Display for Delete {
651653
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
652-
write!(f, "DELETE ")?;
654+
f.write_str("DELETE")?;
653655
if !self.tables.is_empty() {
654-
write!(f, "{} ", display_comma_separated(&self.tables))?;
656+
indented_list(f, &self.tables)?;
655657
}
656658
match &self.from {
657659
FromTable::WithFromKeyword(from) => {
658-
write!(f, "FROM {}", display_comma_separated(from))?;
660+
f.write_str(" FROM")?;
661+
indented_list(f, from)?;
659662
}
660663
FromTable::WithoutKeyword(from) => {
661-
write!(f, "{}", display_comma_separated(from))?;
664+
indented_list(f, from)?;
662665
}
663666
}
664667
if let Some(using) = &self.using {
665-
write!(f, " USING {}", display_comma_separated(using))?;
668+
SpaceOrNewline.fmt(f)?;
669+
f.write_str("USING")?;
670+
indented_list(f, using)?;
666671
}
667672
if let Some(selection) = &self.selection {
668-
write!(f, " WHERE {selection}")?;
673+
SpaceOrNewline.fmt(f)?;
674+
f.write_str("WHERE")?;
675+
SpaceOrNewline.fmt(f)?;
676+
Indent(selection).fmt(f)?;
669677
}
670678
if let Some(returning) = &self.returning {
671-
write!(f, " RETURNING {}", display_comma_separated(returning))?;
679+
SpaceOrNewline.fmt(f)?;
680+
f.write_str("RETURNING")?;
681+
indented_list(f, returning)?;
672682
}
673683
if !self.order_by.is_empty() {
674-
write!(f, " ORDER BY {}", display_comma_separated(&self.order_by))?;
684+
SpaceOrNewline.fmt(f)?;
685+
f.write_str("ORDER BY")?;
686+
indented_list(f, &self.order_by)?;
675687
}
676688
if let Some(limit) = &self.limit {
677-
write!(f, " LIMIT {limit}")?;
689+
SpaceOrNewline.fmt(f)?;
690+
f.write_str("LIMIT")?;
691+
SpaceOrNewline.fmt(f)?;
692+
Indent(limit).fmt(f)?;
678693
}
679694
Ok(())
680695
}

src/ast/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4640,8 +4640,8 @@ impl fmt::Display for Statement {
46404640
}
46414641
Ok(())
46424642
}
4643-
Statement::Delete(delete) => write!(f, "{delete}"),
4644-
Statement::Open(open) => write!(f, "{open}"),
4643+
Statement::Delete(delete) => delete.fmt(f),
4644+
Statement::Open(open) => open.fmt(f),
46454645
Statement::Close { cursor } => {
46464646
write!(f, "CLOSE {cursor}")?;
46474647

tests/pretty_print.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,14 +222,27 @@ RETURNING
222222
}
223223

224224
#[test]
225-
#[ignore = "https://github.com/apache/datafusion-sqlparser-rs/issues/1850"]
226225
fn test_pretty_print_delete() {
227226
assert_eq!(
228-
prettify("DELETE FROM my_table WHERE x > 0"),
227+
prettify("DELETE FROM my_table WHERE x > 0 RETURNING id, name"),
229228
r#"
230-
DELETE FROM my_table
229+
DELETE FROM
230+
my_table
231231
WHERE
232232
x > 0
233+
RETURNING
234+
id,
235+
name
236+
"#
237+
.trim()
238+
);
239+
240+
assert_eq!(
241+
prettify("DELETE table1, table2"),
242+
r#"
243+
DELETE
244+
table1,
245+
table2
233246
"#
234247
.trim()
235248
);

0 commit comments

Comments
 (0)