Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Combining CREATE TABLE with CTE affects later formatting #213

Open
nassibnassar opened this issue Sep 14, 2020 · 1 comment
Open

Combining CREATE TABLE with CTE affects later formatting #213

nassibnassar opened this issue Sep 14, 2020 · 1 comment

Comments

@nassibnassar
Copy link

Thank you for this very nice tool. With version 4.4, I encountered an example where using CREATE TABLE together with a CTE appears to throw off later formatting.

Input file:

CREATE TABLE local.loans_renewal_count AS
WITH loan_count AS (
    SELECT
        item_id,
        count(DISTINCT id) AS num_loans,
        sum(renewal_count) AS num_renewals
    FROM
        circulation_loans
    GROUP BY
        item_id
)
SELECT
    CURRENT_DATE AS current_as_of_date,
    it.id AS item_id,
    COALESCE(lc.num_loans, 0) AS num_loans,
    COALESCE(lc.num_renewals, 0) AS num_renewals
FROM
    inventory_items AS it
    LEFT JOIN loan_count AS lc ON it.id = lc.item_id;

Output file (note the indentation—and case—of the COALESCE statements):

CREATE TABLE local.loans_renewal_count AS
WITH loan_count AS (
    SELECT
        item_id,
        count(DISTINCT id) AS num_loans,
        sum(renewal_count) AS num_renewals
    FROM
        circulation_loans
    GROUP BY
        item_id
)
SELECT
    CURRENT_DATE AS current_as_of_date,
    it.id AS item_id,
    COALESCE (
        lc.num_loans,
        0
) AS num_loans,
    COALESCE (
        lc.num_renewals,
        0
) AS num_renewals
FROM
    inventory_items AS it
    LEFT JOIN loan_count AS lc ON it.id = lc.item_id;

If the CREATE TABLE line is removed, it does not happen. Output:

WITH loan_count AS (
    SELECT
        item_id,
        count(DISTINCT id) AS num_loans,
        sum(renewal_count) AS num_renewals
    FROM
        circulation_loans
    GROUP BY
        item_id
)
SELECT
    CURRENT_DATE AS current_as_of_date,
    it.id AS item_id,
    coalesce(lc.num_loans, 0) AS num_loans,
    coalesce(lc.num_renewals, 0) AS num_renewals
FROM
    inventory_items AS it
    LEFT JOIN loan_count AS lc ON it.id = lc.item_id;

If the CTE is removed, it does not happen. Output:

CREATE TABLE local.loans_renewal_count AS
SELECT
    CURRENT_DATE AS current_as_of_date,
    it.id AS item_id,
    coalesce(lc.num_loans, 0) AS num_loans,
    coalesce(lc.num_renewals, 0) AS num_renewals
FROM
    inventory_items AS it
    LEFT JOIN loan_count AS lc ON it.id = lc.item_id;

The formatting configuration is:

# Obscure all literals in queries, use to hide confidential data before formatting.
anonymize=0

# In a parameters list, end or start with the comma. Default: end
comma=end

# In insert statement, add a newline after each comma.
comma-break=0

# Output format: text or html. Default: text.
format=text

# Add a newline between statements in transaction regroupement. Default is to group statements.
nogrouping=1

# Change the case of the reserved keyword. Default is uppercase: 2.
# Values: 0=>unchanged, 1=>lowercase, 2=>uppercase, 3=>capitalize.
keyword-case=2

# Change the case of the data type name. Default is lowercase: 1.
# Values: 0=>unchanged, 1=>lowercase, 2=>uppercase, 3=>capitalize.
type-case=1

# Change the case of the reserved keyword. Default is unchanged: 0.
# Values: 0=>unchanged, 1=>lowercase, 2=>uppercase, 3=>capitalize.
function-case=1

# Do not add an extra empty line at end of the output.
no-extra-line=0

# Maximum length of a query, it will be cutted above the given size. Default: no truncate.
maxlength=0

# Remove any comment from SQL code.
nocomment=0

# Statement numbering as a comment before each query.
numbering=0

# Define the filename for the output. Default: stdout.
output=

# Set regex to find code that must not be changed.
placeholder=

# Add RedShift keyworks to the list of SQL keyworks.
redshift=1

# Dynamic code separator, default to single quote.
separator=

# Change space indent, default 4 spaces.
spaces=4

# Try another formatting type for some statements.
format-type=0

# Use tabs instead of space characters, when used spaces is set to 1 whatever is its value
tabs=0

# Wrap queries at a certain length.
wrap-limit=0

# Number of column after which lists must be wrapped.
wrap-after=0

# with --wrap-limit, apply reformatting to comments.
wrap-comment=0

# Add a list of function to be formatted as PG internal functions
#extra-function=/opt/pgFormatter/functions.lst
@darold
Copy link
Owner

darold commented Oct 8, 2020

Thanks for the report, there is lot of formatting problems with CTE, see #202, #192 and #195. I need to rethink and rewrite lot of code to fix CTE. This works still not have been scheduled yet and I don't know when I could work on it for the moment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants