Offline, advisory SQL standards linter for Microsoft Fabric Data Warehouse: parses .sql files and reports anything that doesn't match the team's SQL standards. Human report + machine JSON for the company agent. Never edits or blocks.
Project description
coop-sql-review
A friendly tool that reads your .sql files and points out anything that doesn't follow our
SQL standards for the Fabric data warehouse. It is advisory only — it never changes,
rejects, or deletes anything. It just prints a report so you can fix things before committing.
It works completely offline (your SQL never leaves your machine) and runs the same on Windows and Mac.
1. What you need first
-
Python 3.10 or newer. To check what you have, open a terminal (see below) and type:
python --versionIf that says 3.10 or higher, you're set. If it says "command not found" or an older version, install Python from https://www.python.org/downloads/ (tick "Add Python to PATH" on Windows).
-
How to open a terminal:
- Windows: press the Start button, type
Terminal, press Enter. - Mac: press
Cmd+Space, typeTerminal, press Enter.
- Windows: press the Start button, type
You'll type commands at the blinking prompt and press Enter after each one.
2. Install it (one time)
We use pipx, which keeps the tool tidy and separate from everything else on your machine.
Step 1 — install pipx (skip if you already have it):
python -m pip install --user pipx
python -m pipx ensurepath
Close and reopen your terminal after this (so it picks up the new command).
Step 2 — install coop-sql-review:
pipx install coop-sql-review
Check it worked:
coop-sql-review --version
You should see a version number like coop-sql-review, version 0.1.0.
Not published to PyPI yet? Install straight from the repository instead:
pipx install git+https://github.com/kabukisensei/coop-sql-review.git
3. Use it
The main command is check. Point it at a file or a folder of .sql files.
Check one file:
coop-sql-review check path/to/my_query.sql
Check a whole folder (it looks in sub-folders too):
coop-sql-review check path/to/sql-folder
Tip (don't know the path?) Type
coop-sql-review check(with a trailing space), then drag the file or folder from your file explorer onto the terminal window — it pastes the path for you. Then press Enter.
That's it. The tool prints a report and always finishes successfully — it won't block you.
4. Reading the report
A typical report looks like this:
silver/dim_customer.sql
! silver/dim_customer.sql:12 [warning] SQL-NO-SELECT-STAR (§11)
SELECT * in production code — list the columns explicitly (§11).
x silver/dim_customer.sql:4 [error] SQL-NO-ALTER-COLUMN (§9)
ALTER COLUMN is not supported in Fabric DW — use the CTAS + RENAME workaround (§9).
Checked 1 file(s): 1 error, 1 warning.
Advisory only - nothing was changed or blocked.
- Each line shows
file:line, a severity, the rule that fired, and the § section of the standards it comes from. - Severities:
- error — almost certainly broken in Fabric (e.g.
ALTER COLUMN, which Fabric rejects). - warning — against the standard; worth fixing.
- info — a style/nice-to-have suggestion.
- error — almost certainly broken in Fabric (e.g.
- Diagnostics (a separate section, if shown) are processing notes — e.g. "this statement uses syntax we couldn't fully read." They tell you where the tool's checking may be incomplete, so nothing fails silently.
- Agent review — a few checks (like "is this MERGE the right choice?") need human/agent judgment, so they're listed separately rather than flagged as pass/fail.
Show only the important stuff (hide the info-level suggestions):
coop-sql-review check sql-folder --min-severity warning
5. All the commands
| Command | What it does |
|---|---|
coop-sql-review check [paths...] |
Check files/folders against the standards (the main command). |
coop-sql-review rules |
List every rule it checks, with severity and tier. |
coop-sql-review help |
Show help. help check shows help for one command. |
coop-sql-review update |
Update the tool to the newest version (same as upgrade). |
coop-sql-review upgrade |
Update the tool to the newest version. |
coop-sql-review --version |
Show the installed version. |
Options for check
| Option | Meaning |
|---|---|
--min-severity error|warning|info |
Hide findings below this level. Default info (show all). |
--format text|json |
text (default) for humans, json for tools/the agent. |
--standards <file> |
Check against a specific standards file (default: the built-in copy). |
--config <rules.yml> |
Turn rules on/off or change their severity (see §7). |
--log-file <file> |
Also write the diagnostics (parse problems, errors) to a file. |
--strict |
Exit with an error code if any finding at or above --min-severity remains — for CI gates (see §6). |
--dialect <name> |
SQL dialect to parse (default tsql, which fits Fabric). |
Run coop-sql-review rules any time to see the current full list of checks.
6. Use it in CI (optional)
By default the tool never fails a build (it's advisory). If a team wants a gate, add
--strict with a severity floor — it then exits with an error code when something at/above that
level is found:
coop-sql-review check sql-folder --strict --min-severity warning
For a machine-readable report (e.g. to attach to a build or feed the company agent):
coop-sql-review check sql-folder --format json > sql-review.json
7. Customising the rules (optional)
Create a small rules.yml to disable a rule or change its severity — no reinstall needed:
rules:
SQL-DISTINCT-SMELL:
enabled: false # turn this rule off
SQL-NO-SELECT-STAR:
severity: error # treat SELECT * as an error instead of a warning
Then:
coop-sql-review check sql-folder --config rules.yml
To check against the team's canonical standards file directly:
coop-sql-review check sql-folder --standards path/to/sql-standards.md
8. Keeping it up to date
coop-sql-review update
This updates the tool (and safe dependency updates) to the latest version. It's the only command that uses the internet.
9. Troubleshooting
coop-sql-review: command not found— you likely skippedpipx ensurepath, or didn't reopen the terminal. Runpython -m pipx ensurepath, then close and reopen the terminal.externally-managed-environmenterror on install — that's why we use pipx (above) instead of plainpip. Use the pipx steps in §2.- It conflicts with another tool's packages — pipx isolates coop-sql-review so this shouldn't
happen; if you installed with plain
pip, uninstall and reinstall with pipx. - Windows: odd characters in the report — the tool prints UTF-8 and is tested on Windows; if your console looks garbled, use Windows Terminal (the default on Windows 11).
- "No .sql files found" — double-check the folder path; the tool only reads files ending in
.sql.
For developers & AI agents
- Architecture, the rule engine, and how to add a rule: see
CLAUDE.md. - What to build and why:
SPEC.md; the full rule taxonomy:RULES.md. - The standards being enforced:
docs/standards.md(bundled with the tool). - Run the tests:
PYTHONPATH=src python -m pytest -q· lint:ruff check src tests.
This tool reuses the proven skeleton and conventions from the company's coop-data-doc tool
and shared CLI playbook.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file coop_sql_review-0.1.0.tar.gz.
File metadata
- Download URL: coop_sql_review-0.1.0.tar.gz
- Upload date:
- Size: 51.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7b892755c0da4e78cd304c71c97bf7f8bba35eb75f29983308689a79f4cdbf5
|
|
| MD5 |
474db8b0ea3e76b42d65ce37582c810b
|
|
| BLAKE2b-256 |
89057ffbfc3616d0aaad5b63bcc2910ad97b3054e8524054ed61724ad07f7497
|
Provenance
The following attestation bundles were made for coop_sql_review-0.1.0.tar.gz:
Publisher:
publish.yml on kabukisensei/coop-sql-review
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
coop_sql_review-0.1.0.tar.gz -
Subject digest:
b7b892755c0da4e78cd304c71c97bf7f8bba35eb75f29983308689a79f4cdbf5 - Sigstore transparency entry: 1839601780
- Sigstore integration time:
-
Permalink:
kabukisensei/coop-sql-review@9fa3b7e4fd9a275b0c4dc851b050f3fa123ab25d -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/kabukisensei
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9fa3b7e4fd9a275b0c4dc851b050f3fa123ab25d -
Trigger Event:
push
-
Statement type:
File details
Details for the file coop_sql_review-0.1.0-py3-none-any.whl.
File metadata
- Download URL: coop_sql_review-0.1.0-py3-none-any.whl
- Upload date:
- Size: 77.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf4fde77db889de6e38a2bd25564b86493c27a1b9f3966561d50133f76a69812
|
|
| MD5 |
a904b8031b5ad58d2c6fad62a2e800ed
|
|
| BLAKE2b-256 |
4c6079d5253bb78b566157459f678d41eaab7caefdb0127bea5649e8afea1242
|
Provenance
The following attestation bundles were made for coop_sql_review-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on kabukisensei/coop-sql-review
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
coop_sql_review-0.1.0-py3-none-any.whl -
Subject digest:
cf4fde77db889de6e38a2bd25564b86493c27a1b9f3966561d50133f76a69812 - Sigstore transparency entry: 1839601929
- Sigstore integration time:
-
Permalink:
kabukisensei/coop-sql-review@9fa3b7e4fd9a275b0c4dc851b050f3fa123ab25d -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/kabukisensei
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9fa3b7e4fd9a275b0c4dc851b050f3fa123ab25d -
Trigger Event:
push
-
Statement type: