mxfactorial icon indicating copy to clipboard operation
mxfactorial copied to clipboard

add sql linter

Open mxfactorial opened this issue 1 year ago • 0 comments

current

the sql files in migrations/schema, migrations/seed and migrations/testseed are not linted

expected

1. lint sql files with https://hub.docker.com/r/sqlfluff/sqlfluff

example commands:

i) single file

docker run -it --rm -v $PWD:/sql sqlfluff/sqlfluff:3.2.5 lint --dialect postgres migrations/schema/000001_account.up.sql

ii) directories

docker run -it --rm -v $PWD:/sql sqlfluff/sqlfluff:3.2.5 lint --dialect postgres migrations/schema

2. using the --fix flag adds zero changes to linted sql files

example: assuming migrations/schema/test.sql

CREATE TABLE account (
    name character varying(255) NOT NULL PRIMARY KEY,
    password text,
    created_by character varying(255), -- NOT NULL == subaccount
    created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP
);

docker run -it --rm -v $PWD:/sql sqlfluff/sqlfluff:3.2.5 lint --dialect postgres migrations/schema/test.sql returns 0 errors

3. add a migrations/.sqlfluff config file with contents:

[sqlfluff]

dialect = postgres

now commands require a --config instead of a --dialect flag

docker run -it --rm -v $PWD:/sql sqlfluff/sqlfluff:3.2.5 lint --config migrations/.sqlfluff migrations/schema/test.sql

doc: https://docs.sqlfluff.com/en/stable/reference/cli.html

4. add "sql linting" section in migrations/README.md documenting example lint commands

example:

docker run -it --rm -v $PWD:/sql sqlfluff/sqlfluff:3.2.5 lint --config migrations/.sqlfluff migrations/schema
docker run -it --rm -v $PWD:/sql sqlfluff/sqlfluff:3.2.5 lint --config migrations/.sqlfluff migrations/seed
docker run -it --rm -v $PWD:/sql sqlfluff/sqlfluff:3.2.5 lint --config migrations/.sqlfluff migrations/testseed

mxfactorial avatar Nov 08 '24 20:11 mxfactorial