Releases: sqlfluff/sqlfluff
[4.1.0] - 2026-03-26
Highlights
This minor release expands SQLFluff in four meaningful ways: recursion protection, more complete Rust-backed execution, broader dialect support, and better performance on large templated projects.
- Security improvements that protect against resource exhaustion through malicious queries by limiting recursion within the parser. Users can configure the new
max_parse_depthconfig setting to enable deeper parsing in their project if necessary. - Rust support moves forward again, with Python now able to call Rust apply logic, full lazy evaluation in the Rust parser, and more parallel and streaming work in the lint/fix pipeline.
- Oracle and T-SQL both received major grammar expansions, alongside important new support across ClickHouse, DuckDB, Databricks, Trino, Hive/SparkSQL, BigQuery, Snowflake, PostgreSQL, and others.
- The dbt templater now includes support for the dbt return builtin, improved thread handling from profiles, and fixes for several Jinja edge cases.
- Users also gain more indentation configuration flexibility, plus a wide set of rule and parser correctness fixes. Specifically, the ability to skip enforcement of implicit indents for specific dialect elements.
Also, welcome to the nineteen new contributors! Thanks for your contributions! 🏆
What’s Changed
- Oracle: add missing grant privileges CONNECT/RESOURCE/TRIGGER (#7677) @saulotoledo
- Add double precision type for T-SQL (#7620) @grv87
- Fix RF01/RF02 false positives for Redshift UNPIVOT output aliases (#7602) @copilot-swe-agent[bot]
- Fix crash on malformed inline config using = syntax (#7672) @shi-vy
- Recursion check (#7473) @alanmcruickshank
- chore(rust): bump cargo deps (#7675) @keraion
- fix(rust): place remaining
vdebugbehindverbose-debugfeature (#7674) @keraion - chore: Update deprecated
gitwildmatchtogitignore(#7673) @keraion - Oracle: implement CREATE PACKAGE BODY parsing (#7671) @saulotoledo
- Oracle: recognize pseudo-functions USER/UID/SESSION_USER/ORA_ROWSCN (#7663) @saulotoledo
- Oracle: support seq.CURRVAL in dotted sequence references (#7665) @saulotoledo
- dbt templater: respect threads config from profiles.yml (#7669) @shauneccles
- PR Acceptance guidelines (#7661) @alanmcruickshank
- Fix for empty iterator bug that can occur from Jinja loops (#7643) @shi-vy
- Oracle: support trigger predicate chains in IF/ELSIF/CASE (#7660) @saulotoledo
- ST05: fix dropping expression CTEs from WITH clause (#7536) @copilot-swe-agent[bot]
- Fix placeholder colon param incorrectly prefixed with table alias when followed by
::cast (#7615) @copilot-swe-agent[bot] - build: remove dangling
noqaand update docs (#7658) @mxr - Oracle: parse TABLESPACE/STORAGE and other table/index options (#7642) @saulotoledo
- Add Hive/SparkSQL support for
FROM ... INSERT ...multi-insert statements (#7633) @copilot-swe-agent[bot] - Add ClickHouse support for
SELECT * APPLY(...)(#7654) @copilot-swe-agent[bot] - Handle set expressions in Databricks SQL function RETURN bodies (#7655) @copilot-swe-agent[bot]
- fix: Remove platformdirs version pin, support both < 4.6 and >= 4.6 (#7656) @gboutry
- fix(bigquery): Parse table types in tvf parameters #7650 (#7652) @keraion
- Fix RF03 false positive for lambda params in Databricks (#7646) @shauneccles
- trino: Add OFFSET clause support (#7618) @copilot-swe-agent[bot]
- RF01: ignore Oracle sequence NEXTVAL/CURRVAL pseudocolumn references (#7638) @ReinerBRO
- Parse bracketed
EXCEPTset expressions in Greenplum (#7632) @copilot-swe-agent[bot] - Fix LT05 duplicating Jinja macro lines when breaking long lines (#7640) @shauneccles
- Add SQLite RF06 keyword autofix (#7622) @mxr
- Oracle: added missing ALTER SESSION statement (#7630) @saulotoledo
- Oracle: accept PROFILE DEFAULT in CREATE USER grammar (#7628) @saulotoledo
- chore(Rust): update Rust dependencies (#7625) @keraion
- Fix
ignore = templatingdisabling all lint rules with Python templater (#7617) @copilot-swe-agent[bot] - feat(rust): Call Rust's apply from Python (#7599) @keraion
- feat(runner): Allow streaming render in parallel pipeline (#7616) @keraion
- ANSI: handle
IS [NOT] DISTINCT FROMcomparison statement (#7556) @peterbud - Oracle: add JSON_TABLE support with FOR ORDINALITY column parsing (#7560) @copilot-swe-agent[bot]
- Add
returndbt builtin (#7584) @mrichards42 - DuckDB: Support trailing commas in PIVOT and UNPIVOT expressions (#7612) @copilot-swe-agent[bot]
- Add PERCENTILE_CONT / WITHIN GROUP support for Databricks dialect (#7614) @copilot-swe-agent[bot]
- Parallelize file rendering prior to linting/fixing (#7129) @axyjo
- Databricks: parse MERGE clauses with NOT MATCHED BY TARGET/SOURCE (fixes #7608) (#7610) @api2062
- feat(sqlfluffrs): auto-generate dialect sources during maturin/cargo (#7579) @keraion
- Fix dbt templater failing to resolve local packages via symlinks (#7537) @copilot-swe-agent[bot]
- Redshift: fix GRANT with multiple GROUP targets fails to parse (#7563) @copilot-swe-agent[bot]
- T-SQL: Support WITH termination clause for ALTER DATABASE SET (#7586) @copilot-swe-agent[bot]
- fix(tsql): allow PERIOD FOR SYSTEM_TIME in ALTER TABLE ADD (#7609) @api2062
- Handle invalid pyproject.toml parse errors (#7593) @alanmcruickshank
- fix(duckdb): Allow trailing commas in map literals (#7606) @keraion
- fix: Respect inline
noqadirectives insqlfluff parsefor PRS/TMP violations (#7604) @peterbud - MySQL/MariaDB: Fix parsing of
VALUES()function nested in expressions forON DUPLICATE KEY UPDATE(#7603) @copilot-swe-agent[bot] - StarRocks: add support for INSERT OVERWRITE (#7601) @andystenhe
- Fix: Jinja empty-rendering variable adjacent to quotes corrupts SQL during fix (#7582) @copilot-swe-agent[bot]
- build: migrate linting and formatting checks to Ruff (#7597) @alanmcruickshank
- Duckdb: Add parsing support for MAP literal syntax (#7564) @copilot-swe-agent[bot]
- Fix TSQL
CREATE TYPE ... FROMto support data types with precision/scale (#7596) @copilot-swe-agent[bot] - ClickHouse: Fix parsing of SETTINGS clause in UNION queries (#7600) @copilot-swe-agent[bot]
- T-SQL: add support for
CREATE EXTERNAL TABLE AS SELECT(CETAS) (#7595) @samgusick - docs: do not use pandoc for rule generation (#7573) @peterbud
- chore(docs): Update dev dependencies (#7591) @keraion
- build: set base_python for dbt and python tests (#7592) @peterbud
- T-SQL: add
CREATE FULLTEXT STOPLISTstatement support (#7574) @copilot-swe-agent[bot] - MySQL: fix CAST(... AS SIGNED/UNSIGNED INTEGER) parsing failure (#7559) @copilot-swe-agent[bot]
- T-SQL: Support PUBLIC principal in GRANT/DENY/REVOKE statements (#7581) @copilot-swe-agent[bot]
- BigQuery: support chained function calls like (x).UPPER() (#7577) @ko-ya346
- Trino: fix parsing of
json_arraywithNULL ON NULLandRETURNINGclauses (#7561) @copilot-swe-agent[bot] - TSQL: parsing support for XML SCHEMA COLLECTION statements, typed XML and datatype methods (#7578) @dpurfield
- Rust: configurable runaway parse limits (#7571) @keraion
- Rust Parser: full lazy evaluation, fix Rust's MatchResult.apply (#7566) @keraion
- Fix CV11 IndexError on shorthand cast with null/boolean literals (#7568) @copilot-swe-agent[bot]
- fix: make encoding autodetect deterministic (#7575) @peterbud
- Add SET COMPRESSION syntax in Postgres for ALTER TABLE statement. (#7565) @mvastarelli
- fix: Add deterministic cleanup in linter.py (#7557) @peterbud
- feat(Clickhouse): Add QUALIFY keyword and grammar to Clickhouse (#7558) @duvenagep
- Add QUALIFY clause support to StarRocks dialect (#7514) @vdozal
- Snowflake: Expand CREATE/ALTER DATABASE support (#7517) @xevgeny
- docs: Explain
line_positionandkeyword_line_position(#7555) @peterbud - CV06: properly detect statement terminator (#7552) @peterbud
- Fix CV06 false positive for BigQuery procedures with
require_final_semicolon(#7534) @copilot-swe-agent[bot] - BigQuery: Fix ARRAY_AGG, ARRAY_CONCAT_AGG, and STRING_AGG unparsable when used as window functions (#7539) @copilot-swe-agent[bot]
- Fix LT15 falsely removing CTE-separating blank lines required by LT08 (#7542) @copilot-swe-agent[bot]
- Add
.pkbto defaultsql_file_exts(#7541) @copilot-swe-agent[bot] - Add option to skip enforcing implicit indents for specific element types (#7540) @sebastien-irco
- Fix skip_indentation_in not stripping whitespace from comma-separated values (#7538) @sebastien-irco
- Oracle: Redesign slash as buffer executor (#7498) @saulotoledo
- Update broken Oracle PL/SQL link (#7482) @AbhishekASLK
- Fix ST09 incorrectly reordering directional operators (e.g. P...
[4.0.4] - 2026-02-08
Highlights
This is a re-release of 4.0.1 which had issues in initial deployment.
What’s Changed
- Fix rust package publish workflow (#7464) @alanmcruickshank
[4.0.4a1] - 2026-02-08
Highlights
Testing release to confirm functionality of rust publish script.
What’s Changed
- Fix rust package publish workflow (#7464) @alanmcruickshank
[4.0.3] - 2026-02-08
Highlights
This is a re-release of the planned 4.0.1 which failed to publish due to deploy pipeline issues.
Normally we would use a post-release but rust doesn't support that construct.
[4.0.2] - 2026-02-08
Highlights
This is a re-release of the planned 4.0.1 which failed to publish due to deploy pipeline issues.
Normally we would use a post-release but rust doesn't support that construct.
[4.0.1.post1] - 2026-02-08
[4.0.1] - 2026-02-08
Highlights
This is a bugfix and dialect enhancement release following the 4.0.0 major release.
- Python 3.14 is now officially supported.
- Rule fixes for ST02, ST06, CP02, RF03, and indentation handling.
- New SARIF output format for better CI/CD integration.
- Dialect improvements across T-SQL, Snowflake, PostgreSQL, BigQuery, DuckDB, ClickHouse, Oracle, Databricks, and SQLite.
This release also includes the first contributions from fourteen new contributors!
Welcome to the project and thank you for your contributions.
What’s Changed
- Add correct indentation for exception blocks in Oracle PL/SQL (#7424) @copilot-swe-agent[bot]
- Improve the AST for Grant/ Revoke statements (#7457) @WittierDinosaur
- Support Python 3.14 (#7454) @WittierDinosaur
- Fix ST02/L043 corruption of Simple CASE statements (#7432) @Tanishq3031881
- chore: Add Triage Agent for issue reproduction process (experimental) (#7433) @peterbud
- docs: dbt templater: remove sections about old unsupported dbt versions (#7382) @MatthijsKok
- Duckdb: Trailing commas in values clause (#7453) @WittierDinosaur
- build: Optimize pre-commit workflow (#7452) @peterbud
- Add ALTER SYSTEM statement support for PostgreSQL dialect (#7448) @copilot-swe-agent[bot]
- T-SQL Parser issues with OPENJSON, ordered set select, and cursor keyword order (#7449) @dpurfield
- Support globs in COMMA_SEPARATED_PATH_KEYS (#7414) @WittierDinosaur
- Add error messages for templating/parsing errors on
sqlfluff fix(#7381) @annebelleo - Snowflake: Enhance create dynamic table statement parsing (#7436) @gmkr0
- build: Further workflow optimizations (#7438) @peterbud
- Bump time from 0.3.44 to 0.3.47 in /sqlfluffrs (#7439) @dependabot[bot]
- Add Snowflake Workspaces support (#7437) @kokorin
- T-SQL: fix parse of convert, updatable cursor syntax and TOP in UPDATE/INSERT statements (#7431) @dpurfield
- Allow align columns when using leading comma (#6720) @vinceyyy
- ClickHouse: Add settings clause to ALTER TABLE statement (#7429) @ttanay
- Bump bytes from 1.11.0 to 1.11.1 in /sqlfluffrs (#7430) @dependabot[bot]
- Support SARIF output format (#7413) @WittierDinosaur
- build: Updating CI/CD Infrastructure (#7420) @peterbud
- docs: Update base path in VitePress configuration (#7423) @peterbud
- Adds custom Python recursion limit value as an option (#7401) @samgusick
- docs: Add a new VitePress based documentation site (#7358) @peterbud
- Snowflake: Support dynamic table grants (#7408) @WittierDinosaur
- Duckdb: Allow CTEs in Insert statements (#7418) @WittierDinosaur
- Make CP02 ignore templated slices (#7419) @WittierDinosaur
- Bigquery: Correct order of operations for select statement (#7421) @WittierDinosaur
- [tsql] parse issues related to security ALTER USER/ROLE/AUTHORIZATION & some GRANTS (#7406) @dpurfield
- Fix double print of highlights in changelog (#7417) @WittierDinosaur
- Disable CV01 for teradata (#7409) @WittierDinosaur
- TSQL: fix JSON function grammar semantic (#7416) @peterbud
- Support underscores in numeric literals in Postgres and DuckDB (#7407) @WittierDinosaur
- Bigquery: Support Hexadecimal Integer Literals (#7412) @WittierDinosaur
- TSQL: Add support for all missing T-SQL JSON functions (#7410) @peterbud
- Databricks: Separate CREATE VIEW from CREATE MATERIALIZED VIEW parsing (#7405) @nathanthorell
- feat(snowflake): Add support for DIRECTED joins (#7402) @Daniel-Wiszowaty
- Add ANSI quantified comparison operators (ANY/ALL/SOME) (#7398) @copilot-swe-agent[bot]
- DuckDB: Add support for SET (#7404) @aammett
- fix(ST06): prevent corruption of CREATE VIEW with explicit columns list (#7263) @oulmoukenza
- DuckDB: parse simplified UNPIVOT
ONexpressions andINTOoptional (#7394) @hamza-dri - tsql alter table rebuild and drop without constraint keyword (#7393) @dpurfield
- Adds support for
INSERT ALLand error logging inINSERTin Oracle. (#7347) @joaostorrer - Fix: handles dotted notation in INI config files for Jinja context (#7373) @shuting-zhang-gh
- SQLite: Add support for blob and hexadecimal literals (#7332) @franloza
- Rust parser: Add
AnyNumberOfcontext helper functions (#7390) @keraion - Add plural interval datetime units support for DuckDB (#7387) @copilot-swe-agent[bot]
- DuckDB: Add support for parenthesized expressions in INTERVAL (#7388) @franloza
- TSQL: Add support for OPENROWSET(BULK) multiple file paths (#7329) @lynndb0
- Improves the parsing of
GRANTandREVOKEstatements in Oracle. (#7338) @joaostorrer - Rust: Migrate pyo3 items out of sqlfluffrs_types (#7386) @keraion
- T-SQL: Support INDEX = hint syntax without brackets (#7344) @copilot-swe-agent[bot]
- docs: replace aliases in rule table with core rule specification (#7337) @annebelleo
- fix(alignment): use
indent_unittab when configured (#7289) @peterbud - feat(parse): export position info in JSON/YAML output (#7294) @peterbud
- Reserve "DEFAULT" in snowflake dialect (#7274) @alanmcruickshank
- fix(RF03): don't treat COLLATE clauses as unqualified references (#7334) @peterbud
- TSQL: add support for NEXT VALUE FOR with OVER clause (#7335) @peterbud
- BigQuery: Add support for limit clause in aggregate functions (#7370) @annebelleo
- CI: Update black to v26 (#7376) @keraion
- Rust: remove generated files from source control (#7371) @keraion
New Contributors
- @shuting-zhang-gh made their first contribution in #7373
- @dpurfield made their first contribution in #7393
- @hamza-dri made their first contribution in #7394
- @oulmoukenza made their first contribution in #7263
- @aammett made their first contribution in #7404
- @Daniel-Wiszowaty made their first contribution in #7402
- @samgusick made their first contribution in #7401
- [@dependabot[bot]](https://github.com/[dependabot[bot]](https://github.com/apps/dependabot)) made their first contribution in #7430
- @ttanay made their first contribution in #7429
- @vinceyyy made their first contribution in #6720
- @kokorin made their first contribution in #7437
- @gmkr0 made their first contribution in #7436
- @MatthijsKok made their first contribution in #7382
- @Tanishq3031881 made their first contribution in #7432
[4.0.0] - 2026-01-15
Highlights
This major release brings support for internal rust optimisations. Rust support is still effectively in beta and is available on an opt in basis. To take advantage of these performance improvements, users can install sqlfluff[rs] to get the parser and lexer running in rust. The current implementation does yield noticeable gains on large files and projects - although for small individual files, the overhead of moving data into rust means that performance is a tiny bit slower. Functionality has proven fairly stable during pre release testing, and we anticipate that the rust implementations will become defaults from 5.0 onwards.
We advise testing the rust package in a development environment before going direct to production.
A massive shout out to @keraion, who's been leading the way on this effort.
Additionally in this release:
- We drop support for dbt 1.4 and older, and include support for dbt 1.10.
- We add the capability to force implicit indents.
- Bufixes for CV12 and RF01.
- Tons of docs and dialect improvements.
What’s Changed
- Databricks: Add support for AUTO CDC INTO and CREATE FLOW (#7360) @TheCleric
- Optimise rust implementation by using sparse representations (#7354) @alanmcruickshank
- Update .gitattributes to exclude generated Rust code (#7356) @keraion
- docs: Update gettingstarted.rst (#7353) @annebelleo
- Sort reserved keywords in anti_template regex for deterministic output (#7339) @keraion
- Initial implementation of the Rust parser (#7342) @keraion
- Add INCLUDE and WHERE clause support to T-SQL inline table indexes (#7352) @copilot-swe-agent[bot]
- docs: Update tox installation command (#7336) @annebelleo
- Adds support for associative array of collections in Oracle. (#7330) @joaostorrer
- databricks: support for named parameters (#7204) @kyletl
- Adds support for
CREATE SYNONYM,DROP SYNONYMandALTER SYNONYMstatements in Oracle. (#7291) @joaostorrer - TSQL: Enhance GROUP BY clause to support T-SQL specific terminators (#7327) @peterbud
- DuckDB - add support for IN operator on strings, lists, and columns (#7273) @stevenlw-porpoise
- Postgres: Add support for composite-value expansion (#7322) @annebelleo
- TSQL: Change DATASOURCE to DATA_SOURCE in openrowset(bulk...) (#7316) @lynndb0
- Postgres: Identify type names for
CREATE TYPEandALTER TYPE(#7314) @annebelleo - Postgres: add support for RETURNING clause (#7317) @annebelleo
- TSQL: add fulltext catalog and openxml plus other fixes (#7311) @nathanthorell
- BigQuery: add support for FORMAT clause (#7310) @annebelleo
- BigQuery: explicitly define data types (#7305) @annebelleo
- CI: Update macos runners (#7270) @keraion
- chore(snowflake): alter dynamic table (un)set delimited values (#7279) @mrlannigan
- fix(rebreak): unhandled
NotImplementedErrorexception (#7285) @peterbud - Adds support for
CREATE DATABASE LINK,DROP DATABASE LINKandALTER DATABASE LINKstatements in Oracle. (#7284) @joaostorrer - update duckdb FILTER clause to make WHERE keyword optional (#7271) @stevenlw-porpoise
- TSQL: allow special characters in variable and table names (#7262) @peterbud
- Adds support for
ENABLE/DISABLEclause after constraints inCREATE TABLEstatements in Oracle. (#7250) @joaostorrer - Fix click version constraint, bumping to 8.3.x (#7297) @serl
- TSQL: new rule to remove empty batches (#7280) @peterbud
- Docs notes on releasing 4.0 (#7264) @alanmcruickshank
- Add instructions for agents (#7261) @peterbud
- Add support for new duckdb lambda syntax (#7256) @stevenlw-porpoise
- refactor: Move Rust parts into their own crates (#7229) @keraion
- fix(duckdb): add support for trailing commas in select * rename/exclude/replace commands (#7254) @stevenlw-porpoise
- Resolve rust templating assertions (#7252) @alanmcruickshank
- TSQL: Remove redundant optional DelimiterGrammar from individual statements (#7231) @peterbud
- Impala: Add INVALIDATE METADATA and REFRESH statements (#7251) @mrebaker
- T-SQL: Enhance Alter Database with Set Recovery Options (#7241) @CactusCollider
- TSQL: Add support for variable assignments in SELECT statements (#7222) @peterbud
- Added alignment_coordinate_space to ALLOWABLE_LAYOUT_CONFIG_KEYS (#7237) @tojnk
- Support aliasing in Snowflake PIVOT clause (#7245) @robert-norberg
- Fix util script to update Cargo.lock (#7249) @keraion
- Postgres: Implement UTF-8 identifier support (#7242) @adnandaut
- TSQL: CreateServerRoleSegment (#7201) @piers-williams
- TSQL: Rework DatatypeSegment (#7200) @peterbud
- Update Datacoves image source in README (#7227) @keraion
- Slightly more obvious logging when rust extensions are used (#7226) @alanmcruickshank
- Lock versions of sqlfluffrs to versions of the main package. (#7218) @alanmcruickshank
- Improve phrasing of ST11 (#7221) @annebelleo
- Another pass on logos (#7219) @alanmcruickshank
- Use distinct upload token for rust package deploy (#7216) @alanmcruickshank
- Remove checks on Rust release action step (#7215) @alanmcruickshank
- DuckDB: Add support for COPY TO statement options (#7209) @tvogels01
- TSQL: Add rule to wrap with BEGIN/END for multi-statement procedures (#7202) @peterbud
- BigQuery: recognize STRUCT and ARRAY data types for CP01/CP05 (#7203) @annebelleo
- Docs logos (#7213) @alanmcruickshank
- Clickhouse: Adds support for parametric aggregate functions (#7205) @franloza
- TSQL: update OutputClauseSegment to match specification (#7207) @peterbud
- Write an implementation of the lexer in Rust (#7132) @keraion
- Disregard CV12 when UNNEST is detected in from_expression_element (#7211) @annebelleo
- TSQL: Update T-SQL keyword identifier usage (#7191) @peterbud
- Add the option to require implicit indents (#7197) @WittierDinosaur
- Update dbt CI matrix (#7196) @WittierDinosaur
- SparkSQL: allow accessing nested array fields for RF01 (#7198) @Ruward
New Contributors
- @serl made their first contribution in #7297
- @lynndb0 made their first contribution in #7316
- @kyletl made their first contribution in #7204
- @piers-williams made their first contribution in #7201
- @adnandaut made their first contribution in #7242
- @robert-norberg made their first contribution in #7245
- @tojnk made their first contribution in #7237
- @CactusCollider made their first contribution in #7241
- @stevenlw-porpoise made their first contribution in #7254
- @Ruward made their first contribution in #7198
- @tvogels01 made their first contribution in #7209
[4.0.0a3] - 2026-01-14
Highlights
This is an alpha release of SQLFluff 4.0 to continue verification of the rust portions of the codebase. In particular to verify the inclusion of a rust parser. Rust support is still in beta, but from this release, users can install sqlfluff[rs] to get the parser and lexer running in rust. Current implementation does yield noticeable gains on large files and projects - although for small individual files, the overhead of moving data into rust means that performance is a tiny bit slower.
We do not recommend that users install this release except for testing and evaluation.
Big thanks to @keraion, who's been leading the way on this effort.
Additionally in this release:
- Several docs improvements
- Dialect improvements for Databricks, Snowflake, DuckDB, TSQL, BigQuery, Postgres & Oracle.
These will be added to the changelog properly in the full 4.0.0 release.
What’s Changed
- Optimise rust implementation by using sparse representations (#7354) @alanmcruickshank
- Update .gitattributes to exclude generated Rust code (#7356) @keraion
- docs: Update gettingstarted.rst (#7353) @annebelleo
- Sort reserved keywords in anti_template regex for deterministic output (#7339) @keraion
- Initial implementation of the Rust parser (#7342) @keraion
- Add INCLUDE and WHERE clause support to T-SQL inline table indexes (#7352) @copilot-swe-agent[bot]
- docs: Update tox installation command (#7336) @annebelleo
- Adds support for associative array of collections in Oracle. (#7330) @joaostorrer
- databricks: support for named parameters (#7204) @kyletl
- Adds support for
CREATE SYNONYM,DROP SYNONYMandALTER SYNONYMstatements in Oracle. (#7291) @joaostorrer - TSQL: Enhance GROUP BY clause to support T-SQL specific terminators (#7327) @peterbud
- DuckDB - add support for IN operator on strings, lists, and columns (#7273) @stevenlw-porpoise
- Postgres: Add support for composite-value expansion (#7322) @annebelleo
- TSQL: Change DATASOURCE to DATA_SOURCE in openrowset(bulk...) (#7316) @lynndb0
- Postgres: Identify type names for
CREATE TYPEandALTER TYPE(#7314) @annebelleo - Postgres: add support for RETURNING clause (#7317) @annebelleo
- TSQL: add fulltext catalog and openxml plus other fixes (#7311) @nathanthorell
- BigQuery: add support for FORMAT clause (#7310) @annebelleo
- BigQuery: explicitly define data types (#7305) @annebelleo
- CI: Update macos runners (#7270) @keraion
- chore(snowflake): alter dynamic table (un)set delimited values (#7279) @mrlannigan
- fix(rebreak): unhandled
NotImplementedErrorexception (#7285) @peterbud - Adds support for
CREATE DATABASE LINK,DROP DATABASE LINKandALTER DATABASE LINKstatements in Oracle. (#7284) @joaostorrer - update duckdb FILTER clause to make WHERE keyword optional (#7271) @stevenlw-porpoise
- TSQL: allow special characters in variable and table names (#7262) @peterbud
- Adds support for
ENABLE/DISABLEclause after constraints inCREATE TABLEstatements in Oracle. (#7250) @joaostorrer - Fix click version constraint, bumping to 8.3.x (#7297) @serl
- TSQL: new rule to remove empty batches (#7280) @peterbud
- Docs notes on releasing 4.0 (#7264) @alanmcruickshank
- Add instructions for agents (#7261) @peterbud
- Add support for new duckdb lambda syntax (#7256) @stevenlw-porpoise
New Contributors
[4.0.0a2] - 2025-11-12
Highlights
This is an alpha release of SQLFluff 4.0 to continue verification of the rust portions of the codebase. In particular to verify version locking of pypi packages works, and testing users can verify that Rust is working easily. Rust support is still in beta, but from this release, users can install sqlfluff[rs] to get some of the parser running in rust. Current implementation is not expected to yield significant gains but we do expect that once mature that it will.
We do not recommend that users install this release except for testing and evaluation.
Big thanks to @keraion, who's been leading the way on this effort.
Additionally in this release:
- Several rust bugfixes.
- Dialect improvements for Snowflake, DuckDB, TSQL, Impala & Postgres.
These will be added to the changelog properly in the full 4.0.0 release.
What’s Changed
- Docs notes on releasing 4.0 (#7264) @alanmcruickshank
- Add instructions for agents (#7261) @peterbud
- Add support for new duckdb lambda syntax (#7256) @stevenlw-porpoise
- refactor: Move Rust parts into their own crates (#7229) @keraion
- fix(duckdb): add support for trailing commas in select * rename/exclude/replace commands (#7254) @stevenlw-porpoise
- Resolve rust templating assertions (#7252) @alanmcruickshank
- TSQL: Remove redundant optional DelimiterGrammar from individual statements (#7231) @peterbud
- Impala: Add INVALIDATE METADATA and REFRESH statements (#7251) @mrebaker
- T-SQL: Enhance Alter Database with Set Recovery Options (#7241) @CactusCollider
- TSQL: Add support for variable assignments in SELECT statements (#7222) @peterbud
- Added alignment_coordinate_space to ALLOWABLE_LAYOUT_CONFIG_KEYS (#7237) @tojnk
- Support aliasing in Snowflake PIVOT clause (#7245) @robert-norberg
- Fix util script to update Cargo.lock (#7249) @keraion
- Postgres: Implement UTF-8 identifier support (#7242) @adnandaut
- TSQL: CreateServerRoleSegment (#7201) @piers-williams
- TSQL: Rework DatatypeSegment (#7200) @peterbud
- Update Datacoves image source in README (#7227) @keraion
- Slightly more obvious logging when rust extensions are used (#7226) @alanmcruickshank
New Contributors
- @piers-williams made their first contribution in #7201
- @adnandaut made their first contribution in #7242
- @robert-norberg made their first contribution in #7245
- @tojnk made their first contribution in #7237
- @CactusCollider made their first contribution in #7241
- @stevenlw-porpoise made their first contribution in #7254