Fix1.5.1
DuckDB v1.5.1 Bugfix Release
This release fixes various issues discovered after v1.5.0, including regressions in struct unnesting, storage handling, Parquet reading, CLI functionality, and multiple other stability improvements across extensions, query optimization, and platform-specific features.
This is a bug fix release for various issues discovered after we released v1.5.0.
Please also refer to the announcement blog post: https://duckdb.org/2026/03/23/announcing-duckdb-151
What's Changed
- [Extensions] Preserve
requireorder inInterpretedBenchmarkby @Tishj in #21214 - CLI: Make help entry uppercase by @szarnyasg in #21224
- Restore view's bind_state when binding fails by @jeewonhh in #21193
- [Regression v1.5] Fix INTERNAL Error in UnnestRewriter for deeply nested struct UNNEST by @guizmaii in #21209
- fix(storage): prevent TrimFreeBlocks from zeroing concurrently alloca… by @llersch in #21146
- Windows shell: UTF-8 mode when writing to pager by @staticlibs in #21202
- [Dev] Add internal exception for misuse of
MultiFileReadermethod by @Tishj in #21046 - Before loading libraries in TryAutoLoadExtension check AutoloadKnownExtensions Setting by @pdet in #21051
- fix: buffer overread in Arrow dictionary conversion with NULLs - fixes crash. by @rustyconover in #21083
- Avoid misleading GetRequestInfo constructor that takes endpoint + path by @carlopi in #21151
- Enable column pruning for
MATERIALIZEDCTEs by @kryonix in #21169 - Add framework to test two DuckDB versions by @Y-- in #21184
- Internal #7691: 2026a Time Zones by @hawkfish in #21204
- Fix DuckFuzz #4325 by @kryonix in #21215
- Fix decorrelation delim index bug by @kryonix in #21233
- Fix two minor shell bugs: Avoid mutating rendered strings and avoid p… by @carlopi in #21234
- Fix wrong cast in RecursiveDependentJoinPlanner by @kryonix in #21235
- Use atomic load in bloom filter look-up by @Mytherin in #21238
- Move BWC tests to nightly for now by @Mytherin in #21266
- Internal #7740: AsOf Tidy Fix by @hawkfish in #21255
- Re-add accidentally removed -jsonlines command line parameter by @Mytherin in #21263
- Switch MAIN_BRANCH_VERSIONING to False for v1.5-variegata branch by @carlopi in #21239
- Lazy call
mmapinBlockAllocatorby @lnkuiper in #21276 - Dynamically determine radix bits for external aggregation by @lnkuiper in #21274
- Avoid potential division by 0 in
PhysicalHashJoin::PrepareFinalizeby @lnkuiper in #21271 - Do not use MSYS shell for MinGW builds by @staticlibs in #21296
- add structured Path objects, update joinpath: normalize, support url/… by @benfleis in #21277
- When stress testing FORCE_ASYNC, add the relevant error messages by @carlopi in #21267
- Fix invalid JSON when casting from certain types by @Maxxen in #21280
- Fix .open of Parquet files etc. in CLI by @hannes in #21269
- Bump storage version to
v1.5.1by @taniabogatsch in #21287 - Implement line number reporting in errors for PEG parser by @Dtenwolde in #21157
- Support new v1.5 syntax for PEG grammar by @Dtenwolde in #21172
- [Fix] Memory error when transforming to
v1.0.0ART storage by @taniabogatsch in #21270 - Add missing expression traversal in
merge intobinding by @kryonix in #21283 - Add UUID to settings cache by @Mytherin in #21290
- Fix Terminal::TryGetBackgroundColor when stdin is reading from a pipe but stdout is still writing to the terminal by @Mytherin in #21288
- Fix #21248: correctly expand type count in CSV header detection by @Mytherin in #21292
- Add batch index support to parquet_metadata and friends to allow it to be executed in parallel also with order preservation by @Mytherin in #21314
- Make overriding HTTPUtil thread safe by @Mytherin in #21210
- Revert #21067 - and fix WAL corruption issue through calling
MarkBlockAsCheckpointedon WAL blocks by @Mytherin in #21285 - Fix sampling for UB in musl libc by @carlopi in #21318
- TryGetCurrentSetting: Fixup paramater passing for FileOpenerInfo by @carlopi in #21301
- Fix Row Group Reorderer Bug by @d-justen in #21282
- Windows shell: fix UTF-8 to UTF-16 conversion by @staticlibs in #21319
- Issue #21244: AsOf Unordered LIMIT by @hawkfish in #21250
- Throw error on incorrect use of
ParseExpressionListby @Dtenwolde in #21306 - Issue #20481: Prepare Window Parameters by @hawkfish in #21323
- CLI: Explicitly clean up shell state instead of letting static destructor order determine when it gets destroyed by @Mytherin in #21315
- Fixup 401bcf0: "When stress testing … by @carlopi in #21329
- CLI: Make bail on error the default in more situations by @Mytherin in #21344
- Improve estimate when first Parquet file is almost empty, and get exact cardinality count when we are using union by name by @Mytherin in #21345
- Fix infinite recursion in FileOpener::TryGetCurrentSetting by @Mytherin in #21356
- fix argument check for .multiline and .singleline by @jaywgraves in #21336
- Windows shell: remove .utf8 dot command by @staticlibs in #21343
- When writing unsupported Parquet variant types to Parquet, try to convert them to INT64 by @Mytherin in #21357
- Use cached Parquet metadata to improve cardinality estimates over Parquet files by @Mytherin in #21358
- Parquet Reader: Allow merging of prefetch column ranges for columns that do not have table filters by @Mytherin in #21373
- In the parquet reader, if we are globbing over a directory, use file sizes from the glob to estimate cardinalities instead of relying only on the first parquet file by @Mytherin in #21374
- MbedTLS: Actually throw exception by @hannes in #21365
- Well-defined environment for MinGW builds by @staticlibs in #21371
- Fix #21335: correctly add checkpoint and recovery WAL to allowed paths when launching an initial db with enable_external_access set to false by @Mytherin in #21379
- automate clangd/compile_commands.json gen via builds by @benfleis in #21361
- Parquet: Ignore optional filters when deciding whether or not to do a lazy fetch by @Mytherin in #21383
- parquet: avoid corrupting define buffers during skips by @Mikubill in #21298
- CLI: Fix .tables rendering for large database names by @Mytherin in #21389
- Fix column pruning for CTEs by @kryonix in #21275
- add test for #21271 by @artjomPlaunov in #21398
- Grab correct row group id in ValidityColumnData::UpdateWithBase by @Mytherin in #21397
- Add lance extension by @carlopi in #21406
- add lance for v1.5 by @samansmink in #21111
- Fix #21289: correctly determine render width of UTF8 string with grapheme clusters by @Mytherin in #21409
- Avoid calling PushCollation in create_sort_key by @Mytherin in #21412
- Flush remaining operators in pipeline by @DinosL in #21405
- Correctly limit auto-detection in read_json for files that don't have string columns by @Mytherin in #21411
- Fix INSERT OR REPLACE updates on non-unique indexed columns by @feichai0017 in #20962
- fix(adbc): support concurrent statements on the same connection by @eitsupi in #21415
- Fix invalid common subplan CTE reuse for issue #21372 by @feichai0017 in #21386
- Use regular pushdown path for semi/anti/left delim joins by @Mytherin in #21416
- Predicate factoring by @lnkuiper in #21418
- Bump SQLite by @staticlibs in #21414
- Enable Row Group Pruner for NULLS_FIRST by @d-justen in #21399
- Read geoparquet file with null CRS. Fix #21332 by @philippechataignon in #21333
- test/sql/join/test_hash_join_many_columns.test needs 64bit by @carlopi in #21432
- Parquet Reader: initialize scan without holding the global lock in the multi file reader by @Mytherin in #21439
- bump spatial for v1.5.2 by @Maxxen in #21440
- [vortex] Bump to d0b5bae4d907694e776c97b57de6edfb662c6c25 by @carlopi in #21430
- Fix stale update read during index removal by @artjomPlaunov in #21427
- Fix window elimination optimizer by @kryonix in #21428
- Avoid scanning struct validity when executing pushdown extract by @Mytherin in #21421
- Bump avro by @taniabogatsch in #21426
- Add allowed_configs option for allow-listing configs when setting lock_configurations by @hrl20 in #20938
- Fix minor typos in documentation and comments by @Monstertov in #21442
- Fix parquet metadata cache invalidation in local file system by @Mytherin in #21435
- Bump ducklake by @Mytherin in #21448
- [httpfs] Bump to 7e86e7a5e5 and remove patches by @carlopi in #21437
- verify_fetch_row.json + roaring seems to work as intended, restore by @carlopi in #21300
- Refactor for multiple external extensions, and skip temporary for osx_amd64 by @carlopi in #21450
- bump iceberg by @Tmonster in #21453
- Fix #21436: correctly preserve spaces within unquoted struct values in pretty printing code by @Mytherin in #21457
- Bump Postgres and MySQL by @staticlibs in #21433
- Shell: use Unicode entry point on Windows by @staticlibs in #21472
- Fix #21459: detect when read_duckdb is used to read a non-DuckDB file and throw a descriptive error by @Mytherin in #21460
- Fix #21367: Prevent throwing in WindowSelfJoinOptimizer when a logical plan cannot be copied, instead fallback to not running the optimization by @Mytherin in #21461
- bump delta && unity in prep for v1.5.1 by @benfleis in #21451
- Adjust v1.5.0 for z/OS by @DNikolaevAtRocket in #21325
- [vortex] Bump to 6ea8bd77fe8e6e814bde11b6981f934fa82ab961 by @carlopi in #21462
- Fix NULL dereference in TryGetValueFromStats (#21477) by @carlopi in #21479
- Bump spatial again by @Maxxen in #21485
- Bump vcpkg-duckdb-ports baseline by @yan-alex in #21493
Full Changelog: v1.5.0...v1.5.1
bugfixstabilityparquetclistorage
Source: original entry ↗