github duckdb/duckdb v0.10.0
DuckDB 0.10.0 "Fusca"

latest releases: v0.10.2, v0.10.1
2 months ago

This release of DuckDB is named "Fusca" after the Velvet Scooter native to Europe.

Note: The on-disk storage format is backwards-compatible with the 0.9 releases of DuckDB. For details, please see the release announcement blog post.

Also note that we've dropped' the "Preview" designation with this release. DuckDB has matured quite a bit since we started creating releases back in 2019, and it is no longer appropriate.

What's Changed

  • feat(jdbc): support uuid param type by @Mause in #9164
  • Bump ADBC to v0.7 by @pdet in #9185
  • Add support for parquet key-value metadata by @Maxxen in #9126
  • Default to JSON type if objects have an inconsistent structure by @lnkuiper in #9086
  • Add schema parameter to read_parquet by @lnkuiper in #9123
  • [Python] Add the ability to provide a list of files to read_csv by @Tishj in #8977
  • Issue #7672: TIMESTAMP_XX to DATE by @hawkfish in #9279
  • N-ary lambdas, and indexes as lambda parameters by @taniabogatsch in #8851
  • Feature: Fixed size list nested type (ARRAY) by @Maxxen in #8983
  • Fix unused warning by @Maxxen in #9318
  • Internal #215: Window EXCLUDE Functionality by @hawkfish in #9220
  • Add json_serialize_plan, json_serialize_sql tweaks by @Maxxen in #9230
  • Add create statement support to fuzzer by @Tmonster in #9011
  • Fix for issue #8108: Random() in lambda by @maiadegraaf in #9353
  • Fix Lambda Serialization by @taniabogatsch in #9323
  • Allow file_row_number with parquet schema option by @samansmink in #9290
  • CSV - Always run sniffer by default by @pdet in #9250
  • [Python Dev] Import items lazily by @Tishj in #8741
  • Array fixes + make validity more lazy by @Maxxen in #9400
  • Lambda performance revamp by @taniabogatsch in #9395
  • [Python] Support replacement scan on connection.table(<name>) method by @Tishj in #9427
  • [Dev] Fix failure in Format Check CI job by @carlopi in #9516
  • Fix parquet serialization by @Maxxen in #9485
  • Support gcs:// and r2:// URLs to read data from GCS and R2 by @chrisiou in #9388
  • Don't reset validity target count by @Maxxen in #9565
  • Merge into feature by @carlopi in #9583
  • Additional list functions by @cryoEncryp in #8907
  • [Python] Support Optional[...] in DuckDBPyType by @Tishj in #8658
  • C-API: support streaming arrow query by @Virgiel in #8642
  • Add ToString and Print method for JoinRelationSetManager and Fix JoinNode Print by @Light-City in #9040
  • Removed artificial HUGEINT minimum by @nickgerrets in #9441
  • Parquet Encryption by @lnkuiper in #9392
  • Internal #330: Quantile Performance by @hawkfish in #9461
  • CAPI: Make it possible to create enum types by @alnkesq in #8788
  • 5614 database invalidated by @Tmonster in #9513
  • Add support for proper scoping (catalog + schema) to custom types by @Mytherin in #9622
  • Internal #576: strptime strftime infinities by @hawkfish in #9615
  • ATTACH IF NOT EXISTS by @Mytherin in #9627
  • Small benchmark changes by @taniabogatsch in #9638
  • add option for keep_alive setting by @samansmink in #9648
  • Add "getenv" function to shell which can be used to read environment variables, and allow functions to be used in SET statements/PRAGMA statements by @Mytherin in #9651
  • Julia release by @Mytherin in #9670
  • In set operations ORDER BY columns refer to the first set operation in SQL - so the reference is not ambiguous by @Mytherin in #9658
  • Replace old logos by @szarnyasg in #9674
  • Fix dbgen/dsdgen when using custom catalog and schema by @ywelsch in #9686
  • [Arrow] Properly use the parent's array.offset in many places in the scan by @Tishj in #9661
  • Update issue template with API/extension repositories by @szarnyasg in #9693
  • [Python] Fix lossy datetime.timedelta to INTERVAL conversion by @Tishj in #9688
  • Issue template: Report vulnerabilities via dedicated channel by @szarnyasg in #9711
  • Fix #9601: Call correct method in duckdb_pending_execution_is_finished by @Mytherin in #9728
  • Merge Feature Into Main by @Mytherin in #9726
  • feat(c): add functions for determining statement/return types by @Mause in #9430
  • Issue #9673: ICU DST Truncation by @hawkfish in #9705
  • Deserialize header fields by @carlopi in #9687
  • fix: restore support for windows network paths by @Mause in #9725
  • Constant time attach path lookup and locking to ensure unique file handles by @taniabogatsch in #9671
  • [ART] WAL serialization, automatic checkpointing, decoupling catalog and storage, index names by @taniabogatsch in #9339
  • Fix expanding structs in queries with ORDER BY by @taniabogatsch in #9481
  • Only emit batch indices valid within the current pipeline by @ywelsch in #9702
  • Fix #9717: Correctly set null statistics of children of structs by @Mytherin in #9733
  • Fixes to warning and rendering of bar() by @carlopi in #9734
  • Don't show "blabla" as part of syntax error by @mlafeldt in #9746
  • Fix #9742: correctly catch empty ROW case in UPDATE by @Mytherin in #9744
  • Explicitly attach duckdb file type by @taniabogatsch in #9747
  • For ATTACH - Resolve extension prefix before determining the name so "sqlite:file.db" is again correctly aliased as "file" instead of "sqlite:file" by @Mytherin in #9753
  • Wasm: Add wasm_threads as a class of built extensions by @carlopi in #9735
  • Remove index joins by @taniabogatsch in #9751
  • Support EXCEPT ALL and INTERSECT ALL by @hannes in #9636
  • Add nightly deploy script by @samansmink in #9761
  • update vcpkg by @samansmink in #9759
  • Close s3 filehandle on destruction by @samansmink in #9758
  • add list of collations that are required to determine equality. by @Tmonster in #9757
  • Apply fix for patching vcpkg in extension workflow by @samansmink in #9767
  • Internal #766: SkipList Coin Toss by @hawkfish in #9772
  • Support reading large decimals into doubles in the Parquet reader by @Mytherin in #9770
  • ATTACH - Always run ExtractExtensionPrefix also if a name is provided by @Mytherin in #9771
  • Issue #9762: Interval Fractional Seconds by @hawkfish in #9773
  • Internal #716: Summarize approx_unique BIGINT by @hawkfish in #9774
  • Issue #9755: TIMESTAMP_XX DOUBLE Parts by @hawkfish in #9769
  • Add support for COPY FROM DATABASE statement by @Mytherin in #9765
  • chore: move links duckdblabs -> duckdb by @dpprdan in #9779
  • Detect FreeBSD platform by @szarnyasg in #9782
  • Extention template: Enable DuckDB-Wasm extensions by @carlopi in #9356
  • Version: add info on v0.9.2 by @carlopi in #9788
  • [JDBC] Sync all methods from a statement that interact with a query result by @pdet in #9659
  • format_bytes rework, moving from decimal multipliers to binary ones by @carlopi in #9736
  • Make FORCE CHECKPOINT abort transactions of concurrently running queries by @Mytherin in #9790
  • Bugfix/9768 by @nbc in #9791
  • Cleanup raw pointers from transaction manager by @Mytherin in #9237
  • Partially fix #4182 - write distinct stats for string dictionary columns by @Mytherin in #9518
  • fix(python): minimal changes to support compiling for python 3.12 by @Mause in #9797
  • Implement #2534 - add parquet_file_metadata function that supports scanning top-level file metadata by @Mytherin in #9793
  • Correctly clean up database path when an error is thrown in attach by @Mytherin in #9792
  • Fix cotangent(0.0): should also throw OutOfRange by @carlopi in #9799
  • Call BindSchemaOrCatalog when binding functions so that we can qualify functions with only a database as well by @Mytherin in #9810
  • Fix #9739 - UNIQUE USING INDEX is not supported by @Mytherin in #9809
  • Fix #8596 - use ConstructConstantFromExpression for PIVOT IN list by @Mytherin in #9813
  • Fix #8500 - if we encounter any ambiguity while binding a function with a parameter we rebind during execution by @Mytherin in #9814
  • Remove watchOS from CI tests by @carlopi in #9820
  • Fix #9262 - avoid checking exclusion/replace list when extracting table names by @Mytherin in #9812
  • LIST to VARCHAR cast fix by @taniabogatsch in #9819
  • Fix #9806 - when an overflow is detected during filter pushdown the pushdown should be halted, instead of claiming the result is always false by @Mytherin in #9816
  • Parquet: Include column key-value metadata in parquet_metadata function by @Mytherin in #9798
  • Add duckdb_optimizers function by @Mytherin in #9815
  • Internal #805: Summarize NULL Percentage by @hawkfish in #9822
  • Add s3a s3n protocols for httpfs by @samansmink in #9817
  • S3: Add more details to error on multipart upload by @carlopi in #9826
  • CI fixes by @Mytherin in #9827
  • [Python] Pandas Analyzer no longer trips up when the pandas_analyze_sample would only let it find nulls. by @Tishj in #9811
  • Create streaming result from a prepared statement. by @Giorgi in #9802
  • Clear all updates during checkpoint by @Mytherin in #9829
  • Fix #9825 - disable adding transitive filters for <> in filter combiner by @Mytherin in #9832
  • [Upsert] Do not require ON CONFLICT clause on INSERT OR REPLACE in some situations. by @Tishj in #9730
  • Issue #9631: Time/Interval Hours by @hawkfish in #9643
  • feat(c): support creating nested values in C API by @Mause in #9438
  • For EXPORT DATABASE - always write forward slashes in COPY statements by @Mytherin in #9833
  • Make checking the database path atomic again by turning db_paths into a bloom filter instead of a source of truth by @Mytherin in #9828
  • Issue #9785: Missing Interval Parts by @hawkfish in #9796
  • Issue#604 Support collations during IN/NOT IN operations. by @StarveZhou in #9724
  • Reset expression before returning binder error by @taniabogatsch in #9821
  • Fix: Undefined behaviour in Bitpacking compression by @nickgerrets in #9844
  • Add ORDER BY to List_Select test by @maiadegraaf in #9847
  • CSV Sniffer Function by @pdet in #9522
  • Expand Progress API by @pdet in #9531
  • Fix #8095: Adjust the LG_PAGE parameter in jemalloc to accommodate the 64KB PAGE SIZE in aarch64 Linux systems. by @vincent-chang in #9642
  • Improve error message for index limitations by @szarnyasg in #9862
  • Fix empty box in explain analyze statement by @chrisiou in #9860
  • [Python] No longer scan datetime.datetime.max as infinity by @Tishj in #9848
  • Move Wasm logic to inside CMake by @carlopi in #9830
  • Fix s3fs close issue by @samansmink in #9846
  • Fix TSAN issue related to db_paths_lock by @Mytherin in #9868
  • Fix #9863 - avoid moving constants for DATE - DATE subtractions by @Mytherin in #9874
  • Disable progress bar test by @Mytherin in #9875
  • add FROM to InitialKeywords vector in autocomplete extension by @hamilton in #9877
  • [Optimizer] regexp_matches fix InternalException caused by NULL by @Tishj in #9872
  • [ADBC Test] Prevent segfault in test by @Tishj in #9871
  • Fix progress test by properly initialising variables by @pdet in #9882
  • Capitalize URL in httpfs extension flags by @szarnyasg in #9884
  • Mark BufferPool getters const by @Y-- in #9885
  • make BufferPool members protected by @jkub in #9886
  • Parquet: Support more physical types of time columns with time zone by @hannes in #9895
  • docs(capi): add tests for prepared statement streaming by @Mause in #9892
  • Fix deadlock in LockClients when checkpointing multiple databases, and avoid locking all clients for regular checkpoints by @Mytherin in #9898
  • Disable copy constructor of connection by @Mytherin in #9899
  • Add TableCatalogEntry to bind info by @Mytherin in #9896
  • Issue #9869: Strptime Week Start by @hawkfish in #9890
  • Fix #9867 - correctly propagate relation name in COLUMNS expression by @Mytherin in #9904
  • Fix progress bar (again) by @pdet in #9905
  • Safeguard uses of ColumnDefinition::DefaultValue by @Tishj in #9842
  • Various CI fixes by @Mytherin in #9903
  • [ADBC] Add support for windows. by @pdet in #9357
  • Fix #8905 - make duckdb_rows_changed work with both new and deprecated results by @Mytherin in #9907
  • ART duckdb versions test requires 64-bit system by @taniabogatsch in #9906
  • Internal #751: Shared Window Partition by @hawkfish in #9839
  • Issue #9887: ISO Format Directives by @hawkfish in #9910
  • Fix: string to integer cast by @nickgerrets in #9581
  • [Test] Make test_progress_bar.cpp output more verbose by @Tishj in #9916
  • Refactor and fix ART concurrency tests to avoid spurious CI failures by @taniabogatsch in #9919
  • Write old (empty) index_pointers to table metadata for forwards compatibility with v0.9.2 by @Mytherin in #9923
  • User agent in http header by @elefeint in #9632
  • Add support for vacuuming partial deletes during CHECKPOINT by @Mytherin in #9931
  • JDBC: DuckDBNative - Close Shared Object InputStream Properly by @brianwyka in #9933
  • Fix ATTACH of foreign key by @taniabogatsch in #9932
  • [DependencyManager] Rework internals of the DependencyManager by @Tishj in #9715
  • Internal #873: Empty Aggregate Frames by @hawkfish in #9936
  • Add support for right_semi and right_anti. PR 2 by @Tmonster in #9897
  • httpfs: fix null pointer dereference in AWSEnvironmentCredentialsProvider by @mlafeldt in #9953
  • Limit initial combine capacity in RadixPartitionedHashTable by @lnkuiper in #9946
  • [Python][Dev] Switch to using pyproject.toml when building and running CI. by @Tishj in #9944
  • Issue#9795 min/max doesn't use collation by @StarveZhou in #9855
  • [Arrow][UDF] Properly support side_effects parameter for Arrow UDFs. by @Tishj in #9959
  • JDBC - Appender for Decimal by @Jens-H in #9568
  • [Fix] No duplicates in list_intersect by @taniabogatsch in #9947
  • [Python] Fix the ability to provide pandas_analyze_sample_size in the config dictionary to connect by @Tishj in #9961
  • [SQLLogicTest] Expected error message is no longer optional for statement error by @Tishj in #9962
  • fix offset type in list_casts and array_casts. by @yiyuanliu in #9972
  • Issue #9978: Approximate Quantile Overflow by @hawkfish in #9985
  • fix regexp_replace bug by @alitrack in #9938
  • chore: Remove dead code by @krlmlr in #9992
  • Internal #898: Totally Ordered Intervals by @hawkfish in #9994
  • Swift Readme.md small fix by @atacan in #9977
  • Issue #9956: Alternative TIME Casts by @hawkfish in #9984
  • Make IEJoin code more clear by @xuke-hat in #9973
  • Parallel Checkpointing by @Mytherin in #9999
  • [Fix] ambiguous lambda parameters by @taniabogatsch in #9974
  • [Python][Dev] Disable test causing issues on Python3.7 by @Tishj in #10005
  • Shell: Many improvements/fixes to multi-line mode, enable multi-line mode by default by @Mytherin in #10015
  • Increase CLI history's max length to 1000 by @szarnyasg in #10006
  • [Fix] nullptr dereference when analyzing nested types by @taniabogatsch in #10004
  • Improving error message when trying to open a locked database by @hannes in #9988
  • fix(function): fix ceil function by @sundy-li in #10014
  • fix read parquet progress and read csv progress. by @yiyuanliu in #10013
  • [Python][StreamQueryResult] Fix memory ownership issues in StreamQueryResult::FetchRaw by @Tishj in #9968
  • Revert to old method of computing terminal size as new method does not play nice with lldb by @Mytherin in #10026
  • Issue #9762: Interval Fractional Parts by @hawkfish in #9954
  • Fix #9380 and #9738 by @lnkuiper in #9990
  • Fix array subquery by @chenzl25 in #10025
  • Issue #4545: Windowed Distinct Aggregates by @hawkfish in #9754
  • add rowsort to test by @stephaniewang526 in #10036
  • The UHUGEINT type by @nickgerrets in #8635
  • build(python): fix python pkg version by @Mause in #10049
  • Add support for FixedPointDeclimals v0.5 by @mcmcgrath13 in #10039
  • DuckDB Secrets by @samansmink in #10042
  • Improve progress bar for Aggregation and limit threads for large data sizes by @lnkuiper in #9989
  • Internal #940: GCC Window Distinct by @hawkfish in #10054
  • Fix #10058: correctly handle unicode literals in regexp optimizer by @Mytherin in #10061
  • Update database_size.hpp by @rjatwal in #10072
  • enable overriding per-query working-memory target. by @jkub in #9544
  • fix(c): fix duckdb_create_union_type by @Mause in #10097
  • Call InitialCleanup in PendingQuery(SQLStatement) by @ywelsch in #10083
  • Removing useless variables by @ywgrit in #10082
  • [WIP] Support dot notation for JSON by @ankrgyl in #9499
  • Refactor deploy script for extensions by @samansmink in #10063
  • Add list_reduce lambda function by @maiadegraaf in #9909
  • Handle s3_endpoint that includes path by @tom-s-powell in #9918
  • Update year in license file to 2024 by @szarnyasg in #10103
  • Not including stdlib for just size_t, stddef is smaller header by @hannes in #10104
  • Bump iceberg extension version by @samansmink in #10102
  • Internal #783: ICU DatePart Serializers by @hawkfish in #10055
  • CI: Add backlink to original issue when its status changes by @szarnyasg in #10111
  • Streamline handling issues that come with PRs fixing them by @szarnyasg in #10116
  • Fix ParquetScanMaxThreads. by @yiyuanliu in #10113
  • test(python): fix blind catches by @Mause in #10118
  • CI: Create separate job for handling 'PR submitted' label by @szarnyasg in #10119
  • Lazy WAL creation by @taniabogatsch in #10086
  • [BREAKING] Modify implicit casting rules to differentiate between string literals and VARCHAR columns, and disable implicit casting to VARCHAR for many types by @Mytherin in #10115
  • For parsed expressions and table references - serialize query location, and obtain query location for more properties in transformer by @Mytherin in #10130
  • Checksum WAL entries by @Mytherin in #10126
  • Display unnamed structs as tuples instead of as structs with empty keys by @Mytherin in #10134
  • Fix #10008 - disallow parameters in DEFAULT clause, and remove unsupported SQLite code for handling parameters in shell by @Mytherin in #10135
  • Issue #10140: NULL Constant Lists by @hawkfish in #10142
  • feat(py): support python 3.12 by @Mause in #10144
  • fix create_function python stub by @yiyuanliu in #10132
  • fix(py): don't use jemalloc on windows by @Mause in #10145
  • Build manylinux_2_28 arm python wheels by @samansmink in #10137
  • Slightly improve performance of the first aggregate function by @lnkuiper in #9957
  • Add csv & parquet write functions and toPandas to experimental PySpark API by @TomBurdge in #9672
  • Add handling for duckdb-wasm extensions in extension-upload-from-nightly by @carlopi in #9883
  • Add some pg session function to pg_catalog by @goldmedal in #10156
  • Fix CSE elimination for window functions with bind data. Fixes #10124 by @How-u-doing in #10152
  • feat(py): Py3.12 support for Windows by @Mause in #10159
  • Py3.12 Windows nightly fixes by @Mause in #10160
  • Serialization for scalar functions nextval and currval by @ywelsch in #10146
  • Pushdown filters into semi and anti joins by @Tmonster in #10110
  • Issue #9950: Ordered Aggregate Performance by @hawkfish in #10045
  • uhugeint_t/hugeint_t operator changes by @nickgerrets in #10117
  • add regexp_escape function by @chrisiou in #10044
  • Infrastructure: truncate not always available in CI, use dd by @carlopi in #10162
  • JSON S3 optimization by @samansmink in #10151
  • Remove chunk collection from reservoir sampler by @Tmonster in #10038
  • Fix #10074 - for materialized CTEs the final result names are not influenced by the aliases. Only the names of the CTE itself are influenced by the aliases. by @Mytherin in #10163
  • [Python] Fix issue in DataFrame construction where non-deduplicated names were being used mistakenly by @Tishj in #10165
  • Fix #10141 - Correctly handle recursive and nested types that refer to other types in CREATE TYPE by @Mytherin in #10164
  • Suspend duckdb shell on Ctrl+Z by @gsauthof in #10172
  • Fix #9456 and improve Deliminator by @lnkuiper in #9993
  • Temporary Memory Manager by @lnkuiper in #10147
  • Issue #10138: Finite Temporal Helpers by @hawkfish in #10157
  • Internal #425: TIMETZ Functions by @hawkfish in #10107
  • Fix #10057: report correct error message when binding an aliased column fails by @Mytherin in #10176
  • Allow unquoted keywords to be used in DETACH by @Mytherin in #10175
  • Implement FILE_SIZE_BYTES by @lnkuiper in #9920
  • [Parquet] Fix 10148, allow reading large byte arrays into small decimals for stats by @hannes in #10183
  • Throw binder error when returning list has no columns by @Tmonster in #10184
  • Fix missing move by @samansmink in #10186
  • [BREAKING] Implicit cast rules for integer literals, and parameterized ANY for binding by @Mytherin in #10194
  • Handle 0-list maps (erroring out) and add test-case by @carlopi in #10187
  • Internal #1001: SEM Test Determinism by @hawkfish in #10197
  • More work towards Custom Indexes by @Maxxen in #10032
  • Collations are not yet properly serialized, remove enable_verification by @carlopi in #10206
  • fix: reject creation of persistent secrets when allow_persistent_secrets=false for storage backends other than local_file by @stephaniewang526 in #10199
  • prevent physical nested loop join with multiple conditions on semi an… by @Tmonster in #10190
  • chore: add const to BaseSecret and KeyValueSecret copy ctrs, fix compilation error by @stephaniewang526 in #10182
  • Allow DESCRIBE/SHOW/SUMMARIZE to be used as a subquery by @Mytherin in #10210
  • Internal #1042: 2023d Time Zones by @hawkfish in #10215
  • fix: fix a bug where free_space was incorrectly calculated when flushing partial blocks by @gitccl in #10220
  • Support more PG information_schema views by @goldmedal in #10222
  • Fix Issue #10122: wrong result in IEJoin by @xuke-hat in #10123
  • Internal #861: Aggregation Absorb API by @hawkfish in #9971
  • Better Cardinality estimates for right and left semi/anti joins by @Tmonster in #9976
  • Open JSON files lock-free if there are many by @lnkuiper in #10188
  • Bitpacking compression for the UHUGEINT type by @nickgerrets in #10195
  • fix: drop secret if exists on non-existing secret should not cause ex by @stephaniewang526 in #10217
  • Replace 'embedded' with 'in-process' in the Python package description by @szarnyasg in #10232
  • In .mode json in the shell use standard float output method by @Mytherin in #10229
  • Remove duplicate columns in PhysicalHashJoin by @lnkuiper in #10203
  • Out-of-tree extensions for R Windows by @samansmink in #10204
  • [Python] Output unnamed structs as tuple in fetchone/many/all methods by @Tishj in #10174
  • Internal #1022: Window TIME RANGE by @hawkfish in #10181
  • fix(capi): add basic TIME_TZ support by @Mause in #10207
  • Lambda scoping by @taniabogatsch in #10150
  • Add batch functionality by @osidekyle in #10011
  • Make FILE_SIZE_BYTES test more lenient by @lnkuiper in #10234
  • Allow SQLNULL to be bound in VALUES list by @Mytherin in #10238
  • Sequence clean-up - move all sequence access through a SequenceData entry that is concurrency safe by @Mytherin in #10236
  • Remove duplicate join conditions by @lnkuiper in #10235
  • UNPIVOT - maintain original types and throw a better exception if type matching is not possible by @Mytherin in #10240
  • Correctly account for ORDER BY in ColumnLifetimeAnalyzer optimization pass by @Mytherin in #10242
  • CSV Parser 2.0 by @pdet in #10209
  • COPY - allow copy_file_name to be formatted as identifier by @Mytherin in #10246
  • remove C-style cast in compression module by @gitccl in #10256
  • Allow dsdgen to be interrupted by user by @elefeint in #10262
  • Upgrade the schema of pg_proc to PostgreSQL 16 by @goldmedal in #10248
  • chore: improvements to duckdb_api / user_agent by @elefeint in #10226
  • Issue #10249: Window Clause Casing by @hawkfish in #10259
  • Fix issue 10254 by @lnkuiper in #10265
  • Store unqualified macro parameters, qualify before binding by @lnkuiper in #10266
  • Fix 9384 by @lnkuiper in #10267
  • Fixes #10212: Correctly account for non-flat vectors in ListColumnData::Skip by @Mytherin in #10268
  • Enable intercepting file copy extension after binding by @Maxxen in #10255
  • [Dev][Util] Have unittest respect the --start-offset parameter when used alongside -l by @Tishj in #10277
  • Issue #10272: DATE + INTERVAL by @hawkfish in #10274
  • Fix #10279 - correctly use unsigned integers in delta decoding to wrap overflows as specified by the spec by @Mytherin in #10288
  • Add parse_path(), parse_dirname() and parse_filename() functions by @chrisiou in #10208
  • [Compression] ALP Compression (float/double) by @lkuffo in #9635
  • Add function for non-bias-corrected kurtosis by @david-cortes in #9545
  • fix the problem of fetching wrong data when using bitpacking compression by @gitccl in #10291
  • [Python] Compatibility with pandas==2.2.0 by @Tishj in #10290
  • Avoid re-rendering the progress bar if the percentage has not changed by @Mytherin in #10284
  • Adapt further for z/OS by @v1gnesh in #10297
  • CSV Parser Optimizations: Pre-computed skip list. Simpler state machine transition. Flip state machine states and transitions. by @pdet in #10258
  • Explicitly cast FTS column to VARCHAR by @lnkuiper in #10299
  • Add table macro_definition to duckdb_functions() by @lnkuiper in #10301
  • [CSV Parser] Fix regression with dialect detection on quoted values. by @pdet in #10307
  • Improve bitpacking skip performance + better testing of FetchRow by @samansmink in #10295
  • Fix #10308 - allow describe/summarize as prepared statement, and fix issue with describe/summarize with ctes by @Mytherin in #10311
  • CSV Reader making null padding Parallel by default by @pdet in #10306
  • Remove spinlock for closing JSON files by @lnkuiper in #10300
  • Fix NumericLimits<hugeint_t>::Minimum() * 0 case by @xuke-hat in #10319
  • C API updates by @taniabogatsch in #10317
  • Add create_sort_key function by @Mytherin in #10321
  • SQLLogicTestRunner - Make mode command work in loops, and add mode no_output by @Mytherin in #10328
  • Escape all ASCII control characters in duckbox rendering by @Mytherin in #10327
  • Fix Failing Nightly Swift test by @Tmonster in #10320
  • Basic struct filter pushdown by @Maxxen in #10314
  • Improve the check for glob in sniff_csv function. by @gabihodoroaga in #10243
  • Add an icon to the duckdb.exe shell executable by @renevdzee in #9656
  • [Arrow] Support scanning REE (Run End Encoded) Arrow arrays by @Tishj in #9836
  • [Compression] Fix Handling of -0.0 in ALP by @lkuffo in #10335
  • Split jdbc tests by @Mause in #10338
  • Set interrupted flag after pushing an error to prevent race condition where the InterruptException could end up being the top-level error by @Mytherin in #10337
  • [Python] Fix bug in conversion of INTERVAL to datetime.timedelta by @Tishj in #10339
  • Update Postgres and SQLite extensions by @Mytherin in #10310
  • Limit the number of threads used to scan distinct aggregates by @lnkuiper in #10318
  • Fail Regression test when difference in cardinalities is detected by @Tmonster in #10340
  • pin ccache action version by @samansmink in #10344
  • test_all_types.py: Formatting according to black 24 by @carlopi in #10353
  • Allow NULL bytes in ART indexes by @Mytherin in #10325
  • Ensure version numbers passed to Windows .rc file are numbers by @Mytherin in #10358
  • Feature: Digit separators in numeric literals by @Maxxen in #10343
  • Autocomplete small improvements by @carlopi in #10370
  • Fix: correctly set list size of dictionary vector by @gitccl in #10369
  • Check black version in script/format.py by @carlopi in #10354
  • Change extension_directory default by @carlopi in #10359
  • feat(jdbc): setBytes by @Mause in #10365
  • [Block Size] CI test for 16KB block size and related code changes by @taniabogatsch in #9967
  • CI: Add workflow to check new issues for code formatting by @szarnyasg in #10149
  • Add additional STRUCT expansion tests by @taniabogatsch in #10373
  • Fix MATERIALIZED CTE issue #10260 by @kryonix in #10386
  • Add table_sample to TableStatistics (currently saved as nullptr) by @Tmonster in #10378
  • [Python][Dev] Use duckdb_cursor to avoid unintentionally sharing catalogs and registered objects by @Tishj in #10388
  • Extension metadata: detecting the platform by @carlopi in #10329
  • Add missing checkpoints in test by @Maxxen in #10389
  • Remove Python function signature (in test) by @carlopi in #10399
  • Avoid requiring expected error message on original sqlite tests by @carlopi in #10392
  • Case insensitive extensions install & load by @carlopi in #10380
  • Platform detection: Fix thread sanitizer job passing absolute path by @carlopi in #10398
  • [CSV Reader] Implicit Casting and Projection Pushdown by @pdet in #10390
  • CI: Fix workflow to check new issues for code formatting by using heredoc by @szarnyasg in #10403
  • Rework Exception Internals by @Mytherin in #10410
  • avoid copying in the for loop when there is a const by @zhouzilong2020 in #10418
  • Fix drop secret bug by @samansmink in #10185
  • Issue template: Ask about testing with the nightly build (instead of 'main') by @szarnyasg in #10405
  • [CSV Reader] Use array instead of unordered_map in projection pushdown by @pdet in #10411
  • [C-API] Add duckdb_appender_column_type by @maiadegraaf in #10401
  • Fix results for anti joins on empty tables by @Tmonster in #10413
  • Don't write Chimp/Patas files anymore & deprecate patas and chimp by @Mytherin in #10423
  • Small secret manager refactor by @samansmink in #10421
  • [Python][Dev] Skip pyarrow test_struct_filter_pushdown on python3.8 by @Tishj in #10419
  • Add read_text and read_blob table functions by @Maxxen in #10376
  • Rework FunctionSideEffects to FunctionStability - allow NOW() to be pushed down by @Mytherin in #10426
  • Remove dev logging on local_extension_repo creation by @carlopi in #10424
  • GH Workflows: Create CI job for Coverity scan by @moshekaplan in #10433
  • Issue #10224: FIRST ORDER BY by @hawkfish in #10347
  • Coverity Scan: Project name is DuckDB by @Mytherin in #10447
  • Multiline mode: add continuation prompt rendering by @Mytherin in #10425
  • Python: fix exception hierarchy, and also catch std::exception by @Mytherin in #10420
  • Fix bug with full file download by @samansmink in #10429
  • Add cloudflare invalidation to nightly deploy script by @samansmink in #10430
  • fix(py): fix building python binding from cmake by @Mause in #10445
  • [CSV] Bug Fix related to quoted values starting with empty values by @pdet in #10438
  • Add COMMENT ON statement by @samansmink in #10372
  • CLI: Highlighting for continuation tokens by @Mytherin in #10453
  • Issue #10224: ORDERED FIRST Rewrite by @hawkfish in #10457
  • add support for date, time, timestamp types to the Julia appender api by @rdavis120 in #10449
  • Bugfix/#10441 correctly validate second colon in jdbc url parameter in Java client. by @peteraisher in #10442
  • [Execution] Parallel StreamQueryResult by @Tishj in #10245
  • [Julia][Dev] Improve README by @Tishj in #10464
  • Linenoise Code Cleanup by @Mytherin in #10461
  • [Bug Fix] [CSV Sniffing] Removing double quotes in header by @pdet in #10462
  • [Add Test] [CSV Parser] Type Detection on columns with null values by @pdet in #10465
  • Unconnected fixes by @carlopi in #10467
  • CLI: Only show continuation bytes while editing the query by @Mytherin in #10470
  • [CSV Reader] [Add Test] Quoted Values impacting the column sniffing. by @pdet in #10472
  • GzipFS - use unique_ptr instead of new/delete by @Mytherin in #10474
  • Group together index instantiation parameters into a struct, pass options map as well. by @Maxxen in #10471
  • Patch to build on Windows ARM 64 by @hannes in #10479
  • [Bug Fix] [CSV Reader] Fix to using null_padding in conjunction to one of the multifile reader options by @pdet in #10473
  • More linenoise/CLI improvements by @Mytherin in #10480
  • Add documentation example for Julia appender api. by @rdavis120 in #10475
  • Linenoise: add support for many more alt command sequences by @Mytherin in #10493
  • Use CMAKE_CURRENT_BINARY_DIR in CMakeLists by @Flogex in #10484
  • Avoid setting DUCKDB_NORMALIZED_VERSION to an empty string by @SChakravorti21 in #10492
  • Tag memory that is allocated through the buffer manager, and add duckdb_memory() function by @Mytherin in #10496
  • Linenoise: Disable automatic auto-complete rendering by default for now by @Mytherin in #10498
  • Fix edge case in RANGE for dates/timestamps when start=end by @Mytherin in #10499
  • Fix for auto-complete on empty words so behavior is consistent with previous DuckDB by @Mytherin in #10502
  • Nested Array Validity Fixes + RowOperations by @Maxxen in #10483
  • Keep file extension for temporary files by @Maxxen in #10459
  • bundle-library: Add optional Makefile target by @carlopi in #10507
  • Fix #10363 - prefer selecting entire rows over SQL value functions by @Mytherin in #10505
  • [CSV Reader] Avoid unnecessary writes to temporary file when reading in limited memory cases by @pdet in #10509
  • [Dev] Fix ASAN thread limit exceeded issue in CI by @Tishj in #10510
  • [Dev] Cancel tasks in EndQueryInternal by @Tishj in #10512
  • Export stack trace as part of extra exception info if DUCKDB_DEBUG_STACKTRACE is defined (DEBUG_STACKTRACE cmake variable) by @Mytherin in #10514
  • feat: make SecretEntry copyable so we don't lose the underlying BaseSecret obj for non-CatalogSet secrets by @stephaniewang526 in #10518
  • fix(py): json type in description field by @Mause in #10521
  • Decorrelation and parallelization of recursive and materialized CTEs by @kryonix in #10357
  • Keep track of view names and aliases separately so we can distinguish between explicitly provided aliases by the user and names returned by the view, and block usage of view if names changed by @Mytherin in #10500
  • Tweak TemporaryMemoryManager by @lnkuiper in #10503
  • On *nix, return errno in IOException extra_info by @philippmd in #10529
  • Use null cast instead of reinterpret for NULL -> JSON by @lnkuiper in #10526
  • [Python] Fix various small issues by @Tishj in #10533
  • [CSV Reader] NullPadding Tests by @pdet in #10530
  • Linenoise: make ENTER behave more similarly to other CLI clients - Ctrl+X can now be used to enter newlines at the cursor position by @Mytherin in #10527
  • [Python][Dev] Add PYTHON_EDITABLE_BUILD to Makefile by @Tishj in #10488
  • Reset git status before applying patches in out-of-tree build by @Mytherin in #10534
  • Fix #10486 - allow out-of-order struct casting by @Mytherin in #10537
  • Make ClientContext available during attach by @ywelsch in #10531
  • feat(jdbc): setDate by @Mause in #10408
  • Fix unused variable warning/error by @carlopi in #10542
  • [Dev]: ICU 2024a TimeZones by @hawkfish in #10544
  • Path utility fixes by @Maxxen in #10538
  • Support struct_extract and unnest for unnamed structs by @Mytherin in #10541
  • [Dev] Fix isses in parallel Checkpoint by @Tishj in #10525
  • More TemporaryMemoryManager tweaks by @lnkuiper in #10549
  • Add order to tests by @Flogex in #10536
  • Require at least 1 argument when calling ListZip during bind by @Tmonster in #10485
  • Benchmark runner: check for errors also if no result is specified by @Mytherin in #10554
  • [CSV Reader] [Bug Fix] Nightly CI Segfaults by @pdet in #10551
  • Fix for test/sql/copy/file_size_bytes_large.test_slow test by @pdet in #10552
  • Simplify binary-search in FindRunIndex by @felipecrv in #10487
  • Remove query profiler history and add hooks for certain events in the ClientContext by @Mytherin in #10504
  • [CSV Reader] Reset state on quoted/escaped when applying projection pushdown by @pdet in #10557
  • CommitState::WriteCatalogEntry refactor by @carlopi in #10555
  • [CSV Reader] Fix 9952 and race condition on error handler by @pdet in #10558
  • Fix a few tests failing non-deterministically with ALTERNATIVE_VERIFY=1 by @carlopi in #10560
  • unittester: if test-dir is provided avoid deleting it by @carlopi in #10564
  • Allow DuckDB execution without implicit main thread by @ywelsch in #10548
  • Fix #10528 - disallow parsing exponents for integers in strict parsing mode by @Mytherin in #10559
  • [Python] Fix issues related to handling of Python exceptions by @Tishj in #10563
  • [Python] Fix crash caused by fetch_record_batch by @Tishj in #10565
  • [Dev] Skip some tests on ALTERNATIVE_VERIFY by @Tishj in #10567
  • [Python][Dev] Test does not throw HTTPException by @Tishj in #10568
  • [Export] Fix export of user-defined types by @Tishj in #10569
  • Fix heap buffer overflow in VARCHAR -> TIME trycast by @Tishj in #10571
  • [Dev][CI] Add --no-exit to run_tests_one_by_one by @carlopi in #10572
  • Handle also branch with no threads enabled by @carlopi in #10573
  • Deduplicate code dealing with deduplication of column names by @Tishj in #10532
  • Bump spatial by @Maxxen in #10580
  • extension_distribution.yml: Pass DUCKDB_PLATFORM by @carlopi in #10582
  • chore(jdbc): correct datetime delta by @Mause in #10584
  • Fix Nested Array TupleData Serialization by @Maxxen in #10513
  • Do not replace filters that evaluate to always true by @Tmonster in #10553
  • [Dev] Fix triggered assertion in SortedAggregateState::FlushChunks caused by a small STANDARD_VECTOR_SIZE by @Tishj in #10202
  • [Tester] Add --require <name> by @Tishj in #10579
  • Add Support Options page by @szarnyasg in #10598
  • Use all threads to read multiple parquet files. by @Tmonster in #10590
  • [CSV-Reader] Fix on finalize for projection pushdown + nullpadding by @pdet in #10596
  • [Julia] Remove DataFrame from Project.toml by @Tishj in #10605
  • [CSV Reader] [Bug Fix] Make CSV Results hold the buffers they depend on by @pdet in #10589
  • minor secret manager fix by @samansmink in #10600
  • Point error message to stable link by @carlopi in #10592
  • Fix issue in aggregate HT where a task could be blocked and never be unblocked if the aggregation was interrupted early due to e.g. a limit by @Mytherin in #10604
  • Memory tracking - explicitly zero-initialize memory tracking arrays by @Mytherin in #10606
  • [Dev] Bump extensions & apply patches by @carlopi in #10603
  • Secret folder by @carlopi in #10607
  • JDBC: Skip combine test run because #10338 by @hannes in #10616
  • Fix for SQL value functions when there is an alias specified by @Mytherin in #10611
  • delay secret storage initialization by @samansmink in #10612

Full Changelog: v0.9.2...v0.10.0

Don't miss a new duckdb release

NewReleases is sending notifications on new releases.