Announcement1.5.0
DuckDB v1.5.0 "Variegata" Release
DuckDB v1.5.0 brings numerous performance optimizations, new features like ALTER DATABASE rename support and read_duckdb function for reading database files, improved query execution with late materialization and filter pushdown, and various bug fixes and internal improvements across query optimization, storage, and the C-API.
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 for Base Leaf by @artjomPlaunov in #19303
- Provide force assertion macros by @dentiny in #19212
- Parse result for PEG transformer by @Dtenwolde in #19229
- Allow * NOT SIMILAR TO 'pattern' by @Dtenwolde in #19232
- [C API] Improve documentation on list vectors by @taniabogatsch in #19349
- Make Binding CTEs lazy, and other CTE binding refactors by @Mytherin in #19372
- Internal #6210: IEJoin Threading by @hawkfish in #19361
- [CI] Move two test cases from duckdb-httpfs repo by @hmeriann in #19368
- [C API] Update misleading "use instead" by @taniabogatsch in #19371
- Enable -Wtype-limits warning and fix warnings by @hannes in #19382
- [Profiling] Add metrics for ATTACH / CHECKPOINT / WAL replay by @taniabogatsch in #19367
- Update issue template by @szarnyasg in #19384
- Not building imdb all the time by @hannes in #19388
- CSV Reader: make line reconstruction deal with buffer_pos == buffer_size by @Mytherin in #19390
- [Dev]
variant_extractBindData copy fix by @Tishj in #19394 - [Dev] Add a
VARIANTvisitor class by @Tishj in #19387 - Switch RowVersionManager to using the FixedSizeAllocator by @Mytherin in #19392
- [Profiling][CAPI] Add appender profiling test by @maiadegraaf in #19383
- Use statement for PEG Parser transformer by @Dtenwolde in #19302
old_transactionsis no longer necessary by @Captain32 in #19381- Add Null Support for TopNWindowElimination Rule by @d-justen in #19370
- Use const references in exceptions varargs by @maiadegraaf in #18723
- Merge v1.4-andium into main by @Mytherin in #19402
- [Variant] Implement comparison operation logic for Variant columns by @Tishj in #19337
- Implement
std::allocatorthat usesArenaAllocatorby @lnkuiper in #19412 - [CI] Correct file path in test case by @hmeriann in #19429
- [C API] Patch C API query progress documentation by @taniabogatsch in #19430
- Fixes
.dumpcommand failing withROLLBACKwhen dumping tables in non-default schemas. by @shivampr in #19363 - [C API] Extend documentation around header generation by @taniabogatsch in #19433
- Internal #6270: Fix small binary fallback values for arg_min/max_nulls_last by @d-justen in #19434
- Merge v1.4 into main by @Mytherin in #19438
- SET statement for PEG Transformer by @Dtenwolde in #19320
- Add DuckDB::String to operators by @maiadegraaf in #19423
- Make cached hashes thread-safe and emit dictionary vectors from Perfect Hash Join by @lnkuiper in #19332
- fix: make
GetCachedHashesthread safe by @0ax1 in #19274 - [Profiling] Enable ATTACH / CHECKPOINT / WAL replay metrics by default by @maiadegraaf in #19436
- Update / simplify issue template by @szarnyasg in #19442
- Move FORCE_ASYNC_SINK_SOURCE from Nightly to Main by @carlopi in #19452
- Fix WITH ORDINALITY virtual columns by @niykko in #19315
- Internal #6196: AsOf Prefix Comparisons by @hawkfish in #19456
- Add safe queue and deque by @dentiny in #19273
- 💝
duckdbnow has itsendoflife.datepage ⏳ by @adriens in #19450 - Fix wording in README by @lnkuiper in #19462
- [C-API] Add support for defining config options (settings) by @Maxxen in #19473
- Internal #6196: AsOf Prefix Comparisons by @hawkfish in #19466
- Internal #6196: AsOf Prefix Comparisons by @hawkfish in #19484
- [TPCH] fix
load.sqlto produce valid test data by @hmeriann in #19441 - [minor] Add catalog type to exception by @dentiny in #19488
GEOMETRYRework: Part 3 - Filter pushdown by @Maxxen in #19439- [minor] Address test compilation warnings by @dentiny in #19492
- Fix issue #17941: Cryptic error message when dropping a column part of a unique constraint. by @arjanssuri in #19465
- [Optimizer] Support constant order normalization by @doublefish5106 in #19494
- Use Late Materialization in TopNWindowElimination Optimizer by @d-justen in #19463
- Internal #6326: AsOf Join Copying by @hawkfish in #19505
- [swift] fix microseconds conversion to seconds by @kokluch in #19486
- Fix bug initializing std::vector for column names in ADBC API by @CurtHagenlocher in #19444
- Remove empty lines at the start of code blocks by @lnkuiper in #19519
- Merge v1.4 into main by @Mytherin in #19528
- Fix failing python replacement scan by @evertlammerts in #19509
- Adds
parquet_full_metadatafunction by @J-Meyers in #19148 - [Profiling] Add WAL_REPLAY_ENTRY_COUNT and COMMIT_WRITE_WAL_LATENCY metrics by @maiadegraaf in #19524
- Convert CLI to use C++ API, and remove sqlite API wrappers by @Mytherin in #19536
- Adding release name for 1.5 by @hannes in #19540
- CLI: Generate ".help" menu from the list of commands, and add syntax highlighting to .help by @Mytherin in #19542
- CLI: Refactor command-line parameters into a struct similar to MetadataCommands, and add better errors + syntax highlighting by @Mytherin in #19544
- Delete Statement and expression associativity for PEG Transformer by @Dtenwolde in #19507
- Attach statement for PEG transformer by @Dtenwolde in #19460
- Augment Table API
functionvia context stored inAsyncResultobject by @carlopi in #19422 - Add COLUMNS() expansion support to DISTINCT ON by @shivampr in #19550
- Retain recursive unnest column names by @DinosL in #19310
- Adds struct variant to
regexp_extract_allby @J-Meyers in #19078 - CLI: Make last query result queryable through the
_token by @Mytherin in #19553 - CLI: rework .import to use built-in readers by @Mytherin in #19563
- Count also time blocked waiting for the lock in BLOCKED_THREADS_TIME by @carlopi in #19547
- Change
format_versionto2when specifyV2forPARQUET_VERSIONby @koron in #18855 - Fix: list_concat(NULL) returns NULL by @maiadegraaf in #19565
- CLI: More shell code refactoring, remove global variables and split commands into separate files by @Mytherin in #19568
- Consdier offset in topn optimizer by @ZENOTME in #19561
- Fix Issue #19487: array_to_string on empty list return NULL instead of empty string by @arjanssuri in #19548
- CLI: Add support for dynamic prompts by @Mytherin in #19579
- Custom Order Row Group Scans by @d-justen in #19537
- Added missing return code checks for ADBC test cases by @hannes in #19576
- CLI: Make startup-text display configurable using the .startup_text by @Mytherin in #19584
- CLI: Unify all highlighting color code, add support for extended (8-bit) colors and add
.display_colorscommand by @Mytherin in #19587 - Replace deprecated header by @krlmlr in #19602
- const-safe: Add const handling for list_entry_t by @krlmlr in #19603
- Fix uninitialized physical_type in move constructor by @krlmlr in #19604
- Fix uninitialized variable in multi-file progress tracking by @krlmlr in #19597
- Fix uninitialized members in CachedFile constructor by @krlmlr in #19598
- Fix uninitialized members in HashJoinGlobalSourceState by @krlmlr in #19599
- [C API] Generate description, deprecated, and use_instead for function groups by @taniabogatsch in #19586
- Merge
v1.4-andiuminto main by @carlopi in #19589 - CLI: Sort
.display_colorsby group / hue / luminosity by @Mytherin in #19610 - Use std::remove_cv for physical type id fetching by @dentiny in #19614
- [C-API] Initial support for defining
COPYfunctions by @Maxxen in #19186 - Apply
RemoveUnusedColumnsbelow table in out functions by @geoffxy in #19474 - Fix uninitialized sorted_tuples member by @krlmlr in #19593
- Array comparison optimization by @EslamAhmed171 in #19591
- Python SQLLogicTest - show results in a consistent order by @DinosL in #19562
- Add missing description to copy CAPI by @lnkuiper in #19617
- Speed up Dictionary and DICT_FSST compression by replacing std::unordered_map with PrimitiveDictionary by @yan-alex in #19577
- CLI: Display auto-complete suggestions when tabbing through them by @Mytherin in #19626
- Allow Table
functionto opt-in to return arbitrary combinations of [0, output.size()] x [HAVE_MORE_OUTPUT, FINISHED] by @carlopi in #19566 - Add a Mermaid Flowchart transformer for EXPLAIN output by @tobilg in #19581
- Add recovery mode to
ATTACHoptions and enableNO_WALmode by @taniabogatsch in #19612 - feat: add --sql option to
.openin the cli client by @hello-world-bfree in #19445 - [ART] Pretty Printer + Verify by @artjomPlaunov in #19558
- Internal #6341: AsOf Parallelism by @hawkfish in #19605
- Add window functions to
duckdb_functionsby @Tishj in #19532 - CLI: Fix cursor rendering in multi-line editing mode by @Mytherin in #19649
- CLI: Eagerly open database also if it does not exist by @Mytherin in #19627
- CLI: Make the progress bar configurable by @Mytherin in #19650
- Encapsulate
BaseScalarFunctionproperties by @Maxxen in #19632 - Buffer-managed query results by @lnkuiper in #19437
- [ART] Iterative Iterator by @artjomPlaunov in #19521
- CI Fuzzer runtime error by @DinosL in #19630
- Guard printing for bignum by @krlmlr in #19600
- Don't truncate test names to 80 characters by @JelteF in #19642
- [Parquet] Emit
VARIANTfrom Parquet VARIANT columns, instead of JSON by @Tishj in #18996 - CLI: Make Linenoise work on Windows by @Mytherin in #19659
- Issue #19499: HashedSort Sorting Memory by @hawkfish in #19664
- Fix incorrect partition calculation due to missing vector_type by @tianjq16 in #19638
- CLI - store action as just a char to avoid sanitizer complaints by @Mytherin in #19679
- Merge v1.4 into main by @Mytherin in #19670
- More
arena_stl_allocatorintegration by @lnkuiper in #19677 - Fix z/OS-specific issues by @DNikolaevAtRocket in #19641
- CLI - Add paging support for output by @Mytherin in #19676
GEOMETRYRework: Part 4 - Fixup Parquet Extension + Add Arrow Support by @Maxxen in #19476- SegmentTree: move
nextandindexout of SegmentBase and into SegmentNode by @Mytherin in #19686 - Add
Clearmethod toBaseAppenderby @EtgarDev in #19623 - Handle edge case for date_trunc optimization by @rcurtin in #19628
- fix checkpointing on files that dont exist by @dioptre in #19344
- Fix: Correct typos in comments and error messages by @feichai0017 in #19257
- Fix compiler warnings on
mainby @lnkuiper in #19690 - Issue #19499: HashedSort Sorting Memory by @hawkfish in #19687
- Internal #6519: HashedSort Memory Footprint by @hawkfish in #19702
- Fix LENGTH(NULL) with GROUP BY NULL binding issue by @shivampr in #19269
- New EXTENSION_RELATION type by @krlmlr in #19596
- array intersect by @krleonid in #19667
- Internal #6341: AsOf Deadlock by @hawkfish in #19705
- Add options for how invalid utf-8 should be handled in
decode()by @casperhart in #18168 CommonSubplanimprovements by @lnkuiper in #19710- Fix #18653: remove unnecessary delim_join by @flashmouse in #19235
- Internal #6523: AsOf Exception Handling by @hawkfish in #19703
- CLI: Refactor BoxRenderer, add wrapping support for large values, and add pretty printing / highlighting for nested types, JSON and variant by @Mytherin in #19721
- Fix empty result pullup for ANTI joins by @feichai0017 in #19701
- search activer binders in table function binder during binding column… by @Damon07 in #14486
- Move formatting logic for tests and benchmarks into a standalone script by @adsharma in #17350
- Exclude Row Groups in Top-N Queries by @d-justen in #19655
- fix bug in generate_grammar script by @OrangieLou in #19751
- Internal #4490: DENSE_RANK Performance by @hawkfish in #19757
- Internal #6521: HashedSort Scan Lock by @hawkfish in #19758
- Issue #19647: Constant Window Allocators by @hawkfish in #19752
- BoxRenderer: Fix rendering of empty results by @Mytherin in #19746
- Bump ducklake main by @J-Meyers in #19756
- Fix initialization when all values are
NULLinSMALLER_BINARYaggregation by @DinosL in #19755 - Clean up unused headers in
parser/and subfolders by @Schwarf in #18422 - Fix #17251: Eliminate duplicates after a set operation using set sema… by @tianjq16 in #17267
- Implement outer join elimination by @flashmouse in #18043
- [C-API] Add support for catalog entry lookup by @Maxxen in #19684
- Add
StatsAPI to filesystem interfaces by @dentiny in #19743 - Add sleep scalar function by @krleonid in #19736
- Add flush memory threshold for appender to prevent OOM by @p1p1bear in #19007
- add statement debug and debug_skip by @samansmink in #18472
- Storage: Remove
startfrom RowGroup, ColumnData and ColumnSegment, and rework the way thatstartis defined in theColumnSegmentTreeby @Mytherin in #19761 - Add Seek() to TupleDataCollection for IEJoin optimization by @EslamAhmed171 in #19753
- Fix TopN Pruning Test by @d-justen in #19768
- Support reading pipes with
read_textby @lnkuiper in #19765 - Support TopN dynamic filter for NULLS FIRST by @feichai0017 in #19744
- fix(#18481): Avoid to overwrite secret_directory configuration by it default value by @quentingodeau in #19448
- Change back default strategy for debug_physical_table_scan_execution_strategy by @carlopi in #19778
- Fix major big-endian issues by @DNikolaevAtRocket in #19748
- Disable
sleep()function if DuckDB isn't compiled with threads by @lnkuiper in #19783 - Remove unused parameter from arrow by @pdet in #19784
- Block Allocator by @lnkuiper in #19678
- Merge v1.4-andium into main by @Mytherin in #19771
- CLI: Add table metadata rendering, and use this rendering for
.tablesandDESCRIBEqueries by @Mytherin in #19792 - CLI: Improve array rendering by no longer adding newlines after every array entry unless there are complex objects in the array by @Mytherin in #19795
- CLI: For
.tables- group tables by database/schema, and render the database name and schema of the tables as a header above the tables by @Mytherin in #19798 - Skip test block_allocator_memory.test on 32bit platforms by @carlopi in #19794
- [ADBC] Fix bug in StatementGetParameterSchema when no params are set by @amoeba in #19790
- Specify shared deletion option on windows by @dentiny in #19782
- Fix flaky sleep test by @krleonid in #19803
- Internal #6541: Window ArenaAllocator Usage by @hawkfish in #19770
- CLI: Several auto-complete improvements, make auto-complete behave more like
zshby @Mytherin in #19805 - [Profiling] Split COMMIT_WRITE_WAL_LATENCY into COMMIT_LOCAL_STORAGE_LATENCY and WRITE_TO_WAL_LATENCY by @maiadegraaf in #19808
- Move GetData as GetDataInternal, and have GetData as wrapper by @carlopi in #19791
- [swift] fix compiler warnings for deprecated @_implementationOnly by @kokluch in #19800
- CLI: Silence auto-complete failures instead of exiting by @Mytherin in #19813
- Random small nits by @taniabogatsch in #19828
- Add test to exclusion list by @Maxxen in #19827
- Create statement for PEG Transformer by @Dtenwolde in #19807
- Add
struct_keysmethod to StructVector by @EtgarDev in #19673 - [Dev] Disallow aggregates used in the TRY expression child by @Tishj in #16285
- CI Cleanup by @Mytherin in #19840
- Fix positional scan and restore task executor by @carlopi in #19825
- [CLI] fix escaping sequence for ctrl/alt arrow key shortcuts by @tobwen in #19261
- Enable macros in DuckLake by @pdet in #19836
- Make RowGroup::Checkpoint and ColumnData::Checkpoint generate a new RowGroup/ColumnData - instead of checkpointing them in-place by @Mytherin in #19843
- Fix incorrect results with NOT EXISTS and IS DISTINCT FROM operator (#19680) by @henry8128 in #19811
- #6429 Roaring Booleans by @yan-alex in #19785
GEOMETRYRework: Part 4 - Step 2 - Adjust WKB conversion functions by @Maxxen in #19848- Internal #6607: IEJoin Task Locking by @hawkfish in #19852
- Add TOTAL_MEMORY_ALLOCATED profiling metric by @krleonid in #19834
- Delete unused block header size by @ccfelius in #19855
- [CAPI] Expose basic custom log storage to CAPI by @maiadegraaf in #19810
- Enable reads to run concurrently while another connection is checkpointing by @Mytherin in #19867
- CLI: Enable support for mouse clicks in Linenoise - pressing Ctrl+Q allows a single mouse-click to be consumed to change the cursor position by @Mytherin in #19869
- Add alias reference support (
alias.<name>) by @EtgarDev in #19747 - [Compression] Fix an existing and a new bug in Roaring compression by @Tishj in #19878
- PEG Transformer template script by @Dtenwolde in #19812
- [Testing][Dev] Extend tests covered by the
storage_compatibilitytest config by @Tishj in #19860 - [swift] decode boolean primitive type by @kokluch in #19890
- [Parquet] Implement automatic shredding for
VARIANTcolumns in COPY TO parquet by @Tishj in #19336 - Offset Pruning for Pagination Queries by @d-justen in #19806
- Internal #6568: SortStrategy Refactoring by @hawkfish in #19814
- Refactor hash join filter scan helper by @feichai0017 in #19802
- [Optimizer] Fix cardinality estimates getting lost through
struct_extractexpressions by @Tishj in #19829 - [Dev] Fix assertion failure in
AlterTypeby @Tishj in #19850 - Internal #6653: WindowExpression Construction by @hawkfish in #19885
- Fix nested sleep_ms calls and add tests by @krleonid in #19837
- fix: make row_start an optional_idx in
PartitionStatisticsby @rustyconover in #19903 - CLI: Refactor shell rendering code, move everything to
ShellRenderer, and perform various fixes by @Mytherin in #19897 - [Storage] Implement storage for VARIANT columns by @Tishj in #19674
- Encapsulate scalar/aggregate function callbacks by @Maxxen in #19707
- Merge V1.4 -> Main by @pdet in #19876
- Checkpoint: prevent adding blocks to the
free_listthat are still being used by concurrent readers by @Mytherin in #19928 - Merge V1.4 -> Main by @pdet in #19935
- Avoid eagerly grabbing the checkpoint lock when performing inserts, instead grab a shared table lock by @Mytherin in #19937
- [Checkpoint] Fully rewrite stats on Checkpoint by @Tishj in #19932
- fix: update aggregate docs regarding combine, add guards around calling combine callback. by @rustyconover in #19938
- [Wal]ReplayDelete in batches instead of rows by @artjomPlaunov in #19904
- CheckZonemapSegments: iterate on filters, then jump further by @carlopi in #19865
- Tweak Relation::Query() by @krlmlr in #19594
- More TASK_EXECUTOR opt-in by @carlopi in #19940
- [Stats]
has_no_nullis no longer initialized to true inBaseStatistics::CreateEmptyby @Tishj in #19948 - [Stats] Improve the
VariantStatsclass to support merging and better visualization by @Tishj in #19950 - Handle empty table name on CREATE by @yan-alex in #19955
- Fix ColumnAliasBinder by @d-justen in #19956
- CLI: Add support for dark / light mode that is automatically detected by @Mytherin in #19985
- CLI: Change return value from
-1tofalseinTryGetBackgroundColorby @c8ef in #19992 - CLI: Fully unify result rendering, and fix automatic pager mode by @Mytherin in #19988
- Adding extension alias lookup in GetDatabaseType by @tomas-karnagel in #19980
- CLI: Various auto-complete fixes by @Mytherin in #19995
- ALP uncompressed mode by @yan-alex in #19902
- Disable block allocator test on non-64bit by @lnkuiper in #19999
- Add comments to cardinality estimator code by @Tmonster in #19973
- [fix] ClientBufferManager::Pin to also propagate context when available by @carlopi in #19986
- Sideways Information Passing for Joins using Bloom Filters by @gropaul in #19502
- Don't require icu unless extension is enabled by @dg0yt in #19963
- Add z/OS support for block allocator by @DNikolaevAtRocket in #19977
- Add a secondary extension directory for package managers by @xhochy in #17499
- #15867 - Make it possible to hide query in profiling output by setting
query_namemetric to false. by @ormandi in #15870 - Internal #6607: IEJoin Task Locking by @hawkfish in #20028
- Fix #19984: shouldn't use outer table distinct info to eliminate join by @flashmouse in #20023
- fix: allow table in/out functions to indicate if they support parallelism by @rustyconover in #19951
- Fix #20029: accept "\e\" as termination sequence, and add a timeout to TryGetBackgroundColor by @Mytherin in #20042
- Fix #20034: correctly move correlated columns for lazy CTEs by @Mytherin in #20038
- Bloom filter row group skipping by @lnkuiper in #20035
- CLI: Optimize and clean-up result rendering code by @Mytherin in #20021
- fix alter table rename / alter on temp table losing temporary flag by @diwu-sf in #20011
- Improve catalog error message for missing schemas by @krleonid in #19922
- feat(adbc): partial supporting ADBC 1.1.0 by @eitsupi in #19833
- [Profiling] Generate more metric code and add metric subgroups by @maiadegraaf in #19483
- Filesystem-compatible wrapper for
CachingFileSystemby @dentiny in #19972 - #Fix 18158: Deliver child column info by @flashmouse in #18327
- Allow concurrent commits to happen while a checkpoint is running by @Mytherin in #20052
- CLI: Improve rendering of wide values, and improve auto-complete by @Mytherin in #20074
- Checkpoint: Allow vacuuming of rows for tables that have indexes if the vacuum does not change the rowids by @Mytherin in #20073
- Eagerly Execute Min/Max Aggregates on Statistics by @d-justen in #19906
- Late extension linking by @hannes in #19369
- ADBC: Set append data error in Ingest() by @kou in #19991
- Don't throw permission error during binder when LocalFileSystem is disabled by @JelteF in #20077
- Add
struct_valuesfunction to return field values of STRUCT by @EtgarDev in #19968 TupleDataCollection+MemoryTagfix by @lnkuiper in #20089- Enable Parquet reader support for uniformly encrypted Parquet files written by Arrow C++ API by @ccfelius in #20046
- Fix source and bin dirs to duckdb's root by @evertlammerts in #20088
- Allow CTEs to emit NULL types by @Mytherin in #20097
- Change CLI highlighting colors and error message rendering by @Mytherin in #20099
- Roaring boolean FetchRow fix by @yan-alex in #20101
- Fix race condition in piecewise merge join by @lnkuiper in #20059
- Improve join filter pushdown for ON clause conditions by @EslamAhmed171 in #19888
- Merge V1.4 -> Main by @pdet in #20111
- Fix parsing of dollar quoted strings in various places by @JelteF in #20121
- Do not autocomplete within dollar-quoted strings by @JelteF in #20122
- Fix concurrent test failure by @Mytherin in #20129
- Fix over-eager constraint checking in the presence of primary keys/unique constraints by @Mytherin in #20119
- When shortening columns in the BoxRenderer, avoid applying the min col width twice by @Mytherin in #20126
- Unify column renaming behavior of CTEs with other places in the system by @kryonix in #20116
- Fix vector sizes CI by @lnkuiper in #20130
- [Logging] Add assertions for LogType type by @maiadegraaf in #20064
- [Profiling] Check that file type set by
profiling_outputmatches output type by @maiadegraaf in #19946 - Add flag to use pre-built static library by @hannes in #20092
- Create Shell Log Storage to Print Warnings in CLI by @maiadegraaf in #19974
- [Doc] Add ccache into contributing doc build section by @dentiny in #20139
- Fix column lifetime for DISTINCT ON by @feichai0017 in #19786
- documentation for extension patch workflow by @artjomPlaunov in #19905
- Art pretty printer options by @artjomPlaunov in #20079
- feat: add
OperatorOrder()to table functions to indicate ordering needs. by @rustyconover in #19954 - Internal #6777: IEJoin Unified L1/2 by @hawkfish in #20083
- fix: link error on linux with multiple definition of LogicalType::VARCHAR in
shell_renderer.cppby @rustyconover in #20096 - Remove pointer indirection in ExtensionAccess by @staticlibs in #19529
- [Dev] Fix failure on
extension_entries.hppon main by @Tishj in #20138 - [Dev] Fix concurrent test failure (followup) by @Tishj in #20140
- HashCSVStateMachineConfig to return hash_t by @carlopi in #20137
- Provide option disable cache validation by @dentiny in #19886
- Parallel
TupleDataCollectiondestructor by @lnkuiper in #20159 - Internal #6778: IEJoin Parallel L1/L2 by @hawkfish in #20152
- Allow concurrent insertions into tables with indexes while checkpointing by @Mytherin in #20160
- Revert linux toolchain downgrade by @hannes in #20170
- Do not exit shell on Ctrl+C by @staticlibs in #20155
- CLI: Several rendering fixes / improvements by @Mytherin in #20175
- fix: remove extra space in GetName() for PhysicalTableScan in profiler output by @rustyconover in #20179
- Internal #6779: 64-Bit Range Joins by @hawkfish in #20176
- More
CommonSubplanOptimizerimprovements by @lnkuiper in #20168 - Profiling: Fix rows_scanned by @d-justen in #20161
- [Optimizer] Clean up the cross-over point from
ColumnIndex->StorageIndexby @Tishj in #20087 - Issue #19629: DATE_TRUNC Return Type by @hawkfish in #20120
- Move to macos-latest for newer compiler by @hannes in #20169
- [minor] Avoid divide by 0 for json progress report by @dentiny in #20196
- Allow Late Materialization for Parquet in TopNWindowElimination by @d-justen in #20066
- Link MSVC runtime library statically by @staticlibs in #19415
- fix ci run - 'no space left on device' by @c-herrewijn in #20203
- fix: simplify logic by removing empty else branch by @darion-yaphet in #20184
- fix: simplify platform detection in CMakeLists.txt by @darion-yaphet in #20183
- Add days_in_month internal macro for retrieving number of days in a month by @ArNine in #20180
- Fix try cast for variant to incompatible struct types by @wmTJc9IK0Q in #20211
- fix: add schema and catalog to table scan explain output by @rustyconover in #20181
- feat: add filenames to MultiFileDynamicToString by @rustyconover in #20182
- [C-API] Add support for scalar function local states by @Maxxen in #20109
- CLI: Add
.lastto re-render the last query result, and make several (performance) improvements to.mode duckboxby @Mytherin in #20223 - Throw exception if there is ARTKey mismatch by @artjomPlaunov in #20225
- Fix Windows shell input: correct variable buffering and character order by @EslamAhmed171 in #20217
- [minor] Address compilation warnings by @dentiny in #20213
- Refactor PhysicalCreateIndex and introduce index build abstraction by @ccfelius in #20158
- Refactor
PhysicalCreateIndexand introduce index build abstraction by @Maxxen in #19461 - Internal #6837: Streaming IGNORE NULLS by @hawkfish in #20226
- [Optimizer] Push down
struct_extractexpression to the storage. by @Tishj in #20063 - Friendly SWITCH case by @Dtenwolde in #20001
- Parallel
SortedRunMergerdestructor by @lnkuiper in #20200 - Internal #6462: Implement AGO Macro by @hawkfish in #20228
- Do not call UnregisterBlock from destructor by @staticlibs in #20242
- [minor] Address more compile warnings by @dentiny in #20232
- Re-enable aws tests by @Tmonster in #20249
- Fix wrong error message when add primary key to a view(#20239) by @ArNine in #20253
- Fix last parallel destructor race condition (hopefully) by @lnkuiper in #20251
- [Optimizer] Pushdown a CAST expression on top of a struct_extract by @Tishj in #20250
- [ART] Prefix handles by @artjomPlaunov in #19658
- Fix: CHECK constraint internal error on UPDATE with missing columns (#20199) by @AestheticAkhmad in #20243
- Internal #6462: Implement AGO Macro by @hawkfish in #20257
- feat: preserve ATTACH options and return via duckdb_databases() by @rustyconover in #20186
- support reading parquet files with empty groups by @achille-roussel in #20135
- Move checkpointing outside of the attached database destructor by @taniabogatsch in #19930
- Issue #20076: Implement CountWindowElimination Logic by @hawkfish in #20273
- Minor python fixes by @c-herrewijn in #20269
- Fix concat(null) error by @d-justen in #20266
- Big-endian patches (FSST, arrow, types, md5) by @DNikolaevAtRocket in #20237
- Merge
v1.4-andiumintomainby @carlopi in #20231 - Allow concurrent deletes while checkpointing by @Mytherin in #20286
- Correctly handle default expressions in WAL when doing
ALTER TABLE ... ADD COLUMN ... DEFAULT ...by @yan-alex in #20224 - [Fix] Use the current schema and catalog during data creation for TPCH and TPCDS by @taniabogatsch in #20290
- peg grammar: start rule first by @jraymakers in #20275
- return_stats for boolean and numeric (128 bits) during copy by @aykut-bozkurt in #20222
- Fixes raised by cppcheck by @carlopi in #20323
- Fixup QueryProfiler::GetBytesRead and Written by @carlopi in #20318
- Internal #6974: Window Self-Join Files by @hawkfish in #20317
- Internal #6999: Window TopN Comparisons by @hawkfish in #20316
- Internal #6943: IEJoin Code Cleanup by @hawkfish in #20315
- Use eager min/max aggregation on parquet statistics by @d-justen in https://github.com/duckdb/duckdb/pull/20301
- c-api: adding out_file against NULL check by @ProjectMutilation in https://github.com/duckdb/duckdb/pull/20303
- Apply LRU cache to parquet metadata by @dentiny in https://github.com/duckdb/duckdb/pull/20157
- [Profiling] Add duckdb_profiling_settings() macro by @maiadegraaf in https://github.com/duckdb/duckdb/pull/20234
- Fix some compiler warnings on apple clang 17 by @hannes in https://github.com/duckdb/duckdb/pull/20337
- feat(adbc): support the uri option of ADBC 1.1.0 by @eitsupi in https://github.com/duckdb/duckdb/pull/20312
- feat(adbc): support
ADBC_INFO_DRIVER_ADBC_VERSION(new in ADBC 1.1.0) by @eitsupi in https://github.com/duckdb/duckdb/pull/20344 GEOMETRYRework: Part 5 - Coordinate Reference System Support by @Maxxen in https://github.com/duckdb/duckdb/pull/20143- Remove two unnecessary test exclusions by @yan-alex in https://github.com/duckdb/duckdb/pull/20347
- Preserve uppercase chars in DB filename on Windows by @staticlibs in https://github.com/duckdb/duckdb/pull/20298
- Eager aggregate support filter by @flashmouse in https://github.com/duckdb/duckdb/pull/20198
- [Profiling] Add enable_profiling() Table Function by @maiadegraaf in https://github.com/duckdb/duckdb/pull/20151
- Fix: Potential Unexpected Result when Using TRY Expression #20006 by @AestheticAkhmad in https://github.com/duckdb/duckdb/pull/20238
- Fix #20308: Added collation binding to the join conditions by @gemy26 in https://github.com/duckdb/duckdb/pull/20349
- Pick up stale PR 19271 by @lnkuiper in https://github.com/duckdb/duckdb/pull/20359
- Support reading
FIXED_LEN_BYTE_ARRAYfields withDELTA_BYTE_ARRAYencoding by @arouel in https://github.com/duckdb/duckdb/pull/20270 - Parquet: Populate the column_orders field and expose it in parquet_file_metadata by @lasanaka-jumptrading in https://github.com/duckdb/duckdb/pull/20241
- Add RemoveFiles to FileSystem by @utay in https://github.com/duckdb/duckdb/pull/20333
- Perform cleanup when
COPYfunction throws an error by @yan-alex in https://github.com/duckdb/duckdb/pull/20345 - Pick up stale PR 19268 by @lnkuiper in https://github.com/duckdb/duckdb/pull/20358
- CachingOperator: handle also ORDERED, and consider swapping chunks by @carlopi in https://github.com/duckdb/duckdb/pull/20259
- fix binder: handle errors with over in where inside subquery by @Pranav2612000 in https://github.com/duckdb/duckdb/pull/20310
- Add interruption check to optimizer execution by @EtgarDev in https://github.com/duckdb/duckdb/pull/20377
- Out of core tests by @lnkuiper in https://github.com/duckdb/duckdb/pull/20383
- Use forward-compatible std::shuffle by @philippmd in https://github.com/duckdb/duckdb/pull/20395
- fix compilation with FORCE_QUERY_LOG=1 by @zhanglei1949 in https://github.com/duckdb/duckdb/pull/20387
- [minor] Fix a few compilation warnings by @dentiny in https://github.com/duckdb/duckdb/pull/20385
- Add
parse_formatted_bytesfunction to parse human-readable byte size by @EtgarDev in https://github.com/duckdb/duckdb/pull/20107 - Fix issue #20187: Fix PIVOT aggregate mismatch for ranges >=21 by @gemy26 in https://github.com/duckdb/duckdb/pull/20272
- Fix caching filesystem
CanSeekby @dentiny in https://github.com/duckdb/duckdb/pull/20330 - Improve format script compatibility on Windows by @xuboying in https://github.com/duckdb/duckdb/pull/20398
- Add way to skip version checks in scripts/format.py by @carlopi in https://github.com/duckdb/duckdb/pull/20388
- Fix function chain in qualify(#20233) by @ArNine in https://github.com/duckdb/duckdb/pull/20262
- Fix
concat(null) is nullreturn false, it should be true(issue: #20306) by @ArNine in https://github.com/duckdb/duckdb/pull/20320 - NightlyTests fixes by @lnkuiper in https://github.com/duckdb/duckdb/pull/20408
- Storage cleanup: remove unused headers and fix transitive includes by @Schwarf in https://github.com/duckdb/duckdb/pull/20407
- Avoid frequent checkpoints triggered by optimistic insertions by @Captain32 in https://github.com/duckdb/duckdb/pull/20336
- No catalog found Nightly test fix by @ccfelius in https://github.com/duckdb/duckdb/pull/20409
- TIME_NS Support + Arrow by @pdet in https://github.com/duckdb/duckdb/pull/20361
- feat(adbc): support the experimental
adbc.ingest.target_catalogoption and improve ingest name resolution by @eitsupi in https://github.com/duckdb/duckdb/pull/20369 - Fix file opener propagation by @dentiny in https://github.com/duckdb/duckdb/pull/20414
- Cleanup RowGroup Scan code, and make BoundIndex::Delete throw an error if the rows are not present in the index by @Mytherin in https://github.com/duckdb/duckdb/pull/20430
- [Optimizer] Support NOT elimination by @doublefish5106 in https://github.com/duckdb/duckdb/pull/20394
- JSON Reader: exit scan loop if we have found an error that we can't yet throw by @Mytherin in https://github.com/duckdb/duckdb/pull/20434
- Merge V1.4 -> Main by @pdet in https://github.com/duckdb/duckdb/pull/20350
- Internal #6975: Window Inner Self-Join by @hawkfish in https://github.com/duckdb/duckdb/pull/20459
- Issue #20413: ASOF Arbitrary Predicates by @hawkfish in https://github.com/duckdb/duckdb/pull/20456
- [C API] Expose safe string assign function by @taniabogatsch in https://github.com/duckdb/duckdb/pull/20467
- Internal #6976: Window Self-Join Predicate by @hawkfish in https://github.com/duckdb/duckdb/pull/20473
- CMake: export also duckdb_generated_extension_loader by @carlopi in https://github.com/duckdb/duckdb/pull/20449
- Chore: merge back main into v1.5-variegata by @carlopi in https://github.com/duckdb/duckdb/pull/20469
- add_third_party(skiplist) into top level CMake by @carlopi in https://github.com/duckdb/duckdb/pull/20494
- Add SHOW schemas by @c-herrewijn in https://github.com/duckdb/duckdb/pull/20492
- [SQLLogicTest] Add the
CONTINUEstatement by @Tishj in https://github.com/duckdb/duckdb/pull/20489 - Remove fs limitation: OVERWRITE is not supported for remote file systems by @carlopi in https://github.com/duckdb/duckdb/pull/20487
- [Encryption] Adding random IV and tag for canary encryption by @ccfelius in https://github.com/duckdb/duckdb/pull/20208
- [Optimizer] Push down
variant_extract+ cast into the storage layer by @Tishj in https://github.com/duckdb/duckdb/pull/20268 - Internal #6977: Window Self-Join Aggregate by @hawkfish in https://github.com/duckdb/duckdb/pull/20497
Full Changelog: v1.4.4...v1.5.0
performanceoptimizationfeaturesstoragequery-engine
Source: original entry ↗