• Stable

    aronwk released this 2025-09-17 18:06:56 -05:00 | 858 commits to main since this release

    Merged PRs

    dolt

    • 9854: /go/{go.mod,go.sum}: bump dolt-mcp, supports Dolt Tests via tool calls
    • 9843: fix archive int overflow
      A integer overflow bug introduced by the mmap work. The bug was in the suffix offset calculation, which took a uint32 and multiplied it by 12 (suffix len), which resulted in the overflow.
      This type of bug cropped up a couple times during archive development, but this is the first time we've regressed here. This only manifests if you have more than 357,913,942 chunks in an archive, which is a lot. So many that it would take days run an automated test to find it in CI.
    • 9839: go/go.mod: Bump eventsapi_schema.
    • 9830: docker-entrypoint.sh: Docker entrypoint user management fix, log improvements, and bats testing
      Companion dolthub/go-mysql-server#3217
      The Docker entry point script now properly creates and configures root and custom users with appropriate host restrictions, and validates environment variables with detailed error messages. Additionally, there is proper handling of reserved keywords in database and user names.
      Added comprehensive test coverage for authentication flows, user creation, and configuration handling to ensure reliability.
      2025-09-15 17:30:42+00:00 [Note] [Entrypoint]: Entrypoint script for Dolt Server 1.59.8 starting...
      2025-09-15 17:30:42+00:00 [Warn] [Entrypoint]: No files found in /docker-entrypoint-initdb.d/ to process
      2025-09-15 17:30:42+00:00 [Note] [Entrypoint]: Starting Dolt server in background...
      2025-09-15 17:30:42+00:00 [Note] [Entrypoint]: Server initialization complete!
      2025-09-15 17:30:42+00:00 [Note] [Entrypoint]: Ensuring root@% superuser exists with password
      2025-09-15 17:30:42+00:00 [Note] [Entrypoint]: Configuring root@% user
      2025-09-15 17:30:42+00:00 [Note] [Entrypoint]: Creating database 'test'
      2025-09-15 17:30:42+00:00 [Note] [Entrypoint]: Creating user 'elian'
      2025-09-15 17:30:43+00:00 [Note] [Entrypoint]: Granting server access to user 'elian'
      2025-09-15 17:30:43+00:00 [Note] [Entrypoint]: Giving user 'elian' access to schema 'test'
      2025-09-15 17:30:44+00:00 [Note] [Entrypoint]: Current users in the system:
      +---------------------+-----------+
      | User                | Host      |
      +---------------------+-----------+
      | event_scheduler     | localhost |
      | root                | %         |
      | __dolt_local_user__ | localhost |
      | elian               | %         |
      +---------------------+-----------+
      2025-09-15 17:30:44+00:00 [Note] [Entrypoint]: Reattaching to server process...
      Starting server with Config HP="0.0.0.0:3306"|T="28800000"|R="false"|L="info"
      time="2025-09-15T17:30:42Z" level=info msg="Overriding root user host with value from DOLT_ROOT_HOST: %"
      time="2025-09-15T17:30:42Z" level=info msg="Overriding root user password with value from DOLT_ROOT_PASSWORD"
      time="2025-09-15T17:30:42Z" level=info msg="Creating root@% superuser"
      time="2025-09-15T17:30:42Z" level=info msg="Server ready. Accepting connections."
      
      You may not be familiar with the latest version no. of Dolt, so we've added the latest keyword as an option for DOLT_VERSION when building a custom Docker image.
      docker build -f docker/serverDockerfile --build-arg DOLT_VERSION=latest -t dolt-sql-server:latest .
      
      We've also added new parameters MYSQL_USER_HOST and DOLT_USER_HOST to, you guessed it, specify the host for your custom user! Otherwise, it'll use the ROOT_USER_HOST, or default to localhost if neither parameter is provided.
      docker run
      -e DOLT_ROOT_PASSWORD=secret2
      -e DOLT_USER=testname
      -e DOLT_PASSWORD=testpass
      -e DOLT_USER_HOST=%
      -p 3307:3306 dolthub/dolt-sql-server:latest
      
      The Docker build now supports building from local source code instead of downloading pre-built binaries. This is useful for development, testing local changes, and custom builds.
      # Build from local source code (requires workspace directory with source dependencies)
      docker build -f dolt/docker/serverDockerfile --build-arg DOLT_VERSION=source -t dolt-sql-server:source .
      

    go-mysql-server

    • 3220: go.mod: Bump go-icu-regex. Pick up ICU4C Cgo dependency.
      From this commit, go-mysql-server takes a dependency on Cgo and a dependency on ICU4C. To depend on go-mysql-server CGO must be enabled, a C++ compiler must be available and the ICU4C development libraries must be available to the C++ compiler.
      On Windows, mingw with pacman -S icu is supported.
      On macOS, Homebrew installed icu4c works, but only if CGO_CPPFLAGS and CGO_LDFLAGS are set to point to the installed development libraries.
      On Linux, apt-get install libicu-dev, or similar.
    • 3219: dolthub/go-mysql-server#3216: Fix UNION ALL with NULL BLOB SELECT returning NULL for all vals
      Fixes #3216
    • 3217: Add CREATE DATABASE fall back on CREATE SCHEMA to mirror MySQL
      Fixes dolthub/dolt#9830
    • 3203: allow setting session variable default value

    Closed Issues

    • 7387: Incorrect SemiJoin in plan tests
    • 9847: Dolt database as a submodule-like pointer in git
    • 3216: No binary data from UNION ALL
    Downloads
  • Stable

    aronwk released this 2025-09-15 20:38:52 -05:00 | 902 commits to main since this release

    Merged PRs

    dolt

    • 9841: Validate that FKs referencing system tables don't specify referential actions
    • 9832: Reverted Extended encoding from adaptive to ref
      While working on importing dumps in Doltgres, I found out that data wasn't being written correctly in some circumstances. Turns out that the new adaptive encoding is incomplete, and therefore broken, and any columns over the inline threshold will be truncated. This truncation results in a panic whenever the field is read, since the serialized size does not match the data, causing OOB access.
      This should be safe to change since existing databases will simply swap to using the old ref approach until adaptive is fixed, where we can then swap back to the adaptive encoding (since the ref code is still in the codebase). I've already spoken to Nick who will lead the fix once he has returned next week.

    go-mysql-server

    vitess

    • 432: Implement PIPES_AS_CONCAT mode parsing
      Part of dolthub/dolt#9791
    • 426: Length-encode vector values when sent on the wire.
      GMS uses Vitess code to encode responses into the MySQL wire format.
      Testing for this change is in the corresponding GMS PR.

    Closed Issues

    • 9791: PIPES_AS_CONCAT sql_mode not yet implemented in Dolt - || operator behavior differs from MySQL
    • 9834: Missing warning on invalid numeric conversion
    • 9821: Logical operators with numeric string incorrectly evaluates to FALSE
    • 3216: No binary data from UNION ALL
    Downloads
  • Stable

    aronwk released this 2025-09-12 19:02:28 -05:00 | 913 commits to main since this release

    Merged PRs

    dolt

    go-mysql-server

    Closed Issues

    • 9812: Inconsistency between IN and = Operators
    • 9733: Strings do not cast to numbers properly
    • 9805: Data Scrambling with FULL OUTER JOIN and CROSS JOIN

    Performance

    Read Tests MySQL Dolt Multiple
    covering_index_scan 1.82 0.67 0.37
    groupby_scan 13.95 18.61 1.33
    index_join 1.5 2.43 1.62
    index_join_scan 1.47 1.42 0.97
    index_scan 34.33 30.26 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.33 31.94 0.93
    types_table_scan 75.82 127.81 1.69
    reads_mean_multiplier 1.25
    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.87 1.29
    oltp_update_index 4.25 3.3 0.78
    oltp_update_non_index 4.18 3.25 0.78
    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.05 39.22 2.37
    tpcc_tps_multiplier 2.37
    Overall Mean Multiple 1.51
    Downloads
  • Stable

    aronwk released this 2025-09-11 20:44:48 -05:00 | 916 commits to main since this release

    Merged PRs

    dolt

    go-mysql-server

    • 3212: Wrap right side in Distinct when converting semi-joins to inner joins
      Fixes dolthub/dolt#9797
      Distinct flag wasn't getting propagated through join replanning so instead, we're explicitly wrapping the right side in a Distinct.
    • 3211: Do not return EOF in existsIter when right iter is empty
      fixes dolthub/dolt#9828
      Returning EOF was causing us to terminate the existsIter early
      Added tests for dolthub/dolt#9797
    • 3210: Copy parent row in lateralJoinIterator.buildRow
      fixes dolthub/dolt#9820
      Also rename left and right to primary and secondary to follow the same pattern as other join iterators

    Closed Issues

    • 9797: EXISTS subquery returns duplicate rows with PRIMARY KEY
    • 9828: LEFT JOIN with empty CTE returns different row count than equivalent UNION ALL query
    • 9817: Bitwise operations with negative numbers always return 9223372036854775807

    Performance

    Read Tests MySQL Dolt Multiple
    covering_index_scan 1.86 0.67 0.36
    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.2 0.28 1.4
    oltp_read_only 3.82 5.28 1.38
    select_random_points 0.35 0.57 1.63
    select_random_ranges 0.39 0.61 1.56
    table_scan 34.95 32.53 0.93
    types_table_scan 75.82 125.52 1.66
    reads_mean_multiplier 1.25
    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 94.0 39.86 2.36
    tpcc_tps_multiplier 2.36
    Overall Mean Multiple 1.51
    Downloads
  • Stable

    aronwk released this 2025-09-10 19:15:08 -05:00 | 955 commits to main since this release

    Merged PRs

    dolt

    go-mysql-server

    • 3210: Copy parent row in lateralJoinIterator.buildRow
      fixes dolthub/dolt#9820
      Also rename left and right to primary and secondary to follow the same pattern as other join iterators
    • 3209: Convert values to strings when evaluating bit_length
      Fixes dolthub/dolt#9818
    • 3208: dolthub/dolt#9817 - Fix binary operations return type to be uint64
      Fixes dolthub/dolt#9817
    • 3205: Relax restriction that was preventing us from caching the result of subqueries.
      https://github.com/dolthub/go-mysql-server/pull/1470 was supposed to, among other things, add restrictions to when we generate CachedResults nodes to cache subquery results. However, the added check is overly broad, and as a result it became impossible to actually cache subquery results. Currently, there is not a single plan test that contains a CachedResults node in the output plan.
      The cacheSubqueryAliasesInJoins function has a comment:
      //The left-most child of a join root is an exception that cannot be cached.
      
      No rationale is given for this. Looking at it, it seems like we used to generate CachedResults nodes before we finished resolving references in the query, and now we wait until after. So it's possible that this is the reason for the restriction, and the entire check is no longer necessary.
      Either way, the implementation is more restrictive than the comment would suggest. Due to how the algorithm tracks state via function parameters, it doesn't propagate state from a child node to it's parents/siblings, and the flag for recording that it's encountered a subqeury gets unset. As a result, no Subqueries will actually be cached.
      This PR fixes the tree walk to correctly remember once it's encountered a subquery and allow subsequent subqueries to be cached. This is still more broad than the comment would suggest, since it doesn't require that this subquery appear in the left-most child of the join.
      Among the changed plan tests, we see that CachedResults nodes are now emitted. Most of them are the children of HashLookups, but there are some that are the children of InnerJoin and SemiJoin nodes where one of the things being joined is a subquery.

    Closed Issues

    • 9712: Extending Dolt system tables, specifically dolt_branch, via foreign key
    • 9820: LATERAL keyword causes JOIN to incorrectly return empty result
    • 9818: BIT_LENGTH() returns incorrect results for int
    • 9817: Bitwise operations with negative numbers always return 9223372036854775807

    Performance

    Read Tests MySQL Dolt Multiple
    covering_index_scan 1.82 0.65 0.36
    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.33 30.26 0.88
    oltp_point_select 0.21 0.28 1.33
    oltp_read_only 3.89 5.28 1.36
    select_random_points 0.36 0.57 1.58
    select_random_ranges 0.39 0.61 1.56
    table_scan 34.95 32.53 0.93
    types_table_scan 75.82 125.52 1.66
    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.4 39.75 2.35
    tpcc_tps_multiplier 2.35
    Overall Mean Multiple 1.50
    Downloads
  • Stable

    aronwk released this 2025-09-09 20:46:11 -05:00 | 970 commits to main since this release

    Merged PRs

    dolt

    • 9813: /go/cmd/dolt/commands/sqlserver/sqlserver.go: remove incorrect help text line from --mcp-password option.

    go-mysql-server

    • 3206: fix equality check in buildSingleLookupPlan()
      A join optimization to generate look up plans was incorrectly being applied to filters that were not simple equalities.
      This resulted in filters getting dropped and incorrect results.
      fixes: https://github.com/dolthub/dolt/issues/9803
    • 3205: Relax restriction that was preventing us from caching the result of subqueries.
      https://github.com/dolthub/go-mysql-server/pull/1470 was supposed to, among other things, add restrictions to when we generate CachedResults nodes to cache subquery results. However, the added check is overly broad, and as a result it became impossible to actually cache subquery results. Currently, there is not a single plan test that contains a CachedResults node in the output plan.
      The cacheSubqueryAliasesInJoins function has a comment:
      //The left-most child of a join root is an exception that cannot be cached.
      
      No rationale is given for this. Looking at it, it seems like we used to generate CachedResults nodes before we finished resolving references in the query, and now we wait until after. So it's possible that this is the reason for the restriction, and the entire check is no longer necessary.
      Either way, the implementation is more restrictive than the comment would suggest. Due to how the algorithm tracks state via function parameters, it doesn't propagate state from a child node to it's parents/siblings, and the flag for recording that it's encountered a subqeury gets unset. As a result, no Subqueries will actually be cached.
      This PR fixes the tree walk to correctly remember once it's encountered a subquery and allow subsequent subqueries to be cached. This is still more broad than the comment would suggest, since it doesn't require that this subquery appear in the left-most child of the join.
      Among the changed plan tests, we see that CachedResults nodes are now emitted. Most of them are the children of HashLookups, but there are some that are the children of InnerJoin and SemiJoin nodes where one of the things being joined is a subquery.
    • 3200: implement double truncation and find correct hash comparison type
      Changes:
      • Fix HashLookup to find a compatible comparison type to convert left and right values to before hashing. We used to always pick the left type, which led to inconsistencies with MySQL
      • Implement Double value truncation, so incorrect double values are still partially converted to float64.
        Fixes: https://github.com/dolthub/dolt/issues/9799
    • 3190: Refactorings to support index scans for pg catalog tables
      This PR adds new interfaces to allow different expressions types to participate in the standard index costing process, which results in a RangeCollection. Also plumbs additional type info through so that types with a more precise conversion process can participate as well.

    Closed Issues

    • 9799: String-Boolean comparison in JOIN queries returns incorrect results
    • 9803: JOIN returns incorrect results when NULL compared against outer table expression
    Downloads
  • Stable

    aronwk released this 2025-09-08 21:41:03 -05:00 | 976 commits to main since this release

    Merged PRs

    dolt

    • 9811: fix context cancel in dolt_test_run() when running dolt sql-server
      fixes: https://github.com/dolthub/dolt/issues/9787
    • 9790: dolthub/dolt#9794 - Add --skinny support for DOLT_DIFF table func
      Fixes dolthub/dolt#9086
      Add support for --skinny and --include-cols flags using the DOLT_DIFF() table function to provide more focused diff output by showing only primary key columns and columns that actually changed, while allowing explicit inclusion of additional columns.
      The dolt diff command has also been updated to support the new --include-cols flag.
      Without --skinny (current behavior)
      SELECT * FROM DOLT_DIFF('HEAD~1', 'HEAD', 'test');
      
      +-------+-------+-------+-------+-------+-------+-------+-----------+-------------------------+---------+---------+---------+---------+---------+---------+-------------+-------------------------+-----------+
      | to_pk | to_c1 | to_c2 | to_c3 | to_c4 | to_c5 | to_c6 | to_commit | to_commit_date          | from_pk | from_c1 | from_c2 | from_c3 | from_c4 | from_c5 | from_commit | from_commit_date        | diff_type |
      +-------+-------+-------+-------+-------+-------+-------+-----------+-------------------------+---------+---------+---------+---------+---------+---------+-------------+-------------------------+-----------+
      | 0     | 100   | 2     | 300   | 4     | 5     | 600   | HEAD      | 2025-09-08 22:55:11.341 | 0       | 100     | 2       | 300     | 4       | 5       | HEAD~1      | 2025-09-08 22:55:07.383 | modified  |
      +-------+-------+-------+-------+-------+-------+-------+-----------+-------------------------+---------+---------+---------+---------+---------+---------+-------------+-------------------------+-----------+
      
      With --skinny flag
      SELECT * FROM DOLT_DIFF('--skinny', 'HEAD~1', 'HEAD', 'test');
      
      +-------+-------+-----------+-------------------------+---------+-------------+-------------------------+-----------+
      | to_pk | to_c6 | to_commit | to_commit_date          | from_pk | from_commit | from_commit_date        | diff_type |
      +-------+-------+-----------+-------------------------+---------+-------------+-------------------------+-----------+
      | 0     | 600   | HEAD      | 2025-09-08 22:55:11.341 | 0       | HEAD~1      | 2025-09-08 22:55:07.383 | modified  |
      +-------+-------+-----------+-------------------------+---------+-------------+-------------------------+-----------+
      
      With --skinny and --include-cols
      Explicitly include additional columns even if they didn’t change, useful for context.
      SELECT * FROM DOLT_DIFF('--skinny', '--include-cols=c1,c2', 'HEAD~1', 'HEAD', 'test');
      
      +-------+-------+-------+-------+-----------+-------------------------+---------+---------+---------+-------------+-------------------------+-----------+
      | to_pk | to_c1 | to_c2 | to_c6 | to_commit | to_commit_date          | from_pk | from_c1 | from_c2 | from_commit | from_commit_date        | diff_type |
      +-------+-------+-------+-------+-----------+-------------------------+---------+---------+---------+-------------+-------------------------+-----------+
      | 0     | 100   | 2     | 600   | HEAD      | 2025-09-08 22:55:11.341 | 0       | 100     | 2       | HEAD~1      | 2025-09-08 22:55:07.383 | modified  |
      +-------+-------+-------+-------+-----------+-------------------------+---------+---------+---------+-------------+-------------------------+-----------+
      
      Notes:
      • --include-cols accepts a comma-separated list of column names, or can be placed at the end with space separated arguments (e.g., DOLT_DIFF('--skinny', 'HEAD~1', 'HEAD', 'test', '--include-cols', 'c1', 'c2');).
      • Primary key columns are always included with --skinny.

    go-mysql-server

    • 3201: dolthub/dolt#9807 - FULL OUTER JOIN with empty left subquery rets unmatched right rows
      Fixes dolthub/dolt#9807
      Fixed fullJoinIter.Next() to use parentRow instead of nil leftRow when building right iter for second phase.
    • 3197: dolthub/dolt#9794 - Fix string function panics with Dolt TextStorage
      Fixes dolthub/dolt#9794
    • 3190: Refactorings to support index scans for pg catalog tables
      This PR adds new interfaces to allow different expressions types to participate in the standard index costing process, which results in a RangeCollection. Also plumbs additional type info through so that types with a more precise conversion process can participate as well.

    Closed Issues

    • 9086: Add --skinny type view to sql queries
    • 9787: dolt_test_run() doesn't work against a running SQL server
    • 9807: FULL OUTER JOIN fails with empty subquery
    Downloads
  • Stable

    aronwk released this 2025-09-05 21:39:04 -05:00 | 1003 commits to main since this release

    Merged PRs

    dolt

    go-mysql-server

    • 3199: Add added column to CreateConstraint scope
      fixes dolthub/dolt#9795
    • 3197: dolthub/dolt#9794 - Fix string function panics with Dolt TextStorage
      Fixes dolthub/dolt#9794
    • 3196: Do not push down filters for Full Outer joins
      fixes dolthub/dolt#9793
      Filters for Full Outer joins should not be evaluated until after tables have been joined.
    • 3195: Initialize newChildren with node.Children to avoid nil child during replaceIdxSort
      fixes dolthub/dolt#9789
      continue in JoinNode case was resulting in nil child in newChildren array. This would later cause a panic when child would be referenced.

    Closed Issues

    • 9794: Panic when trimming values in table
    • 9795: Alter Table Failure
    • 9793: FULL OUTER JOIN with FALSE condition returns incorrect results when filtering NULL values
    Downloads
  • Pre-Release

    aronwk released this 2025-09-04 21:52:43 -05:00 | 1010 commits to main since this release

    Merged PRs

    dolt

    • 9780: Factor out ResolveDataConflictsForTable helper function for dolthubapi

    go-mysql-server

    • 3195: Initialize newChildren with node.Children to avoid nil child during replaceIdxSort
      fixes dolthub/dolt#9789
      continue in JoinNode case was resulting in nil child in newChildren array. This would later cause a panic when child would be referenced.
    • 3194: Group by validation for aggregated queries
      Fixes dolthub/dolt#9761
    • 3193: Left and right joins should not be optimized into cross joins
      fixes dolthub/dolt#9782

    Closed Issues

    • 9789: Dolt crashes when executing cartesian join with ORDER BY on table with PRIMARY KEY
    • 9761: validate aggregated query without GROUP BY when sql_mode=only_full_group_by
    • 9777: Incorrect Hash Join on condition with '%'
    • 9782: Incorrect Left/Right Join with subquery an empty table
    Downloads
  • Stable

    aronwk released this 2025-09-03 18:29:00 -05:00 | 1020 commits to main since this release

    Merged PRs

    dolt

    go-mysql-server

    • 3193: Left and right joins should not be optimized into cross joins
      fixes dolthub/dolt#9782
    • 3192: fix update join with conflicting aliases
      Update joins with SubqueryAlias with TableAlias matching an outer TableAlias would result in the incorrect table getting picked when resolving Foreign Keys. Fix here is to not Inspect OpaqueNodes to avoid incorrectly overriding any aliases; they shouldn't be visible anyway.
    • 3191: Use Decimal.String() for key in hashjoin lookups
      fixes dolthub/dolt#9777
      Decimals are not hashable so we have to use Decimal.String() as a key instead.
    • 3162: Add support for VECTOR type
      This PR adds a VECTOR type to GMS. Vectors are arrays of 32-bit floats.
      It also adds several functions that take vectors as arguments, including converting vectors to and from strings, and functions for computing distances between vectors.
      Finally, it ensures that vector types work correctly when passed to existing functions (such as BIT_LENGTH, MD5, etc.)

    Closed Issues

    Performance

    Read Tests MySQL Dolt Multiple
    covering_index_scan 1.86 0.67 0.36
    groupby_scan 13.7 18.61 1.36
    index_join 1.5 2.43 1.62
    index_join_scan 1.47 1.42 0.97
    index_scan 34.33 30.26 0.88
    oltp_point_select 0.21 0.28 1.33
    oltp_read_only 3.82 5.37 1.41
    select_random_points 0.35 0.58 1.66
    select_random_ranges 0.39 0.61 1.56
    table_scan 34.33 32.53 0.95
    types_table_scan 75.82 127.81 1.69
    reads_mean_multiplier 1.25
    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.87 1.29
    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.92
    TPC-C TPS Tests MySQL Dolt Multiple
    tpcc-scale-factor-1 93.62 39.7 2.36
    tpcc_tps_multiplier 2.36
    Overall Mean Multiple 1.51
    Downloads