darold / darold/pgFormatter

Nested CTEs identation problem

Open
#290 0 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
PLpgSQL
Stars
2k
Forks
121
Avg merge
4d 21h
Merged PRs (30d)
7

Description

The structure like this:

WITH hello_world AS (
  WITH hello_another_world AS (
    WITH hello_third_world AS (
      SELECT
      FROM
      WHERE
      ORDER BY
    ), hello_third_world_again AS (
      SELECT
      FROM
      WHERE
      ORDER BY
    )
    SELECT
    FROM
    WHERE
    ORDER BY
  ), hello_another_world_again AS (
    SELECT
    FROM
    WHERE
    ORDER BY
  )
  SELECT
  FROM
  WHERE
  ORDER BY
)
SELECT
FROM
WHERE
ORDER BY

Gets formatted as:

WITH hello_world AS (
  WITH hello_another_world AS (
    WITH hello_third_world AS (
      SELECT
      FROM
      WHERE
      ORDER BY
),
      hello_third_world_again AS (
        SELECT
        FROM
        WHERE
        ORDER BY
)
        SELECT
        FROM
        WHERE
        ORDER BY
),
        hello_another_world_again AS (
          SELECT
          FROM
          WHERE
          ORDER BY
)
          SELECT
          FROM
          WHERE
          ORDER BY
)
        SELECT
        FROM
        WHERE
        ORDER BY

It is kind of a problem since nested CTEs tend to be used in complex queries in which indentation is a hint to the CTEs scope visibility.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by running the nested CTE example from the issue through pgFormatter and compare its indentation with the expected structure. Trace the formatter path that handles nested WITH clauses, then verify that sibling CTEs and their following SELECT statements retain indentation reflecting their scope.

Written by the indexing model from the issue text.

Assessment

Tech stack
postgresql, sql
Domain
databases, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.