This release adds 3 notable features for engineering teams evaluating rollout.
Published 5d
Relational Databases
✓ No known CVEs patched
✓ No known CVEs patched in this version
Topics
agent-memory
agent-memory-server
ai-agents
ai-database
data-version-control
data-versioning
+14 more
database
database-version-control
database-versioning
decentralized-database
git
git-database
git-for-data
git-for-databases
git-sql
immutable-database
mariadb
mysql
sql
version-controlled-database
Summary
AI summaryBroad release touches dolt, go-mysql-server, https, and Closed Issues.
Full changelog
Merged PRs
dolt
- 11332: /go/cmd/dolt/cli: only emit backspace characters in a tty
The CLI's progress spinners (dolt push, pull, fetch, assist, and import/sql progress output) redraw themselves in place by writing backspace control characters. This was done unconditionally, with no check for whether output was going to a terminal.
When stdout/stderr is captured to a file or pipe — a script, a CI job, dolt push > push.log 2>&1 — those backspaces become literal bytes in the log instead of cursor movements. Rendering the log then "erases" the surrounding text. The worst case: an error is printed while the spinner is active, and the spinner's trailing backspaces overwrite the error text, so the captured log looks empty exactly when something went wrong.
This PR fixes this so that TTY is detected and redraw is gated on it. - 11327: Add support for functional indexes with multiple expressions
Picks up support for functional indexes with multiple expressions from GMS (https://github.com/dolthub/go-mysql-server/pull/3634) and adds additional tests for Dolt.
Depends on: https://github.com/dolthub/go-mysql-server/pull/3634 - 11326: unsafe adaptive value
- 11325: gitblobstore: fix premature flush and prune of pending write that was not referenced in current manifest
CheckAndPut("manifest") flushed all queued pendingWrites into the commit, regardless of whether the manifest being written referenced them. That commits a table file into the git tree as an unreferenced entry, which a later manifest flush then legitimately prunes and evicts from the in-memory cache — while the file is still live (about to be added, or being re-read by addTableFiles' refCheckAllSources retry loop). The result is Blob not found. Stale pendingWrites from earlier failed pushes in the same process keep the condition sticky, which is why a restart clears it.
This PR only flushes the pending writes the manifest actually references. Unreferenced writes stay pending until a manifest that references them is written, so they're committed and referenced atomically. After this change a live table file is always either pending and cached (not in the tree, so unprunable) or committed and referenced (never pruned) — an unreferenced tree entry can no longer coexist with being live. - 11320: go: sql_server_driver: Fix a race on *SqlServer.Cmd access. Start the command before we spawn its wait goroutine.
- 11316: go: sqle/cluster: Improve dolt_cluster_ack_writes_timeout_secs circuit breaker behavior.
Previously, the circuit breaker only had an open and a closed state. It would only go from open to closed when the replication thread fully quiesced. This PR adds a half-open state, where it lets a single commit probe for replication success within the configured timeout. If that wait succeeds, the circuit breaker closes.
This lets high write throughput use cases reenable their configured replication waits even when writes arrive more requently than their typical replication delay. - 11314: go: sqle/cluster: controller.go: Make DROP DATABASE replication participate in dolt_cluster_ack_writes_timeout_secs.
- 11313: go: Fix some data races surfaced by running go-sql-server-driver tests under -race.
- 11312: go/store/nbs: Fix a race between the journal persister and PruneTableFiles.
When PruneTableFiles runs, it is willing to delete the journal file if there is no longer a reference to it in the manifest. This can race with bootstrapJournal making a new journal file. The journal file can be on disk, and seen by PruneTableFiles and thus selected for removal, before the journal has been added to the chunk store proper.
This change makes the journal writer participate in the retained files machinery, same as the table file persister, so that the journal is correctly considered not-safe-for-delete-by-PruneTableFiles before it is ever created on disk and potentially selected for deletion by PruneTableFiles. - 11305: fix stats functions to include schema
We lookup stats with empty string for schema. Since this is not always the case, we sometimes miss stats. - 11290: Bump golang.org/x/net v0.54.0 => v0.55.0 for Go 1.27 compatibility
Go 1.27 change:- https://github.com/golang/go/discussions/60746
- https://github.com/golang/go/issues/67810
Problem found in - https://github.com/Homebrew/homebrew-core/pull/288803
Build error:
$ go1.27rc1 build -v ./cmd/dolt google.golang.org/grpc/internal/transport # google.golang.org/grpc/internal/transport ../../../../go/pkg/mod/google.golang.org/[email protected]/internal/transport/handler_server.go:271:18: undefined: http2.TrailerPrefixgolang.org/x/netupgrade
Build successful:$ go get golang.org/x/[email protected] && go mod tidy go: upgraded golang.org/x/net v0.54.0 => v0.55.0$ go1.27rc1 build -v ./cmd/dolt
go-mysql-server
- 3634: Add support for multiple expressions in functional indexes
- 3627: fix stats functions to include schema
We include the schema in the stats key, but only sometimes fill in the field. - 3626: Prevent index offset when comparing rows in
topRowsIter
Fixes dolthub/dolt#11300
Appending the row order number to the end of asql.Rowduring a Top-N Heap Sort intopRowsIterwas causing an index offset when evaluating SortFields that were subqueries, thus resulting in incorrect result.
This PR- modifies
topRowsHeapto instead take arowWithOrderstruct that separates out thesql.Rowfrom the order number while still taking the order number into account when sorting the heap. - refactoring
Sorter.LesserRowlogic into a newCompareRowsfunction to allow checking for row equality - moves top row(s) iterators to its own file as part of an effort to make our iterators more organized (#3620). This file also includes
topRowsHeapsince it is only ever used bytopRowIter(see https://github.com/dolthub/go-mysql-server/issues/3622#issuecomment-4984884473 for next steps) - removes
ValueRowSortersince it's actually never used anywhere and doesn't even fully implementsort.Interface
- modifies
- 3617: special case on extended type for getting compare type
Closed Issues
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Beta — feedback welcome: [email protected]