Releases: duckdb/duckdb
Release list
DuckDB v1.5.5 Bugfix Release
This is a bug fix release for various issues discovered after we released v1.5.4.
What's Changed
- backport the out-of-bounds security fixes made in #23100 by @Tishj in #23197
- Remove checked_array_iterator from fmt dep (1.4) by @carlopi in #23261
- Remove checked_array_iterator from fmt dep (1.4) by @staticlibs in #23239
- [Dev] Add LLDB scripts to help with debugging by @Tishj in #23297
- Add support for test config extending by @NiclasHaderer in #23145
- bump iceberg again by @Tmonster in #23311
- Correctly get typed value stats for fully shredded variants by @Mytherin in #23325
- bump unity to include backfill fix by @benfleis in #23326
- Add request body length to http logs by @DinosL in #23316
- Show transport errors in HTTP log by @DinosL in #23327
- Dispatch Rust nightly build by @mlafeldt in #23352
- parquet: reject DATA_PAGE_V2 pages with inconsistent compressed_page_size by @benfleis in #23279
- Fix deadlock in
TemporaryMemoryManagerby @lnkuiper in #23351 - Register
oidof dependencies in theDependencyManagerso that we can track if an object was re-created with the same name by @Mytherin in #23348 - [Dev] Fix recursion issue with
scripts/lldb/pointer_printby @Tishj in #23362 - [MultiFileReader] Prevent NULL MAP keys because of (likely missing) default value by @Tishj in #23354
- Propagate lambda bindings into
tryoperator by @Mytherin in #23375 - Bump Julia to v1.5.4 by @carlopi in #23398
- Add additional guards to
DICT_FSSTto prevent exception during compression with small block size by @sebastiaan-dev in #23341 - fix out-of-bounds read in json path ReadKey lookahead by @jmestwa-coder in #23371
- fix out-of-bounds read in string to struct cast by @jmestwa-coder in #23384
- Issue #23383: Common Aggregate CTEs by @hawkfish in #23409
- Use correct start time when verifying dependencies by @Mytherin in #23430
- Fix false RLE corruption error by @DinosL in #23458
- [v1.5] No cache if file doesn't contain version information by @dentiny in #23434
- Improve rle corruption error messages by @DinosL in #23480
- Issue #23457: Ordered FIRST_VALUE Framing by @hawkfish in #23499
- Enabled
ALPandALP_RDfor storage version v1.5.0 and up when using smaller block sizes by @sebastiaan-dev in #23483 - [v1.5] Backport PR #23444: fix eviction node memleak when external fi… by @dentiny in #23479
- [v1.5] Fix min/max aggregate stats when row groups filtered by @dentiny in #23517
- Backport #23468 and #23510 by @artjomPlaunov in #23529
- Fix arrow type extension bugs by @evertlammerts in #23534
- Issue #23500: JSON TIMESTAMP_TZ Formatting by @hawkfish in #23513
- fix out-of-bounds read in dictionary string decompression by @jmestwa-coder in #23549
- Merge v1.4 into v1.5 by @carlopi in #23560
- [ADBC] Add support for duckdb:// URI scheme in URI option by @amoeba in #21293
- Fix/capi scalar bind subquery crash by @krleonid in #23566
- [variegata] Bump extensions by @carlopi in #23562
- Fix filter combiner not pruning unsatisfiable bounds by @DinosL in #23563
- fix out-of-bounds read on empty byte array decimals by @jmestwa-coder in #23567
- [v1.5] Quickfix
ALTER TABLE ADD COLUMN IF NOT EXISTS ... DEFAULTregression by @yan-alex in #23507 - Bump version map to include v1.5.5 by @carlopi in #23629
- backport #23548 to v1.5 by @myrrc in #23587
- Issue #23641: CUME_DIST Underflow by @hawkfish in #23651
- Fixed unsafe iteration when parent is
NULLin string cast by @sebastiaan-dev in #23593 - Bump HTTPFS by @lnkuiper in #23648
- backport #23573 by @artjomPlaunov in #23672
- fix(adbc): support the ADBC Statistics API by @eitsupi in #23230
- Issue #23664: RANGE ZERO by @hawkfish in #23710
- Fix DROP COLUMN corrupting per-column metadata block bookkeeping by @ywelsch in #23714
- Include extension header in libduckdb archives by @mlafeldt in #23752
- Correctly promote
SUGGEST_NEWtoREQUIRE_NEWfor variant / geometry columns by @Mytherin in #23763 - Fix lance build on Rust 1.97: patch its Cargo.lock to ethnum 1.5.3 by @carlopi in #23770
- Bump Postgres, MySQL and SQLite in 1.5 by @staticlibs in #23780
- Fix segfault in external hash aggregate when radix bits grow after going external by @carlopi in #23757
- Add HTTPUtil::ShouldRetry(request, response) retry-classification hook by @carlopi in #23793
- Bump azure, unity_catalog extensions to v1.5-variegata HEAD by @benfleis in #23800
- Bump extensions in preparation for v1.5.5 by @carlopi in #23794
- bump iceberg by @lnkuiper in #23735
- Fix for malformed JSON when rendering via duckbox by @sebastiaan-dev in #23803
- [v1.5] Backport a few fix PRs for v1.5.5 release by @dentiny in #23804
- bound alp/alprd exception positions to vector size by @jmestwa-coder in #23778
- Fix swapped min/max for multi-row-group 128-bit DECIMAL in RETURN_STATS by @sfc-gh-okalaci in #23693
- [variegata] Bump quack to 8e715ebb by @carlopi in #23820
- backport #22198 by @artjomPlaunov in #23810
- [v1.5] Backport two more fixes by @dentiny in #23841
- [DependencyManager] Fix ALTER dependency preservation by @Tishj in #23808
- TryLookupEntry now uses default schema as fallback by @okruitho in #23790
- Fix concurrent ALTER and INSERT crash by @Tishj in #23861
- Bump Postgres extension for 1.5 by @staticlibs in #23930
- [v1.5 backport] Fix: reset empty_range in the TIMESTAMP range() table function by @wmTJc9IK0Q in #23879
- Bump extensions for v1.5.5: quack, httpfs and aws by @carlopi in #23892
- Expose destructors, so they are callable module boundaries by @carlopi in #23953
- Bump DuckLake by @pdet in #23962
- Fix OSX ci by @Tmonster in #23963
- Bump lance pin to upstream ethnum fix, drop local patch by @carlopi in #23969
- Add missing statement types to capi by @hrl20 in #23407
- Bump httpfs by @lnkuiper in #24003
Full Changelog: v1.5.4...v1.5.5
DuckDB v1.5.4 Bugfix Release
This is a bug fix release for various issues discovered after we released v1.5.3.
Please also refer to the announcement blog post: https://duckdb.org/2026/06/17/announcing-duckdb-154.html
What's Changed
- backport 22094 by @artjomPlaunov in #22136
- backport 21815 & 21427 by @artjomPlaunov in #22137
- remove CleanupState destructor and remove noexcept on DuckCleanupInfo… by @artjomPlaunov in #22186
- Backport revert append fix to v1.4 by @Mytherin in #22414
- Backport windows-32bit test fix to 1.4 by @staticlibs in #22639
- Fix
TemporaryFileManagerreported size to reflect live blocks by @DinosL in #22767 - Set query text on PIVOT MultiStatement sub-statements at construction by @bleskes in #22769
- Fix double free and memory leak in Arrow GeoArrow CRS serialization by @rustyconover in #21854
- Render MAP values as valid SQL in Value::ToSQLString() by @carlopi in #22815
- Remove time-out waiting for terminal background color by @Mytherin in #22838
- Fix
WindowSelfJoinOptimizerignore exception by @qsliu2017 in #22800 - fix progress bar output and crash when piping SQL by @DinosL in #22836
- Internal #9438: TopN Window Projections by @hawkfish in #22851
- Fix: check if
ParseFormatSpecifierreturns unrecognized format by @DinosL in #22850 - Issue #22791: Window Self-Join Limits by @hawkfish in #22844
- [Backport] Column-level metadata loading and serialization by @ywelsch in #22768
- Fix json_keys with wildcard paths by @feichai0017 in #22855
- Fix: JSON add list type check by @DinosL in #22862
- Use committed row count in
RowGroupReordererby @lnkuiper in #22884 - Fix geometry stats checkpointing when no changes are detected by @Maxxen in #22882
- Check for
nullptrexpressions in deserialized JSON by @lnkuiper in #22906 - Add vacuum_rebuild_indexes as an (experimental) ATTACH option by @evertlammerts in #22690
- Use non-deleted row count in
RowGroupReordererby @lnkuiper in #22911 - Validate width/scale in duckdb_create_decimal_type and duckdb_create_decimal by @mlafeldt in #22905
- Bump httpfs to fix CI by @sebastiaan-dev in #22817
- Update vortex extension by @samansmink in #22930
- Fix alias propagation when replacement scan is wrapped in SubqueryRef by @truffle-dev in #22852
- Rowgroup index append by @artjomPlaunov in #22940
- Bump Julia to v1.5.3 by @carlopi in #22804
- Make url a value, not a const ref by @NiclasHaderer in #22953
- fix(adbc): support
StatementExecuteSchemaof ADBC 1.1.0 by @eitsupi in #22965 - Fix partial column metadata reuse bug by @ywelsch in #22994
- bump avro hash for 1.4.5 by @djouallah in #22952
- Add avro and unity_catalog to extension list by @d-justen in #22948
- Fix case-insensitive column match in INSERT ... SELECT ON CONFLICT by @remsky in #22825
- Normalize db_type to lowercase on ATTACH, apply extension aliases on compare by @carlopi in #22758
- MERGE INTO: only consider target table when binding
WHEN NOT MATCHEDand source table when bindingWHEN NOT MATCHED BY TARGETby @Mytherin in #23014 - In the optimistic writer always start a new row group after merging by @Mytherin in #22997
- Merge Into: Avoid recursively binding in the ProjectionBinder by @Mytherin in #23022
- Rename emscripten action in v1.5 by @smvv in #23044
- Rename emscripten action in v1.4 by @smvv in #23045
- Fix VARIANT cast reading wrong rows under a filter by @mlafeldt in #23031
- fix(adbc): implement ADBC 1.1.0 Rich Error Metadata API by @eitsupi in #23073
- Add v1.4.5 to storage version map by @carlopi in #23081
- Merge v1.4-andium into v1.5-variegata, and add storage versions v1.4.5 and v1.5.4 by @carlopi in #23082
- Backport PR #22348 to andium by @carlopi in #23084
- Backport variegata bugfixes into andium by @carlopi in #23085
- Bump vortex in andium by @carlopi in #23091
- Bump lance in variegata by @carlopi in #23094
- Bump vortex in variegata by @carlopi in #23096
- Bump extensions to v1.4-andium by @carlopi in #23090
- v1.5-variegata: bump extensions by @carlopi in #23089
- Fix Parquet thrift byte order on windows + relax geometry stats pruning by @Maxxen in #23095
- fix(adbc): fill metadata of GetObjects by @eitsupi in #23110
- backport GetLocalFileSystem improvements to andium by @ccfelius in #23130
- Reject NULL json key by @dentiny in #23116
- Fix windows last modification timestamp by @dentiny in #23136
- Fix: ignore_errors silently accepting invalid json by @DinosL in #23137
- [v1.5] Backport external file cache fix by @dentiny in #23132
- Internal #9375: PRAGMA enum NULL by @hawkfish in #23146
- Clarify BIGNUM C API data is big endian by @mlafeldt in #23127
- Allow array type for array_to_json by @dentiny in #23129
- Fix json argument order affecting result by @DinosL in #23144
- Fix #21931: avoid trying to bind an expression that doesn't exist in
UNPIVOTby @Mytherin in #23156 - Fix RowGroup assertion by @ywelsch in #23155
- Upgrade ducklake for release by @pdet in #23182
- Update Postgres, SQLite and ODBC in 1.5 by @staticlibs in #23172
- Fix native geometry parquet stats pruning and add
OPERATOR_ROW_GROUPS_SCANNEDto parquet reader by @Maxxen in #23140 - Expose bytes to parquet variant function by @Tmonster in #23057
- Minor fixes by @DinosL in #23162
- Bump aws extension by @ccfelius in #23170
- Merge v1.4-andium into v1.5-variegata by @carlopi in #23171
- Backport to variegata some isolated fixes by @carlopi in #23175
- Fix: guard againt null row group reorder stats by @DinosL in #23189
- bump iceberg by @Tmonster in #23192
- Replace ARTConflictType::TRANSACTION with fatal exception by @artjomPlaunov in #23193
- [Dev] Fix variant shredding analysis logic discrepancy with shredded writing by @Tishj in #23194
- Initialize all
BaseStatisticsmembers and zerostats_unionby @krlmlr in #23202 - Initialize
TransactionContext::invalidation_policyandauto_rollbackby @krlmlr in #23203 - Fix selection vector use in Arrow extension callbacks by @evertlammerts in #23190
- Add hardening to many DuckDB/Parquet decompression/deserializing paths by @Tishj in #23100
- Out-of-line
SelectionDatadestructor to silence g++-16-Warray-boundsby @krlmlr in #23204 - Bump quack to 9ac6521f712812cc6f2e58815ef0a6c85c5e06e0 by @carlopi in #23178
- Fix crash when storage path is not set by @guillesd in #23174
- Zero the inlined buffer in string_t's length-only constructor by @krlmlr in #23201
- [Dev] Fix "environment variable already defined" error in sqllogictest when
test_envis used by @Tishj in #21305 - parquet: initialize
ParquetReader::rows_readby @krlmlr in #23205 - Bump quack no patches by @carlopi in #23210
- bump delta & unity for 1.5.4 by @benfleis in https://github....
DuckDB v1.4.5 Bugfix Release
This is a bug fix release for various issues discovered after we released v1.4.4.
Please also refer to the announcement blog post: https://duckdb.org/2026/06/17/announcing-duckdb-145.html
What's Changed
- Internal #7212: FILL Empty Chunk by @hawkfish in #20657
- Secret Manager: Ensure secrets are created exactly once by @Mytherin in #20686
- Use FileSystem APIs in QueryProfiler::Write by @Mytherin in #20727
- Fix escape handling in AddEscapes function by @llukito in #20760
- Fixup test/extension/update_extensions_ci.test [v1.4-andium] by @carlopi in #20777
- Backport various race condition fixes to v1.4 by @Mytherin in #20804
- bump ref to azure for v1.4.4 (rebuild) by @benfleis in #20888
- Internal #7584: AsOf Simple Joins by @hawkfish in #21090
- Do not write ccache to github cache for v1.4-andium by @smvv in #21109
- Disable extension caching for v1.4 to free github cache space by @smvv in #21150
- Disable save_cache for v1.4-andium by @smvv in #21167
- Backport #19232: allow * Not similar to 'pattern' by @Dtenwolde in #21177
- backport zstd PR to 1.4 by @artjomPlaunov in #21178
- Fix unbounded row group growth for indexed tables on repeated load+insert cycles by @abramk in #21316
- Backport #21271 by @artjomPlaunov in #21326
- [lance] Add for v1.4-andium by @carlopi in #21410
- add lance for v1.4 by @samansmink in #21113
- Correctly detect overflows when decoding integers from storage by @Mytherin in #21482
- Bump Julia to
v1.4.4onv1.4-andiumby @taniabogatsch in #21589 - Fix for CSV reader buffer-boundary value read by @Mytherin in #21577
- Backport
__EMSCRIPTEN__fix by @Mytherin in #21581 - counting fix by @artjomPlaunov in #21733
- backport 22094 by @artjomPlaunov in #22136
- backport 21815 & 21427 by @artjomPlaunov in #22137
- remove CleanupState destructor and remove noexcept on DuckCleanupInfo… by @artjomPlaunov in #22186
- Backport revert append fix to v1.4 by @Mytherin in #22414
- Backport windows-32bit test fix to 1.4 by @staticlibs in #22639
- Bump httpfs to fix CI by @sebastiaan-dev in #22817
- bump avro hash for 1.4.5 by @djouallah in #22952
- Rename emscripten action in v1.4 by @smvv in #23045
- Add v1.4.5 to storage version map by @carlopi in #23081
- Backport PR #22348 to andium by @carlopi in #23084
- Backport variegata bugfixes into andium by @carlopi in #23085
- Bump vortex in andium by @carlopi in #23091
- Bump extensions to v1.4-andium by @carlopi in #23090
- backport GetLocalFileSystem improvements to andium by @ccfelius in #23130
- backport the out-of-bounds security fixes made in #23100 by @Tishj in #23197
- Remove checked_array_iterator from fmt dep (1.4) by @carlopi in #23261
- Remove checked_array_iterator from fmt dep (1.4) by @staticlibs in #23239
Full Changelog: v1.4.4...v1.4.5
DuckDB v1.5.3 Bugfix Release
This is a bugfix release for various issues discovered after we released v1.5.2.
Please also refer to the announcement blog post: https://duckdb.org/2026/05/20/announcing-duckdb-153
What's Changed
- Use DB serialization compatibility for json_serialize_sql by @kryonix in #22004
- DuckLake Bump by @pdet in #22014
- fix: resolve current catalog in ADBC Ingest to avoid temp table shadowing by @eitsupi in #22020
- Fix TIMESTAMPFORMAT being ignored for TIMESTAMPTZ columns in copy to json by @DinosL in #21992
- Provide BWC support for join filter pushdowns by @ywelsch in #22029
- Add iceberg copy function autoload by @NiclasHaderer in #22037
- Fix DISABLE_EXTENSION_LOAD by @mlafeldt in #22019
- Fix
INSERT OR REPLACE BY NAMEregression by excluding conflict columns fromSETlist by @DinosL in #22049 - Git-ignore generated extension loader by @mlafeldt in #22056
- Fix constant struct args in lateral table in-out functions by @AlfieJones in #21827
- Avoid handling Ctrl+C during shutdown (state might be already gone) by @carlopi in #22059
- Add
DISABLE_BUILTIN_HTTPLIBoption by @carlopi in #22054 - Set
queryfield for statements inALTER TABLE ... ADD COLUMN ... DEFAULT ...workaround by @yan-alex in #22057 - Coorporative tasks might lead to busy spinning in
TaskExecutor::WorkOnTasksby @NiclasHaderer in #22092 - Row group append by @evertlammerts in #22060
- Fix empty parquet child schema by @dentiny in #22105
- Issue #22096: TopN Window Casts by @hawkfish in #22098
- Add support for reading
VARIANTusing C API by @Dtenwolde in #22065 - Bump Julia to v1.5.2 by @taniabogatsch in #22121
- fix commit iteration offset bug + relax RemoveFromIndexes assertion by @artjomPlaunov in #22094
- Internal #8812: From TIMESTAMPTZ Casts by @hawkfish in #22000
- Only build plan_serializer when building the main DuckDB library by @rustyconover in #22100
- Fix Row Group Pruner Distinct Bug by @d-justen in #22132
- Correctly skip preprocessing PIVOT MultiStatements by @yan-alex in #22141
- fix(adbc): report the table name if the table doesn't exist when appending by @eitsupi in #22146
- [v1.5 patch] Attempt to fix cache read by @dentiny in #22126
- Also execute auto-rollback on CLI ClientContext::Query() query by @yan-alex in #22159
- Fix window self join optimizer by @kryonix in #22164
- Account for ROW_GROUP_SIZE when deciding whether to append to an existing row group by @evertlammerts in #22109
- Use the latest storage version for temp storage by @Mytherin in #22169
- Fix: Add pg_catalog.pg_collation compatibility view for SQLAlchemy 2.0.45 reflection by @alonfaraj in #22160
- Fix CSV escape by @dentiny in #22176
- Fix union_by_name remap for non-nested parquet columns by @feichai0017 in #22177
- User-facing
enable_caching_operatorssetting by @lnkuiper in #22191 - Fix bignum sum Combine to correctly take over memory ownership of state by @Mytherin in #22209
- CompressedFile::Close -> calls Close on its child_handle by @benfleis in #22149
- ISSUE-22061: Fix JSON shell output: emit BOOLEAN as true/false, not strings by @herbenderbler in #22073
- [Bugfix] Reset pg_err_pos in pg_parser_init to prevent stale error position leaking by @p1p1bear in #22239
- Bump httpfs to 3139e40a by @carlopi in #22248
- Correctly use new row group when checkpointing, and avoid incorrectly re-using metadata when targeting older storage versions and row ids have changed by @Mytherin in #22253
- Fix: release ParquetReader when a file is marked SKIPPED in multi-file scan by @J-Meyers in #22261
- Fix UTC±NN00 cannot be parsed in SQL by @tianjq16 in #22244
- Defer Bloom Filter Pushdown until it's done by @lnkuiper in #22218
- [v1.5] Backport ADBC memleak fix on error path by @dentiny in #22216
- Allow package builds to choose linked extensions by @mlafeldt in #22305
- Fix UTC+HHMM time zone was parsed incorrectly by @tianjq16 in #22297
- Bump httpfs by @carlopi in #22312
- Exception format: accept string literals by @carlopi in #22314
- Skip schema analysis even if no shredding for rowgroup by @rgernhardt in #21937
- Use batch limit for table scans with filters by @Mytherin in #22315
- Also redacting bearer token for HTTP secrets by @hannes in #22323
- First initialize system, then load extensions (to peek at file to be opened) by @carlopi in #22341
- Node Handle Scoping fix by @artjomPlaunov in #22344
- Enable windows_amd64 for lance extension by @carlopi in #22367
- Internal #9003: TIMETZ Parsing Limit by @hawkfish in #22378
- Downcasting decimal fix incorrect out of range error by @Dtenwolde in #22386
- GetLocalFileSystem improvements by @carlopi in #21983
- Fix double decrement of evicted_data_per_tag in .block read-back by @krleonid in #22394
- RowGroup Operator metrics: sequentially scanned row groups + total row groups + cumulative counterparts by @artjomPlaunov in #22339
- PostgreSQL compatability: in
pg_catalog.pg_databasesimulate columns datallowconn, datistemplate by @muayyad-alsadi in #22302 - Fix eviction size metrics report by @dentiny in #22452
- Fix enable_logging() silently resetting logging_storage by @guillesd in #22475
- Avoid 3 instances of idx_t - idx_t > 0, and avoid unnecessary check on zLine by @carlopi in #22518
- Fix RESET my_global_extension_setting to actually be GLOBAL by @carlopi in #22520
- Fix BlockAllocator invalid memory access by @dentiny in #22503
- Patch httplib by making ThreadPool constructor more solid on pthread_create failures by @carlopi in #22516
- Fix duck fuzz #4430 by @dentiny in #22435
- Test runner: avoid running clean-up routine if there is no database to run it in by @Mytherin in #22540
- Fix bare numeric interval parsing at end of string on v1.5 by @M1llerF in #22534
- Fix parquet metadata cache validation by @dentiny in #22547
- ExtensionInstall: Remove use of IsHTTP to IsRemoteFile by @carlopi in #21900
- Fix variant write small decimal by @dentiny in #22544
- Move http_proxy setting to global setting, and use GetEnvVariable('HTTP_PROXY') as default by @carlopi in #22541
- Bump httpfs and remove patches by @carlopi in #22556
- Bump Postgres, MySQL and ODBC by @staticlibs in #22579
- Bump avro, azure, delta, ducklake, spatial, unity_catalog and vortex by @carlopi in #22554
- Fix variant selection vector index by @dentiny in #22573
- Fix for SIGABRT in setting size on zero-capacity vector by @ccfelius in #22571
- Fix incorrect profiling results when using
LIMITby @sebastiaan-dev in #22561 - Move Jemalloc into core by @Maxxen in #22558
- Allow json ts format variation across columns - issue 22103 by @benfleis in #22559
- Limit parallel linker jobs to avoid out-of-memory errors by @smvv in #22588
- ARTOperator::Delete return false if rowid not found in nested ART leaf by @artjomPlaunov in #22591
- Enable/disable jemalloc linking through BUILD/SKIP_EXTENSIONS by @Maxxen in https://gi...
DuckDB v1.5.2 Bugfix Release
This is a bug fix release for various issues discovered after we released v1.5.1
What's Changed
- Backport various race condition fixes to v1.4 by @Mytherin in #20804
- bump ref to azure for v1.4.4 (rebuild) by @benfleis in #20888
- Internal #7584: AsOf Simple Joins by @hawkfish in #21090
- Do not write ccache to github cache for v1.4-andium by @smvv in #21109
- Disable extension caching for v1.4 to free github cache space by @smvv in #21150
- Disable save_cache for v1.4-andium by @smvv in #21167
- Backport #19232: allow * Not similar to 'pattern' by @Dtenwolde in #21177
- backport zstd PR to 1.4 by @artjomPlaunov in #21178
- Fix unbounded row group growth for indexed tables on repeated load+insert cycles by @abramk in #21316
- Backport #21271 by @artjomPlaunov in #21326
- [lance] Add for v1.4-andium by @carlopi in #21410
- add lance for v1.4 by @samansmink in #21113
- Correctly detect overflows when decoding integers from storage by @Mytherin in #21482
- Correctly revert dictionary size when reverting string appends by @Mytherin in #21489
- Add descriptions for vortex and lance by @carlopi in #21500
- Fixup Write bytes are counted as BYTES_WRITTEN by @carlopi in #21501
- Fix memory leak when reusing PreparedStatement (#21089) by @wzharies in #21104
- Make some MultiStatements and PRAGMAs Transactional by @yan-alex in #21171
- Reduce concurrent thread count in test by @Mytherin in #21511
- Fixing integer overflow in list_resize by @hannes in #21515
- Fix #21512: correctly render empty results in .mode json by @Mytherin in #21517
- Fix parsing test path to skip by @jeewonhh in #21495
- Add setting for limiting the number of threads launched concurrently in the test runner (
max_test_threads) by @Mytherin in #21520 - Unify adding suffixes to path in
Path:: AddSuffixToPath- fix temp directory split bug by @Mytherin in #21527 - Correctly deal with negative values in
GetPosixVersionTag, and fix constantNULLstruct scans after recent fix by @Mytherin in #21549 - Fix missing extension static libs in Windows MinGW bundle by @mlafeldt in #21559
- PEG grammar fixes: Update extension and allow numeric struct keys by @Dtenwolde in #21331
- [v1.5-variegata] Fix #21514: ASOF join empty right by @Pieczasz in #21553
- Fix data path in
test/sql/copy/parquet/parquet_no_stats.testby @jeewonhh in #21561 - TopNWindowElimination Column Binding Fix by @d-justen in #21564
- lance: bump lance-duckdb to 4d9ecab by @Xuanwo in #21572
- Bump Julia to
v1.5.0by @taniabogatsch in #21588 - Bump Julia to
v1.4.4onv1.4-andiumby @taniabogatsch in #21589 - Simplify the way we determine which row groups to checkpoint during checkpoints by @Mytherin in #21574
- Fix for CSV reader buffer-boundary value read by @Mytherin in #21577
- CLI: Avoid division by zero when formatting a large result with a non-wide shell by @Mytherin in #21591
- Backport
__EMSCRIPTEN__fix by @Mytherin in #21581 - Fix missing SetSizeAndFinalize in BIGNUM Add for zero result case by @pdet in #21465
- Segfault due to unchecked malloc/realloc, proposed fix to #21593 by @wasade in #21594
- Reduce arg_min_max_n heap preallocation by @feichai0017 in #21467
- Fixed an issue where the describe statement did not work correctly in markdown output mode(ISSUE:#21579) by @ArNine in #21611
- fix unpivot serialization by @Maxxen in #21595
- Windows shell: enable VT100 processing on startup by @staticlibs in #21615
- Make PEG Parser use strict mode in CI by @Dtenwolde in #21590
- Fix #21623: flatten input chunk in TopNHeap::CheckBoundaryValues by @Mytherin in #21629
- Issue #21592: Window Self-Join Framing by @hawkfish in #21628
- Bump Julia to v1.5.1 by @taniabogatsch in #21637
- Merge v1.4-andium into v1.5-variegata by @Mytherin in #21639
- Bump storage version to
v1.5.2by @taniabogatsch in #21638 - bump delta and unity_catalog ext refs in v1.5-variegata by @benfleis in #21640
- Fix cancellation order between pipelines and tasks in CancelTasks by @carlopi in #21642
- Fix shell completion enter handling by @atulagrwl in #21552
- fix(adbc): err use after free by @gishor in #21605
- Fix some Parquet fuzzer issues by @lnkuiper in #21635
- Re-organize WAL replay slightly, and correctly deal with empty checkpoint WAL files in WAL recovery by @Mytherin in #21645
- Warn instead of error when trying to persist geometry columns with CRS in old storage format by @Maxxen in #21649
- Avoid throwing an error when failing to bind views in
duckdb_columnsby @Mytherin in #21658 - Infer timestamps with timezone in read_json_auto by @leo-altertable in #21660
- Windows: remove prefix from canonical paths by @staticlibs in #21652
- CLI: Add .help shortcuts by @carlopi in #21662
- Internal #8553: Window TopN Except by @hawkfish in #21671
- Fix issue with struct filter on missing structs by @Mytherin in #21676
- Internal #7568: ASOF SEMI Test by @hawkfish in #21683
- Fix type check in
st_crsby @Maxxen in #21688 - Disable regular updates for geometry by @Maxxen in #21641
- Fix stoi crash in Arrow format string parsing for w: and +w: types by @yharby in #21692
- Test runner: Support replacement without dollar (
{i}instead of${i}) in loop iterators by @Mytherin in #21708 - Internal #8657: IEJoin Filter Sides by @hawkfish in #21721
- Add missing test for delta byte array by @ccfelius in #21714
- Fix variant shredding consistency issue by @Tishj in #21715
- TopNWindowElimination fixes by @d-justen in #21663
- Ignore
NULL/__HIVE_DEFAULT_PARTITION__when detecting types by @lnkuiper in #21731 - fix path test warnings by @benfleis in #21711
- Allow
SET DEFAULT / DROP DEFAULTfor tables that have dependencies by @Mytherin in #21729 - Add clickbench by @c-herrewijn in #21730
- Fix prepared temp-table INSERT invalidation after DROP by @wordhardqi in #21712
- Allow join filter pushdown through integral up/down casts by @lnkuiper in #21743
- Allow join filter pushdown for NOP collations by @lnkuiper in #21742
- counting fix by @artjomPlaunov in #21733
- [Variant] Re-add the removed
variant_legacy_encodingsetting by @Tishj in #21710 - Fix update plans when deserializing if type no longer supports regular updates by @Maxxen in #21718
- Re-instantiate dependencies of tables for
ALTER TABLE ... DROP COLUMNandALTER TABLE .. SET DEFAULTby @Mytherin in #21752 - Use correct error message for name conflicts between table and views by @JelteF in #21760
- Bump spatial by @taniabogatsch in #21781
- PEG parser strict mode: followup fixes and improvements by @Dtenwolde in #21709
- Fix DELETE RETURNING for rows inserted in the same transaction by @rustyconover in #21541
- Disable bloom filter pushdown through casts by @lnkuiper in #21792...
DuckDB v1.5.1 Bugfix Release
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 https://github.com/duckdb/duckdb/pull...
DuckDB v1.5.0 "Variegata"
This release of DuckDB is named "Variegata" after the paradise shelduck Tadorna Variegata, also known as the paradise duck, a species of Shelduck (a group of goose-like ducks), endemic to New Zealand.
Please also refer to the announcement blog post: https://duckdb.org/2026/03/09/announcing-duckdb-150.html
What's Changed
- Optimize LAST aggregate to iterate backward within batches by @xe-nvdk
- Allow user type with schema defined to have array bounds by @Dtenwolde in #18342
- Remove case-insensitive character from grammar files by @Dtenwolde in #18948
- Fix query() function error message for PIVOT statements without explicit IN clauses by @shivampr in #18900
- Merge v1.4-andium into main by @c-herrewijn in #18952
- [Dev] Some light code cleanup in
RemoveUnusedColumns::VisitOperatorby @Tishj in #18964 - Support renaming a database - ALTER DATABASE <> RENAME TO <> by @abramk in #18970
- V1.4 andium by @Mytherin in #18982
- Fix field id uniqueness for alter database by @abramk in #18988
- Fix unused variable warnings by @mlafeldt in #18913
- Avoid adding a TupleDataChunkPart with only one row. by @lance5401 in #18904
- Tiny fix for ColumnDataAllocator::ColumnDataAllocator by @baolinhuang in #18990
- Fixes for ALTER DATABASE - use serialization framework, and fix stringification of identifiers by @Mytherin in #18994
- Expected errors 2053 by @hmeriann in #18960
- Fix union semantics in recursive CTEs by @cryoEncryp in #19017
- Multifile
parquet_metadataand friends parallelism by @J-Meyers in #18854 - [Optimize] use StorageLock for CompressionFunction by @baolinhuang in #19028
- PEG grammar updates by @Dtenwolde in #19031
- Rework Compression Function registration to avoid grabbing locks by @Mytherin in #19045
- Merge v1.4 into main by @Mytherin in #19048
- [C-API] default to adding overload on conflict when registering functions by @Maxxen in #19036
- Destroy row groups in parallel by @Mytherin in #19053
- Switching core extension upload to dedicated credentials by @hannes in #19060
- CI: Increase stale bot timeout to 1 year by @szarnyasg in #19000
- Revert "set default value of MAIN_BRANCH_VERSIONING to false" by @c-herrewijn in #19057
- Fix extension load by @dentiny in #19079
- Change core extensions bucket name by @hannes in #19082
- Merge v1.4 into main by @Mytherin in #19098
- Allow directory override for extension build by @Mytherin in #19110
- Skip serialization of row_start in DataPointer when targeting latest storage by @Mytherin in #19111
- [C-API] Initial support for accessing file system by @Maxxen in #19086
- Rework
UNION (ALL)operators (SetOperationNode/LogicalSetOperation/PhysicalUnion) to have multiple children by @Mytherin in #19109 - pushdown filter when doing cross or lateral join with unnest by @DinosL in #19085
- Fix unholy interaction between
CREATE VIEWandCTEdefinitions by @kryonix in #19116 - Add support for
read_duckdb- a function that allows reading / globbing DuckDB database files by @Mytherin in #19108 - Fix typo by @szarnyasg in #19130
- fix: check tree depth and flatten dep join for custom operator extension by @Wal8800 in #19094
- During optimistic writing, gather N row groups and write them at the same time column-at-a-time by @Mytherin in #19118
- Remove unused code by @szarnyasg in #19134
- Add support for late materialization and filter pushdown to read_duckdb by @Mytherin in #19145
- Move storage block prefetching to an option instead of baking in testing during ALTERNATIVE_VERIFY + add a test config for this option by @Mytherin in #19146
- Introduce
parser_override_function_tby @Dtenwolde in #19126 - Perform deduplication based on join_keys when building ht by @tianjq16 in #19097
- Print help to stdout by @staticlibs in #19170
- Validate filesystem registration by @dentiny in #19168
- Fix missing replacement scan code for CTEs by @kryonix in #19159
- Correctly set row start in WAL replay by @Mytherin in #19192
- Use a
PartialBlockManagerper column, instead of sharing one over the entire row group by @Mytherin in #19194 - Internal #5380: AsOf Join Pipeline by @hawkfish in #19169
- Cross and lateral join pushdown with unnest or json - update by @DinosL in #19152
- Missing error messages for test cases by @hmeriann in #19129
- [Profiling] Move
EXTRA_INFOinto the metrics map by @maiadegraaf in #19124 - Common Subplan Elimination by @lnkuiper in #19080
GEOMETRYRework: Part 1 - Logical Type by @Maxxen in #19136- [Parquet] Implement (unshredded)
VARIANTsupport forCOPY TOparquet by @Tishj in #19125 - Add more missing error messages to test cases by @hmeriann in #19210
- [CI] - Fix failing
Extension updating testNightlyTests job by cleaning up some space on the runner by @hmeriann in #19214 - Inconsistent semicolon handling by @Dtenwolde in #19199
- Internal #5383: Range Join Sorting by @hawkfish in #19174
- [Profiling] Add QueryContext to more functions, for Reads by @maiadegraaf in #18726
- Merge v1.4-andium into main by @Maxxen in #19225
- [shell] Fix tilde parsing for .once statement by @dentiny in #19254
- Partially remove BoundQueryNode - have Bind directly emit a BoundStatement by @Mytherin in #19289
- Binder clean-up by @Mytherin in #19293
- test: add test for CREATE TABLE with
my_schema.my_enum[]by @NickCrews in #19296 - Fix uncaught exception in test_empty_profiling_settings.test by @maiadegraaf in #19286
GEOMETRYRework: Part 2 - Statistics by @Maxxen in #19203- Internal #5380: AsOf Sorting Conversion by @hawkfish in #19278
- Add option for opt-in to parser override by @Dtenwolde in #19181
- Remove BoundTableRef and make binding a TableRef directly return a BoundStatement by @Mytherin in #19294
- Rewrite Grouped Top-N Window Functions To Aggregations by @d-justen in #19280
- Perform optimistic reads while filling gaps in CachingFileSystem by @carlopi in #19122
- Issue #19027: AsOf Join Predicates by @hawkfish in #19316
- Enable experimental metadata re-use by default by @Mytherin in #19317
- Binder: BoundQueryNode cleanup by @Mytherin in #19322
- Remove old sort code by @lnkuiper in #19321
- [Parquet] Implement shredded
VARIANTsupport for COPY TO parquet by @Tishj in #19219 - Merge andium into main by @Tishj in #19325
- [C API] Expose column count and type for table description by @taniabogatsch in #19334
- Relocate the python sqllogic code to the dedicated repository by @Tishj in #19340
- Binder: Rework the way set operations work so that we can use the standard binding flow by @Mytherin in #19342
- Rework CTE binding: remove CTENode, and bind CommonTableExpressionMap directly instead by @Mytherin in #19351
- Avoid keeping shared ptr to ClientContext in QueryContext by @Mytherin in #19353
- Internal #6190: AsOf Threading by @hawkfish in #19328
- [Indexes] Buffer Managed Indexes Part 4: Segment Handles f...
v1.4.4 Bugfix Release
This is a bug fix release for various issues discovered after we released 1.4.3. Please excuse the erroneous release earlier.
What's Changed
- Cast Fix: Correctly handle negative exponent with a number with a decimal in VARCHAR -> INTEGER cast by @Mytherin in #20098
- [Storage] Fix NULL filter check for constant segments by @Tishj in #20103
- fixing staged upload for install.duckdb.org - hopefully by @hannes in #20104
- Remove undefined loop by @artjomPlaunov in #20105
- [Test] Adjust concurrent attach-detach test to expect write-write conflict by @taniabogatsch in #20108
- Fix ALIAS function in filter pushdown to preserve column aliases(#20008) by @henry8128 in #20106
- Headers missing from http logs by @samansmink in #20030
- Bumping httpfs to include duckdb/duckdb-httpfs#174 by @carlopi in #20145
- Issue #20136: Secondary IGNORE NULLS by @hawkfish in #20153
- Fix minio nightly tests by @c-herrewijn in #20132
- Fix use-after-free in mode aggregate Combine function by @victor-ab in #20146
- Only pushdown varchar if the arrow type is not a string view by @evertlammerts in #20165
- Quote filters in adbc_get_objects by @evertlammerts in #20172
- Issue #20156: Streaming Window Unions by @hawkfish in #20191
- MergeInto: correctly clean-up buffer and handle non trivial GetData by @carlopi in #20163
- Fix extentension-ci-tools to latest release version in the v1.4-andium branch by @carlopi in #20227
- [Chore] Clean up CI nightly run to prevent time outs by @taniabogatsch in #20150
- Bump Julia to v1.4.3 by @maiadegraaf in #20248
- Internal #6881: 2025c Time Zones by @hawkfish in #20258
- Split statements by semicolon by @Dtenwolde in #20174
- [chore] Remove
numeric_cast.hppimport and other tidy stuff by @taniabogatsch in #20278 - [chore] Reduce latency of VARCHAR index creation test by @taniabogatsch in #20277
- Reuse correct table-level metadata during checkpoints by @ywelsch in #20267
- Fix view resolution not being stable if the referenced table lives in a different schema by @Tishj in #20260
- ConstantOrNullFunction input validity mask overwrite bugfix by @artjomPlaunov in #20283
- dbgen: use TaskExecutor framework by @Mytherin in #20284
- fix(adbc): return error when setting an empty sql query by @gishor in #20071
- Bump iceberg, and add wasm platforms! by @carlopi in #20205
- _extension_distribution: Pin to
v1.4-andiumbranch of extension-ci-tools by @carlopi in #20294 - Optimize prepared statement parameter lookups by @EtgarDev in #20252
- Update
VectorTypeinComputePartitionIndicesby @lnkuiper in #20343 - Add some defensive programming in
RadixPartitionedHashTable::CombineandRadixPartitionedHashTable::Finalizeby @lnkuiper in #20342 - Increase reserved size for paths in SetPathsInternal by @Flogex in #20340
- Use UTF-16 console output in Windows shell (1.4) by @staticlibs in #20339
- Force repartitioning in
RadixPartitionedHashTable::Combineby @lnkuiper in #20357 - Fixup comparison to wrong iterator on abdc's driver by @carlopi in #20360
- [chore] dsdgen generation signed integer overflow fix by @taniabogatsch in #20279
- Give preference do variables set in config by @pdet in #20396
- Add QueryContext also to Write(void *buffer, idx_t nr_bytes), so that BytesWritten are updated also there by @carlopi in #20393
- Fix Issue #20233: fix function chain in qualify by @ArNine in #20302
- Backport client data cleanup by @taniabogatsch in #20403
- Add v1.4.4 to Storage Version by @maiadegraaf in #20404
- Parquet Reader: Ignore invalid UTF8 in string stats, instead of throwing an error by @Mytherin in #20405
- Don't add a semicolon to final query when splitting statements by @Dtenwolde in #20401
- Fixup BRANCHES_TO_BE_CACHED, vars are not available on PRs, so env it is by @carlopi in #20411
- [Fix] Defensive infinite loop guard and UTF-8 check in C API by @taniabogatsch in #20348
- Add ducklake, httpfs and iceberg tests so they are run in CI by @carlopi in #20319
- [Stats]
date_truncstat propagation fix by @Tishj in #20421 - Refactor allowed path sanitize by @hannes in #20346
- Issue #20413: ASOF SEMI/ANTI Bindings by @hawkfish in #20433
- Fix #20410: fix for RIGHT SEMI/ANTI - cannot fully label chain as found if there are non-equality predicates present in the join condition by @Mytherin in #20435
- [Fix] Misaligned size in ART prefix count by @taniabogatsch in #20455
- Wrap ccache in own action by @carlopi in #20466
- [Chore] Add
ORDER BYtoAS OFtest by @taniabogatsch in #20465 - Fix segfault in hive partitioning with NULL values by @Schwarf in #20468
- Nightly test encryption fixes by @ccfelius in #20461
- [C API] Fix error data creation by @taniabogatsch in #20451
- Skip concurrent_encrypted_attach due to race in autoloading httpfs by @carlopi in #20471
- CI fixup: Comparisons needs to be done via strings (since input via workflow_call is a string) by @carlopi in #20464
- Add unity_catalog to extensions built by duckdb/duckdb by @carlopi in #20445
- Invert the setup of ccache and cleanup_runner by @carlopi in #20429
- bump spatial for andium by @Maxxen in #20479
- Reclaim disk space on MacOS runners by @lnkuiper in #20493
- Adding secure clear functions by @ccfelius in #20285
- rewrite unaligned scan by @artjomPlaunov in #20474
- Issue #20470: TIMESTAMPTZ to DATE by @hawkfish in #20498
- Reset cached dictionaries in
TRYexpression by @Maxxen in #20452 - [Copy] Fix #20324
partition_byoption binding by @Tishj in #20509 - Bump multiple extensions by @maiadegraaf in #20504
- update azure ref for v1.4-andium by @benfleis in #20506
- [Fix] Directly retrieve the logical column index during
MERGE INTObinding by @taniabogatsch in #20503 - Sanitize pragmas by @samansmink in #20514
- Bump httpfs, ducklake and postgres by @carlopi in #20518
- Revert vortex bump for v1.4.4 by @taniabogatsch in #20527
- Bump VSS by @taniabogatsch in #20542
- Bump Excel by @maiadegraaf in #20540
- Fix Issue #20233: Fix function chain in having and merge to v1.4 by @ArNine in #20532
- bump iceberg by @Tmonster in #20549
- Bump Iceberg v1.4 by @Tmonster in #20604
- Fix KeyValueSecretReader init by @NiclasHaderer in #20620
- Fail fast extensions by @carlopi in #20605
New Contributors
- @victor-ab made their first contribution in #20146
- @gishor made their first contribution in #20071
Full Changelog: v1.4.3...v1.4.4
v1.4.3 Bugfix Release
This is a bug fix release for various issues discovered after we released 1.4.2.
What's Changed
- implement proper equals for table functions by @Maxxen in #19722
- Fix behavior for HAVING clause without a GROUP BY by @Tishj in #19739
- Remove httpfs patches and bump by @carlopi in #19763
- Correctly use a lock when accessing the EncryptionKeyManager by @Mytherin in #19772
- Bump iceberg to now default available extension by @carlopi in #19764
- Extract all column bindings of json each function by @Tmonster in #19766
- constraint violation bug fix by @artjomPlaunov in #19776
- Avoid binding macro arguments for untyped macros by @lnkuiper in #19779
- It should probably be
${EXTENSION_CONFIG_BUILD}instead ofEXTENSION_CONFIG_BUILDby @hannes in #19694 - Fix #19575: Fix illegal utf8 character by @flashmouse in #19699
- chore: bump vortex to 0.56.0 by @0ax1 in #19815
- PositionalScan: handle also HAVE_MORE_OUTPUT + empty chunk via iteration by @carlopi in #19824
- AttachDatabase: first set whether file is remote, then do the rest by @carlopi in #19826
- Add CacheBehavior::AUTOMATIC to DBInstanceCache that automatically does the right thing™ by @Mytherin in #19841
- Reuse metadata even in the presence of deletes by @ywelsch in #19823
- DuckIndexScanState::TableScanFunc, split into 2 explicit phases by @carlopi in #19838
- Bump httpfs and iceberg by @carlopi in #19859
- Keep cte_root alive while binding materialized CTEs in MERGE INTO children by @Mytherin in #19863
- CI Cleanup (#19840) by @yan-alex in #19857
- Fix #19517: preserve relation name for table-qualified star LIKE expression by @henry8128 in #19887
- avoid underflow/"inf" loop while reporting unittest summary (backport… by @benfleis in #19900
- Fixes incorrect handing of APPROX_QUANTILE TIME by @Damon07 in #19891
- Add v1.4.3 to Storage Version by @maiadegraaf in #19907
- clean up tmp files while building extensions by @c-herrewijn in #19908
- Bump: ducklake, mysql_scanner by @maiadegraaf in #19910
- remove large limit optimization whenever there is a filter by @guillesd in #19911
- free disk space in Upload Extensions job by @c-herrewijn in #19912
- [Compression] Prevent overriding
COMPRESSION_EMPTYwithCOMPRESSION_CONSTANTby @Tishj in #19913 - Make
make tidy-check-diffcompare against base branch, instead of always comparing againstorigin/mainby @Mytherin in #19917 - More testing for appender and attach-detach by @taniabogatsch in #19708
- Script to release a extension manually by @samansmink in #19881
- Assert that result types match with column data collection when fetching data by @pdet in #19750
- No longer auto-enable profiling on DEBUG mode by @maiadegraaf in #19931
- Fix optimizer incorrectly remove ORDER BY clause from aggregates by @tianjq16 in #19925
- Backport revert append fixes by @Mytherin in #19941
- Bump: spatial by @Maxxen in #19943
- Issue #19916: WASM Time Zones by @hawkfish in #19918
- Fix correlated column binding in ConstantBinder by @d-justen in #19945
- [chore] Increase slow threshold by @taniabogatsch in #19965
- [Parquet] Fix prepared copy option parameter by @Tishj in #19966
- [TestConfig] Fix
verify_fetch_rowconfig, reduce duplication inskip_testsby @Tishj in #19967 - remove sha from artifacts by @c-herrewijn in #19957
- Unbound index binding with context by @artjomPlaunov in #19953
- [Fix] Bug in
FetchRowafter update on indexed table withdict_fsstcompression by @taniabogatsch in #19970 - Null assertion on denormalized_table argument by @Dtenwolde in #19947
- [Art][Wal]Unbound index allocations by @artjomPlaunov in #19901
- No sampling over 281TB by @Tmonster in #19978
- Take in consideration if the sniffer used unstrictness while selecting candidates by @pdet in #20005
- [CSV] Avoid throwing unnecessary errors on strict mode by @pdet in #20007
- [Compression] Fix an issue with NULL updates to a column compressed with DICT_FSST by @Tishj in #20009
- Bump: delta, ducklake, iceberg by @maiadegraaf in #20012
- add unity_catalog, update delta by @samansmink in #20019
- Bump spatial by @staticlibs in #20020
- Retag #19821 to v1.4 - Use PLAIN_DICTIONARY for Parquet version 1 by @pdet in #20024
- Fix INSERT OR REPLACE BY NAME with partial columns(#19845) by @henry8128 in #19989
- Bump MySQL scanner by @staticlibs in #20025
- Windows must sample less by @Tmonster in #20018
- Issue #20015: Streaming Window Sequence by @hawkfish in #20027
- bump iceberg by @Tmonster in #20032
- Fix #20014: correctly use numeric_limits::min for NumericLimits::Min so that stats are initialized to -infinity for floating points by @Mytherin in #20039
- Enable windows_arm64 arch for main extensions by @staticlibs in #20004
- Fix mark join decorrelation by @kryonix in #20033
- propagate gate status in Node4::DeleteChild by @artjomPlaunov in #20044
- Bump: httpfs by @samansmink in #20036
- Bump ducklake by @pdet in #20054
- bump azure to v1.4.3 by @benfleis in #20057
- Bump extensions by @samansmink in #20055
- Fix unnecessary dependent join rewrite by @kryonix in #20048
- Version tag for local files for robust external file cache validation by @lnkuiper in #20058
- backport runner cleanup action by @hannes in #20085
Full Changelog: v1.4.2...v1.4.3
v1.4.2 Bugfix Release
This is a bug fix release for various issues discovered after we released 1.4.1. PR #19716 addresses the issues raised in CVE-2025-64429. Users of the DuckDB encryption feature are encouraged to update.
What's Changed
- bump duckdb-azure ref for 1.4.1 by @benfleis in #19275
- Fix regex optimization to remove flags when converting to contains by @mlafeldt in #19290
- feat: Fix length of sort keys by @krlmlr in #19260
- Pass lambda bindings to next binder by @Dtenwolde in #19144
- bump Julia to v1.4.1 by @c-herrewijn in #19306
- Use cross-compilation for static libs on OSX by @hannes in #19304
- Allow multiple read-only attaches to the same database across database instances by @Mytherin in #19319
- hugeint_t fixes by @carlopi in #19318
- Use CMAKE__COMPILER_LAUNCHER by @evertlammerts in #19326
- Add settings field to test config by @Mytherin in #19330
- Keep track of which database managers have which databases attached in the DatabaseFilePathManager by @Mytherin in #19338
- Bugfixes by @lnkuiper in #19329
- skip several ci jobs on prs that only bump extensions by @samansmink in #19249
- [C API] bind_value out of range fix by @taniabogatsch in #19348
- Destroy TaskNotifier prior to calling FinishTask by @Mytherin in #19373
- Remove zip bombs by @Mytherin in #19380
- Avoid calling shared_from_this() and instead use the passed in ClientContext in buffered data by @Mytherin in #19379
- add test tag support [vfs integration tests p1] by @benfleis in #19331
- Throw if non-
VARCHARkey is passed tojson_objectby @lnkuiper in #19365 - BUGFIX: Silent failure to write row groups with large lists by @J-Meyers in #19376
- Fixes for CTE (de)serialization compatibility with older versions by @Mytherin in #19393
- Fix #18139: correctly initialize flush size in MemoryStream, and re-use writer states by @Mytherin in #19398
- Fixup Kalman fiter: bound it's (0, scale_factor), not (0, 1) by @carlopi in #19395
- Fix StringDecompress for hugeint_t values by @ywelsch in #19403
- Fix #19211: make INSERT OR IGNORE correctly handle multiple constraints by @Mytherin in #19409
- Issue #19386: ICU TZDEFAULT by @hawkfish in #19413
- Fix issue in MetadataManager triggered when doing concurrent reads while checkpointing, and rework concurrent attach / detach test by @Mytherin in #19424
- ADBC fix: escape schema, table and column identifiers by @evertlammerts in #19407
- v1.4: Only serialize CTE nodes when MATERIALIZED is specified by @Mytherin in #19420
- Add forwards compatibility tests to CI by @Mytherin in #19432
- Internal #6168: Unsupported Correlated Binds by @hawkfish in #19431
- Don't pull up filters through
DISTINCT ONand makeenumcasts in Parquet safe (bugfixes) by @lnkuiper in #19406 - Get table bindings for all operators under a logical get if the logical get function is an unnest by @Tmonster in #19467
- WASM #1897: UTC Offset Support by @hawkfish in #19464
- Add tests for nested lambda bindings by @Dtenwolde in #19453
- [Compression] Fix issue in ZSTD decompression related to mis-interpreted segment offsets by @Tishj in #19475
- vfs integration tests p2 - update (env) vars and tests by @benfleis in #19428
- CI Fix: clear benchmark cache between runs by @Mytherin in #19508
- Make
DatabaseInstance::log_manageraunique_ptrby @Flogex in #19471 - Support non-standard NULL in Parquet again by @Mytherin in #19523
- Bump: inet by @samansmink in #19526
- Bump multiple extensions by @samansmink in #19522
- add upcoming patch release to internal versions by @samansmink in #19525
- Add test that either 'latest' or 'vX.Y.Z' are supported STORAGE_VERSIONs by @carlopi in #19527
- Moving staging to cf and uploading to install bucket by @hannes in #19539
- Creating separate OSX cli binaries for each arch by @hannes in #19538
- [Dev] Disable the use of
ZSTDif the block_manager is theInMemoryBlockManagerby @Tishj in #19543 - Follow up to staging move by @hannes in #19551
- Bugfixes: Parquet JSON+DELTA_LENGTH_BYTE_ARRAY and sorting iterator by @lnkuiper in #19556
- [ported from main] Fix bug initializing std::vector for column names by @evertlammerts in #19555
- Disable jemalloc on BSD by @lnkuiper in #19560
- Fix race condition between
AppendandScanby @Captain32 in #19571 - Release relevant tests to still be run on all builds by @carlopi in #19559
- fix inconsistent behavior in remote read_file/blob, and prevent union… by @Maxxen in #19531
- [v1.4-andium] Add Profiler output to logger interface by @carlopi in #19572
- Fix edge case in uncompressed validity scan with offset and fix off-by-one in ArrayColumnData::Select by @Maxxen in #19567
- Skip compiling remote optimizer test when TSAN Is enabled by @Mytherin in #19590
- Wal index deletes by @artjomPlaunov in #19477
- add vortex external extension by @samansmink in #19580
- Avoid eagerly resolving the next on-disk pointer in the MetadataReader, as that pointer might not always be valid by @Mytherin in #19588
- [DevEx] Improve error message when FROM clause is omitted by @Tishj in #18995
- bump iceberg by @Tmonster in #19618
- Improve error message around compression type deprecation/availability checks by @Tishj in #19619
- Increase cast-cost of old-style implicit cast to string by @Maxxen in #19621
- Try to prevent overshooting of
FILE_SIZE_BYTESby pre-emptively increasing bytes written in Parquet writer by @lnkuiper in #19622 - Bump: spatial by @Maxxen in #19620
- Detect invalid merge into action and throw exception by @Mytherin in #19636
- Fix #19455: correctly extract root table in merge into when running ajoin that contains single-sided predicates that are transformed into filters by @Mytherin in #19637
- Remove
FlushAllfromDETACHby @lnkuiper in #19644 - Bump MySQL scanner by @staticlibs in #19643
- Enable running all extensions tests as part of the build step by @carlopi in #19631
- Always remember extra_metadata_blocks when checkpointing by @ywelsch in #19639
- duckdb_logs_parsed to do case-insensitive matching by @carlopi in #19669
- Categorize ParseLogMessage as CAN_THROW_RUNTIME_ERROR by @carlopi in #19672
- Fixup linking for LLVM by @carlopi in #19668
- Log total probe matches in hash join by @lnkuiper in #19683
- Fix InsertRelation on attached database by @evertlammerts in #19583
- Add request timing to HTTP log by @samansmink in #19691
- Add missing query location to blob cast by @Mytherin in #19689
- Bump: aws, ducklake, httpfs, iceberg by @samansmink in #19654
- Bump: delta, ducklake, httpfs by @samansmink in #19715
- Fix #19355: correctly resolve subquery in MERGE INTO action condition by @Mytherin in #19720
- Fix #19700: correctly sort output selection vector in nested selection operations by @Mytherin in #19718
- Bump httpfs and resume testing on Wind...