• Stable

    aronwk released this 2025-10-16 14:44:12 -05:00 | 564 commits to main since this release

    Backwards Incompatible Changes

    This version enables Automatic Garbage Collection and the Archive storage format as the default behavior. We do not expect any backwards in compatibility, but this is a significant change which merits having a significant version bump from our previous version, 1.59.

    Per Dolt’s versioning policy, this is a minor version bump because these changes may impact existing applications. Please reach out to us on GitHub or Discord if you have questions or need help with any of these changes.

    We called this release 1.75 to indicate we are much closer to Dolt 2.0 for which Automatic Garbage Collection and the Archive storage format as the default are requirements.

    Merged PRs

    dolt

    • 9964: Enable AutoGC and Archive format by default
      In prep for dolt 1.75, this change makes auto_gc and archives the default.
    • 9957: go/libraries/utils/earl: Add special handling for AWS URLs with non-compliant host components so that we can bump the Golang version.
    • 9952: dolthub/dolt#9904: Add MariaDB connectors integration tests
      Fixes dolthub/dolt#9904
      Companion dolthub/docs#2691
    • 9940: go: sqle: Add support for visting GC roots in current table editors.
      This will unlock the ability to finalize GC even during long running statements. To accomplish this, we add support to table editors to visit their own GC roots. Stashed edits in a table editor need to be flushed before we visit them, so we do that here.
    • 9939: blobstore push/pull and conjoin
      Add support for pushing and pulling archives to blobstore remotes. This includes conjoin support.

    go-mysql-server

    • 3267: Fix GroupBy validation for queries with Having
      fixes dolthub/dolt#9963
      In #3166, I had skipped adding aggregate function dependencies to the from scope of the Having node because they were being included in the select expressions during GroupBy validation. However, removing them caused other scoping issue.
      So I undid the skip, and instead of using the select expressions from the innermost Project node, we now use the select expressions from the innermost Project node that is not a direct child of a Having node. This exposed a bug where we were not able to resolve aliases in OrderBy expressions so I added Alias expressions to the select dependency map used for resolving OrderBy and Select expressions
    • 3265: Do not allow inserting NaN and Inf values into numeric type columns
      fixes #3264
    • 3263: Do not prune tables in semi-joins
      Fixes dolthub/dolt#9951
    • 3262: dolthub/dolt#9927: Fix SQL regression on UnaryMinus NULL CAST
      Fixes dolthub/dolt#9927

    Closed Issues

    • 9963: Bug with having and dates
    • 9904: Add MariaDB Connectors to Supported Clients
    • 9951: Nested query exception
    • 3264: Panic When Comparing Decimal against NaN
    Downloads
  • Stable

    aronwk released this 2025-10-14 05:20:34 -05:00 | 634 commits to main since this release

    Merged PRs

    dolt

    • 9956: go.mod,.github: Build with go 1.25.1.
      1.25.2 introduces stricter net/url.Parse semantics on bracketed hostname components, which breaks the (non-standard) URLs that Dolt uses for AWS remotes. We will build with the previous version of Go until we can fix this.

    Closed Issues

    • 9941: Add an INFO message to the sql-server logs for MCP server start if configured
    • 9942: Error in logs when using claude mcp list

    Performance

    Read Tests MySQL Dolt Multiple
    covering_index_scan 1.86 0.65 0.35
    groupby_scan 13.7 18.61 1.36
    index_join 1.5 2.43 1.62
    index_join_scan 1.5 1.39 0.93
    index_scan 34.95 30.26 0.87
    oltp_point_select 0.21 0.28 1.33
    oltp_read_only 3.89 5.37 1.38
    select_random_points 0.36 0.58 1.61
    select_random_ranges 0.39 0.61 1.56
    table_scan 34.95 32.53 0.93
    types_table_scan 75.82 130.13 1.72
    reads_mean_multiplier 1.24
    Write Tests MySQL Dolt Multiple
    oltp_delete_insert 8.43 6.55 0.78
    oltp_insert 4.18 3.25 0.78
    oltp_read_write 9.39 11.87 1.26
    oltp_update_index 4.25 3.3 0.78
    oltp_update_non_index 4.25 3.25 0.76
    oltp_write_only 5.28 6.43 1.22
    types_delete_insert 8.58 6.91 0.81
    writes_mean_multiplier 0.91
    TPC-C TPS Tests MySQL Dolt Multiple
    tpcc-scale-factor-1 92.85 39.31 2.36
    tpcc_tps_multiplier 2.36
    Overall Mean Multiple 1.50
    Downloads
  • Stable

    aronwk released this 2025-10-10 18:28:12 -05:00 | 641 commits to main since this release

    Merged PRs

    dolt

    • 9933: Fix performance issue when using large JSON documents in UPDATE statements.
      UPDATE statements return the number of rows that changed as a result of the operation. This requires comparing the new and old values for the rows.
      Because IndexedJsonDocument didn't properly implement the ComparableJSON interface, these values were being fully reconstructed in memory for the comparison, which was needlessly slow. Implementing the interface allows comparing two documents to be logarithmic on document size instead of linear.
    • 9928: go: doltcore/remotestorage: Clear our cached repo token when Commit or Rebase are called on the ChunkStore.
      doltremoteapi returns RepoTokens on some RPC interactions. When Dolt mirrors the token back to doltremoteapi, doltremoteapi can check if the current repo state matches the token state and if it does, it can avoid doing some I/O work to refresh its current view of the repository.
      After a Commit(), the client was not clearing its view of the repoToken, and the server was not returning the new RepoToken on a successful commit. This meant that the client was potentially seeing stale data for the repository if its RepoToken represented the previous committed state and if its requests landed on a doltremoteapi replica where that state was also the state of the repository in memory.
      In multi-process concurrency against a ChunkStore, clients are expected to refresh their view of storage after a Commit and after a call to Rebaes. This corresponds to clearing our RepoToken, so that doltremoteapi will Rebase the store and return a new RepoToken which reflects the refreshed state.

    go-mysql-server

    • 3262: dolthub/dolt#9927: Fix SQL regression on UnaryMinus NULL CAST
      Fixes dolthub/dolt#9927
    • 3261: Do not convert keys if key type is incompatible with column type
      fixes dolthub/dolt#9936
      fixes dolthub/dolt#7372
      makes progress on dolthub/dolt#9739
    • 3260: dolthub/go-mysql-server#3259: Fix system variable lookup to only happen on no qualifier
      Fixes dolthub/go-mysql-server#3259
    • 3258: dolthub/dolt#9935: Add fix for boolean evaluation in analyzer for EXISTS
      Fixes dolthub/dolt#9935
    • 3256: dolthub/dolt#9927: Fix double negation overflow with Literals
      Fixes dolthub/dolt#9927
      Fixes dolthub/dolt#9053
    • 3252: Add pure Go regex implementation for non-CGO builds
      This PR provides an optional pure Go regex engine that allows building go-mysql-server without CGO.
      The default build process (using ICU via CGO) remains unchanged.

      Implementation

      • With CGO (default): Uses the existing go-icu-regex library. (internal/regex/regex_cgo.go)
      • Without CGO (CGO_ENABLED=0 or -tags=gms_pure_go): Uses a new implementation based on Go's standard regexp package. (internal/regex/regex_pure.go)
        Build selection is handled via Go build tags.

      Compatibility Notes

      The pure Go engine trades compatibility for portability, as it is based on standard regexp package.
      Notable limitations compared to ICU include:
      • Lack of back-references
      • No before/after text matching
      • Differences in handling CR ('\r')
      • Other minor differences
        This change allows running the server in pure Go for users who can accept the trade-offs, providing greater build flexibility.
    • 3251: Condense nested select * from SubqueryAliases into the innermost SubqueryAlias
    • 3223: README.md: Add notes to the readme indicating cgo dependency.

    Closed Issues

    • 9936: Use of invisible hash index under-fetches rows
    • 7372: Unexpected results when comparing string with type conversion
    • 9927: Incorrect double-negation of integer
    • 9935: Incorrect use of negation in AntiJoinIncludingNulls
    • 9053: Incorrect negation of minimum signed integer
    • 9865: Stored procedure containing a transaction always return EOF as a MySQL error
    • 3259: Panic when column is missing and that column is a system variable
    Downloads
  • Stable

    aronwk released this 2025-10-07 12:47:55 -05:00 | 670 commits to main since this release

    Merged PRs

    dolt

    • 9924: Implement dolt_global_tables system table
      This adds support for a new system table, dolt_global_tables.
      It has the following schema:
      CREATE TABLE `dolt_global_tables` (
      `table_name` varchar(65535) NOT NULL,
      `target_ref` varchar(65535),
      `ref_table` varchar(65535),
      `options` varchar(65535),
      PRIMARY KEY (`table_name`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_bin
      
      It's purpose is to allow tables in one branch namespace to alias to tables in another ref, effectively simulating global tables if multiple "downstream" branches have dolt_global_tables point to the "upstream" table.
      table_name can be a pattern just like the entries in the ignore_tables system table.
      target_ref and ref_table, if null, are treated as the current branch and the input table name.
      Currently options must equal "immediate", which means that writes to a global table are seen immediately by other branches. The behavior is identical to writing to another branch via a fully qualified db name.
      This only effects name resolution during queries, and not other ways to interact with branches. This means that these tables are invisible to system procedures such as DOLT_ADD, just like if you tried to add a system table.
      I would love to have improved error messaging when using global tables with DOLT_ADD, show tables, etc, but if the rest of the design is ready I can do that in a follow-up.

    go-mysql-server

    • 3250: Replace SubqueryAlias that selects an entire table with TableAlias

    Closed Issues

    Performance

    Read Tests MySQL Dolt Multiple
    covering_index_scan 1.82 0.65 0.36
    groupby_scan 13.46 18.28 1.36
    index_join 1.52 2.43 1.6
    index_join_scan 1.5 1.42 0.95
    index_scan 34.95 30.81 0.88
    oltp_point_select 0.21 0.28 1.33
    oltp_read_only 3.89 5.37 1.38
    select_random_points 0.35 0.58 1.66
    select_random_ranges 0.39 0.62 1.59
    table_scan 34.95 32.53 0.93
    types_table_scan 75.82 130.13 1.72
    reads_mean_multiplier 1.25
    Write Tests MySQL Dolt Multiple
    oltp_delete_insert 8.58 6.67 0.78
    oltp_insert 4.18 3.25 0.78
    oltp_read_write 9.39 11.87 1.26
    oltp_update_index 4.25 3.36 0.79
    oltp_update_non_index 4.25 3.25 0.76
    oltp_write_only 5.37 6.55 1.22
    types_delete_insert 8.58 7.04 0.82
    writes_mean_multiplier 0.92
    TPC-C TPS Tests MySQL Dolt Multiple
    tpcc-scale-factor-1 93.58 39.39 2.38
    tpcc_tps_multiplier 2.38
    Overall Mean Multiple 1.52
    Downloads
  • Stable

    aronwk released this 2025-10-03 17:27:54 -05:00 | 685 commits to main since this release

    Merged PRs

    dolt

    go-mysql-server

    • 3250: Replace SubqueryAlias that selects an entire table with TableAlias
    • 3249: dolthub/dolt#9916: Add TRUNCATE(X,D) Support
      Fixes dolthub/dolt#9916
      Companion dolthub/docs#2688
    • 3247: dolthub/dolt#9865: Fix EOF on procedure
      Fixes dolthub/dolt#9865
    • 3246: sql/rowexec: Add a SessionCommandSafepoint session callback for long-running write commands. Call it in some rowexec implementations.
      This allows for integrators to see quiesced states on engine session utilization even on very long running write operations.

    Closed Issues

    • 9910: Support multi-line commit messages in dolt rebase CLI
    • 9916: Function: 'truncate' not found
    • 9865: Stored procedure containing a transaction always return EOF as a MySQL error
    Downloads
  • Stable

    aronwk released this 2025-10-02 21:30:59 -05:00 | 692 commits to main since this release

    Merged PRs

    dolt

    • 9891: Runtime update support for dolt_replicate_to_remote
      This change alters the commit hook code to be dynamic in regards to the primary configuration flags dolt_replicate_to_remote and dolt_async_replication. It does this by wrapping the two existing hooks we have in an interceptor hook which determines the configuration each time Execute is invoked, allowing for dynamic changes to the configuration in a running server.

    go-mysql-server

    Closed Issues

    • 9865: Stored procedure containing a transaction always return EOF as a MySQL error
    • 9889: support for armscii8 charset and armscii8_bin collation”
    • 9890: Mixed charsets in INFORMATION_SCHEMA.COLUMNS
    Downloads
  • Stable

    aronwk released this 2025-10-01 19:02:26 -05:00 | 709 commits to main since this release

    Merged PRs

    dolt

    • 9908: Add expect_single_value support for booleans
    • 9900: Added collation ignoring for information_schema
      Adds testing for:

    go-mysql-server

    Closed Issues

    • 9899: Predicate failure for IN subquery with BOOLEAN type
    • 9895: INSERT … RETURNING fails if an AFTER INSERT trigger is present

    Performance

    Read Tests MySQL Dolt Multiple
    covering_index_scan 1.86 0.65 0.35
    groupby_scan 13.95 18.28 1.31
    index_join 1.52 2.43 1.6
    index_join_scan 1.47 1.39 0.95
    index_scan 36.24 30.26 0.83
    oltp_point_select 0.2 0.28 1.4
    oltp_read_only 3.82 5.28 1.38
    select_random_points 0.35 0.58 1.66
    select_random_ranges 0.39 0.61 1.56
    table_scan 36.24 31.94 0.88
    types_table_scan 80.03 130.13 1.63
    reads_mean_multiplier 1.23
    Write Tests MySQL Dolt Multiple
    oltp_delete_insert 8.43 6.55 0.78
    oltp_insert 4.18 3.25 0.78
    oltp_read_write 9.22 11.65 1.26
    oltp_update_index 4.25 3.3 0.78
    oltp_update_non_index 4.25 3.25 0.76
    oltp_write_only 5.28 6.43 1.22
    types_delete_insert 8.58 6.91 0.81
    writes_mean_multiplier 0.91
    TPC-C TPS Tests MySQL Dolt Multiple
    tpcc-scale-factor-1 93.14 39.35 2.37
    tpcc_tps_multiplier 2.37
    Overall Mean Multiple 1.50
    Downloads
  • Stable

    aronwk released this 2025-10-01 12:23:30 -05:00 | 721 commits to main since this release

    Merged PRs

    dolt

    • 9875: docker-entrypoint.sh: Add timeout queries to reliably configure users and database
      Companion: dolthub/vitess#437
      Fixes resource hang issues (i.e., connect: connection refused) for docker-entrypoint.sh when configuring users and database in the script using queries with a new DOLT_SERVER_TIMEOUT variable that will wait for successful execute (default: 5 minutes) for multiple iterations.
      Fixes issue with dolt sql-server waiting on dolt process to free lock on database file.
      The root user is now created through the environment variables support on dolt sql-server instead of queries. However, a query fallback is provided if your initialization scripts must use some USER or GRANT related queries that conflict with the default behavior.
      2025-09-26 17:43:56+00:00 [Warn] [Entrypoint]: Environment variables failed to initialize root@%; docker-entrypoint-initdb.d scripts queries may have conflicted. Overriding root user...
      2025-09-26 17:43:57+00:00 [Note] [Entrypoint]: Configured root@% for Dolt
      +---------------------+-----------+
      | User                | Host      |
      +---------------------+-----------+
      | event_scheduler     | localhost |
      | __dolt_local_user__ | localhost |
      | root                | %         |
      | versioning          | %         |
      +---------------------+-----------+
      
      Query errors now include the actual query error message as a postfix to the author's message. The error below was manually created, however, it also shows syntax errors are immediately reported instead of fully terminating on timeout.
      2025-09-26 17:53:53+00:00 [Warn] [Entrypoint]: Environment variables failed to initialize root@%; docker-entrypoint-initdb.d scripts queries may have conflicted. Overriding root user...
      2025-09-26 17:53:53+00:00 [ERROR] [Entrypoint]: Could not create root user: error on line 1 for query CREATE USER IF NOT EXITS 'root'@'%' IDENTIFIED BY 'rootpass'
      Error parsing SQL:
      syntax error at position 25 near 'EXITS'
      CREATE USER IF NOT EXITS 'root'@'%' IDENTIFIED BY 'rootpass'
      ^
      
      Initialization scripts and launching dolt sql-server has also been moved to this new timeout system to deal with desyncs due to system hangs and similar (e.g., file locks that don't release in time). To test this stability we also now launch multiple (40) docker instances at the same time.

    go-mysql-server

    vitess

    Closed Issues

    • 9883: Boolean literal in IN clause fails to match truthy VARCHAR values
    • 9884: Escaped characters not handled correctly in LOAD DATA LOCAL INFILE
    • 9873: Airflow standalone syntax error for update of

    Performance

    Read Tests MySQL Dolt Multiple
    covering_index_scan 1.82 0.65 0.36
    groupby_scan 13.95 18.28 1.31
    index_join 1.52 2.43 1.6
    index_join_scan 1.5 1.39 0.93
    index_scan 34.95 30.26 0.87
    oltp_point_select 0.2 0.28 1.4
    oltp_read_only 3.89 5.37 1.38
    select_random_points 0.36 0.58 1.61
    select_random_ranges 0.39 0.61 1.56
    table_scan 34.95 32.53 0.93
    types_table_scan 75.82 130.13 1.72
    reads_mean_multiplier 1.24
    Write Tests MySQL Dolt Multiple
    oltp_delete_insert 8.43 6.67 0.79
    oltp_insert 4.18 3.25 0.78
    oltp_read_write 9.39 11.87 1.26
    oltp_update_index 4.25 3.3 0.78
    oltp_update_non_index 4.25 3.25 0.76
    oltp_write_only 5.28 6.55 1.24
    types_delete_insert 8.58 6.91 0.81
    writes_mean_multiplier 0.92
    TPC-C TPS Tests MySQL Dolt Multiple
    tpcc-scale-factor-1 93.46 39.97 2.34
    tpcc_tps_multiplier 2.34
    Overall Mean Multiple 1.50
    Downloads
  • Stable

    aronwk released this 2025-09-26 09:00:38 -05:00 | 745 commits to main since this release

    Merged PRs

    dolt

    • 9879: Fix dolt conflicts resolve for resolving one table at a time
      Fixes https://github.com/dolthub/dolt/issues/9878
    • 9867: Bats test for branch create being replicated
    • 9855: Preemptively store extended adaptive values out-of-band if they're too large to fit in a Tuple
      Extended Adaptive values are values whose semantic meaning and serialization are defined by another module, and can be stored both inline in a tuple and out-of-band. It's currently used for text types in Doltgres.
      Previously, when writing tuples, these values would get initially written inline, and then moved to out-of-band if the total tuple length exceeded some threshold. However, this caused issues if the value was longer than the max tuple length, resulting in truncation. These values must always be written out of band, so we now do it pre-emptively.

    go-mysql-server

    • 3235: Allow caching subqueries in a tree of joins.
      This is a follow-up to https://github.com/dolthub/go-mysql-server/pull/3205, catching a previously missed case.
      In a tree like so:
      Join A
      ├─ Table
      └─ Join B
      ├─ SubQuery
      └─ Table
      
      We want to be able to cache the subquery result. But we weren't because we saw that the subquery was the leftmost child of a join (Join B) and it doesn't make sense to cache the leftmost child of a join.
      But really we should consider the subquery to be a child of Join A, where it isn't the leftmost child. That is to say, encountering a join node while we're already walking a join tree shouldn't cause the cacheSubqueryAliasesInJoins to treat it as a new join.
      This allows for more subquery caching in places that would benefit from it.
    • 3234: dolthub/dolt#9873: Add tests for FOR UPDATE OF
      Fixes dolthub/dolt#9873
    • 3232: Add TEXT(m) support
      Fixes dolthub/dolt#9872
      Companion dolthub/vitess#435
    • 3231: Push filters down into join condition
      fixes dolthub/dolt#9868
      doltgres test updated in dolthub/doltgresql#1887
    • 3227: dolthub/dolt#9857: Add UUID_SHORT() support
      Fixes dolthub/dolt#9857
      Companion dolthub/docs#2676
    • 3226: fix Expressions() of TableFunctionWrapper to make the function expression visible

    vitess

    Closed Issues

    • 9873: Airflow standalone syntax error for update of
    • 9872: Support for mysql Text(m)
    • 7302: Scientific notation in strings should not be honored when converting to an integer type
    • 9868: Filter gets dropped after join optimization
    • 7207: division operation should not truncate the result if it's in another function.
    • 9878: Getting autocommit error using dolt conflicts resolve for one of many tables on the CLI
    • 9857: Missing function uuid_short()

    Performance

    Read Tests MySQL Dolt Multiple
    covering_index_scan 1.82 0.65 0.36
    groupby_scan 14.21 18.95 1.33
    index_join 1.52 2.43 1.6
    index_join_scan 1.47 1.39 0.95
    index_scan 34.33 30.26 0.88
    oltp_point_select 0.21 0.28 1.33
    oltp_read_only 3.82 5.28 1.38
    select_random_points 0.36 0.58 1.61
    select_random_ranges 0.39 0.61 1.56
    table_scan 34.33 31.94 0.93
    types_table_scan 75.82 130.13 1.72
    reads_mean_multiplier 1.24
    Write Tests MySQL Dolt Multiple
    oltp_delete_insert 8.43 6.55 0.78
    oltp_insert 4.18 3.25 0.78
    oltp_read_write 9.22 11.65 1.26
    oltp_update_index 4.25 3.3 0.78
    oltp_update_non_index 4.18 3.19 0.76
    oltp_write_only 5.28 6.43 1.22
    types_delete_insert 8.58 6.91 0.81
    writes_mean_multiplier 0.91
    TPC-C TPS Tests MySQL Dolt Multiple
    tpcc-scale-factor-1 93.38 39.38 2.37
    tpcc_tps_multiplier 2.37
    Overall Mean Multiple 1.51
    Downloads
  • Stable

    aronwk released this 2025-09-18 21:42:53 -05:00 | 769 commits to main since this release

    Merged PRs

    dolt

    • 9851: Bug fix: dolt_status works with an as of clause
      Fixes: https://github.com/dolthub/dolt/issues/8283
    • 9833: support dolt tests in dolt ci
      This PR add support for running Dolt Tests in DoltHub CI. User's can now define the dolt tests they want to execute in DoltHub CI but specifying one or both of the Dolt Test Step Workflow fields, dolt_test_tests: [] and/or dolt_test_groups: [], like so:
      name: wf_dt_example
      on:
      push: {}
      jobs:
      - name: job
      steps:
      - name: run group a tests
      dolt_test_groups: ["group_a"]
      - name: run tests 4 and 5
      dolt_test_tests: ["test_4", "test_5"]
      
      The dolt ci run command has also been updated to support executing Workflows with Dolt Test Steps locally.

    go-mysql-server

    vitess

    Closed Issues

    • 9857: Missing function uuid_short()
    • 8283: select * from dolt_status as of BRANCHNAME shows status of currently checked out branch.
    • 9767: validate non-aggregate columns in having and order by during group by validation
    Downloads