Skip to content

Releases: duckdb/duckdb

v0.10.2 Bugfix Release

17 Apr 13:50
1601d94
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 0.10.1. There are no new features, just bug fixes. Database files created by DuckDB v0.10.* or v0.9.* can be read by DuckDB v0.10.2.

SQL Modifications

This release has a number of bug fixes that change SQL semantics in a few edge cases:

  • Nested Boolean Comparisons now have consistent NULL comparison semantics - #11496
  • Structs with non-matching keys require explicit casts when compared or combined - #11396

What's Changed

Read more

v0.10.1 Bugfix Release

18 Mar 16:02
4a89d97
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 0.10.0. There are no new features, just bug fixes. Database files created by DuckDB v0.10.0 or v0.9.* can be read by DuckDB v0.10.1.

What's Changed

Read more

DuckDB 0.10.0 "Fusca"

13 Feb 13:10
20b1486
Compare
Choose a tag to compare

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

Read more

0.9.2 Bugfix Release

14 Nov 08:32
3c695d7
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 0.9.1. There are no new features, just bug fixes. Database files created by DuckDB v0.9.0 or v0.9.1 can be read by DuckDB v0.9.2 (i.e. v0.9.2 is backwards compatible with both v0.9.0 and 0.9.1 and vice versa).

What's Changed

Read more

0.9.1 Bugfix Release

11 Oct 10:28
401c806
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 0.9.0. There are no new features, just bug fixes. Database files created by DuckDB v0.9.0 can be read by DuckDB v0.9.1 (i.e. v0.9.1 is backwards compatible with v0.9.0 and vice versa).

What's Changed

0.9.0 Preview Release "Undulata"

26 Sep 09:57
0d84ccf
Compare
Choose a tag to compare

This preview release of DuckDB is named "Undulata" after the aptly named Yellow-billed duck native to Africa.

Note: Again, this release introduces a backwards-incompatible change to the on-disk storage format. We suggest you use the EXPORT DATABASE command with the old version followed by IMPORT DATABASE with the new version to migrate your data. See the documentation for details.

What's Changed

Read more

0.8.1 Bugfix Release

13 Jun 08:32
6536a77
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 0.8.0. There are no new features, just bug fixes. Database files created by DuckDB v0.8.0 can be read by DuckDB v0.8.1 (i.e. v0.8.1 is backwards compatible with v0.8.0). Note that database files created by v0.8.1 cannot be read by DuckDB v0.8.0 (i.e. v0.8.0 is not forwards compatible with v0.8.1).

Changes

  • [Julia] Update DuckDB_jll to v0.8.0 by @Mytherin in #7568
  • CSV reader - allow parallel option to be set in COPY statement as well by @Mytherin in #7579
  • shell: Remove .dbinfo command. by @omo in #7569
  • Catalog::LookupEntry(): Remove unused code. by @omo in #7557
  • Add the default scheme to the CREATE TYPE's type search path. by @omo in #7555
  • Use std::all_of instead of raw loop in Disjoint. by @ttsugriy in #7549
  • feat: introduce a common grammar/types file for libpgquery parser and update Python scripts to take source/target directory paths as argument by @stephaniewang526 in #7574
  • Fix #7582 - correctly set "last_offset" in InitializeScanWithOffset and turn assertion into run-time check by @Mytherin in #7586
  • Partially fix #7551 - throw internal exception in case of type mismatch in ExpressionExecutor by @Mytherin in #7587
  • Fix #7602 - allow reserved keywords in named parameters by @Mytherin in #7604
  • Fix #7599 - output a clear error message when a subquery is used in a table function that does not support it by @Mytherin in #7603
  • Rework Code Coverage CI - Remove CodeCov and instead track uncovered lines explicitly + turn lack of coverage into a CI failure by @Mytherin in #7611
  • Use unordered_set insert range overload. by @ttsugriy in #7615
  • Reserve expression_costs storage. by @ttsugriy in #7608
  • [ADBC] Testing Unhappy Paths, Fixing Memory Leaks from Error Setting, Removing Macros by @pdet in #7589
  • Windows - path is only absolute if path starts with a single back-slash by @Mytherin in #7623
  • Fix #7564 - if the auto-complete extension is not enabled, inline it into the shell by @Mytherin in #7621
  • Remove 2 extra bytes from magic string pattern. by @ttsugriy in #7626
  • Avoid unnecessary table lookup. by @ttsugriy in #7630
  • Reserve enough storage for unbound_expressions. by @ttsugriy in #7627
  • Increment code coverage by @Mytherin in #7636
  • Remove all C-style casts and add clang-tidy rule to forbid them by @Mytherin in #7656
  • Fix sql auto complete extension CI issue by @Mytherin in #7650
  • Add missing entries to ParquetDecodeUtils::BITPACK_MASKS by @Tishj in #7658
  • Fix: allow distinct and order by in list aggregates by @taniabogatsch in #7638
  • Rework the AggregateExecutor interface to no longer have unnecessary pointers and arrays by @Mytherin in #7671
  • Fix #7660 - avoid exporting the same catalog multiple times in EXPORT by @Mytherin in #7676
  • Move BindUpdateConstraints into a virtual function that is implemented by the DuckTableEntry by @Mytherin in #7679
  • Fix #7567 - when setting the schema to a different schema within another catalog, keep the correct catalog by @Mytherin in #7678
  • Fix exception fmt by @carlopi in #7683
  • Fix amalgamation build by avoiding overloading multiplication by @carlopi in #7661
  • Fix #7659 - use correct catalog when replaying a CREATE TABLE in the WAL by @Mytherin in #7675
  • Implement #7662 - add the "lock_configuration" setting which allows configurations to be locked down by @Mytherin in #7682
  • Fix #7663 - add in_search_path function, correctly show temporary views in SHOW TABLES, and show views in SHOW ALL TABLES by @Mytherin in #7680
  • expose the StripUnicodeSpaces parser utility method by @stephaniewang526 in #7705
  • Add FuzzyDuck fuzzer - and move fuzzer CI to separate repo by @Mytherin in #7712
  • Add missing std::move for old GCCs by @Mytherin in #7714
  • [Dev] Fix failing assertion in python debug by @Tishj in #7722
  • Fix crash in ArrowTableFunction::GetArrowLogicalType on Linux by @Tishj in #7718
  • Allow core duckdb to handle unrecognized JDBC configuration by @elefeint in #7713
  • [ADBC] Transactions and explicitly not-supporting Partition Reading/Execution by @pdet in #7639
  • Verify that Parallel CSV Reader skips lines mid-threads by @pdet in #7637
  • Fix issue with setup.py builds without dependencies by @samansmink in #7695
  • [Python] Fix tests for Pandas 2.0.2 by @Tishj in #7726
  • Code Coverage CI check - allow one uncovered line by @Mytherin in #7724
  • Generate default_types from json files by @Tishj in #7646
  • Fix fuzzer issues found by new fuzzer CI runs by @Mytherin in #7736
  • [Python] Fix conversion of deeply nested dictionaries by @Tishj in #7739
  • Fix TupleDataCollection List serialization by @lnkuiper in #7741
  • Fuzzer #156: Copy Before Swizzle by @hawkfish in #7747
  • Minor fixes to failing CI runs by @carlopi in #7768
  • Fix more fuzzer issues found by new fuzzer CI by @Mytherin in #7759
  • Add option to disable serialization by @stephaniewang526 in #7745
  • fix(httpfs): correct listobjectv2_url for strict s3/http servers by @Mause in #7761
  • Fuzzer #209: Multiple Scalar Blocks by @hawkfish in #7764
  • Fuzzer #206: Fix Cast Overflow by @hawkfish in #7770
  • More minor CI fixes by @Mytherin in #7779
  • Add Exception on dependency verification for Enum Types and Temp Tables by @pdet in #7641
  • Add fuzz_all_functions fuzzer, and add support for varargs to test_vector_types by @Mytherin in #7754
  • JSON fixes by @lnkuiper in #7762
  • [Julia] Fix issue related to table function callbacks and IO by @Tishj in #7783
  • [Dev] Use sql in the python_regression_test.py. by @Tishj in #7787
  • Allow core duckdb to handle unrecognized C API configuration by @elefeint in #7804
  • Fuzzer #214: ROWS BETWEEN Overflow by @hawkfish in #7767
  • Add tests to cover issue 5132 and enable force reload by @taniabogatsch in #7800
  • Fuzzer #215: Timestamp Arithmetic Overflow by @hawkfish in #7769
  • Remove grammar support for CREATE/DROP DATABASE by @stephaniewang526 in #7806
  • Serialize: fix some uncovered cases, part 1 by @carlopi in #7810
  • CodeCov tweaks by @carlopi in #7815
  • fix(jdbc): arrow error handling by @Mause in #7814
  • Fix duck fuzzer #218 and #220 by @carlopi in #7818
  • Add msan and ubsan to cifuzz (+ fix zstd + msan) by @carlopi in #7813
  • Art bug fixes by @taniabogatsch in #7801
  • Check GlobalSortState for external scan in PhysicalWindow by @lnkuiper in #7827
  • remove un-used PGNodeTag by @stephaniewang526 in #7833
  • refactor(fsspec): remove seekable flag by @Mause in #6585
  • Unnest_rewriter fixes by @taniabogatsch in #7836
  • [Julia] Fix comments on #7783 by @Tishj in #7843
  • Disable attaching on-disk DuckDB databases if external access is disabled by @Mytherin in #7850
  • Fix #7711 - disallow detaching the currently USEd database by @Mytherin in #7851
  • [Python] only execute in DuckDBPyRelation::Close if it was never executed before by @Tishj in #7844
  • Add rel_from_table_function to R relational API by @hannes in https://github.com/duckdb/d...
Read more

0.8.0 Preview Release "Fulvigula"

17 May 09:30
e8e4cea
Compare
Choose a tag to compare

This preview release of DuckDB is named "Fulvigula" after the Mottled duck (Anas fulvigula) which lives in the Gulf of Mexico, where it is apparently highly prized amongst (heartless) hunters.

There are two SQL-level breaking changes in this release:

  • #7174 The default sort order switched from NULLS FIRST to NULLS LAST because this is more intuitive, especially in conjunction with LIMIT.
  • #7082 The division operator / will now always lead to a floating point result even with integer parameters. The new operator // retains the old semantics. This change is consistent with Python.

Note: Again, this release introduces a backwards-incompatible change to the on-disk storage format. We suggest you use the EXPORT DATABASE command with the old version followed by IMPORT DATABASE with the new version to migrate your data. See the documentation for details.

What's Changed

  • Issue 5984 #4 LogicalColumnIndex out of range Error by @Tmonster in #6303
  • Implementing Integration with PyTorch by @pdet in #6295
  • Implement #4941: Python client: for streaming fetches construct a streaming result (fetch_one, record_batch_reader, etc) by @Mytherin in #6346
  • Implement sharable Buffer Pool across DatabaseInstances by @jkub in #6299
  • Add table functions range and generate_series for TIMESTAMPTZ by @papparapa in #6285
  • Add Initial DuckDB Swift API by @tcldr in #6351
  • Integration with TensorFlow Tensors by @pdet in #6348
  • Windows - remove delayload code and enable statically linking extensions by default by @Mytherin in #6399
  • Add support for Pivot/Unpivot statements by @Mytherin in #6387
  • [C-API] Add support for StreamQueryResult by @Tishj in #6318
  • [Swift] add remaining non-composite types by @tcldr in #6422
  • [Swift] Add Prepared Statements by @tcldr in #6459
  • [Python] Exclude jemalloc files while pip install on Android OS by @papparapa in #6450
  • CI: Swap cron for repository_dispatch by @carlopi in #6498
  • CI improvements + add version badge to README by @carlopi in #6493
  • Storage: store lists as uint64 offsets instead of as list_entry_t by @Mytherin in #6499
  • two changes facilitating sending table/column stats over the wire (M… by @peterboncz in #6440
  • Rework Value class internals to have a similar structure to LogicalType and others by @Mytherin in #6503
  • Remove unswizzle flag from SortedData::Unswizzle by @lnkuiper in #6501
  • [Swift] Add Appender by @tcldr in #6482
  • JDBC: Remove DuckDBDatabase by @MariusVolkhart in #6426
  • Add nan and inf arithmetic by @Tmonster in #6415
  • Update tools/rpkg README.md by @Tishj in #6530
  • Merge feature into master by @Mytherin in #6534
  • Restrict threads for reliability. by @hawkfish in #6540
  • Replace replace with format strings by @domoritz in #6542
  • Add missing escape for " by @domoritz in #6543
  • Blob <-> Bitstring casting by @LindsayWray in #6488
  • Mapfunctions: map_entries, map_values, map_keys by @LindsayWray in #6522
  • Issue #5920: Ordered Aggregate Buffering by @hawkfish in #6539
  • Handle SQL-tagged strings correctly with dplyr::tbl, fixes #6506 by @rsund in #6536
  • CI: Update Swift.yml by @carlopi in #6553
  • Update SwiftRelease.yml by @carlopi in #6554
  • Java: Implement JDBC 4.1 by @MariusVolkhart in #6376
  • Bitstring aggregations by @LindsayWray in #6417
  • Make our default threads setting Cgroup-aware on Linux by @Tishj in #6550
  • [Swift] Add composite type support by @tcldr in #6557
  • Statistics Rework: Switch to single BaseStatistics class, use separate static classes for methods on the stats instead by @Mytherin in #6560
  • Introduce Syntax for SEMI and ANTI joins by @Tmonster in #6480
  • Update storage_info with version 0.7.1 by @carlopi in #6572
  • [Python] Add the ability to supply a DuckDBPyRelation instance to register by @Tishj in #6483
  • [Python] map now defaults to original type when analyzed type at bind is NULL by @Tishj in #6571
  • [Dev] Fix broken test_filesystem.py test by @Tishj in #6582
  • CI: Node.js, add common NPM-setup step by @carlopi in #6590
  • build: add builds for nodejs linux arm64 by @Mause in #6586
  • CI: move to setup-node@v3 by @carlopi in #6596
  • Issue #6604: TIMESTAMP <=> TIMESTAMPTZ by @hawkfish in #6605
  • [Python] Add support for EXPLAIN ANALYZE to explain method by @Tishj in #6561
  • Add ICU list functions generate_series and range by @papparapa in #6445
  • feat(nodejs): add errorType attribute to DuckDbError by @Mause in #6434
  • Fix TPC-DS date insertion by @ywelsch in #6591
  • Fix #4016: Test amalgamation with --split param by @carlopi in #6587
  • feat(python): throw HTTPExceptions instead of IOException for http errors by @Mause in #6533
  • Add httpfs config to support packaging it as an extension by @ankrgyl in #6608
  • Issue #6595: N-Ary Positional Joins by @hawkfish in #6598
  • [Swift] inline documentation plus API tweaks by @tcldr in #6614
  • Fix #6602: add inet extension to build/distribute script by @Mytherin in #6610
  • CI remove amalgama x8 + swift release by @carlopi in #6615
  • Fix too many open file handles during JSON schema detection by @lnkuiper in #6613
  • Issue #6580: Parquet Int96 Timestamps by @hawkfish in #6601
  • Exception_static_build defalt: Partial revert of dabbead by @carlopi in #6620
  • Make DISTINCT ON respect the ORDER BY clause similar to Postgres + several ordered aggregate improvements by @Mytherin in #6616
  • fix url encode issue for R2 by @samansmink in #6609
  • [Swift] Database.Configuration type + documentation enhancements by @tcldr in #6617
  • R: Avoid passing SEXP by reference by @krlmlr in #6475
  • Test and fix preservation of class attribute in external pointers by @krlmlr in #6526
  • Add support for lambda functions to COLUMNS, and allow COLUMNS to be used in the ORDER BY/WHERE clauses by @Mytherin in #6621
  • [R] Remove duplicate occurrence of dependency by @Tishj in #6625
  • Automatically Fully Download Files through HTTPFS if no length header is provided by @pdet in #6448
  • Remove some function calls that can throw potential false positives in CI by @Tmonster in #6623
  • [Python] Add __getattr__ and __getitem__ implementations for DuckDBPyRelation by @Tishj in #6624
  • [Optimizer] Regex Optimization Rule fix by @Tishj in #6634
  • [Bug Fix] Enum Serialization by @pdet in #6040
  • Update interval for arrow by @handstuyennn in #6515
  • SQLLogicTest - instead of moving prepared statements over avoid restarting database when there are prepared statements by @Mytherin in #6638
  • Bind replace table function by @samansmink in #6639
  • Fix #6630: correctly set bind_data->types in the Parquet scan when using union_by_name by @Mytherin in #6642
  • [Python] read_csv can now read from a file-like object. by @Tishj in #6568
  • Fix #6640: correctly throw an error on altering schemas by @Mytherin in #6643
  • Support multiple aggregates in top-level pivot by @m...
Read more

0.7.1 Bugfix Release

27 Feb 13:22
b00b93f
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 0.7.0. There are no new features, just bug fixes. Notably, there is no incompatibility with database files created with v0.7.0

Changes

Read more

0.7.0 Preview Release "Labradorius"

13 Feb 08:33
Compare
Choose a tag to compare

This preview release of DuckDB is named "Labradorius" after the Labrador duck (Camptorhynchus labradorius) which was native to North America and went extinct in 1878 despite its reportedly bad taste.

Again, @Mytherin has written a blog post explaining the exciting list of new features in this release.

Binary builds are listed at the bottom of this post. Please note that it can take a couple of hours until binary builds for all platforms and environments are available.

Note: Again, this release introduces a backwards-incompatible change to the on-disk storage format. We suggest you use the EXPORT DATABASE command with the old version followed by IMPORT DATABASE with the new version to migrate your data. See the documentation for details.

What's Changed

  • Use structs to avoid confusing C pointer wrappers by @krlmlr in #4961
  • Enum type added to the types metadata table by @LindsayWray in #5290
  • R: code format by @krlmlr in #5185
  • Add starts_with function and operator by @papparapa in #5334
  • Feature: Allow binary-formatted strings to be cast to integers by @Maxxen in #5337
  • For range joins use NL join when the LHS or RHS side is tiny by @Mytherin in #5399
  • Add support for LATERAL joins by @Mytherin in #5393
  • [Julia] Add support for consuming a UNION vector into a DataFrame by @Tishj in #5360
  • Issue #5314: At Time Zone by @hawkfish in #5341
  • Decimal values now round when the value given has more decimals than the scale of the target by @Tishj in #5362
  • Shell: add individual SQL queries to the history, instead of individual lines by @Mytherin in #5414
  • Shell: add support for history search by @Mytherin in #5415
  • Parallelise scanning result of ORDER_BY by @lnkuiper in #5403
  • Add translate function by @zhouliqi in #5212
  • Enable cmake to recognize AppleClang by @changhiskhan in #5432
  • Support enum_code() function by @lokax in #5408
  • Fix binder error and produce more informative error message. by @Tmonster in #5302
  • Parquet Reader: Re-use (de)compression and dictionary buffers and allocate powers of two by @Mytherin in #5445
  • Support RLE, DELTA_BYTE_ARRAY and DELTA_LENGTH_BYTE_ARRAY Parquet encodings by @Mytherin in #5457
  • print profiling output for deserialized logical query plans by @ila in #5448
  • Issue #5277: Sorted Aggregate Sorting by @hawkfish in #5456
  • Add internal flag to duckdb_functions, and correctly set internal flag for internal functions by @Mytherin in #5462
  • Add experimental R String passthrough support by @hannes in #5479
  • Issue #5258: Quantile Negative Fractions by @hawkfish in #5463
  • Arrow stream ingestion for JDBC client by @hannes in #5449
  • PER_THREAD_OUTPUT flag for COPY by @hannes in #5412
  • Feature: skip broken tests for now by @Mytherin in #5532
  • Add Union All support to R extention by @Tmonster in #5484
  • [Python] Add from_parquet features by @papparapa in #5492
  • Add ExtractStatements to C API by @LindsayWray in #5524
  • Improve http retry by @samansmink in #5549
  • Issue #5277: Sorted Aggregate Window by @hawkfish in #5571
  • Issue #5422: QUANTILE_DESC Decimals by @hawkfish in #5572
  • Issue #5559: 2022g Time Zones by @hawkfish in #5570
  • [Dev] Clean up of the python pkg folder structure by @Tishj in #5436
  • httpfs: check environment vars for AWS Credentials by @satotake in #5419
  • Misc union-type improvements by @Maxxen in #5617
  • Fix so Left inner join doesn't re-optimize nodes by @Tmonster in #5620
  • [Substrait] C API + from_substrait_json + bump on substrait version. by @pdet in #5613
  • Allow strings in ColumnDataCollection to be written to disk by @lnkuiper in #5543
  • [PythonDEV] Let clean.sh be run from anywhere, not just tools/pythonpkg by @Tishj in #5625
  • Reorganize Join order optimizer code by @Tmonster in #5621
  • [Catalog] Grab missing write_locks in a couple places by @Tishj in #5601
  • Parquet info to Substrait by @pdet in #5627
  • HTTP parquet optimizations by @samansmink in #5405
  • Adding delta compression to Bitpacking compression by @samansmink in #5491
  • [Python] Changed use of DuckDBPyConnection to shared_ptr by @Tishj in #5635
  • Merge feature branch into master by @Mytherin in #5645
  • [Python] Display progress bar by default in an interactive environment by @Tishj in #5596
  • Add support for RESET statement on configuration options by @Tishj in #5603
  • httpfs: Encode url path on request by @satotake in #5587
  • Fix broken CI because of RESET statement by @Tishj in #5671
  • Don't automatically set the bug label on issues by @Mytherin in #5680
  • Add support for CREATE VIEW IF NOT EXISTS by @Mytherin in #5682
  • Issue #5622: Validate Timezone Characters by @hawkfish in #5658
  • Issue 5630 fix. by @Tmonster in #5644
  • Adding COLUMN_TYPES option for read_csv_auto by @pdet in #5552
  • [Python] Get rid of DuckDBPyResult (merged functionality into DuckDBPyRelation) by @Tishj in #5597
  • feat: port nodejs tests to typescript by @Mause in #5632
  • Improve nodejs README by @Tishj in #5688
  • [Python] Add (partial) support for numpy.datetime64 objects by @Tishj in #5659
  • retry on all httplib errors by @samansmink in #5684
  • Return false if file doesn't exist by @Y-- in #5701
  • Adding context option to not run replacement scans and exporting namespace of json substrait function - R by @pdet in #5689
  • Issue #5609: Scope CTE Windows by @hawkfish in #5690
  • Attempt to fix random NodeJS CI failure by @Tishj in #5710
  • [Python] duckdb.execute() == duckdb.default_connection.execute() by @Tishj in #5650
  • NodeJS: switch to using package_build, and add support to BUILD_NODE to Makefile by @Mytherin in #5691
  • JDBC SNAPSHOT Jars by @hannes in #5687
  • Fix NodeJS 19 CI for Windows by @Tishj in #5719
  • Fix issue 5664 by @lokax in #5667
  • Issue #5712: CURRENT_TIMESTAMP and CURRENT_TIME by @hawkfish in #5713
  • [CSVReader] Catch a user error in supplying 'columns' option by @Tishj in #5721
  • Improve suggestions when LOAD of an extension fails by @Mytherin in #5722
  • doc(nodejs): amend arrow stream type docs by @Mause in #5731
  • Fix for TSV throwing during sniffing by @pdet in #5555
  • Statically link extensions on Linux with Clang by @jkub in #5653
  • [Python] Add support for named parameters by @Tishj in #5611
  • fix: nodejs source releases should be standalone by @Mause in #5734
  • build: don't install python from chocolatey by @Mause in #5740
  • fix: use non-string-splitting variable interpolation in binding.gyp.in by @Mause in #5745
  • Equalizing DBConfig constructors by @nicku33 in #5747
  • We should not treat replacement open paths as disk paths by @nicku33 in #5748
  • Allow table in-out functions to be used in correlated subqueries and as LATERAL queries by @Mytherin in https://github.com/duckdb/duckdb...
Read more