Skip to content

Commit 15dc440

Browse files
committed
pretty print update
1 parent 83bc179 commit 15dc440

File tree

3 files changed

+26
-12
lines changed

3 files changed

+26
-12
lines changed

src/ast/mod.rs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ use serde::{Deserialize, Serialize};
4141
use sqlparser_derive::{Visit, VisitMut};
4242

4343
use crate::{
44-
display_utils::SpaceOrNewline,
44+
display_utils::{indented_list, SpaceOrNewline},
4545
tokenizer::{Span, Token},
4646
};
4747
use crate::{
@@ -4606,25 +4606,37 @@ impl fmt::Display for Statement {
46064606
returning,
46074607
or,
46084608
} => {
4609-
write!(f, "UPDATE ")?;
4609+
f.write_str("UPDATE ")?;
46104610
if let Some(or) = or {
4611-
write!(f, "{or} ")?;
4611+
or.fmt(f)?;
4612+
f.write_str(" ")?;
46124613
}
4613-
write!(f, "{table}")?;
4614+
table.fmt(f)?;
46144615
if let Some(UpdateTableFromKind::BeforeSet(from)) = from {
4615-
write!(f, " FROM {}", display_comma_separated(from))?;
4616+
SpaceOrNewline.fmt(f)?;
4617+
f.write_str("FROM")?;
4618+
indented_list(f, from)?;
46164619
}
46174620
if !assignments.is_empty() {
4618-
write!(f, " SET {}", display_comma_separated(assignments))?;
4621+
SpaceOrNewline.fmt(f)?;
4622+
f.write_str("SET")?;
4623+
indented_list(f, assignments)?;
46194624
}
46204625
if let Some(UpdateTableFromKind::AfterSet(from)) = from {
4621-
write!(f, " FROM {}", display_comma_separated(from))?;
4626+
SpaceOrNewline.fmt(f)?;
4627+
f.write_str("FROM")?;
4628+
indented_list(f, from)?;
46224629
}
46234630
if let Some(selection) = selection {
4624-
write!(f, " WHERE {selection}")?;
4631+
SpaceOrNewline.fmt(f)?;
4632+
f.write_str("WHERE")?;
4633+
SpaceOrNewline.fmt(f)?;
4634+
Indent(selection).fmt(f)?;
46254635
}
46264636
if let Some(returning) = returning {
4627-
write!(f, " RETURNING {}", display_comma_separated(returning))?;
4637+
SpaceOrNewline.fmt(f)?;
4638+
f.write_str("RETURNING")?;
4639+
indented_list(f, returning)?;
46284640
}
46294641
Ok(())
46304642
}

src/display_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ impl Display for SpaceOrNewline {
6868

6969
/// A value that displays a comma-separated list of values.
7070
/// When pretty-printed (using {:#}), it displays each value on a new line.
71-
pub struct DisplayCommaSeparated<'a, T: fmt::Display>(&'a [T]);
71+
pub(crate) struct DisplayCommaSeparated<'a, T: fmt::Display>(&'a [T]);
7272

7373
impl<T: fmt::Display> fmt::Display for DisplayCommaSeparated<'_, T> {
7474
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {

tests/pretty_print.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,17 +203,19 @@ FROM
203203
}
204204

205205
#[test]
206-
#[ignore = "https://github.com/apache/datafusion-sqlparser-rs/issues/1850"]
207206
fn test_pretty_print_update() {
208207
assert_eq!(
209-
prettify("UPDATE my_table SET a = 1, b = 2 WHERE x > 0"),
208+
prettify("UPDATE my_table SET a = 1, b = 2 WHERE x > 0 RETURNING id, name"),
210209
r#"
211210
UPDATE my_table
212211
SET
213212
a = 1,
214213
b = 2
215214
WHERE
216215
x > 0
216+
RETURNING
217+
id,
218+
name
217219
"#
218220
.trim()
219221
);

0 commit comments

Comments
 (0)