Skip to content

Release history

dolt releases

Dolt – Git for Data

All releases

59 shown

No immediate action
v2.1.2 Breaking risk

Teardown cleanup + status auto_increment + doc description

No immediate action
v2.1.1 Bug fix

Deletion + Push + TEXT fix

Upgrade now
v2.1.0 Bug fix
Breaking upgrade

ALTER TABLE fix for TEXT BLOB

Review required
v2.0.8 Mixed
RBAC Dependencies

dolt, go‑mysql‑server, vitess updates

Upgrade now
v2.0.7 Mixed
Breaking upgrade

Memory leak fix + fslock bump

Upgrade now
v2.0.6 Breaking risk
Breaking upgrade

Docs URL update, MySQL fixes, Vitess predicate

Upgrade now
v2.0.5 Mixed
Dependencies RCE / SSRF

Crash‑recovery fix + dependency upgrades

Upgrade now
v2.0.4 Mixed
Auth RBAC

dolt revert match, security hardenings, go-mysql-server updates

Review required
v2.0.3 Bug fix

Remote DB cache removal

Review required
v2.0.2 Bug fix
Auth RBAC

FK default actions fix

v2.0.1 Bug fix

Fixes `dolt reset --soft` to leave the index untouched and makes `dolt diff -r sql` return an error when schema changes prevent a data diff.

Full changelog

Merged PRs

dolt

  • 11006: Preserve tables absent from the index during checkout, reset, and rebase
    Tables present only in the working tree (never added to staging) were being deleted or incorrectly staged by the three commands.
    • Scope checkout . table list to HEAD and staged root
    • Update working and staged roots independently in the specific-table checkout case
    • Add MoveUntrackedTables helper for the working-tree preservation step in reset --hard and
      rebase
    • Apply rebase preservation via direct UpdateWorkingSet before SwitchWorkingSet
    • Fix dolt reset --soft <rev> to leave the index untouched
    • Rename ResetSoftToRef to MoveHeadToRef and resetSoftToRef to resetMixedToRef so names match
      behavior
  • 11002: When dolt diff -r sql encounters a schema change, it should either print the full diff or return an error
    Previously, whenever a table had a schema change, dolt diff -r sql would skip printing the data diff for that table. It would print a message to stderr, but still return a 0 error code. This is misleading, especially if the diff command is called by an automated process.
    This PR improves the situations where we successfully render the data diff. In situations where we can't, we return a nonzero error code.

Closed Issues

  • 3470: Subscribe to changes to a document/query (live query)
  • 11014: ROW_COUNT function returns 0 on INSERT statement
v2.0.0 Breaking risk
Breaking changes
  • Databases written by Dolt 2.x releases will not be readable by all Dolt 1.x clients.
Notable features
  • Automatic garbage collection enabled by default
  • Archival storage enabled by default
  • Performance: faster than MySQL on sysbench benchmarks
Full changelog

Dolt 2.0 is the second major release of Dolt. It includes all the performance improvements and new features of Dolt 1.x releases in the 3 years since the 1.0 release, and includes several major milestones:

  • Automatic garbage collection on by default
  • Archival storage on by default
  • Faster than MySQL on sysbench
  • Beta support for Vector data
  • Adaptive storage for TEXT, JSON, GEOMETRY, and BLOB types (similar to TOAST in Postgres)

Dolt 2.0 is backwards compatible with all 1.x releases of Dolt. Databases written by 2.x releases will not be readable by 1.x clients in all cases.

Merged PRs

dolt

  • 11019: .github/actions/setup-go-toolchain: Make a common toolchain setup action which go test and bats test workflows can depend on.
    This is responsible for installing Golang toolchain and getting ICU4C in the environment so it can be used.
  • 11017: flip flag for adaptive encoding

Closed Issues

v1.88.1 Bug fix

Fixed GROUP_CONCAT behavior relying on unspecified row storage order.

Full changelog

Merged PRs

dolt

  • 11011: Final 1.x PR before turning on adaptive encoding by default for 2.0
    This PR contains all the changes necessary to make CI pass with adaptive encoding on by default.

go-mysql-server

  • 3539: Bug fix for dropping sort nodes
    Also fixed a couple under-specified goup concat tests.
    The latter were relying on a particular row storage order which is not guaranteed and broke when Dolt changed some encoding parameters.

Closed Issues

  • 11014: ROW_COUNT function returns 0 on INSERT statement
v1.88.0 Breaking risk patches CVE-2023-44487
Breaking changes
  • Blocks reading of databases that use adaptive column encodings unless clients upgrade to a newer release (post‑1.x, pre‑2.0).
Full changelog

This is a major version release to mark it as the last major version release before 2.0. There are no known backwards incompatible changes.

Merged PRs

dolt

  • 11005: add a breaking change to schemas with adaptive columns
    Previously released versions had a fatal bug in adaptive encoded value handling that would lead to data loss during garbage collection or pulls. This change forces these clients to upgrade to a newer release before reading databases that use such encodings.
    Because no 1.x release of Dolt uses adaptive encoding without undocumented configuration flags, the fatal bug above does not impact any customer. This change prevents it from impacting any customers after the release of 2.0.

Closed Issues

v1.87.0 Breaking risk
⚠ Upgrade required
  • When upgrading, ensure all clients interacting with a repository are updated to at least v1.87.0 to correctly handle new author/committer fields.
  • Older Dolt clients will not recognize commits where committer differs from author; migrate repositories or avoid mixed‑identity commits until all tools are upgraded.
Breaking changes
  • New separate author and committer fields are stored in commit metadata; old Dolt clients cannot interpret these new fields, causing incompatibility with repositories containing distinct committers.
  • `dolt_log`, `dolt_commits`, and related system tables now include author columns appended at the end to preserve backward compatibility; older clients may misinterpret or miss these columns.
Security fixes
  • CVE-2026-4800
  • CVE-2021-23337
Notable features
  • Support for separate author (original intent) and committer (actual writer) identities in Dolt commits.
  • New environment variables (`DOLT_COMMITTER_NAME`, `DOLT_COMMITTER_EMAIL`, `DOLT_COMMITTER_DATE`) and session variables (`dolt_committer_*`) to set committer identity over the wire.
Full changelog

Backwards Incompatible Changes

The author and committer additions introduced are not interpretable by old Dolt clients. If you attempt to set an explicit committer that is different from the author, this will create a new field in storage.
The dolt_log system table and procedure schemas have also been changed to be static. Compatibility for older clients is not guaranteed for all flags, e.g. --show-signature.

Merged PRs

dolt

  • 10996: cleaned up binlog serialization logic
  • 10995: Fixed deserialization for adaptive types during binlog replication
  • 10993: Fix dolt rm --cached to allow unstaged working changes
    dolt rm --cached incorrectly rejected tables with unstaged working changes or tables already dropped from the working set.
    • --cached branch filters tables absent from working via HasTable before calling RemoveTables.
      Fix dolthub/dolt#10987
  • 10983: Fix dolt_log table and procedure schema to be static and --decoration behavior
    dolt_log now exposes a fixed 12-column schema across the system table and procedure. Parents and signature columns remain opt-in via projection for the system table, and arguments in the dolt_log() procedure.
    • --parents and --show-signature no longer mutate the result of schema
    • Make parents and signature columns populate only when projected for dolt_log system table
    • --decorate=auto is deprecated in the sql-server context since TTY cannot be determined
    • --decorate=auto in CLI now correctly detects interactive terminal
    • Update bats coverage to be bidirectional for the server and client testing in compatibility
      Blocked by dolthub/vitess#467
  • 10979: adaptive encoding tests for mysql client integration
  • 10975: Use TARGET_ROW_SIZE table attribute to guide how aggressively we move adaptive encoded values out-of-band.
    TARGET_ROW_SIZE is a table attribute that can be set on tables. Dolt interprets this value as a size in bytes. When building a tuple, we attempt to keep the tuple under this size by moving adaptive-encoded values out-of-band until the size of the tuple falls below the threshold.
    Because Dolt does not allow tuples larger than 64K, we can always store the target value in 16-bits.
    The GMS interfaces use a uint64 for TARGET_ROW_SIZE, since other storage backends wouldn't necessarily have the same limit. When setting a value for TARGET_ROW_SIZE, Dolt verifies that it fits in 16 bits.
    Currently, this value can only be set while creating the table and can't be modified afterward.
  • 10974: Db/git remote UI
    This PR updates git remotes to push a branch visible on the Git remote's UI that contains a file with some info about the git ref used as the dolt remote. Addresses https://github.com/dolthub/dolt/issues/10525
  • 10969: go-sql-server-driver tests for large adaptive and out-of-band values
    These tests exercise the replication, pull, and GC behavior for various kinds of schemas with large values that may be stored out of band. These tests failed before the inclusion of address serialization bug fixes from https://github.com/dolthub/dolt/pull/10966
    Depends on https://github.com/dolthub/go-mysql-server/pull/3533
  • 10966: bug fix: write addresses field in tuples if they contain only adaptive encoded fields
  • 10964: .github: ci-lambdabats-unix-adaptive.yaml: Add lambdabats DOLT_USE_ADPATIVE_ENCODING=true runs.
  • 10962: /.github/workflows: fix maven link
  • 10959: When merging, use a tuple builder to ensure that we generate the correct representation for the merged row.
    This matters for adaptive encoding columns, whose correct representation depends on other values in the row.
  • 10958: Fix obscure race: make sure that RunF finishes before StopF in sqlServer.Start()
    This is a candidate for race conditions leading to nil pointer exceptions in some doltgres harness setups.
  • 10952: adaptive encoding for JSON columns
    This will be turned on for the 2.0 release.
  • 10941: build(deps): bump go.opentelemetry.io/otel from 1.40.0 to 1.41.0 in /go
    Bumps go.opentelemetry.io/otel from 1.40.0 to 1.41.0. Changelog

    Sourced from go.opentelemetry.io/otel's changelog.

    [1.41.0/0.63.0/0.17.0/0.0.15] 2026-03-02

    This release is the last to support [Go 1.24]. The next release will require at least [Go 1.25].

    Added

    • Support testing of [Go 1.26]. (#7902)

    Fixed

    • Update Baggage in go.opentelemetry.io/otel/propagation and Parse and New in go.opentelemetry.io/otel/baggage to comply with W3C Baggage specification limits. New and Parse now return partial baggage along with an error when limits are exceeded. Errors from baggage extraction are reported to the global error handler. (#7880)
    • Return an error when the endpoint is configured as insecure and with TLS configuration in go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp. (#7914)
    • Return an error when the endpoint is configured as insecure and with TLS configuration in go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp. (#7914)
    • Return an error when the endpoint is configured as insecure and with TLS configuration in go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp. (#7914)
    Commits
    • 4575a97 Release 1.41.0/0.63.0/0.17.0/0.0.15 (#7977)
    • 66fc10d fix: add error handling for insecure HTTP endpoints with TLS client configura...
    • 76e6eec chore(deps): update github/codeql-action action to v4.32.5 (#7980)
    • 0d50f90 Revert "Generate semconv/v1.40.0" (#7978)
    • c38a4a5 Generate semconv/v1.40.0 (#7929)
    • 0f1a224 chore(deps): update module github.com/securego/gosec/v2 to v2.23.0 (#7899)
    • c79ebf4 chore(deps): update module github.com/daixiang0/gci to v0.14.0 (#7973)
    • f758157 chore(deps): update module github.com/sonatard/noctx to v0.5.0 (#7968)
    • 92a1164 fix(deps): update github.com/opentracing-contrib/go-grpc/test digest to d566b...
    • 3cd7c27 chore(deps): update module github.com/protonmail/go-crypto to v1.4.0 (#7969)
    • Additional commits viewable in compare view

  • 10933: build(deps): bump fast-xml-parser from 5.5.9 to 5.7.2 in /.github/actions/ses-email-action
    Bumps fast-xml-parser from 5.5.9 to 5.7.2. Release notes

    Sourced from fast-xml-parser's releases.

    backward compatibility for numerical external entity, fix #705, #817

    • allow numerical external entity for backward compatibility
    • fix #705: attributesGroupName working with preserveOrder
    • fix #817: stackoverflow when tag expression is very long

    upgrade @​nodable/entities and FXB

    • Use @nodable/entities v2.1.0
      • breaking changes
        • single entity scan. You're not allowed to use entity value to form another entity name.
        • you cant add numeric external entity
        • entity error message when expantion limit is crossed might change
      • typings are updated for new options related to process entity
      • please follow documentation of @nodable/entities for more detail.
      • performance
        • if processEntities is false, then there should not be impact on performance.
        • if processEntities is true, but you dont pass entity decoder separately then performance may degrade by approx 8-10%
        • if processEntities is true, and you pass entity decoder separately
          • if no entity then performance should be same as before
          • if there are entities then performance should be increased from past versions
      • ignoreAttributes is not required to be set to set xml version for NCR entity value
    • update 'fast-xml-builder' to sanitize malicious CDATA and comment's content

    use @​nodable/entities to replace entities

    • No API change
    • No change in performance for basic usage
    • No typing change
    • No config change
    • new dependency
    • breaking: error messages for entities might have been changed.

    Full Changelog: https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.5.12...v5.6.0

    performance improvment, increase entity expansion default limit

    • increase default entity explansion limit as many projects demand for that
    maxEntitySize: 10000,
    maxExpansionDepth: 10000,
    maxTotalExpansions: Infinity,
    maxExpandedLength: 100000,
    maxEntityCount: 1000,
    
    • performance improvement
      • reduce calls to toString
      • early return when entities are not present
      • prepare rawAttrsForMatcher only if user sets jPath: false

    Full Changelog: https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.5.9...v5.5.10

    Changelog

    Sourced from fast-xml-parser's changelog.

    Note: If you find missing information about particular minor version, that version must have been changed without any functional change in this library.

    Note: Due to some last quick changes on v4, detail of v4.5.3 & v4.5.4 are not updated here. v4.5.4x is the last tag of v4 in github repository. I'm extremely sorry for the confusion

    5.7.2 / 2026-04-25

    • allow numerical external entity for backward compatibility
    • fix #705: attributesGroupName working with preserveOrder
    • fix #817: stackoverflow when tag expression is very long

    5.7.1 / 2026-04-20

    • fix typo in CJS typing file

    5.7.0 / 2026-04-17

    • Use @nodable/entities v2.1.0
      • breaking changes
        • single entity scan. You're not allowed to user entity value to form another entity name.
        • you cant add numeric external entity
        • entity error message when expantion limit is crossed might change
      • typings are updated for new options related to process entity
      • please follow documentation of @nodable/entities for more detail.
      • performance
        • if processEntities is false, then there should not be impact on performance.
        • if processEntities is true, but you dont pass entity decoder separately then performance may degrade by approx 8-10%
        • if processEntities is true, and you pass entity decoder separately
          • if no entity then performance should be same as before
          • if there are entities then performance should be increased from past versions
      • ignoreAttributes is not required to be set to set xml version for NCR entity value
    • update 'fast-xml-builder' to sanitize malicious CDATA and comment's content

    5.6.0 / 2026-04-15

    • fix: entity replacement for numeric entities
    • use @​nodable/entities to replace entities
      • this may change some error messages related to entities expansion limit or inavlid use
      • post check would be exposed in future version

    5.5.12 / 2026-04-13

    • Performance Improvement: update path-expression-matcher
      • use proxy pattern than Proxy class

    5.5.11 / 2026-04-08

    • Performance Improvement
      • integrate ExpressionSet for stopNodes

    5.5.10 / 2026-04-03

    • increase default entity explansion limit as many projects demand for that
    • performance improvement
      • reduce calls to toString
      • early return when entities are not present
      • prepare rawAttrsForMatcher only if user sets jPath: false

    ... (truncated)

    Commits
    • b1d5b90 update releas info
    • 78571ae tests for long tag expression
    • ebaedc0 allow numerical external entities for backward compatibility
    • 91245eb update changelog
    • 79dd40d fix #705: don not group and nest attributes when both preserveOrder and attri...
    • d6bce3b allow long attribute expressions
    • 9a2561b remove unnecessary
    • 0f08303 fix typo
    • f529642 update to release v5.7.0
    • 52a8583 Revert "improve performance of attributes reading"
    • Additional commits viewable in compare view

  • 10832: build(deps): bump go.opentelemetry.io/otel/sdk from 1.40.0 to 1.43.0 in /go
    Bumps go.opentelemetry.io/otel/sdk from 1.40.0 to 1.43.0. Changelog

    Sourced from go.opentelemetry.io/otel/sdk's changelog.

    [1.43.0/0.65.0/0.19.0] 2026-04-02

    Added

    • Add IsRandom and WithRandom on TraceFlags, and IsRandom on SpanContext in go.opentelemetry.io/otel/trace for W3C Trace Context Level 2 Random Trace ID Flag support. (#8012)
    • Add service detection with WithService in go.opentelemetry.io/otel/sdk/resource. (#7642)
    • Add DefaultWithContext and EnvironmentWithContext in go.opentelemetry.io/otel/sdk/resource to support plumbing context.Context through default and environment detectors. (#8051)
    • Support attributes with empty value (attribute.EMPTY) in go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc. (#8038)
    • Support attributes with empty value (attribute.EMPTY) in go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc. (#8038)
    • Support attributes with empty value (attribute.EMPTY) in go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc. (#8038)
    • Support attributes with empty value (attribute.EMPTY) in go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp. (#8038)
    • Support attributes with empty value (attribute.EMPTY) in go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp. (#8038)
    • Support attributes with empty value (attribute.EMPTY) in go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp. (#8038)
    • Support attributes with empty value (attribute.EMPTY) in go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest. (#8038)
    • Add support for per-series start time tracking for cumulative metrics in go.opentelemetry.io/otel/sdk/metric. Set OTEL_GO_X_PER_SERIES_START_TIMESTAMPS=true to enable. (#8060)
    • Add WithCardinalityLimitSelector for metric reader for configuring cardinality limits specific to the instrument kind. (#7855)

    Changed

    • Introduce the EMPTY Type in go.opentelemetry.io/otel/attribute to reflect that an empty value is now a valid value, with INVALID remaining as a deprecated alias of EMPTY. (#8038)
    • Improve slice handling in go.opentelemetry.io/otel/attribute to optimize short slice values with fixed-size fast paths. (#8039)
    • Improve performance of span metric recording in go.opentelemetry.io/otel/sdk/trace by returning early if self-observability is not enabled. (#8067)
    • Improve formatting of metric data diffs in go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest. (#8073)

    Deprecated

    • Deprecate INVALID in go.opentelemetry.io/otel/attribute. Use EMPTY instead. (#8038)

    Fixed

    • Return spec-compliant TraceIdRatioBased description. This is a breaking behavioral change, but it is necessary to make the implementation spec-compliant. (#8027)
    • Fix a race condition in go.opentelemetry.io/otel/sdk/metric where the lastvalue aggregation could collect the value 0 even when no zero-value measurements were recorded. (#8056)
    • Limit HTTP response body to 4 MiB in go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (#8108)
    • Limit HTTP response body to 4 MiB in go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (#8108)
    • Limit HTTP response body to 4 MiB in go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (#8108)
    • WithHostID detector in go.opentelemetry.io/otel/sdk/resource to use full path for kenv command on BSD. (#8113)
    • Fix missing request.GetBody in go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp to correctly handle HTTP2 GOAWAY frame. (#8096)

    [1.42.0/0.64.0/0.18.0/0.0.16] 2026-03-06

    Added

    • Add go.opentelemetry.io/otel/semconv/v1.40.0 package. The package contains semantic conventions from the v1.40.0 version of the OpenTelemetry Semantic Conventions. See the migration documentation for information on how to upgrade from go.opentelemetry.io/otel/semconv/v1.39.0. (#7985)

    ... (truncated)

    Commits
    • 9276201 Release v1.43.0 / v0.65.0 / v0.19.0 (#8128)
    • 61b8c94 chore(deps): update module github.com/mattn/go-runewidth to v0.0.22 (#8131)
    • 97a086e chore(deps): update github.com/golangci/dupl digest to c99c5cf (#8122)
    • 5e363de limit response body size for OTLP HTTP exporters (#8108)
    • 35214b6 Use an absolute path when calling bsd kenv (#8113)
    • 290024c fix(deps): update module google.golang.org/grpc to v1.80.0 (#8121)
    • e70658e fix: support getBody in otelploghttp (#8096)
    • 4afe468 fix(deps): update googleapis to 9d38bb4 (#8117)
    • b9ca729 chore(deps): update module github.com/go-git/go-git/v5 to v5.17.2 (#8115)
    • 69472ec chore(deps): update fossas/fossa-action action to v1.9.0 (#8118)
    • Additional commits viewable in compare view

  • 10827: build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.78.0 to 1.97.3 in /go
    Bumps github.com/aws/aws-sdk-go-v2/service/s3 from 1.78.0 to 1.97.3. Commits
  • 10825: build(deps): bump github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream from 1.6.10 to 1.7.8 in /go
    Bumps github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream from 1.6.10 to 1.7.8. Commits
  • 10805: build(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 in /go
    Bumps github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4. Release notes

    Sourced from github.com/go-jose/go-jose/v4's releases.

    v4.1.4

    What's Changed

    Fixes Panic in JWE decryption. See https://github.com/go-jose/go-jose/security/advisories/GHSA-78h2-9frx-2jm8

    Full Changelog: https://github.com/go-jose/go-jose/compare/v4.1.3...v4.1.4

    Commits
  • 10804: dolthub/dolt#10813 fix(checkout): enforce --no-overwrite-ignore in DOLT_CHECKOUT -b via direct SQL

    Summary

    When calling DOLT_CHECKOUT('-b', ...) directly via SQL (without --move), the --no-overwrite-ignore flag was silently ignored. CheckOverwrittenIgnoredTables was never called for the isMove=false path in checkoutNewBranch, so creating a branch from a non-HEAD start point would succeed even when ignored tables in the working set differed from the start point.
    The fix captures the current working roots before commitTransaction (which resets session state, making GetRoots return false afterward), then runs the ignored table check before switching the working set to the new branch.

    Changes

    • Call CheckOverwrittenIgnoredTables in the isMove=false path of checkoutNewBranch
    • Capture roots before commitTransaction to avoid session state reset
    • Add engine script tests and bats tests covering --no-overwrite-ignore and
      --overwrite-ignore with a non-HEAD start point
      Closes: #10813
  • 10801: build(deps): bump lodash from 4.17.23 to 4.18.1 in /integration-tests/mysql-client-tests/node
    Bumps lodash from 4.17.23 to 4.18.1. Release notes

    Sourced from lodash's releases.

    4.18.1

    Bugs

    Fixes a ReferenceError issue in lodash lodash-es lodash-amd and lodash.template when using the template and fromPairs functions from the modular builds. See lodash/lodash#6167

    These defects were related to how lodash distributions are built from the main branch using https://github.com/lodash-archive/lodash-cli. When internal dependencies change inside lodash functions, equivalent updates need to be made to a mapping in the lodash-cli. (hey, it was ahead of its time once upon a time!). We know this, but we missed it in the last release. It's the kind of thing that passes in CI, but fails bc the build is not the same thing you tested.

    There is no diff on main for this, but you can see the diffs for each of the npm packages on their respective branches:

    4.18.0

    v4.18.0

    Full Changelog: https://github.com/lodash/lodash/compare/4.17.23...4.18.0

    Security

    _.unset / _.omit: Fixed prototype pollution via constructor/prototype path traversal (GHSA-f23m-r3pf-42rh, fe8d32e). Previously, array-wrapped path segments and primitive roots could bypass the existing guards, allowing deletion of properties from built-in prototypes. Now constructor and prototype are blocked unconditionally as non-terminal path keys, matching baseSet. Calls that previously returned true and deleted the property now return false and leave the target untouched.

    _.template: Fixed code injection via imports keys (GHSA-r5fr-rjxr-66jc, CVE-2026-4800, 879aaa9). Fixes an incomplete patch for CVE-2021-23337. The variable option was validated against reForbiddenIdentifierChars but importsKeys was left unguarded, allowing code injection via the same Function() constructor sink. imports keys containing forbidden identifier characters now throw "Invalid imports option passed into _.template".

    Docs

    • Add security notice for _.template in threat model and API docs (#6099)
    • Document lower > upper behavior in _.random (#6115)
    • Fix quotes in _.compact jsdoc (#6090)

    lodash.* modular packages

    Diff

    We have also regenerated and published a select number of the lodash.* modular packages.

    These modular packages had fallen out of sync significantly from the minor/patch updates to lodash. Specifically, we have brought the following packages up to parity w/ the latest lodash release because they have had CVEs on them in the past:

    Commits
    • cb0b9b9 release(patch): bump main to 4.18.1 (#6177)
    • 75535f5 chore: prune stale advisory refs (#6170)
    • 62e91bc docs: remove n_ Node.js < 6 REPL note from README (#6165)
    • 59be2de release(minor): bump to 4.18.0 (#6161)
    • af63457 fix: broken tests for _.template 879aaa9
    • 1073a76 fix: linting issues
    • 879aaa9 fix: validate imports keys in _.template
    • fe8d32e fix: block prototype pollution in baseUnset via constructor/prototype traversal
    • 18ba0a3 refactor(fromPairs): use baseAssignValue for consistent assignment (#6153)
    • b819080 ci: add dist sync validation workflow (#6137)
    • Additional commits viewable in compare view

  • 10104: Add separate author and committer support
    Dolt now supports separate author (original intent) and committer (actual writer) identity for Dolt commits! Expect commit, cherry-pick, revert and merge operations (including SQL procedures) to pick up different author and committers automatically. The dolt_log, dolt_commits, dolt_diff, dolt_column_diff, dolt_branches, dolt_remote_branches system tables and respective table functions have been updated with author columns too.

    ⚠️ The committer columns in system tables or functions now show the committer identity instead of author. In old Dolt versions this was the result of no committer identity existing in storage, but has since been updated. We maintain backward-compatibility with this old format by duplicating the author identity into the committer identity. At serialization, however, the committer is only stored if the name or email is different from the author identity, allowing us to maintain the same commit hash history.
    ⚠️ We've appended the author columns under to end of each table to prevent issues with older Dolt clients.

New environment variables for committer identity are now available: DOLT_COMMITTER_NAME, DOLT_COMMITTER_EMAIL, DOLT_COMMITTER_DATE which take inspiration from their git counterparts.

⚠️ Environment variables (not SQL system variables) are only interpretable by the Dolt client. MySQL or alternative SQL clients will not pick these Dolt-specific environment variables up automatically in your terminal.

export DOLT_COMMITTER_NAME="Committer User"
export DOLT_COMMITTER_EMAIL="[email protected]"
export DOLT_COMMITTER_DATE="2025-01-01T12:00:00Z"
dolt commit -m "Commit with custom committer date"
+----------------------------------+----------------+-----------------------+---------------------+--------------------------------------+--------------+-----------+------------------+---------------------+
| commit_hash                      | committer      | email                 | date                | message                              | commit_order | author    | author_email     | author_date         |
+----------------------------------+----------------+-----------------------+---------------------+--------------------------------------+--------------+-----------+------------------+---------------------+
| tdf81ch4ug4c9uc2p78rls1iihj95unn | Committer User | [email protected] | 2025-01-01 12:00:00 | Commit with custom committer date    | 4            | Test User | [email protected] | 2025-11-19 10:15:47 |
| 0gonkh11sf1esld53b66jdpbu78sdq6i | Committer User | [email protected] | 2025-11-19 10:15:43 | Add Charlie with different committer | 3            | Test User | [email protected] | 2025-11-19 10:15:43 |
+----------------------------------+----------------+-----------------------+---------------------+--------------------------------------+--------------+-----------+------------------+---------------------+

Since non-Dolt clients cannot interpret these environment variables, we've also added the system variables dolt_committer_name, dolt_committer_email, dolt_committer_date, dolt_committer_author, dolt_committer_email, dolt_committer_date. They enable committer and author identity to travel over the wire.

  • New environment variables for committer identity: DOLT_COMMITTER_NAME, DOLT_COMMITTER_EMAIL, and DOLT_COMMITTER_DATE
  • New session variables for author and committer identity: dolt_committer_name, dolt_committer_email, dolt_committer_date, dolt_committer_author, dolt_committer_email, dolt_committer_date
  • Commit related operations now honor the committer identity system variables over the wire: merge, cherry-pick, commit, revert, DOLT_TAG() etc.
  • dolt clients seed session identity variables from the dolt config on loopback connections, or the SQL client identity for non-loopback
  • Append author columns to dolt_diff, dolt_column_diff, dolt_branches, dolt_remote_branches, dolt_history_* system table, views and table functions
  • Signed commits use a V2 payload that appends CommitterName, CommitterEmail, and CommitterDate after the author fields, using the prior payload as a prefix for forward compatibility
  • Commit flatbuffer gained committer_name and committer_email fields, written only when they differ from author
  • CommitDate struct introduced to explicitly resolve author and committer timestamps at serialization unless otherwise specified by version control operations
    Fix dolthub/dolt#1374
    Blocks dolthub/doltgresql#2039
    Blocks dolthub/docs#2826

go-mysql-server

  • 3535: Enforce inline column references as foreign key constraints
    Fix dolthub/dolt#10970
  • 3533: fixed context reassignment error, which causes a panic in a running d…
    …olt SQL server
  • 3528: Bump go.opentelemetry.io/otel from 1.39.0 to 1.41.0
    Bumps go.opentelemetry.io/otel from 1.39.0 to 1.41.0. Changelog

    Sourced from go.opentelemetry.io/otel's changelog.

    [1.41.0/0.63.0/0.17.0/0.0.15] 2026-03-02

    This release is the last to support [Go 1.24]. The next release will require at least [Go 1.25].

    Added

    • Support testing of [Go 1.26]. (#7902)

    Fixed

    • Update Baggage in go.opentelemetry.io/otel/propagation and Parse and New in go.opentelemetry.io/otel/baggage to comply with W3C Baggage specification limits. New and Parse now return partial baggage along with an error when limits are exceeded. Errors from baggage extraction are reported to the global error handler. (#7880)
    • Return an error when the endpoint is configured as insecure and with TLS configuration in go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp. (#7914)
    • Return an error when the endpoint is configured as insecure and with TLS configuration in go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp. (#7914)
    • Return an error when the endpoint is configured as insecure and with TLS configuration in go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp. (#7914)

    [1.40.0/0.62.0/0.16.0] 2026-02-02

    Added

    • Add AlwaysRecord sampler in go.opentelemetry.io/otel/sdk/trace. (#7724)
    • Add Enabled method to all synchronous instrument interfaces (Float64Counter, Float64UpDownCounter, Float64Histogram, Float64Gauge, Int64Counter, Int64UpDownCounter, Int64Histogram, Int64Gauge,) in go.opentelemetry.io/otel/metric. This stabilizes the synchronous instrument enabled feature, allowing users to check if an instrument will process measurements before performing computationally expensive operations. (#7763)
    • Add go.opentelemetry.io/otel/semconv/v1.39.0 package. The package contains semantic conventions from the v1.39.0 version of the OpenTelemetry Semantic Conventions. See the migration documentation for information on how to upgrade from go.opentelemetry.io/otel/semconv/v1.38.0. (#7783, #7789)

    Changed

    • Improve the concurrent performance of HistogramReservoir in go.opentelemetry.io/otel/sdk/metric/exemplar by 4x. (#7443)
    • Improve the concurrent performance of FixedSizeReservoir in go.opentelemetry.io/otel/sdk/metric/exemplar. (#7447)
    • Improve performance of concurrent histogram measurements in go.opentelemetry.io/otel/sdk/metric. (#7474)
    • Improve performance of concurrent synchronous gauge measurements in go.opentelemetry.io/otel/sdk/metric. (#7478)
    • Add experimental observability metrics in go.opentelemetry.io/otel/exporters/stdout/stdoutmetric. (#7492)
    • Exporter in go.opentelemetry.io/otel/exporters/prometheus ignores metrics with the scope go.opentelemetry.io/contrib/bridges/prometheus. This prevents scrape failures when the Prometheus exporter is misconfigured to get data from the Prometheus bridge. (#7688)
    • Improve performance of concurrent exponential histogram measurements in go.opentelemetry.io/otel/sdk/metric. (#7702)
    • The rpc.grpc.status_code attribute in the experimental metrics emitted from go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc is replaced with the rpc.response.status_code attribute to align with the semantic conventions. (#7854)
    • The rpc.grpc.status_code attribute in the experimental metrics emitted from go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc is replaced with the rpc.response.status_code attribute to align with the semantic conventions. (#7854)

    Fixed

    • Fix bad log message when key-value pairs are dropped because of key duplication in go.opentelemetry.io/otel/sdk/log. (#7662)
    • Fix DroppedAttributes on Record in go.opentelemetry.io/otel/sdk/log to not count the non-attribute key-value pairs dropped because of key duplication. (#7662)
    • Fix SetAttributes on Record in go.opentelemetry.io/otel/sdk/log to not log that attributes are dropped when they are actually not dropped. (#7662)
    • Fix missing request.GetBody in go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp to correctly handle HTTP/2 GOAWAY frame. (#7794)
    • WithHostID detector in go.opentelemetry.io/otel/sdk/resource to use full path for ioreg command on Darwin (macOS). (#7818)

    ... (truncated)

    Commits
    • 4575a97 Release 1.41.0/0.63.0/0.17.0/0.0.15 (#7977)
    • 66fc10d fix: add error handling for insecure HTTP endpoints with TLS client configura...
    • 76e6eec chore(deps): update github/codeql-action action to v4.32.5 (#7980)
    • 0d50f90 Revert "Generate semconv/v1.40.0" (#7978)
    • c38a4a5 Generate semconv/v1.40.0 (#7929)
    • 0f1a224 chore(deps): update module github.com/securego/gosec/v2 to v2.23.0 (#7899)
    • c79ebf4 chore(deps): update module github.com/daixiang0/gci to v0.14.0 (#7973)
    • f758157 chore(deps): update module github.com/sonatard/noctx to v0.5.0 (#7968)
    • 92a1164 fix(deps): update github.com/opentracing-contrib/go-grpc/test digest to d566b...
    • 3cd7c27 chore(deps): update module github.com/protonmail/go-crypto to v1.4.0 (#7969)
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=go.opentelemetry.io/otel&package-manager=go_modules&previous-version=1.39.0&new-version=1.41.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/dolthub/go-mysql-server/network/alerts).
  • 3527: Truncate invalid UTF-8 on INSERT IGNORE and warn on LIKE with bad charset pattern
    • INSERT IGNORE with invalid UTF-8 in a utf8mb4 column now truncates at the first bad byte
    • LIKE with an invalid UTF-8 pattern emits warning 1300 and return no match
    • Exported TruncateInvalidUTF8 from sql/types
      Fix dolthub/dolt#10924
      Blocks dolthub/dolt#10926
  • 3523: Add handling of TargetRowSize table attribute to GMS interfaces
    TARGET_ROW_SIZE is a custom table attribute whose exact meaning is implementation-defined by whatever storage backend implements it. It's used by Dolt to describe the threshold at which adaptive-encoded columns should be moved to out-of-band storage instead of being stored inline in the table.

vitess

  • 467: Add ERWarnDeprecatedSyntax 1287
    Blocks dolthub/dolt#10983
  • 466: Add parser support for multiple functional expressions in an index
  • 464: Add TARGET_ROW_SIZE table attribute to parser
    In order to allow users to control how aggressively adaptive encoded values get outlined, we're adding an additional table attribute.
    Our adaptive encoding design is based on Postgres's TOAST types. Postgres has two table attributes, TOAST_TUPLE_THRESHOLD, and TOAST_TUPLE_TARGET. If a row in Postgres is greater than TOAST_TUPLE_THRESHOLD, then Postgres will attempt to move values out-of-band until the row length falls below TOAST_TUPLE_TARGET.
    There doesn't seem to be an obvious benefit for having two separate values here, so I think we can just add one. We could reuse either name to copy Postgres, but it would be potentially confusing to call our table attribute TOAST_TUPLE_TARGET since we don't call the feature TOAST anywhere else.
    This PR names the new table attribute TARGET_ROW_SIZE, but also accepts TOAST_TUPLE_TARGET as an alias in order to match Postgres.
    Since we want to avoid adding business logic to the parser, the parser does not do the aliasing, it just parses both names and allows GMS to do the aliasing. I'm also open to having the parser responsible for aliasing if we have strong opinions.

Closed Issues

  • 10987: dolt rm --cached rejects unstaged changes; git rm --cached does not
  • 10986: docs: add note that Bitbucket does not support storing dolt metadata in "refs/dolt/data" for git-backed dolt remotes
  • 10970: Default FK enforcement differs for PRIMARY KEY vs UNIQUE parent refs
  • 1374: Add "Commiter" and "Commit Date" to Commit Meta
  • 10961: dolt_rebase drops replayed index on successful rebase of disjoint index additions
  • 2945: Add support for function indexes
v1.86.6 Breaking risk
Notable features
  • Incremental garbage collection mode with --incremental-file-size flag for dolt gc and auto_gc_behavior server config
  • Invalid UTF-8 truncation on INSERT IGNORE and improved LIKE pattern handling with charset warnings
  • Parser support for multiple functional expressions in indexes
Full changelog

Merged PRs

dolt

  • 10947: go/store: nbs,types: Fix some error paths in GC.
    1. If gcCopier.copyTablesToDir failed after its writer.Finish() call succeeded, it would cancel the writer but leave gcc.writer != nil. Then markAndSweeper.Close would call gcc.cancel and get a spurious error from the failed writer.Cancel call.
    2. ValueStore.gc would fail to Close MarkAndSweeper if Finalize returned an error. The contract was that Close needed to be called on all paths.
    3. markAndSweepChunks dropped an error from newRotatingGCCopier.
    4. markAndSweeper Close early returned on an error from gcc.cancel, failing to close and cleanup incrementalGcc in that case.
  • 10750: Add incremental mode for garbage collection
    This feature is enabled by providing the --incremental-file-size flag to dolt gc or call dolt_gc() with a positive value, and can be enabled for automatic GC with a setting in the server's config.yaml, eg:
    behavior:
    auto_gc_behavior:
    incremental_file_size: 1000000
    
    In this example, after GC has written 1000000 bytes of leaf chunks (chunks that do not reference other chunks), it will finish the chunk file and begin writing a new one.
    There are two main reasons to do this:
    • Chunks written this way don't need to be tracked in the GC "visited set", reducing memory usage.
    • If GC is interrupted (for instance, it may be terminated by the OS for using too much memory), the already-processed chunks will be preserved, and subsequent runs of GC will have less work to do and require less memory. This provides an escape hatch for the scenario where a user has not run GC in so long that GC requires more memory to run than is available.

go-mysql-server

  • 3527: Truncate invalid UTF-8 on INSERT IGNORE and warn on LIKE with bad charset pattern
    • INSERT IGNORE with invalid UTF-8 in a utf8mb4 column now truncates at the first bad byte
    • LIKE with an invalid UTF-8 pattern emits warning 1300 and return no match
    • Exported TruncateInvalidUTF8 from sql/types
      Fix dolthub/dolt#10924
      Blocks dolthub/dolt#10926
  • 3526: Update for functional expression index parser changes
    Parser changes support multiple functional expressions, or a mix of columns and functional expressions in an index. GMS still restricts functional indexes to a single functional expression, but that restriction will be removed in the next PR.
    Also includes a new test interface that Doltgres will use when integrating with functional indexes.
    Depends on: https://github.com/dolthub/vitess/pull/466

vitess

  • 466: Add parser support for multiple functional expressions in an index
  • 465: go.mod: Bump to golang 1.26.2.
  • 462: Added context to Injectable
    Needed for:
    • https://github.com/dolthub/go-mysql-server/pull/3513

Closed Issues

  • 10924: dolt table import should error when importing invalid charset
  • 10945: RemotesAPI push: working-set-stale bug from #10807 still reproducible in v1.86.5
v1.86.5 Security relevant
Security fixes
  • CVE-2026-27143
  • CVE-2026-27144
Notable features
  • Key type conversion for foreign key checks
  • Functional indexes support
Full changelog

Merged PRs

dolt

  • 10937: go: remotestorage: Stamp our remotesapi ClientCapabilities on outgoing requests.
    For now, we advertise that we handle HTTP/2 table file URL endpoints well.
  • 10936: proto: Add client_capabilities URL-minting requests on remotesapi.
    Some Dolt clients deal with certain URLs better than others. In particular, older Dolt clients can see bad fetch performance in some network contexts when they are hitting HTTP/2 endpoints.
    Add a field, client_capabilities, on GetDownloadLocsRequest, StreamChunkLocationsRequest, RefreshTableFileUrl and ListTableFiles which allows a client to communicate its capabilities. For now, one capability exists: CLIENT_CAPABILITY_HTTP2_DOWNLOAD. Implementations of remotesapi can use the presence of the advertised capability to know it is safe to mint HTTP/2 capable URLs in a context where they previously would have minted only HTTP/1.1 URLs.
  • 10935: key type conversion during foreign key checks
    This PR adds key type conversion for native encodings (encodings that don't have a TupleTypeHandler) for foreign key enforcement during merge. Postgres, but not MySQL, allows different but compatible types for the columns in foreign key constraints, e.g TEXT and VARCHAR. This means that Doltgres, but not Dolt, needs to sometimes convert the bytes of a tuple value from one encoding to another before an index lookup to determine if a constraint violation exists. Previously all such logic happened with TupleTypeHandler (DoltgresType was the main implementor). But with https://github.com/dolthub/doltgresql/pull/2559, Doltgres is now using Dolt's native encodings where possible, e.g. StringEnc, StringAdaptiveEnc. This means this same logic must now work for these native encodings.
    Dolt continues to prevent foreign key constraints from being created between different types, following the MySQL behavior, but with this change we could choose to relax this limitation in the future.
  • 10931: more adaptive encoding tests
  • 10928: new compatibility testing
    These tests verify that identical columns added by two different client versions can be pulled from remotes.
    Also fixes an overflow bug in adaptive encoding (see Nick's commit) discovered during testing.
  • 10927: [do not merge] New failing test for adaptive encoding
  • 10925: go.mod: Bump to 1.26.2.
  • 10920: Suppress S3 GetObject checksum WARN
    Fix dolthub/dolt#10895
  • 10918: go,proto: remotesapi: Add a more efficient RPC, StreamChunkLocations, to use for fetch and pull.
    The current streaming RPC, StreamDownloadLocations, was a straight translation of the unary RPC GetDownloadLocations. We added streaming because it found it interacted much better with TCP and HTTP/2 window scaling. At the time, the RPCs were no reworked to take advantage of the stateful nature of the stream. Since then, the pipelined ChunkFetcher machinery has been added, which makes opportunities for reuse on the individual streaming RPC even better. We also added the RefreshTableFileUrl endpoint, which decouples a client's ability to continue using previously communicated table files from its need to see them in a GetDownloadLocsResponse in particular.
    StreamChunkLocations is transiting the exact same semantic payloads as StreamDownloadLocations. It's just not re-transmitting a bunch of stuff it does not need to. In particular:
    1. We transit table file URLs separately from the chunk locations. A table_file_id is assigned to a table file the first time the server tells the client about it. Then that same table_file_id is used to refer to that table file for all communicated chunk locations in all response messages on the same stream.
    2. We do not re-transit chunk hashes. The responses refer to the chunk hashes which were provided in the corresponding request by index. The client already knows them.
    3. We do not need to transit RefreshTableFileUrlRequest messages for the table files. The client can build these with its own knowledge.
      Those are three major improvements for bandwidth utilization. There are also some smaller things, like sending chunk_hashes as bytes instead of repeated bytes.
      This PR adds a features field in GetRepoMetadataResponse. That field lets a client know that it can call the new available endpoint. Otherwise the client continues calling StreamDownloadLocations.
      This PR adds both server-side and client-side implementations for the new endpoint. The server-side implementation ends up looking a lot like the existing StreamDownloadLocations code. It keeps some local maps so it can include the appropriate reference ids in the outgoing messages. The client-side implementation intentionally remains about as minimal as possible. In particular, it does not touch range coalescing or most aspects of the fetch pipeline. It targets just generating the StreamChunkLocationsRequest and handling the StreamChunkLocationsResponse messages. It translates the responses back into what StreamDownloadLocations would have generated before handing those pieces off to the rest of the fetch pipeline.
      In addition to unit tests, some machinery in remotesrv is updated so we can optionally disable advertising support for StreamChunkLocations. This allows us to update some integration tests so that they continue to exercise the StreamDownloadLocations code paths on both the client and the server.
  • 10826: new interfaces to allow doltgres types to use standard encodings

go-mysql-server

  • 3522: go.mod: Bump to golang 1.26.2.
  • 3512: new signal error to skip modifying rows during DML operation
    This behavior is supported by postgres but not MySQL. This is a cleaner way to express that a row edit should be ignored and the rest of the operation continued.
  • 3491: Feature: Indexed functional expressions
    Adds support for secondary indexes to contain functional expressions, which are then used to optimize queries with filters and join conditions that use that indexed functional expression.
    Initial performance testing between Dolt and MySQL shows that Dolt matches, or in some cases beats, MySQL's performance when these indexes are used.
    This initial implementation only supports a single expression in a functional index. Next steps for this work after this PR are:
    1. adding support to Doltgres
    2. extending support to multiple expressions in an index (functional expressions mixed with column names)
    3. add a sysbench test to compare query performance with indexed expression for Dolt and MySQL

Closed Issues

  • 10939: dolt fsck fails on Windows with malformed path (leading backslash before drive letter)
  • 10922: Bump Go toolchain to 1.25.9 to address CVE-2026-27143 and CVE-2026-27144
  • 10895: S3 remotes: thousands of "Response has no supported checksum" WARN lines on push/pull due to pinned aws-sdk-go-v2 s3 v1.78.0
  • 10892: AUTO_INCREMENT value lost after dolt backup restore
v1.86.4 New feature
Notable features
  • Indexed functional expressions for query optimization
  • Auto increment state preservation after backup restore
Full changelog

Merged PRs

dolt

  • 10919: Sort adaptive encoding columns by size for out-of-band storage
    Note: This will currently change how we write rows with adaptive encoding columns. Rows written on older versions of Dolt can still be read, but writing them back will result in a new chunk hash. But since Dolt currently doesn't use adaptive encoding and Doltgres is in beta, that's acceptable.
    Claude's Summary
    • BuildPermissive now sorts adaptive encoding columns by size savings (largest first) before deciding which to move out-of-band, instead of visiting columns in sequential order
    • This keeps smaller values inline when possible, producing shorter tuples when columns have varying sizes
    • Added two new test cases verifying the largest-first ordering with 2 and 3 columns of different sizes
      Test plan
    • Existing TestTupleBuilderAdaptiveEncodings tests pass (including inline one of two columns)
    • New test largest value moved out-of-band first: two columns where column 0 is small and column 1 is large — verifies column 1 goes out-of-band while column 0 stays inline
    • New test three columns largest first ordering: three columns (medium, small, large) — verifies only the largest goes out-of-band
    • Full store/val package tests pass
  • 10915: Fix fsck use earl.Parse to correctly resolve database path cross-platform
    fsck.go was using url.Parse to parse the database file URL. On Windows, url.Parse places the drive letter into the URL Host field rather than Path, causing dbfactory/file.go to construct an invalid file path.
  • 10910: Threaded context through all GMS interfaces
    Threads the context as added by:
    • https://github.com/dolthub/go-mysql-server/pull/3513
  • 10908: go: remotestorage: reliable/http: Fix some misbehavior when ChunkFetcher is working against HTTP/2 endpoints.
    HTTP/2 frames responses differently from HTTP/1 and we see io.EOF on the response at slightly different times. A race in ChunkFetcher meant that it treated read-to-end-of-range-caller-wanted-and-was-Closed as a failure if the Close came in before the io.EOF from the read against the http.Response.Body.
    Fix that race and fix some behavior around our fetch health tracking related to it.
  • 10906: Fix UPDATE when table has a BINARY primary key and a foreign key to use bytes.Equal
    Updating a row in a table with a BINARY or VARBINARY primarkey key and a foreign key caused a runtime panic. Any secondary index on such a table (including the index backing a foreign key constraint) would trigger it.
    • Fix isNoopUpdate to use bytes.Equal when comparing BINARY/VARBINARY column values
      Fix dolthub/dolt#10903
  • 10893: Fix auto increment state after backup restore
    Fix database restored with dolt backup restore could generate incorrect AUTO_INCREMENT values when accessed through a still-running dolt sql-server.
    The restored table persisted the correct auto-increment value, but the server’s in-memory auto-increment tracker could be missing state for the restored database. The tracker now initializes missing table state from the restored table before allocating ids.
    Fix dolthub/dolt#10892
  • 10889: use table and schema when adding/removing foreign key for Doltgres
    Depends on: https://github.com/dolthub/go-mysql-server/pull/3514
  • 10884: go: utils/config: file_config.go: Make concurrent reads and writes safe.
    Persisted SQL session variables land in at an instance of *FileConfig. It needs to be thread-safe.
    Fixes some transient crashes which can occur while under load and switching dolt_cluster role, for example.
  • 10874: Feature: Indexed functional expressions
    Adds support for secondary indexes to contain functional expressions, which are then used to optimize queries with filters and join conditions that use that indexed functional expression.
    Initial performance testing between Dolt and MySQL shows that Dolt matches, or in some cases beats, MySQL's performance when these indexes are used.
    This initial implementation only supports a single expression in a functional index. Next steps for this work after this PR are:
    1. adding support to Doltgres
    2. extending support to multiple expressions in an index (functional expressions mixed with column names)
    3. add a sysbench test to compare query performance with indexed expression for Dolt and MySQL
  • 10831: Preserve user GIT_SSH_COMMAND and block interactive SSH prompts without clobbering env
    When dolt pushes or fetches over a git+ssh remote, it was unconditionally overwriting the user's GIT_SSH_COMMAND environment variable with its own value (ssh -o BatchMode=yes). This broke workflows where users set GIT_SSH_COMMAND to pick a specific key.
    • GIT_SSH_COMMAND set by the user before invoking dolt is now preserved; dolt no longer overwrites it
    • Git subprocesses are now started in a new session (setsid on Linux/macOS, DETACHED_PROCESS on Windows) so SSH cannot reach the terminal to prompt for a passphrase or host key confirmation
    • Regression tests added against a real OpenSSH daemon
      Fix dolthub/dolt#10811

go-mysql-server

  • 3516: Fix SHOW CREATE VIEW fail when underlying table is dropped
    MySQL returns a view's stored definition regardless of whether its underlying table exists. GMS re-resolved the view body at query time, which failed if the referenced table had been dropped.
    • Split SHOW CREATE TABLE and SHOW CREATE VIEW into separate build paths.
    • SHOW CREATE VIEW now reads the stored definition directly via ViewDatabase.GetViewDefinition
    • Extract showTargetInfo helper to deduplicate db/table/asOf extraction
      Fix dolthub/dolt#10902
      Blocked by dolthub/vitess#461
  • 3514: handle foreign key errors for Doltgres
  • 3513: Threaded context everywhere
    Integrators need to access the sql.Context in locations that it was not previously passed to, which has resulted in workarounds in some cases (such as storing the context in nodes) or missing functionality altogether (if a context is needed during function creation for example). This PR makes it such that the context is effectively passed everywhere.
    The one singular exception is in the String() function on nodes and expressions. Since those take advantage of the fmt.Stringer interface, they cannot accept a context without breaking that contract (which would also break %s and %v in the fmt package). This isn't considered too large an issue as strings are generally used for debugging, however if it is a core feature used by an integrator, then they'll still have to resort to workarounds.
  • 3511: cache arithmetic type
    We spend a large amount of time determining the correct resulting expression type for Arithmetic expressions.
    Once the resulting type is determined for an math operation, it doesn't change for the remainder of the rows, so we should be able to cache this result and avoid many type checks and interface conversions.
  • 3510: Ignore unique key errors when inserting into fulltext position table
    fixes dolthub/dolt#10882
    Ignore unique key errors when inserting into fulltext index.Position table (similar to how unique key errors are ignored for index.DocCount).
    We should consider using a non-unique index for index.Position and index.DocCount or restructuring how we're writing to these tables if we're always going to be ignoring unique key errors.
  • 3491: Feature: Indexed functional expressions
    Adds support for secondary indexes to contain functional expressions, which are then used to optimize queries with filters and join conditions that use that indexed functional expression.
    Initial performance testing between Dolt and MySQL shows that Dolt matches, or in some cases beats, MySQL's performance when these indexes are used.
    This initial implementation only supports a single expression in a functional index. Next steps for this work after this PR are:
    1. adding support to Doltgres
    2. extending support to multiple expressions in an index (functional expressions mixed with column names)
    3. add a sysbench test to compare query performance with indexed expression for Dolt and MySQL

vitess

  • 463: Relax error handling for COM_FIELD_LIST to avoid mysql client disconnecting
    The mysql client sends COM_FIELD_LIST commands by default (unless the -A option is given) to collect field metadata for all tables/views. If a view has a broken definition, then it was returning an error, which caused the mysql client to disconnect and reconnect. This change ignores errors when querying tables/views for a COM_FIELD_LIST command, which fixes the client disconnect issue and lets us match the MySQL server's behavior.
    GMS CI Tests: https://github.com/dolthub/go-mysql-server/pull/3518
    Dolt CI Tests: https://github.com/dolthub/dolt/pull/10912
    Fixes https://github.com/dolthub/dolt/issues/10634
  • 462: Added context to Injectable
    Needed for:
    • https://github.com/dolthub/go-mysql-server/pull/3513
  • 460: Add digit-leading and hex-prefixed column names in qualified dotted access
    Fix parsing of unquoted dotted column references where the column name starts with a digit or hex prefix. Both two-part and three part (db.table.col) forms are now supported.
    • Fix the tokenizer treating a dot followed by a digit as the start of a decimal literal despite the preceding token was an identifier.
    • Add numeric_col_id as a grammar non-terminal covering INTEGRAL and HEXNUM tokens, and wired it into the column_name rule.
    • Move skipped cases from TestNotWOrkingIdentifiersStartingWithNumbers into TestParsingIdentifiersStartingWithNumbers and extended coverage.
      Fix dolthub/dolt#10757
      Related dolthub/go-mysql-server#3494
  • 459: fix trigger parsing
    Should use old_lexer_position instead of lexer_position to avoid token getting swallowed.

Closed Issues

  • 10892: AUTO_INCREMENT value lost after dolt backup restore
  • 10634: MySQL client is unusable when there's an invalid view in dolt db
  • 10903: UPDATE panics with a binary primary key and some foreign key since 1.86.0
  • 10811: Dolt clobbers GIT_SSH_COMMAND if it already exists in the environment
  • 10902: SHOW CREATE VIEW fails if underlying structure changed
  • 10728: dolt pull from dolthub spends a long time doing nothing
v1.86.3 Bug fix
Notable features
  • DOLT_COMMIT performance optimized from O(schema size) to O(1) for no-op commits
  • Fixed dolt pull origin incorrectly pulling all branches instead of specified branch
  • dolt fsck now tolerates corruption errors and continues iteration instead of halting
Full changelog

Merged PRs

dolt

  • 10898: bug fix: dolt pull origin is pulling all branches
    dolt_pull('origin', 'main'); - was pulling all branches. Now it's not.
    Fixes: https://github.com/dolthub/dolt/issues/10728
  • 10891: Skip DOLT_COMMIT table walk when nothing is staged
    • DOLT_COMMIT with nothing staged now exits in constant time regardless of schema size.
    • Added TestNoOpCommitAllocsAreConstant to enforce the O(1) allocation bound as a regression.
      Fix dolthub/dolt#10851
  • 10836: fsck better
    dolt fsck is now more resilient to corruption errors which could cause the iterateAllChunks methods to halt.
    This change add a tolerant iterator to our three primary storage interfaces. These interfaces don't return errors, but instead call an error callback and continue to the best of their ability to iterate chunks after errors are found.

Closed Issues

  • 10728: dolt pull from dolthub spends a long time doing nothing
  • 10851: CALL DOLT_COMMIT() no-op storms cause sustained CPU on busy servers
  • 10882: REPLACE INTO panics on FULLTEXT-indexed table when old and new content share a word at the same position
v1.86.2 Bug fix
Notable features
  • Memory limit support via GOMEMLIMIT environment variable for automatic cache sizing
  • Query optimization for simple SELECT statements
  • Additional spatial functions
v1.86.1 Breaking risk
Notable features
  • --rebase flag for dolt pull
  • Comment delimiter parsing fix
  • GC race condition fixes
v1.86.0 Breaking risk
Breaking changes
  • dolt_revert() response schema changed to match dolt_merge() and dolt_cherry_pick() schemas
  • dolt revert creates one revert commit per input commit instead of a single revert commit
Notable features
  • Manual conflict resolution support in dolt_revert() and dolt revert CLI
  • Bare repository format with ssh transport in dolt transfer
v1.85.0 Breaking risk
Security fixes
  • golang.org/x/image updated to 0.38.0 with TIFF buffer overflow prevention from malicious input
Notable features
  • Adaptive encoding support controlled via environment variable
  • Event scheduler and CPU scheduler improvements reduce idle polling overhead
  • Fixed panic when merging databases with changed unique indexes
v1.84.1 Mixed
Notable features
  • Add --overwrite-ignore and --no-overwrite-ignore flags to checkout command for Git-like behavior during branch switches
  • Delay auto garbage collection during high CPU load
v1.84.0 Breaking risk
Breaking changes
  • Geometry value deserialization now respects schema serialized encoding instead of falling back if default fails
  • Branch working set creation now happens on push for new branches, changing first-transaction semantics
  • Database commit hooks now fire on remotesapi writes to sql-server (push-on-write replication, stats, cluster sync)
Notable features
  • Schema encoding stored in typeinfo and honored during deserialization for version-safe type encoding compatibility
  • Statistics processor enters quiesced state to reduce CPU consumption during idle periods
  • Working set creation ensures correct root hash for multi-branch SQL transaction access
v1.83.8 Bug fix

Fixed interactive rebase failures when ignored tables exist in the working set.

v1.83.5 Bug fix

Concurrent database creation atomicity fix and trigger parsing improvements.

v1.58.11 Bugfix

This is a patch release on top of 1.58.10. This release fixes parsing of AWS remote URLs in 1.58.10. This is not the current Dolt release and should not be used by most Dolt users.

v1.83.4 New feature
Notable features
  • Merge branch control permission
Full changelog

Merged PRs

dolt

  • 10574: Add merge branch control permission

Closed Issues

Performance

| Read Tests | MySQL | Dolt | Multiple |
|:-----------------------:|:-----:|:-----:|:--------:|
| covering_index_scan | 1.89 | 0.55 | 0.29 |
| groupby_scan | 13.46 | 9.91 | 0.74 |
| index_join | 1.52 | 1.86 | 1.22 |
| index_join_scan | 1.47 | 1.42 | 0.97 |
| index_scan | 34.33 | 22.28 | 0.65 |
| oltp_point_select | 0.2 | 0.27 | 1.35 |
| oltp_read_only | 3.82 | 5.28 | 1.38 |
| select_random_points | 0.35 | 0.53 | 1.51 |
| select_random_ranges | 0.39 | 0.55 | 1.41 |
| table_scan | 34.95 | 22.28 | 0.64 |
| types_table_scan | 77.19 | 66.84 | 0.87 |
| reads_mean_multiplier | | | 1.0 |

| Write Tests | MySQL | Dolt | Multiple |
|:------------------------:|:-----:|:-----:|:--------:|
| oltp_delete_insert | 8.43 | 6.43 | 0.76 |
| oltp_insert | 4.18 | 3.13 | 0.75 |
| oltp_read_write | 9.22 | 11.45 | 1.24 |
| oltp_update_index | 4.18 | 3.19 | 0.76 |
| oltp_update_non_index | 4.25 | 3.13 | 0.74 |
| oltp_write_only | 5.28 | 6.09 | 1.15 |
| types_delete_insert | 8.58 | 6.79 | 0.79 |
| writes_mean_multiplier | | | 0.88 |

| TPC-C TPS Tests | MySQL | Dolt | Multiple |
|:---------------------:|:-----:|:-----:|:--------:|
| tpcc-scale-factor-1 | 93.23 | 37.49 | 2.49 |
| tpcc_tps_multiplier | | | 2.49 |

| Overall Mean Multiple | 1.46 |
|:---------------------:|:----:|

v1.83.2 Breaking risk
Notable features
  • Optimized backup strategy to prefer existing table files over merkle dag walk
Full changelog

Merged PRs

dolt

  • 10629: go: Optimize backups to more often transit existing table files instead of doing a merkle dag walk to push missing chunks.
    There are two code paths for taking a logical backup of a Dolt database. One pushes all the existing table files to the backup destination and then sets it up so that it points at the same root value as the existing database. The other code path does the merkle dag walk to push all the missing chunks to the destination store, starting from the desired root value chunk.
    If the destination store is missing a lot of data, this later path currently requires a lot of bookkeeping to keep track of what has been pushed so far and what still needs to be pushed. This is expensive in memory. It requires walking large portions of the existing database, chunk by chunk, which can be expensive in CPU and in I/O seeks.
    This code change seeks to use the code path which uploads existing table files more often when it is the best choice. In order to do so, the code path is now willing to convert a journal file, which should never be pushed to a remote or a backup, into a table file. It will do this on the fly, and will only upload the resulting table file to the destination. The table file does not become part of the source store, and this code path has no interaction with GC.
    For now, there are some hardcoded heuristics for when to prefer pushing existing table files rather than trying to build the upload chunk-by-chunk. This PR uses existing table files when: the destination store is empty (has a zero root hash value) and there is no existing journal file or the existing journal file is less than 20% of the total repo size and the existing journal file is less than 16GB.
  • 10621: Bug fix: binlog serialization of empty TEXT values
    This change fixes a bug that caused empty TEXT fields to trigger a panic when serialized to a binlog.
    Related to: https://github.com/dolthub/dolt/issues/10601
  • 10595: Bump go.opentelemetry.io/otel/sdk from 1.38.0 to 1.40.0 in /go
    Bumps go.opentelemetry.io/otel/sdk from 1.38.0 to 1.40.0. Changelog

    Sourced from go.opentelemetry.io/otel/sdk's changelog.

    [1.40.0/0.62.0/0.16.0] 2026-02-02

    Added

    • Add AlwaysRecord sampler in go.opentelemetry.io/otel/sdk/trace. (#7724)
    • Add Enabled method to all synchronous instrument interfaces (Float64Counter, Float64UpDownCounter, Float64Histogram, Float64Gauge, Int64Counter, Int64UpDownCounter, Int64Histogram, Int64Gauge,) in go.opentelemetry.io/otel/metric. This stabilizes the synchronous instrument enabled feature, allowing users to check if an instrument will process measurements before performing computationally expensive operations. (#7763)
    • Add go.opentelemetry.io/otel/semconv/v1.39.0 package. The package contains semantic conventions from the v1.39.0 version of the OpenTelemetry Semantic Conventions. See the migration documentation for information on how to upgrade from go.opentelemetry.io/otel/semconv/v1.38.0. (#7783, #7789)

    Changed

    • Improve the concurrent performance of HistogramReservoir in go.opentelemetry.io/otel/sdk/metric/exemplar by 4x. (#7443)
    • Improve the concurrent performance of FixedSizeReservoir in go.opentelemetry.io/otel/sdk/metric/exemplar. (#7447)
    • Improve performance of concurrent histogram measurements in go.opentelemetry.io/otel/sdk/metric. (#7474)
    • Improve performance of concurrent synchronous gauge measurements in go.opentelemetry.io/otel/sdk/metric. (#7478)
    • Add experimental observability metrics in go.opentelemetry.io/otel/exporters/stdout/stdoutmetric. (#7492)
    • Exporter in go.opentelemetry.io/otel/exporters/prometheus ignores metrics with the scope go.opentelemetry.io/contrib/bridges/prometheus. This prevents scrape failures when the Prometheus exporter is misconfigured to get data from the Prometheus bridge. (#7688)
    • Improve performance of concurrent exponential histogram measurements in go.opentelemetry.io/otel/sdk/metric. (#7702)
    • The rpc.grpc.status_code attribute in the experimental metrics emitted from go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc is replaced with the rpc.response.status_code attribute to align with the semantic conventions. (#7854)
    • The rpc.grpc.status_code attribute in the experimental metrics emitted from go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc is replaced with the rpc.response.status_code attribute to align with the semantic conventions. (#7854)

    Fixed

    • Fix bad log message when key-value pairs are dropped because of key duplication in go.opentelemetry.io/otel/sdk/log. (#7662)
    • Fix DroppedAttributes on Record in go.opentelemetry.io/otel/sdk/log to not count the non-attribute key-value pairs dropped because of key duplication. (#7662)
    • Fix SetAttributes on Record in go.opentelemetry.io/otel/sdk/log to not log that attributes are dropped when they are actually not dropped. (#7662)
    • Fix missing request.GetBody in go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp to correctly handle HTTP/2 GOAWAY frame. (#7794)
    • WithHostID detector in go.opentelemetry.io/otel/sdk/resource to use full path for ioreg command on Darwin (macOS). (#7818)

    Deprecated

    [1.39.0/0.61.0/0.15.0/0.0.14] 2025-12-05

    Added

    • Greatly reduce the cost of recording metrics in go.opentelemetry.io/otel/sdk/metric using hashing for map keys. (#7175)
    • Add WithInstrumentationAttributeSet option to go.opentelemetry.io/otel/log, go.opentelemetry.io/otel/metric, and go.opentelemetry.io/otel/trace packages. This provides a concurrent-safe and performant alternative to WithInstrumentationAttributes by accepting a pre-constructed attribute.Set. (#7287)
    • Add experimental observability for the Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus. Check the go.opentelemetry.io/otel/exporters/prometheus/internal/x package documentation for more information. (#7345)
    • Add experimental observability metrics in go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc. (#7353)
    • Add temporality selector functions DeltaTemporalitySelector, CumulativeTemporalitySelector, LowMemoryTemporalitySelector to go.opentelemetry.io/otel/sdk/metric. (#7434)
    • Add experimental observability metrics for simple log processor in go.opentelemetry.io/otel/sdk/log. (#7548)
    • Add experimental observability metrics in go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc. (#7459)

    ... (truncated)

    Commits
    • a3a5317 Release v1.40.0 (#7859)
    • 77785da chore(deps): update github/codeql-action action to v4.32.1 (#7858)
    • 56fa1c2 chore(deps): update module github.com/clipperhouse/uax29/v2 to v2.5.0 (#7857)
    • 298cbed Upgrade semconv use to v1.39.0 (#7854)
    • 3264bf1 refactor: modernize code (#7850)
    • fd5d030 chore(deps): update module github.com/grpc-ecosystem/grpc-gateway/v2 to v2.27...
    • 8d3b4cb chore(deps): update actions/cache action to v5.0.3 (#7847)
    • 91f7cad chore(deps): update github.com/timakin/bodyclose digest to 73d1f95 (#7845)
    • fdad1eb chore(deps): update module github.com/grpc-ecosystem/grpc-gateway/v2 to v2.27...
    • c46d3ba chore(deps): update golang.org/x/telemetry digest to fcf36f6 (#7843)
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=go.opentelemetry.io/otel/sdk&package-manager=go_modules&previous-version=1.38.0&new-version=1.40.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/dolthub/dolt/network/alerts).
  • 10591: Support staging new tables with dolt add -p
    When using 'dolt add -p' to stage rows from a new table (one that exists in working but not in staging), the workspace table UPDATE mechanism previously failed with 'table not found' because GetTableWriter looked for the table in the staging root where it didn't exist yet.
    This change adds ensureTableExistsInStaging() which:
    1. Checks if the table exists in staging (fast path - no-op)
    2. If not, checks if it exists in working
    3. If yes, creates an empty table in staging with the same schema
    4. Updates the session state to reflect the new staging root
      The table is created empty (not copied with data) because 'dolt add -p' allows partial staging - each row selected by the user will be inserted individually into the staging table via the workspace table UPDATE.
      Also adds unit tests and BATS integration tests for the new functionality.
      Example usage: https://gist.github.com/nullun/e88cb2dab9568c6612c98d415a4a2efd

go-mysql-server

  • 3455: Do not convert AntiJoins to LeftOuterJoin when inside an Update node
    fixes dolthub/dolt#10600
  • 3452: lazy sql-mode string
    This PR moves sqlModeString construction to the String() to avoid unnecessary sorting and string operations.
    Additionally adds custom comma separating code to avoid library calls and memory allocations.
    On my M4 Mac:
    Original: 232.3 ns/op
    Lazy String: 135.5 ns/op
    Custom Sep: 105.3 ns/op
  • 3448: Move / guard on new databases to Dolt and add sql.ErrWrongDBName and sql.SQLError to automatically add other error metadata
    Parent dolthub/dolt#10431
  • 3439: Bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 in /_integration/go
    Bumps filippo.io/edwards25519 from 1.1.0 to 1.1.1. Commits
    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=filippo.io/edwards25519&package-manager=go_modules&previous-version=1.1.0&new-version=1.1.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/dolthub/go-mysql-server/network/alerts).
  • 3437: Bump filippo.io/edwards25519 from 1.1.0 to 1.1.1
    Bumps filippo.io/edwards25519 from 1.1.0 to 1.1.1. Commits
    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=filippo.io/edwards25519&package-manager=go_modules&previous-version=1.1.0&new-version=1.1.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/dolthub/go-mysql-server/network/alerts).

Closed Issues

  • 10565: mariadb 11.8 client cannot talk to dolt
  • 10602: BUG: Binlog producer does not participate in GC safepoints — concurrent DOLT_GC can delete chunks mid-traversal
  • 10589: Inconsistent table import behaviour between CSV and Parquet when columns missing in flat file
v1.58.10 Maintenance

Release 1.58.10 is a special release that takes v1.58.8 and adds a larger, but configurable commit cache. This is not the latest release

v1.83.0 Breaking risk
Breaking changes
  • @ character no longer supported for normal databases to avoid revision name conflicts
Notable features
  • JSONL support for table import/export
  • @ delimiter for database revisions (ORM-compatible)
  • Optimized dolt_log queries for databases with many tags
Full changelog

This is a minor version bump because an internal cache size has been raised. This could result in more memory utilization for databases which have more than tens of thousands of commits. The cache is per-database and it stores loaded Dolt commit objects. Its size can be lowered once again by running the sql-server process with an environment variable set: DOLT_COMMIT_CACHE_SIZE=10000 will restore the previous size.

Merged PRs

dolt

  • 10592: go: Optimize some SELECTs against dolt_log for some types of databases.
    Databases with lots of tags will see a performance improvement on analyzing queries which use dolt_log.
    An internal cache has been increased in size. Database servers which regularly run queries against dolt_log which visit more than 10,000 commits will be able to take advantage of the larger cache and will see the performance of those queries improve.
  • 10587: delete GitBlobstore unique refs on Close, and remove commit parents from remote ref commits
  • 10585: go/utils/publishrelease/buildindocker.sh: Pick up newer GCC toolchain for building release binaries.
  • 10577: Add JSONL support to dolt table {import,export}
    Adds JSONL (.jsonl / --file-type jsonl) support for both dolt table export (newline-delimited rows reusing existing JSON serialization) and dolt table import (streaming JSONL reader), with updated CLI help plus unit and Bats integration tests.
  • 10554: optimize ForeignKey.HashOf()
    This PR optimizes the ForeignKey.HashOf() function to be about 55% faster by using a sync.Pool of []byte instead of bytes.Buffer.
    Unfortunately, this only accounts for like 0.2% of total tppc cpu runtime.
    Old:
    BenchmarkForeignKeyHashOf-14    	 2012511	       578.7 ns/op
    
    New:
    BenchmarkForeignKeyHashOf-14    	 4511584	       260.0 ns/op
    
  • 10431: Add @ database revision delimiter for ORMs and drivers
    Fix dolthub/dolt#10382
    • Fix dolt SQL shell bug where the revision database in use would switch to main after a SQL statement:
    10382/main> call dolt_branch('branch1');
    +--------+
    | status |
    +--------+
    | 0      |
    +--------+
    1 row in set (0.01 sec)
    10382/main> use `10382/branch1`;
    Database Changed
    10382/branch1> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | 10382              |
    | 10382/branch1      |
    | 10382/main         |
    | ...                |
    +--------------------+
    10 rows in set (0.00 sec)
    10382/main>
    
    • Add support for new @ character as delimiter for database revision names and remove @ use in normal database names.
    • Fix dolt_status table to report status in detached heads.
    • Fix Dolt shell to not report an error when switching to a detached head.
    • Add support to Dolt shell for new @ delimiter for database revisions.
      MySQL ORMs (e.g., Prisma) and drivers have trouble parsing the / character in database names for their connection URLs. Dolt's database revisions (i.e., branches and commits) system requires the use of / in order to access a database revision. Consequently, this makes revisions inaccessible via ORMs and drivers under certain interfaces, as seen in the issue above.
      As a result, the @ symbol now serves as a delimiter alias when accessing database revisions in Dolt. Any database-related queries that contain the @ delimiter will resolve their strings to the / counterpart. Keep in mind the database in-use will be reflected in the @ format. However, no new databases are created or stored, and you can still use the / name version.
      The following covered side effects exist to keep compatibility with MySQL ORMs and drivers that use their connection URLs' database for internal tables.
      ⚠️The @ character is no longer supported for normal databases to avoid conflicts with revision databases.
      ⚠️Using the @ version of a revision database name will appear in the same format in dependent functions. This can also affect certain tables like information_schema.tables indirectly, where table_info.table_schema will resolve to the @ name when in use.
    SELECT database();
    +----------------+
    | DATABASE()     |
    +----------------+
    | mydb@branch1   |
    +----------------+
    
    ⚠️ This side effect also applies with the dolt_show_branch_databases system variable. When SHOW DATABASES; is called, the current revision database using the @ format will omit its / counterpart.
    mydb/branch1> set dolt_show_branch_databases = 1;
    Query OK, 0 rows affected (0.00 sec)
    mydb/branch1> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | 10382              |
    | 10382/main         |
    | information_schema |
    | mydb               |
    | mydb@branch1       |
    | mydb/main          |
    | mysql              |
    +--------------------+
    7 rows in set (0.00 sec)
    
    The information_schema and other examples can be found in #10431 integration tests.

go-mysql-server

  • 3449: keep top-level plan.Limit for doltgres generate_series
    PR https://github.com/dolthub/go-mysql-server/pull/3432 replaced plan.Limit nodes with plan.TopN, because they are unnecessary for anything in dolt and gms. However, because of the way generate_series works with LIMIT, we actually need to keep the plan.Limit at the top.
    This should have minimal impact on performance
  • 3448: Move / guard on new databases to Dolt and add sql.ErrWrongDBName and sql.SQLError to automatically add other error metadata
    Parent dolthub/dolt#10431

Closed Issues

  • 10382: Prisma migrate and push does not respect specified branch in a connection string
v1.82.5 Breaking risk
Notable features
  • dolt_tests table enforces input validation constraints
  • ALTER TABLE DROP CONSTRAINT now removes unique indexes
  • greatest() and least() functions support Decimal types
v1.82.4 Breaking risk
Notable features
  • --continue flag for cherry-pick
  • Ignored tables filtering
v1.82.2 Breaking risk

Minor fixes and improvements.

Full changelog

Merged PRs

dolt

  • 10523: Fix non-interactive rebase to checkout branch on conflict
    This bug was introduced when we removed the need to use the --interactive flag.
  • 10517: /go/store/blobstore/internal/git/runner.go: force english in git subprocesses
  • 10516: Allow restrictions in branch control
    This allows for inserting (and updating to) restrictions within the dolt_branch_control table. Previously, we attempted to prevent subsets by checking if the existing rows fully encapsulated the new row. While this is true for matching, it's not true in the logical sense, as a restriction matches both but overrides other matches. This change makes that distinction by always allowing insertion when there are different permissions.

Closed Issues

Performance

| Read Tests | MySQL | Dolt | Multiple |
|:-----------------------:|:-----:|:-----:|:--------:|
| covering_index_scan | 1.93 | 0.55 | 0.28 |
| groupby_scan | 14.46 | 9.91 | 0.69 |
| index_join | 1.52 | 1.82 | 1.2 |
| index_join_scan | 1.47 | 1.34 | 0.91 |
| index_scan | 34.33 | 21.89 | 0.64 |
| oltp_point_select | 0.2 | 0.28 | 1.4 |
| oltp_read_only | 3.82 | 5.28 | 1.38 |
| select_random_points | 0.35 | 0.54 | 1.54 |
| select_random_ranges | 0.39 | 0.56 | 1.44 |
| table_scan | 34.95 | 22.28 | 0.64 |
| types_table_scan | 75.82 | 65.65 | 0.87 |
| reads_mean_multiplier | | | 1.0 |

| Write Tests | MySQL | Dolt | Multiple |
|:------------------------:|:-----:|:-----:|:--------:|
| oltp_delete_insert | 8.58 | 6.43 | 0.75 |
| oltp_insert | 4.18 | 3.19 | 0.76 |
| oltp_read_write | 9.39 | 11.45 | 1.22 |
| oltp_update_index | 4.25 | 3.25 | 0.76 |
| oltp_update_non_index | 4.25 | 3.13 | 0.74 |
| oltp_write_only | 5.28 | 6.09 | 1.15 |
| types_delete_insert | 8.58 | 6.91 | 0.81 |
| writes_mean_multiplier | | | 0.88 |

| Overall Mean Multiple | 0.94 |
|:---------------------:|:----:|

v1.82.0 Breaking risk
Breaking changes
  • Constraint violation table key format incompatible with older versions; stored key hash now includes violation-info suffix
Notable features
  • Support for multiple constraint violations of same type in single row
Full changelog

This release contains a backwards incompatible change to the Dolt constraint violation table. Now with the support of multiple constraint violations of the same type, the stored key hash is incompatible with older versions when being read from storage.

Merged PRs

dolt

  • 10502: /integration-tests/bats: additional git remote tests
  • 10501: /go/go.{mod,sum}: bump dolt mcp
  • 10497: Add support for multiple constraint violations in the same row
    Fix #6329
    Merge now records multiple constraint violations of the same type for the same row (e.g., one row violating several unique indexes). Previously the artifact key could only represent on such violation per row.
    • Artifact keys gain a fourth field, a 20-byte violation-info hash. We use 20 bytes so the key layout stays uniform: the same tuple descriptor and key builder can treat the commit-hash and violation-info suffix as fixed 20-byte fields and key length is predictable.
    • Deleting from dolt_constraint_violations_<table> builds both the new key (with the 20-byte hash from the row) an the old key (no fourth field) and deletes both, this allows existing repos to still work.
    • Conflicts deleter writes the fourth key field as 20 zero bytes so keys match the new 4-field format.
    • Error message groups violations by description, adds "(N rows(s))" when N > 1.

Closed Issues

  • 6329: Merge doesn't support reporting multiple constraint violations of the same type for the same row
  • 10473: Really slow query when IN subquery references lateral column
  • 10462: dolt_clear() drops Nonlocal Tables
v1.81.10 Bug fix

Fixes query optimizer issues with subquery wrapping and recursive CTE filter handling.

v1.81.9 Mixed
Notable features
  • commit verification with dolt_tests
  • dolt_clean respects dolt_ignore patterns
Full changelog

Merged PRs

dolt

  • 10487: Fix dolt_clean not respecting dolt_ignore and dolt_nonlocal_tables patterns
    Fix #10462
    • Fix dolt_ignore and dolt_nonlocal_tables not being excluded from dolt clean default command and SQL interface.
    • Add dolt clean -x flag to override dolt_ignore deletions; similar to git clean -x.
  • 10482: commit verification with dolt_tests
    This PR adds the ability to perform verification of commit content using the dolt_tests table.
    Setting the dolt_commit_verification_group system variable with a comma delimited set of test groups will result in test being run before a commit is completed.
    This validation is performed for commit, merge, cherry-pick, and rebase (through cherry-pick). All procedures/CLI operations provide the --skip-verification flag to bypass.
    Currently one known bug with a skipped test. Rebase workflow is presenting broken when a commit fails verification, but should be handled like a conflict, which would allow the user to --continue the workflow.
  • 10450: fix panic for empty table names, now a normal error

go-mysql-server

  • 3426: Do not push filters into SubqueryAliases that wrap RecursiveCTEs
    fixes dolthub/dolt#10472
    All RecursiveCTEs are wrapped by a SubqueryAlias node. We currently don't push filters through a RecursiveCTE so pushing the filter below the SubqueryAlias just causes it to be awkwardly sandwiched in between and might make some queries less optimal if the filter contains outerscope columns since the SQA gets marked as uncacheable. We probably can push filters through a RecursiveCTE in some cases, but we should spend more time thinking about what that means (see dolthub/dolt#10490).
    Also contains some refactors that I noticed along the way.
    skipped tests will be fixed in #3427
  • 3425: Do not set scope length during join planning
    related to dolthub/dolt#10472
    Scope length should only be set when assigning indexes if the scope length then is not zero. The scope length set during join planning is doesn't actually refer to the correct scope length, and if it was actually supposed to be zero, it was never correct set back to zero, causing a panic.

Closed Issues

  • 10462: dolt_clear() drops Nonlocal Tables
  • 10472: panic: slice bounds out of range in mergeJoinIter.removeParentRow with recursive CTE + NOT EXISTS
v1.81.8 Breaking risk
Breaking changes
  • Removed LD_1 specific codepaths and types
Notable features
  • Git-backed Dolt remotes via git+file/http/https/ssh
  • GitBlobstore with caching and fetch/merge/push sync
Full changelog

Merged PRs

dolt

  • 10485: Git remote support fixes: shard git blobstore writes and normalize clone/remote URLs
    Fix git-remote workflows by defaulting git-blobstore sharding to 50MB and correcting clone dir inference, SSH remote parsing, and empty-remote validation (with tests).
  • 10483: Add git+* dbfactory remotes with required --git-cache-dir, --ref support, and integration tests
    Implements git-backed Dolt remotes via dbfactory (git+file/http/https/ssh), requiring --git-cache-dir and supporting --ref, with end-to-end BATS + Go multi-client coverage for push/clone/pull and empty-remote bootstrap.
  • 10481: [no-review-notes] Removed most of the remaining LD_1 specific codepaths and types
  • 10474: NBS-on-Git: add GitBlobstore-backed NBS store and empty-remote bootstrap
    Add nbs.NewGitStore wiring plus fetch/push semantics and tests to open against an empty Git remote and bootstrap refs/dolt/data on first write.
  • 10466: GitBlobstore: add cache
    Make GitBlobstore cache fetches.
  • 10458: GitBlobstore: remote-managed fetch/merge/push sync
  • 10429: go/store/nbs: For local databases, crash on fatal I/O errors during writes.
    If an fsync fails, or if a critical write(2) calls returns an error against a shared mutable file, it is not safe for the server to keep running because it cannot necessarily guarantee the state of the files as they exist on disk and will exist on disk in the future.
    Implement functionality so that the Dolt process cashes in such cases.

go-mysql-server

  • 3425: Do not set scope length during join planning
    related to dolthub/dolt#10472
    Scope length should only be set when assigning indexes if the scope length then is not zero. The scope length set during join planning is doesn't actually refer to the correct scope length, and if it was actually supposed to be zero, it was never correct set back to zero, causing a panic.
  • 3423: Do not allow sort-based joins between text and number type columns
    fixes dolthub/dolt#10435
    Disables merge and range heap joins between text and number type columns

Closed Issues

  • 10435: Disable RangeHeapJoin with string and number columns
  • 3420: VECTOR INDEX causes batch inserts to fail with NULL embeddings
v1.81.6 Breaking risk
Notable features
  • GitBlobstore write path implementation
  • Full binlog row metadata support
  • CAS retries for concurrent writes
v1.81.5 Bug fix

Fixed dolt_commit foreign key checks and TIMESTAMPDIFF for 292+ year differences.

v1.81.4 Bug fix

Fixed TIMESTAMPDIFF year calculations that incorrectly assumed 365-day years and 30-day months.

v1.80.0 Breaking risk
Breaking changes
  • Many CLI subcommands now require presence of Dolt repository
Notable features
  • DROP SCHEMA support
  • fsck reference and corruption checking
v1.79.3 Bug fix
Notable features
  • Environment variable interpolation in config.yaml
  • Embedded IANA timezone database
Full changelog

Merged PRs

dolt

  • 10276: dolthub/dolt#10269: Add @@dolt_override_schema support for dolt_diff()
    Fixes dolthub/dolt#10269
  • 10272: Skipped test for dolt_diff() table function not respecting schema overrides
    I tried to have Claude fix the actual bug but it got lost.
  • 10267: /{go,integration-tests}: support environment variable interpolation
    Adds support for environment variable interpolation in the dolt sql-server configuration file (config.yaml).
    Users can now reference environment variables using the ${VAR} syntax, which will be replaced at runtime with the value of the VAR environment variable.
  • 10259: Return empty IndexLookup if Literal type is not convertible to column type
    fixes #10246
    test added in dolthub/go-mysql-server#3360
  • 10241: Embed IANA time zone database for clean environments
    This does not resolve dolthub/dolt#10238 but addresses part one of the issue. Some environments do not have an IANA time zone database at a time.LoadLocation expected location. If you require manual loading of a specific time zone database, please see the Go's documentation and make an explicit request on Discord with the issue number above.
  • 10173: Bump github.com/sirupsen/logrus from 1.8.1 to 1.8.3 in /go
    Bumps github.com/sirupsen/logrus from 1.8.1 to 1.8.3.
  • 10100: refactor: remove redundant variable declarations in for loops
    The new version of Go has been optimized, and variables do not need to be reassigned.
    For more info: https://tip.golang.org/wiki/LoopvarExperiment#does-this-mean-i-dont-have-to-write-x--x-in-my-loops-anymore

go-mysql-server

  • 3365: Handle more types in abs
    fixes dolthub/dolt#10171
    fixes dolthub/dolt#10270
    Add case for bool types and add default case that tries to convert value to Float64.
  • 3364: Add panic handling to spawned goroutine
    Spawning a new go routine prevented Doltgres' panic handler from catching the panic. This was discovered by Doltgres regression tests crashing from the unhandled panic.
  • 3361: Handle empty right iterators in exists iterator as an EOF
    fixes dolthub/dolt#10258
    An empty right iterator in an exists iterator should be treated the same as an EOF. Previously, we were treating an empty right iterator as if it would be returning a single nil row, but this is wrong. An empty right iterator would imply an empty set, which is not the same as a single nil row.
  • 3354: Add required attribution for mascot image to README
    This PR adds the required attribution for the mascot image used in the README.
    The mascot image is based on the Go gopher and related derivative work,
    and the README has been updated to include the appropriate credits.
    Please let me know if any adjustments are needed.
  • 3329: Bump github.com/sirupsen/logrus from 1.8.1 to 1.8.3
    Bumps github.com/sirupsen/logrus from 1.8.1 to 1.8.3.

Closed Issues

  • 10270: abs returns null when inputs are boolean values
  • 10238: CONVERT_TZ does not accept MySQL time zone names for users without an IANA database
  • 10269: User reports schema override does not effect dolt_diff() table function
  • 10171: abs does not truncate strings
  • 10239: Feature: Support env variable interpolation in the config.yaml file
  • 9502: High Memory Usage in DoltSQL Server During Idle State
  • 9840: Missing warning for casting negative number string to unsigned
  • 6056: Structural output mode for dolt status
  • 10258: WHERE NOT EXISTS from an empty view does not return correct results
  • 10246: Booleans should not be used as keys for varchar index lookups
  • 10234: Unexpected Anti Join Result

Performance

| Read Tests | MySQL | Dolt | Multiple |
|:-----------------------:|:-----:|:-----:|:--------:|
| covering_index_scan | 1.86 | 0.55 | 0.3 |
| groupby_scan | 13.7 | 9.91 | 0.72 |
| index_join | 1.52 | 1.86 | 1.22 |
| index_join_scan | 1.5 | 1.34 | 0.89 |
| index_scan | 34.33 | 22.28 | 0.65 |
| oltp_point_select | 0.2 | 0.27 | 1.35 |
| oltp_read_only | 3.82 | 5.18 | 1.36 |
| select_random_points | 0.35 | 0.54 | 1.54 |
| select_random_ranges | 0.39 | 0.56 | 1.44 |
| table_scan | 34.95 | 22.28 | 0.64 |
| types_table_scan | 75.82 | 65.65 | 0.87 |
| reads_mean_multiplier | | | 1.0 |

| Write Tests | MySQL | Dolt | Multiple |
|:------------------------:|:-----:|:-----:|:--------:|
| oltp_delete_insert | 8.43 | 6.43 | 0.76 |
| oltp_insert | 4.18 | 3.19 | 0.76 |
| oltp_read_write | 9.22 | 11.45 | 1.24 |
| oltp_update_index | 4.18 | 3.25 | 0.78 |
| oltp_update_non_index | 4.25 | 3.19 | 0.75 |
| oltp_write_only | 5.28 | 6.32 | 1.2 |
| types_delete_insert | 8.43 | 6.91 | 0.82 |
| writes_mean_multiplier | | | 0.9 |

| TPC-C TPS Tests | MySQL | Dolt | Multiple |
|:---------------------:|:-----:|:-----:|:--------:|
| tpcc-scale-factor-1 | 93.94 | 36.89 | 2.55 |
| tpcc_tps_multiplier | | | 2.55 |

| Overall Mean Multiple | 1.48 |
|:---------------------:|:----:|

Beta — feedback welcome: [email protected]