What duckdb/duckdb shipped
Written by FoxPlug from the repository's own releases; not affiliated with DuckDB. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/duckdb/duckdb; DuckDB did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of October 5, 2026
What shipped
- Fixed a set of performance regressions from v1.5 to v2.0, mostly around hot loops, table filtering and small optimizer behavior, while leaving a few join order regressions unresolved. Pull request #26791
- Made adaptive hash table growing for aggregations use telemetry-based signals instead of very conservative resizing, to reduce performance cliffs with fixed worker counts or growing group counts. Pull request #26166
- Deeply nested expressions are now rejected during transformation instead of overflowing the stack, so they fail with a proper error under the
max_expression_depthsetting. Pull request #26591 - Bounded unbounded type nesting depth at the parser and engine level by tracking depth through transformer and type visitor recursion. Pull request #26269
- Fixed yearweek filters returning wrong rows when a column range includes ISO year 0 or a negative ISO year. Pull request #26790
- Fixed CTAS using excessive temporary storage in in-memory databases by addressing SuballocationBlock ownership through the append state chain. Pull request #25707
- Added a Parquet named parameter to control reading INT96 into various types and implemented full width INT96 reads into
timestamp_nsand struct, saturating out-of-range values to plus or minus infinity. Pull request #26503 - Made the BLOB to BIT cast fallible so TRY_CAST returns NULL on an empty BLOB instead of surfacing an internal exception. Pull request #26761
- Added log storage to the V2 C API under the name log sink, carried over from the V1 API. Pull request #26872
- Extended the V2 C API with custom PRAGMA functions, custom configuration options with change callbacks, vector try casts, and scalar and table MACRO functions for extensions. Pull request #26863
Why it matters
This week mixes correctness and performance work with steady movement on the V2 C API, so extension authors get more of the pieces they need while regular users get fixes for wrong results, stack overflows and excessive temporary storage. Several long-standing issues around nested expressions, INT96 Parquet timestamps, yearweek filters and VARIANT handling are addressed. Performance regressions from v1.5 to v2.0 also get attention, though a few join order regressions remain open.
Changelog entry
- Fixed a set of performance regressions between v1.5 and v2.0 in hot loops, table filtering and small optimizer paths. Pull request #26791
- Aggregation hash tables now grow adaptively based on telemetry rather than very conservative resizing. Pull request #26166
- Expressions nested deeper than
max_expression_depthare now rejected during transformation instead of overflowing the stack. Pull request #26591 - Type nesting depth is now bounded at the parser and engine level. Pull request #26269
- Fixed yearweek filters for dates before ISO year 1, including year 0 and negative years. Pull request #26790
- Reduced excessive temporary storage when creating tables in in-memory databases. Pull request #25707
- Parquet INT96 data can now be read into
timestamp_nsand struct, with a named parameter to control the target type. Pull request #26503 - The BLOB to BIT cast is now a try-cast, so TRY_CAST returns NULL for an empty BLOB. Pull request #26761
- Shredding no longer fails when VARIANT object keys collide only by case. Pull request #24553
- Shredded VARIANT casts no longer skip overflow checks when a nullability fold removes the cast. Pull request #25836
- Fixed column mapping for pushed down extract expressions after schema evolution in nested types. Pull request #26777
- Added log sink support to the V2 C API. Pull request #26872
This week: V2 C API gains log sinks, custom PRAGMAs, config options with callbacks and MACRO functions. Also fixes for yearweek filters, INT96 Parquet reads, TRY_CAST on empty BLOB, deep expression nesting and CTAS temp usage, plus v1.5 to v2.0 performance regression fixes.
This week in DuckDB: the V2 C API gained log sinks and support for custom PRAGMA functions, custom configuration options with change callbacks, vector try casts, and scalar and table MACRO functions for extensions. On the correctness side, yearweek filters now return the right rows near ISO year 0, INT96 Parquet data can be read as timestamp_ns and struct with saturation, TRY_CAST returns NULL for an empty BLOB to BIT, deeply nested expressions fail cleanly instead of overflowing the stack, and CTAS no longer uses excessive temporary storage in in-memory databases. Several performance regressions from v1.5 to v2.0 were also fixed, mainly around hot loops, table filtering and small optimizer behavior.
Week of September 28, 2026
What shipped
- LogicalType is now a thin 8-byte pointer to ExtraTypeInfo, reducing memory overhead while maintaining all type data including LogicalTypeId and PhysicalType. Pull request #26355
- Fixed segfault or NULL pointer dereference crash when planning ORDER BY LIMIT queries over filtered or empty inputs due to dangling root pointer in statistics propagation. Pull request #25942
- Fixed
list_reducereading captured column values from wrong rows when input lists have different lengths, such as with constant initial values. Pull request #25817 - Fixed crash when optimizing empty ENUM columns by preventing invalid ENUM constant casting to VARCHAR. Pull request #26405
- Added
nan_countto Parquet RETURN_STATS and fixedhas_nanreporting across multiple row groups. Pull request #26307 - Fixed BIGNUM cast dropping bits on large integers like 2^56 by correcting size calculation that relied on double-precision log2. Pull request #25944
- Fixed window filter pushdown correctness regression for decreasing partition expressions like PARTITION BY -x. Pull request #26395
- Added support for creating multi-file reader functions from v2 C API and C++ API, enabling handling of lists, globs, directories and multi-file options. Pull request #26254
- Fixed race condition in deleted transaction-local row counting by making it atomic for parallel DELETE operations. Pull request #26382
- Added COLLATE support to ALTER COLUMN syntax. Pull request #26345
Why it matters
This week addresses several correctness issues in query planning, statistics propagation, and data type handling that could cause crashes or incorrect results. Multiple fixes ensure type safety, proper memory management, and accurate filtering behavior across edge cases like empty tables and large integers.
Changelog entry
- LogicalType now uses intrusive shared pointer with ExtraTypeInfo holding type data Pull request #26355
- Fixed dangling root pointer in statistics propagation after operator replacement Pull request #25942
- Fixed
list_reducereading wrong row values with constant initial values Pull request #25817 - Fixed crash when optimizing empty ENUM columns Pull request #26405
- Added
nan_countto Parquet RETURN_STATS and fixedhas_nanacross row groups Pull request #26307 - Fixed BIGNUM cast dropping bits on large integers Pull request #25944
- Fixed window filter pushdown for decreasing partition expressions Pull request #26395
- Added multi-file reader function support to v2 C API and C++ API Pull request #26254
- Made deleted transaction-local row counting atomic for parallel DELETE Pull request #26382
- Added COLLATE support to ALTER COLUMN Pull request #26345
This week: fixed crashes in ORDER BY LIMIT on empty inputs, corrected list_reduce column reads, hardened ENUM optimization, and improved Parquet statistics. Better memory efficiency for LogicalType and broader C API support for multi-file functions.
DuckDB 2.0 continues maturing with critical correctness fixes this week. We resolved segmentation faults in query planning for empty result sets, fixed statistics propagation that could leave dangling pointers, and corrected BIGNUM casting behavior for large integers. Parquet statistics now properly track NaN counts across row groups. We also optimized LogicalType to use 8-byte pointers and expanded C API capabilities for multi-file reader functions. These changes improve stability and expand integration possibilities.
Week of September 21, 2026
What shipped
- Fixed ordering comparison of fixed-size arrays where equal arrays incorrectly returned true for greater-than and less-than operators. Pull request #26208
- Fixed NO CYCLE sequences that were returning INT64_MIN after overflow by ensuring the counter only updates after validation checks pass. Pull request #26168
- Fixed Parquet VARIANT writer incorrectly encoding 64-byte strings as short strings, causing them to read back as empty. Pull request #26130
- Fixed CSV reader division by zero crash when
max_line_sizeparameter causes buffer size to overflow. Pull request #26131 - Fixed out-of-bounds read in CSV projection pushdown when rows contain escaped extra columns. Pull request #26100
- Added support for casting TIMESTAMPTZ directly to TIMESTAMPTZ_NS, which previously required going through VARCHAR. Pull request #25346
- Fixed FileSystem::JoinPath to preserve query string parameters in remote URLs when appending path segments. Pull request #26148
- Fixed FILL extrapolation for decreasing integer runs by correcting the slope calculation. Pull request #26057
- Added support for directly serializing shredded variant vectors in the new storage format instead of first unshredding them. Pull request #26169
- Improved multi-file scan performance by replacing yield-spinning with condition variable waits for async file opens. Pull request #26149
Why it matters
This week included multiple critical bug fixes affecting data correctness and performance: sequence overflow handling, Parquet variant serialization, CSV reader crashes, and array comparison semantics. These address edge cases in core functionality that users may encounter with large datasets or specific data types.
Changelog entry
- Fixed ordering comparison operators for equal fixed-size arrays Pull request #26208
- Fixed NO CYCLE sequences returning INT64_MIN after overflow Pull request #26168
- Fixed Parquet VARIANT writer encoding 64-byte strings as short strings Pull request #26130
- Fixed CSV reader division by zero when
max_line_sizecauses buffer overflow Pull request #26131 - Fixed out-of-bounds read in CSV projection with escaped extra columns Pull request #26100
- Added TIMESTAMPTZ to TIMESTAMPTZ_NS cast support Pull request #25346
- Fixed FileSystem::JoinPath to preserve query strings in remote URLs Pull request #26148
- Fixed FILL extrapolation for decreasing integer runs Pull request #26057
- Added support for shredded variant vector serialization Pull request #26169
- Improved multi-file scan async performance with condition variables Pull request #26149
- Restored grouped MARK semantics when binding explicit joins Pull request #26061
- Backported
enable_optimistic_writesetting to v1.5 Pull request #26102
This week: fixes for fixed-size array comparisons, sequence overflow, Parquet VARIANT strings, CSV crashes, and TIMESTAMPTZ casting. Plus improvements to remote file paths and async scan performance.
DuckDB shipped a collection of important fixes this week addressing data correctness and performance. Highlights include correcting fixed-size array comparison operators, fixing sequence overflow handling to prevent silent failures, resolving Parquet VARIANT string serialization for 64-byte strings, and eliminating a CSV reader division-by-zero crash. Additionally, TIMESTAMPTZ direct casting, remote URL query parameter preservation, and async file scan performance improvements help round out the release.