• Stable

    aronwk released this 2026-01-30 20:15:24 -06:00 | 4 commits to main since this release

    📅 Originally published on GitHub: Sat, 31 Jan 2026 02:30:44 GMT
    🏷️ Git tag created: Sat, 31 Jan 2026 02:15:24 GMT

    Merged PRs

    dolt

    • 10392: avoid math.Pow in weibullCheck
    • 10389: go/store/nbs: journal_record.go: Do have processJournalRecords log errors when it sees an early EOF.
      Logging the error here was overly conservative.
    • 10387: /.github/workflows/bump-dependency.yaml: fix autoclosing

    go-mysql-server

    • 3407: Calculate year for timestampdiff based on date and clock time values
      fixes dolthub/dolt#10390
      Previous calculation incorrectly assumed every year has 365 days (doesn't account for leap years) and month has 30 days (doesn't account for over half the months). The offset from this wasn't noticeable with smaller time differences but became apparent with larger time differences. This still needs to be fixed for month and quarter (#10393)
    • 3406: Set table names to lower when creating table map
      fixes dolthub/dolt#10385

    Closed Issues

    • 10390: TIMESTAMPDIFF produces incorrect results for year units
    Downloads
  • Stable

    aronwk released this 2026-01-29 19:13:28 -06:00 | 17 commits to main since this release

    📅 Originally published on GitHub: Fri, 30 Jan 2026 01:28:52 GMT
    🏷️ Git tag created: Fri, 30 Jan 2026 01:13:28 GMT

    Merged PRs

    dolt

    • 10383: Fix SQL engine panic when database is locked
      • Prevent NewSqlEngine from panicking when a repo fails to open due to lock contention.
      • Load-check the underlying DoltDB in engine DB collection and return the recorded load error (e.g.
      nbs.ErrDatabaseLocked) instead of nil-dereferencing.
      • Enables embedded/driver callers to detect “database locked” and safely retry engine initialization.
    • 10376: /go/libraries/doltcore/sqle/dsess/autoincrement_tracker.go: remove print statement
    • 10375: Fix embedded DB lock contention by closing nocache DoltDBs and plumbing DBLoadParams through CREATE DATABASE / clone / stats
      Summary
      This change fixes an embedded / driver reopen failure where a two-phase flow (CREATE DATABASE then later Ping) could still
      hit the database is locked by another dolt process even with disable_singleton_cache + fail-fast lock behavior enabled.
      Key updates:
      • Close underlying DoltDBs in nocache mode: sqle.DoltDatabaseProvider.Close() now closes all underlying *doltdb.DoltDB
      instances when DisableSingletonCacheParam is in effect, ensuring .dolt/noms/LOCK is released on engine shutdown.
      • Plumb DBLoadParams into provider-managed DB creation paths:
      • CREATE DATABASE / UNDROP DATABASE now use env.LoadWithoutDB so DBLoadParams can be applied before any DB is opened.
      • dolt_clone applies provider DBLoadParams to the clone env before registration.
      • registerNewDatabase defensively applies provider DBLoadParams to the env.
      • Propagate DBLoadParams into stats backing store: statspro now uses LoadWithoutDB for new stats storage and copies
      DBLoadParams from the host env so embedded-mode settings apply consistently.
      • Regression coverage: adds a test that creates a DB via the SQL engine, closes the engine, and asserts the LOCK is
      released.
      Why
      Embedded callers rely on deterministic reopen semantics under contention. Previously, the SQL provider close path didn’t
      close the underlying *doltdb.DoltDB for newly created DBs in nocache mode, leaving the journal manifest LOCK held and
      causing retries / reopens to fail.
    • 10374: cache strictLookupIter
    • 10371: go.mod,.github: Bump Go version to 1.25.6.
      Fixes potential impact in some configurations from CVE-2025-61729.
    • 10366: Bug fix: don't set branch control admin privs when rebasing
      Fixes https://github.com/dolthub/dolt/issues/10352
    • 10363: Add embedded-mode options to bypass DB cache and fail fast on journal lock contention
      This PR adds opt-in controls for embedded/driver use-cases that need deterministic reopen semantics under contention:
      • Disable local singleton DB caching for file-backed databases via a new dbfactory param, so each open constructs a fresh store.
      • Fail fast on journal manifest lock timeout via a new dbfactory param, returning a sentinel error instead of falling back to read-only.
      • Plumb DB load parameters through the SQL engine / env so an embedded driver can thread these options into Dolt database creation.
      Key changes
      • dbfactory:
      • Adds DisableSingletonCacheParam (disable_singleton_cache)
      • Adds FailOnJournalLockTimeoutParam (fail_on_journal_lock_timeout)
      • Bypasses the singleton cache in FileFactory.CreateDB when disable_singleton_cache is set.
      • nbs:
      • Adds ErrDatabaseLocked
      • Adds JournalingStoreOptions + NewLocalJournalingStoreWithOptions
      • Updates newJournalManifest(..., failOnTimeout) to return ErrDatabaseLocked on lock timeout when enabled.
      • SQL engine / env plumbing:
      • Adds DBLoadParams to engine.SqlEngineConfig and threads them into env.DoltEnv prior to DB loading.
      • Adds DBLoadParams to env.DoltEnv and merges them into both DB load paths (LoadDoltDB and LoadDoltDBWithParams).
      • Updates env.MultiEnvForDirectory to respect a caller-provided *DoltEnv to avoid preloading before params are set.
    • 10314: Minimize binlog deletions in branch control
      I didn't find a way to trigger multiple deletions through SQL on non-existent rows, but just in case we're somehow able to get to that point through some other bug, we put it in the binlog everytime. This way, we only add to the binlog if we actually had something to delete.
    • 9748: Bump gopkg.in/yaml.v3 from 3.0.0 to 3.0.1 in /integration-tests/transactions
      Bumps gopkg.in/yaml.v3 from 3.0.0 to 3.0.1.
      Dependabot compatibility score
      You can trigger a rebase of this PR 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 merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@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).
      > **Note** > Automatic rebases have been disabled on this pull request as it has been open for over 30 days.

    go-mysql-server

    • 3406: Set table names to lower when creating table map
      fixes dolthub/dolt#10385
    • 3404: Bump google.golang.org/protobuf from 1.28.1 to 1.33.0
      Bumps google.golang.org/protobuf from 1.28.1 to 1.33.0.
      Dependabot compatibility score
      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 merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@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).
    • 3403: /go.{mod,sum}: bump go version
    • 3399: GMS warning on functional indices
      Makes it so create index queries with expression argument will produce a warning instead of an error.
    • 3396: avoid converting float64 to float64
      We save on conversion costs by avoiding a call to convert float64 to float64.
      Unfortunately this has little to no impact on any of our benchmarks because groupbyIter uses concurrency.
      benchmarks: https://github.com/dolthub/dolt/pull/10359#issuecomment-3787735021
    • 3395: fewer strings.ToLower calls in gatherTableAlias
      benchmarks: https://github.com/dolthub/dolt/pull/10355#issuecomment-3787079045
    • 3388: Apply filter simplifications to Join condition
      part of dolthub/dolt#10284
      part of dolthub/dolt#10335
    • 3387: Simplify Between expression to Equals if lower and upper bounds refer to the same field
    • 3386: Push filters that contain references to outer/lateral scopes.
      We attempt to push filter expressions deeper into the tree so that they can reduce the size of intermediate iterators. Ideally, we want to push filters to directly above the data source that they reference.
      Previously, we only pushed filters if they only referenced a single table, since pushing a filter that referenced multiple tables could potentially move the filter to a location where one of the referenced tables is no longer in scope. However, if the extra table references refer to a table in an outer scope or lateral scope, pushing the filter is completely safe. GetFields that reference an outer or lateral scope can be effectively treated as literals for the purpose of this optimization.
      This PR changes getFiltersByTable, a function that maps tables onto the filters that reference those tables. Previously it would ignore filters that reference multiple tables. Now, it allows those filters provided that the extra references are to outer/lateral scopes.
      This improves many of the plan tests:
      • The changed test in tpch_plans.go pushes a filter into the leftmost table lookup
      • The second changed test in query_plans.go replaces a naive InnerJoin with a CrossHashjoin
      • integration_plans.go shows many queries that now have an IndexedTableAccess instead of a table scan, or where we push a filter deeper into a join.
        A small number of neutral / slightly negative changes:
      • One of the changes in integration_plans.go introduces a redundant filter that was previously being removed. In practice this is pretty benign because filters rarely impact the runtime unless they require type conversions.
      • The first changed test in query_plans.go replaces a LookupJoin with a LateralCrossJoin on an IndexedTableAccess. These two plans are effectively equivalent, but the LateralCrossJoin is harder to analyze, has a larger estimated cost and larger row estimate, and could in theory inhibit subsequent optimizations. I imagine we could create a new analysis pass that converts this kind of LateralCrossJoin into a LookupJoin.
    • 3379: Create scope mapping for views
      This is a partial fix for dolthub/dolt/issues/10297
      When parsing a subquery alias, we create a new column id for each column in the SQA schema. The scope mapping is a dictionary on the SQA node that maps those column ids onto the expressions within the subquery that determine their values, and is used in some optimizations. For example, in order to push a filter into a subquery, we need to use the scope mapping to replace any GetFields that were pointing to the SQA with the expressions those fields map to. If for whatever reason the SQA doesn't have a scope mapping, we can't perform that optimization.
      We parse views by recursively calling the parser on the view definition. This works but it means that the original parser doesn't have any references to the expressions inside the view, which prevents us from creating the scope mapping.
      This PR attempts to fix this. Instead of defining the SQA columns in the original parser (where we no longer have access to the view's scope), we now create the columns while parsing the view, and attach them to the scope object for the view definition. Then we store that scope in a field on the Builder, so that the original parser can copy them into its own scope.
      This feels hacky, but was the best way I could think of to generate the scope mappings and ensure they're visible outside the view.
    • 2103: Bump google.golang.org/grpc from 1.53.0 to 1.56.3
      Bumps google.golang.org/grpc from 1.53.0 to 1.56.3.
      Release notes

      Sourced from google.golang.org/grpc's releases.

      Release 1.56.3

      Security

      • server: prohibit more than MaxConcurrentStreams handlers from running at once (CVE-2023-44487)

        In addition to this change, applications should ensure they do not leave running tasks behind related to the RPC before returning from method handlers, or should enforce appropriate limits on any such work.

      Release 1.56.2

      • status: To fix a panic, status.FromError now returns an error with codes.Unknown when the error implements the GRPCStatus() method, and calling GRPCStatus() returns nil. (#6374)

      Release 1.56.1

      • client: handle empty address lists correctly in addrConn.updateAddrs

      Release 1.56.0

      New Features

      • client: support channel idleness using WithIdleTimeout dial option (#6263)
        • This feature is currently disabled by default, but will be enabled with a 30 minute default in the future.
      • client: when using pickfirst, keep channel state in TRANSIENT_FAILURE until it becomes READY (gRFC A62) (#6306)
      • xds: Add support for Custom LB Policies (gRFC A52) (#6224)
      • xds: support pick_first Custom LB policy (gRFC A62) (#6314) (#6317)
      • client: add support for pickfirst address shuffling (gRFC A62) (#6311)
      • xds: Add support for String Matcher Header Matcher in RDS (#6313)
      • xds/outlierdetection: Add Channelz Logger to Outlier Detection LB (#6145)
      • xds: enable RLS in xDS by default (#6343)
      • orca: add support for application_utilization field and missing range checks on several metrics setters
      • balancer/weightedroundrobin: add new LB policy for balancing between backends based on their load reports (gRFC A58) (#6241)
      • authz: add conversion of json to RBAC Audit Logging config (#6192)
      • authz: add support for stdout logger (#6230 and #6298)
      • authz: support customizable audit functionality for authorization policy (#6192 #6230 #6298 #6158 #6304 and #6225)

      Bug Fixes

      • orca: fix a race at startup of out-of-band metric subscriptions that would cause the report interval to request 0 (#6245)
      • xds/xdsresource: Fix Outlier Detection Config Handling and correctly set xDS Defaults (#6361)
      • xds/outlierdetection: Fix Outlier Detection Config Handling by setting defaults in ParseConfig() (#6361)

      API Changes

      • orca: allow a ServerMetricsProvider to be passed to the ORCA service and ServerOption (#6223)

      Release 1.55.1

      • status: To fix a panic, status.FromError now returns an error with codes.Unknown when the error implements the GRPCStatus() method, and calling GRPCStatus() returns nil. (#6374)

      Release 1.55.0

      Behavior Changes

      • xds: enable federation support by default (#6151)
      • status: status.Code and status.FromError handle wrapped errors (#6031 and #6150)

      ... (truncated)

      Commits
      • 1055b48 Update version.go to 1.56.3 (#6713)
      • 5efd7bd server: prohibit more than MaxConcurrentStreams handlers from running at once...
      • bd1f038 Upgrade version.go to 1.56.3-dev (#6434)
      • faab873 Update version.go to v1.56.2 (#6432)
      • 6b0b291 status: fix panic when servers return a wrapped error with status OK (#6374) ...
      • ed56401 [PSM interop] Don't fail target if sub-target already failed (#6390) (#6405)
      • cd6a794 Update version.go to v1.56.2-dev (#6387)
      • 5b67e5e Update version.go to v1.56.1 (#6386)
      • d0f5150 client: handle empty address lists correctly in addrConn.updateAddrs (#6354) ...
      • 997c1ea Change version to 1.56.1-dev (#6345)
      • Additional commits viewable in compare view

      [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/grpc&package-manager=go_modules&previous-version=1.53.0&new-version=1.56.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) You can trigger a rebase of this PR 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 merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@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).
      > **Note** > Automatic rebases have been disabled on this pull request as it has been open for over 30 days.

    vitess

    • 452: Bump google.golang.org/grpc from 1.24.0 to 1.56.3
      Bumps google.golang.org/grpc from 1.24.0 to 1.56.3.
      Release notes

      Sourced from google.golang.org/grpc's releases.

      Release 1.56.3

      Security

      • server: prohibit more than MaxConcurrentStreams handlers from running at once (CVE-2023-44487)

        In addition to this change, applications should ensure they do not leave running tasks behind related to the RPC before returning from method handlers, or should enforce appropriate limits on any such work.

      Release 1.56.2

      • status: To fix a panic, status.FromError now returns an error with codes.Unknown when the error implements the GRPCStatus() method, and calling GRPCStatus() returns nil. (#6374)

      Release 1.56.1

      • client: handle empty address lists correctly in addrConn.updateAddrs

      Release 1.56.0

      New Features

      • client: support channel idleness using WithIdleTimeout dial option (#6263)
        • This feature is currently disabled by default, but will be enabled with a 30 minute default in the future.
      • client: when using pickfirst, keep channel state in TRANSIENT_FAILURE until it becomes READY (gRFC A62) (#6306)
      • xds: Add support for Custom LB Policies (gRFC A52) (#6224)
      • xds: support pick_first Custom LB policy (gRFC A62) (#6314) (#6317)
      • client: add support for pickfirst address shuffling (gRFC A62) (#6311)
      • xds: Add support for String Matcher Header Matcher in RDS (#6313)
      • xds/outlierdetection: Add Channelz Logger to Outlier Detection LB (#6145)
      • xds: enable RLS in xDS by default (#6343)
      • orca: add support for application_utilization field and missing range checks on several metrics setters
      • balancer/weightedroundrobin: add new LB policy for balancing between backends based on their load reports (gRFC A58) (#6241)
      • authz: add conversion of json to RBAC Audit Logging config (#6192)
      • authz: add support for stdout logger (#6230 and #6298)
      • authz: support customizable audit functionality for authorization policy (#6192 #6230 #6298 #6158 #6304 and #6225)

      Bug Fixes

      • orca: fix a race at startup of out-of-band metric subscriptions that would cause the report interval to request 0 (#6245)
      • xds/xdsresource: Fix Outlier Detection Config Handling and correctly set xDS Defaults (#6361)
      • xds/outlierdetection: Fix Outlier Detection Config Handling by setting defaults in ParseConfig() (#6361)

      API Changes

      • orca: allow a ServerMetricsProvider to be passed to the ORCA service and ServerOption (#6223)

      Release 1.55.1

      • status: To fix a panic, status.FromError now returns an error with codes.Unknown when the error implements the GRPCStatus() method, and calling GRPCStatus() returns nil. (#6374)

      Release 1.55.0

      Behavior Changes

      • xds: enable federation support by default (#6151)
      • status: status.Code and status.FromError handle wrapped errors (#6031 and #6150)

      ... (truncated)

      Commits
      • 1055b48 Update version.go to 1.56.3 (#6713)
      • 5efd7bd server: prohibit more than MaxConcurrentStreams handlers from running at once...
      • bd1f038 Upgrade version.go to 1.56.3-dev (#6434)
      • faab873 Update version.go to v1.56.2 (#6432)
      • 6b0b291 status: fix panic when servers return a wrapped error with status OK (#6374) ...
      • ed56401 [PSM interop] Don't fail target if sub-target already failed (#6390) (#6405)
      • cd6a794 Update version.go to v1.56.2-dev (#6387)
      • 5b67e5e Update version.go to v1.56.1 (#6386)
      • d0f5150 client: handle empty address lists correctly in addrConn.updateAddrs (#6354) ...
      • 997c1ea Change version to 1.56.1-dev (#6345)
      • Additional commits viewable in compare view

      [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/grpc&package-manager=go_modules&previous-version=1.24.0&new-version=1.56.3)](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 merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@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/vitess/network/alerts).
    • 451: Bump google.golang.org/protobuf from 1.27.1 to 1.33.0
      Bumps google.golang.org/protobuf from 1.27.1 to 1.33.0.
      Dependabot compatibility score
      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 merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@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/vitess/network/alerts).
    • 450: /go.mod: bump go
    • 449: Nathan/functional index
      Adds a limited method for parsing indexes on functions.
      Can now parse queries like create index idx on tbl ((col1 + col2))
    • 448: Move SERIAL type out of numeric type definitions so that unsigned value is not overwritten
      fixes dolthub/dolt#10345
      MySQL docs

    Closed Issues

    • 10385: UPDATE with JOIN with uppercase table names creates server panic
    • 10352: permission escalation with dolt_rebase
    Downloads
  • Stable

    aronwk released this 2026-01-22 19:05:28 -06:00 | 49 commits to main since this release

    📅 Originally published on GitHub: Fri, 23 Jan 2026 01:20:37 GMT
    🏷️ Git tag created: Fri, 23 Jan 2026 01:05:28 GMT

    Merged PRs

    dolt

    • 10357: Prevent temporary table name collisions
      fixes #10353
      MySQL allows creating temporary tables with the same names as existing non-temporary tables and creating non-temporary tables with the same names as existing temporary tables. However, temporary tables cannot have the same name as other temporary tables.
      Our previous implementation seemed to have assumed temporary tables with the same names were allowed. Each session had a map of db names to an array of tables, and new temporary tables were added to the end of the array, without checking if there was a table with an existing name. When fetching or dropping a temporary table, we iterated through the array and returned/dropped the first table with a matching name; this meant even though we allowed temporary tables with the same name, we only ever operated on whichever one was created first.
      Since temporary tables with the same names are actually not allowed, the array of temporary tables was replaced with a name-to-table map to make fetching a temporary table with GetTemporaryTable faster. This also makes DropTemporaryTable faster. This does make GetAllTemporaryTables slower since we now have to iterate over the mappings to create an array for temporary tables, but GetAllTemporaryTables doesn't seem to be called as frequently as GetTemporaryTable.
    • 10349: Remove requirement for -i in dolt_rebase
      Hold over from the original impl of rebase now addressed!
    • 10274: dolt stash apply
      Adds #10131
      Adds dolt stash apply. Functions similar to drop and pop in usage: accepts no argument for most recent stash, or int or stash@{int} for non-top stashes. i.e. dolt stash apply 2 or dolt stash apply stash@{2}.
    • 10227: dolthub/dolt#5862: Add ignore system table

      Summary

      Adds a new dolt_status_ignored system table that extends dolt_status functionality by including an ignored column to identify which unstaged tables match patterns defined in dolt_ignore. This provides a SQL interface equivalent to dolt status --ignored.

      Changes

      New System Table

      dolt_status_ignored - Same schema as dolt_status plus an ignored column:
      • table_name (text): Name of the table
      • staged (boolean): Whether the table is staged
      • status (text): Status of the table (e.g., "new table", "modified", "conflict")
      • ignored (boolean): Whether the table matches a dolt_ignore pattern

      Implementation Details

      The implementation started with logic similar to status_table.go and was then refactored to share common code between both tables while adding the ignore-checking functionality.
      go/libraries/doltcore/doltdb/system_table.go
      • Added StatusIgnoredTableName constant
      • Registered table in GeneratedSystemTableNames() and DoltGeneratedTableNames
        go/libraries/doltcore/sqle/database.go
      • Added switch case for StatusIgnoredTableName in getTableInsensitiveWithRoot()
      • Extracted getStatusTableRootsProvider() helper to eliminate duplicate logic between dolt_status and dolt_status_ignored switch cases
        go/libraries/doltcore/sqle/dtables/status_table.go
      • Added getStatusRowsData() function using existing statusTableRow struct to share status collection logic between both tables
      • Refactored newStatusItr() to use shared function
        go/libraries/doltcore/sqle/dtables/status_ignored_table.go (new file)
      • Implements StatusIgnoredTable and StatusIgnoredItr
      • Uses shared getStatusRowsData() from status_table.go
      • Uses adapter pattern via DoltTableAdapterRegistry similar to StatusTable
      • Adds ignore-checking logic via helper functions:
      • getIgnorePatterns(): Fetches patterns from dolt_ignore
      • buildUnstagedTableNameSet(): Creates set for quick lookup
      • checkIfIgnored(): Checks if table matches ignore pattern (returns error on failure)

      Behavior

      • Unstaged tables: ignored=1 if table name matches a pattern in dolt_ignore, ignored=0 otherwise
      • Staged tables: Always ignored=0 (staging overrides ignore patterns, matching git behavior)
      • Constraint violations, merge conflicts, schema conflicts: Always ignored=0

      Tests

      BATS integration tests

      integration-tests/bats/system-tables.bats:
      • Basic functionality: Verifies ignored column correctly identifies ignored tables while non-ignored tables have ignored=0
      • Staged tables: Confirms staged tables always have ignored=0 regardless of ignore patterns
      • System table visibility: Ensures table appears in dolt ls --system
        integration-tests/bats/ls.bats:
      • Updated "ls: --system shows system tables" to include dolt_status_ignored (27 tables instead of 26)

      Go enginetests

      go/libraries/doltcore/sqle/enginetest/dolt_queries.go:
      Closes #5862

    go-mysql-server

    • 3395: fewer strings.ToLower calls in gatherTableAlias
      benchmarks: https://github.com/dolthub/dolt/pull/10355#issuecomment-3787079045
    • 3393: add transform.InspectWithOpaque function
      This changes transform.Inspect to not apply the helper function on children of sql.OpaqueNodes.
      Additionally, it adds a transform.InspectWithOpaque that does.
      This is to match transform.Node and transform.NodeWithOpaque.
      There are still some inconsistencies between the different transform helper functions:
      • transform.Node:
      • post order (applies to node.Children then node)
      • no way to break out early
      • transform.Inspect:
      • pre order (applies to node then node.Children)
      • can break out early (only on all or none of children)
      • return true to continue
      • transform.InspectExpr:
      • post order (applies to expr.Children then expr)
      • can break out early, including stopping during children
      • return false to continue
    • 3389: remove convertLeftAndRight
      This PR removes c.convertLeftAndRight, which avoids calls to c.Left().Type() and c.Right().Type().
      Not entirely sure why receiver methods would impact performance this much, but benchmarks say so.
      Benchmarks: https://github.com/dolthub/dolt/pull/10342#issuecomment-3775801225

    Closed Issues

    • 10353: Dolt needs to error out when creating duplicate temporary table.
    • 5862: Add alternative to dolt_status system table that includes tables ignored by system_ignore
    • 10345: SERIAL type alias creates signed BIGINT instead of unsigned
    Downloads
  • Stable

    aronwk released this 2026-01-21 19:03:43 -06:00 | 80 commits to main since this release

    📅 Originally published on GitHub: Thu, 22 Jan 2026 01:19:07 GMT
    🏷️ Git tag created: Thu, 22 Jan 2026 01:03:43 GMT

    Merged PRs

    dolt

    • 10347: fixed output bug for foreign key constraints

    go-mysql-server

    • 3389: remove convertLeftAndRight
      This PR removes c.convertLeftAndRight, which avoids calls to c.Left().Type() and c.Right().Type().
      Not entirely sure why receiver methods would impact performance this much, but benchmarks say so.
      Benchmarks: https://github.com/dolthub/dolt/pull/10342#issuecomment-3775801225
    • 3384: Look at every join node parent when computing outer scopes.
      Previously, when building scopes for subqueries that appear inside joins, we would only track a single parent join node. If the subquery had multiple join parents, we would only be able to resolve references to the innermost subquery. This inhibits the optimizations we can perform.
      This PR uses a custom tree walker to track a list of parent join nodes, and includes an example of a query that was not previously possible to optimize.
    • 3370: Wrap errgroup.Group.Go() calls for consistent panic recovery
      Each spawned goroutine needs a panic recovery handler to prevent an unexpected panic from crashing the entire Go process. This change introduces a helper function that wraps goroutine creation through errgroup.Group and installs a panic recovery handler and updates existing code to use it.

    vitess

    Closed Issues

    • 10345: SERIAL type alias creates signed BIGINT instead of unsigned
    • 10329: Foreign key constraint doesn't enforce index requirement on receiving table
    Downloads
  • Stable

    aronwk released this 2026-01-20 20:00:57 -06:00 | 92 commits to main since this release

    📅 Originally published on GitHub: Wed, 21 Jan 2026 02:15:34 GMT
    🏷️ Git tag created: Wed, 21 Jan 2026 02:00:57 GMT

    Merged PRs

    dolt

    • 10341: go/store/nbs: Fix possible data loss from Dolt CLI utilization when executing against a running server that was in the process of writing to its journal file.
      Since Dolt v1.78.5, Dolt has truncated the journal file to the latest successfully loaded record when it successfully loads a database. This is the correct behavior when the CLI is operating as the exclusive writer to the database. However, Dolt also has a mode where it can load the database in read-only mode. Due to a bug, Dolt was also truncating the journal file when it was operating in this mode. The end result was the running something like dolt sql -r csv -q ... against a Dolt database that was running a sql-server and was currently accepting writes could incorrectly truncate the journal file. The Dolt sql-server process would go ahead writing into the journal at its previously extended offset and the space between the truncation and the next write offset would be 0 filled by the operating system. Attempting to load the database later or accessing the chunks located at that corrupted portion of the journal file would result in checksum errors or failure to load messages.
      This change correctly updates Dolt to only Truncate the journal file when we are loading it in read-write mode.
    • 10327: go/cmd/dolt: Make movable temp file configuration lazy.
      Previously, early in the process life-cycle after dolt was run, dolt would immediately check if a file created in os.TempDir() was able to be os.Renamed into a subdirectory of the dolt process's data directory, by default $PWD/.dolt. If the rename failed, it would configure Dolt to use .dolt/temptf as the movable temp file directory instead.
      This meant that for many dolt invocations, Dolt would do some local filesystem writes, including potentially Mkdir(.dolt) before it it was fully loaded. With the advent of things like dolt accessing the running server through sql-server.info and dolt --host ... sql this behavior was not ideal. It creates races with concurrently run dolt processes that try to use the .dolt directory, and it creates odd behavior when running something like dolt sql in a non-Dolt directory but on a filesystem mount where this rename from os.TempDir() does not work.
      This PR changes the check and the configuration of a potential .dolt/temptf directory to be delayed until the first temporary movable file is actually requested by Dolt. At that point we know that we have a need for a renamable temp file and it is OK to go ahead and create .dolt/temptf if we need it.
      This PR changes the error handling around some edge cases like permissions errors on the calling process creating temptf within .dolt. In particular, some errors which were previously early and fatal are now delayed until use site and may end up being persistent but non-fatal to the process, depending on the operation.
    • 10326: go: Add some error checks for previously dropped errors in Filesys.Iter calls.
    • 10322: .github/workflows/ci-check-repo.yaml: Make the action step which updates Godeps/LICENSES look more like update.sh.
    • 10319: go/store/nbs: file_manifest.go: Always make manifest writes crash safe. Remove optional async manifest write support.
      Online GC could write new tale files to oldgen, and the manifest write was not crash safe. This could result in data loss depending on filesystem settings if there was an inopportune crash.

    go-mysql-server

    • 3383: When applying indexes from outer scopes, resolve references to table aliases
      The previous implementation of the applyIndexesFromOuterScopes optimization uses the getTablesByName function to map table name references onto tables. But this function only locates ResolvedTables, and other optimizations rely on this behavior.
      I've split getTablesByName into two different functions: getResolvedTablesByName, which has the original behavior, and getNamedChildren, which takes a parent node and identifies all nameable nodes in its children, including both ResolvedTables and TableAliases.
    • 3382: Ensure join correctness for enums of different types
      fixes dolthub/dolt#10311
      branched from #3381
      Enums of different types join based on their string value, not their underlying int value. Ensures join correctness for enums of different types by doing the following:
      • use type-aware conversion with enum origin types to properly convert enums to their string values
      • disable Lookup joins for enums of different types. Lookup joins should not work here because enums are indexed based on their int values.
      • disable Merge joins for enums of different types. Merge joins should not work here because enums are sorted based on their int values.
    • 3381: Use key type for memory table index filter range
      part of dolthub/dolt#10311
      This change allows avoiding unnecessary type conversions when filtering by index and also simplifies some range filter expressions.
      This causes foreign keys, particularly enums and sets, to be compared based on their internal values, instead of based on the generalized converted type.
    • 3380: Generate index lookups for filters that appear in lateral joins
      This PR enhances the "applyIndexesFromOuterScope" analysis pass to transform filters on tablescans into indexed table lookups, when the table's column is being compared with a column visible from a lateral join.
      An example of a query that can be optimized with this change: select x, u from xy, lateral (select * from uv where y = u) uv;
      Users don't often write lateral joins, but the engine can transform WHERE EXISTS expressions into lateral joins, and this lets us optimize those too.
    • 3376: Add IsExpr case to replaceVariablesInExpr
      Stored procedures containing IS expressions that referenced a procedure variable were breaking.
    • 3369: Added DISTINCT ON handling
      Related PRs:

    vitess

    Closed Issues

    • 1621: Missing index for foreign key error
    Downloads
  • Stable

    aronwk released this 2026-01-15 16:19:42 -06:00 | 126 commits to main since this release

    📅 Originally published on GitHub: Thu, 15 Jan 2026 22:35:11 GMT
    🏷️ Git tag created: Thu, 15 Jan 2026 22:19:42 GMT

    Merged PRs

    dolt

    • 10313: When DB files can't be read off disk, fail with a clear error rather than a panic
      For reasons not fully understood yet, a hosted instance ended up with a .dolt/noms/manifest file which was not readable by the DB process. This caused a panic, which should never happen. This change provides a clear error message stating what file you're lacking permissions to.
    • 10306: Fix skipped bats test for merge with longer key on both branches
      The test was skipped since March 2023 because merge would hang. The underlying issue was fixed in April 2024 when ErrMergeWithDifferentPksFromAncestor was added to properly detect and reject merges where both branches changed the primary key from the common ancestor.
      The test also had a setup bug - the SQL call dolt_checkout('b2') only applied to the SQL session, not the shell session. Added explicit checkout after the SQL block and updated expected error message.
    • 10305: gauges measuring percentage of CPU, virtual memory, and disk used
    • 10293: Add support for -vv for dolt branch command
      This improves similarity with git branch for both -v and -vv.
      Previously -v did not include the [ahead/behind] information that git had. Now it does.
      -vv is a new flag mechanism to further include the remote name in the square brackets.

    Closed Issues

    • 10311: enums should match based on int value for foreign keys and string value for joins
    • 10235: DOLT 1.79 got Poor Performance over JOIN Operations
    Downloads
  • Stable

    aronwk released this 2026-01-09 18:03:18 -06:00 | 150 commits to main since this release

    📅 Originally published on GitHub: Sat, 10 Jan 2026 00:18:37 GMT
    🏷️ Git tag created: Sat, 10 Jan 2026 00:03:18 GMT

    Merged PRs

    dolt

    go-mysql-server

    Closed Issues

    Downloads
  • Stable

    aronwk released this 2026-01-08 17:57:52 -06:00 | 153 commits to main since this release

    📅 Originally published on GitHub: Fri, 09 Jan 2026 00:12:51 GMT
    🏷️ Git tag created: Thu, 08 Jan 2026 23:57:52 GMT

    This release contains a backwards incompatible change to the Dolt command line interface. Dolt is now far more strict about which CLI subcommands require the presence of a Dolt repository. Many CLI commands that would work when being run outside of a Dolt repository directory, especially when a Dolt SQL server was running, will now error.

    Merged PRs

    dolt

    • 10289: Consistently implement which commands require a repo
      Add a test file to ensure behavior
    • 10281: drop schema support
    • 10262: fsck to walk references and report missing/corrupted objects
      Currently dolt fsck just validates all chunks have a valid address. This change extends the validation to three phases.
      1. Validate chunks have valid addresses
      2. Collect the commits we can reach from branches/tags
      3. Walk the content trees of reachable commits. Walking is performed with the serialmsg.WalkAddrs() itereator.

    go-mysql-server

    • 3371: Error out for NATURAL FULL JOIN
      Fixes dolthub/dolt#10268
      Part of dolthub/dolt#10295
      Relies on dolthub/vitess#447 and adds test
    • 3368: Do not parse trigger bodies in LoadOnly context
      fixes dolthub/dolt#10287
      fixes dolthub/dolt#10288
      This PR adds a LoadOnly flag to a trigger context so that the body of a CreateTrigger statement is not unnecessarily parsed. This avoids parsing the trigger body every time an insert, update, or delete is called and only parses it when the trigger is actually relevant to the event. This also avoids parsing the trigger body when show trigger is called.
      This PR also rearranges some things in buildCreateTrigger to be more performant.
    • 3367: drop schema support
    • 3366: Fix query ok for drop view
      fixes dolthub/dolt#10201
    • 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.

    vitess

    • 447: Parse NATURAL FULL JOIN
      Part of dolthub/dolt#10268
      Part of dolthub/dolt#10295
      Any join with the NATURAL prefix that was not a LEFT or LEFT OUTER JOINwas getting parsed as aNATURAL RIGHT JOIN. This PR allows for NATURAL FULL JOINto be parsed correctly and also prevents invalid joins using theNATURAL` prefix from getting parsed.
    • 445: /go/vt/sqlparser: support float8

    Closed Issues

    • 10268: NATURAL FULL JOIN incorrectly parsed as NATURAL RIGHT JOIN
    • 10230: The current directory is not a valid dolt repository. inconsistently reported inside a dolt repository
    • 10288: Every single trigger definition is parsed for every single insert, update, or delete
    • 10287: When a trigger references a column that no longer exists, errors should only be thrown when the trigger is actually triggered
    • 10283: Non-local tables appear twice in show tables, dolt workbench.

    Performance

    Read Tests MySQL Dolt Multiple
    covering_index_scan 1.82 0.58 0.32
    groupby_scan 13.7 9.91 0.72
    index_join 1.5 1.89 1.26
    index_join_scan 1.47 1.34 0.91
    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.55 1.41
    table_scan 34.33 22.28 0.65
    types_table_scan 74.46 66.84 0.9
    reads_mean_multiplier 1.01
    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.25 3.25 0.76
    oltp_update_non_index 4.25 3.19 0.75
    oltp_write_only 5.28 6.21 1.18
    types_delete_insert 8.58 6.91 0.81
    writes_mean_multiplier 0.89
    TPC-C TPS Tests MySQL Dolt Multiple
    tpcc-scale-factor-1 93.84 36.73 2.55
    tpcc_tps_multiplier 2.55
    Overall Mean Multiple 1.48
    Downloads
  • Stable

    aronwk released this 2026-01-07 17:12:00 -06:00 | 225 commits to main since this release

    📅 Originally published on GitHub: Wed, 07 Jan 2026 23:27:17 GMT
    🏷️ Git tag created: Wed, 07 Jan 2026 23:12:00 GMT

    Merged PRs

    dolt

    • 10286: Fix show tables to show singular name when local table name conflicts with a non-local table name
      Fix dolthub/dolt#10283

    Closed Issues

    • 10283: Non-local tables appear twice in show tables, dolt workbench.
    • 10269: User reports schema override does not effect dolt_diff() table function
    • 10201: missing Query OK message for dropping a view
    Downloads
  • Stable

    aronwk released this 2026-01-06 18:57:15 -06:00 | 230 commits to main since this release

    📅 Originally published on GitHub: Wed, 07 Jan 2026 01:12:42 GMT
    🏷️ Git tag created: Wed, 07 Jan 2026 00:57:15 GMT

    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
    Downloads