diff --git a/src/formatter/select.rs b/src/formatter/select.rs index a02a4a4..1e88b02 100644 --- a/src/formatter/select.rs +++ b/src/formatter/select.rs @@ -1593,7 +1593,12 @@ impl<'a> Formatter<'a> { } if !self.config.compact_ctes { - lines.push(")".to_string()); + let is_last = i == ctes.len() - 1; + lines.push(if is_last { + ")".to_string() + } else { + "),".to_string() + }); } } diff --git a/tests/fixtures/dbt/select_cte_multi.expected b/tests/fixtures/dbt/select_cte_multi.expected new file mode 100644 index 0000000..3e2cdfd --- /dev/null +++ b/tests/fixtures/dbt/select_cte_multi.expected @@ -0,0 +1,18 @@ +with + +a as ( + + select 1 as x + +), +b as ( + + select 2 as y + +) + +select * + +from + a, + b; diff --git a/tests/fixtures/dbt/select_cte_multi.sql b/tests/fixtures/dbt/select_cte_multi.sql new file mode 100644 index 0000000..92483b4 --- /dev/null +++ b/tests/fixtures/dbt/select_cte_multi.sql @@ -0,0 +1 @@ +WITH a AS (SELECT 1 AS x), b AS (SELECT 2 AS y) SELECT * FROM a, b diff --git a/tests/fixtures_test.rs b/tests/fixtures_test.rs index 820fc6d..ae9231a 100644 --- a/tests/fixtures_test.rs +++ b/tests/fixtures_test.rs @@ -256,6 +256,11 @@ fn dbt_select_cte() { run_fixture(Style::Dbt, "select_cte"); } +#[test] +fn dbt_select_cte_multi() { + run_fixture(Style::Dbt, "select_cte_multi"); +} + // ── GitLab fixtures ───────────────────────────────────────────────────── #[test]