-
released this
2025-09-03 17:35:21 -05:00 | 1022 commits to main since this releaseMerged PRs
dolt
- 9783: Bug fix: allow aborting a merge when there is a table rename
When a merge halts due to a conflict, the merge can be aborted by callingdolt_merge('--abort');, however a bug caused this to error if the merge included a table rename. The root cause of the bug was how we restore the tables to their previous values and work around ignored tables. This change alters how we restore tables – now we restore all versioned tables by reusing the pre-merge root and then applying any ignored tables.
Closed Issues
Downloads
- 9783: Bug fix: allow aborting a merge when there is a table rename
-
released this
2025-09-03 15:49:01 -05:00 | 1025 commits to main since this releaseBackwards Incompatible Changes
There are no incompatible changes in this version.
Merged PRs
dolt
- 9758: Add support for VECTOR column type
This PR implements the changes required for Dolt to support VECTOR column types (implemented in GMS in https://github.com/dolthub/go-mysql-server/pull/3162)
Actually managing storage read/writes was the easy part and pretty much worked out of the box.
The most extensive changes are to the algorithm for creating vector indexes, which previously assumed that every vector was represented as a 20-byte Hash and represented paths through the tree as multiple 20-byte hashes concatenated to each other. Since VECTOR columns are stored using adaptive encoding, they may be a hash but may also be a variable-length byte buffer. Thus, the index builder needed to be smarter and represent these paths as a proper tuple. Doing it this way also allowed me to clean up the index building code in a way that is hopefully both more readable and eliminates some unnecessary memory copies. I added some clarifying comments, but it could potentially benefit from even more comments.
The other big change was to the test suites. The vector index tests had some hardcoded assumptions about the representation of vectors that needed to be fixed, so I used this as an opportunity to clean that up to.
go-mysql-server
- 3187: Allow aggregate/window functions with match expressions
fixes dolthub/dolt#6556
Seems like the scoping issue has already been fixed. - 3167: Bump go-sql-driver/mysql
The current version of go-sql-driver/mysql that we depend on doesn't support the type tag for vector types. Bumping this dependency allows us to send and receive vector types along the wire. - 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.)
vitess
- 431: /go.mod: bump go to 1.24.6
- 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
- 9762: dolt_log is "not supported while in a detached head state"
Downloads
- 9758: Add support for VECTOR column type
-
released this
2025-09-02 19:54:27 -05:00 | 1050 commits to main since this releaseMerged PRs
dolt
- 9773: Make sure
dolt_testssystem table changes show up indolt diffby default
Addresses: #9771 - 9770: dolthub/dolt#9762 - Add fix for detached head err on dolt_log(tag)
Fixes dolthub/dolt#9762 - 9768: Replace Dolt CI testing references in AGENT.md with reference to
dolt_tests - 9757: Cache materialized commits on
doltdb
Changes:- store a cache of all resolved commit hashes on doltdb
This results in another ~2.3x speed up, so ~4.7x in total.
- store a cache of all resolved commit hashes on doltdb
Closed Issues
- 9743: dolt log is slow to respond without a small -n limit and no other params on a small database (7000 commits)
- 9771:
dolt_testssystem table does not show indolt diff - 9762: dolt_log is "not supported while in a detached head state"
Performance
Read Tests MySQL Dolt Multiple covering_index_scan 1.86 0.67 0.36 groupby_scan 13.95 18.61 1.33 index_join 1.5 2.48 1.65 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.37 1.41 select_random_points 0.36 0.58 1.61 select_random_ranges 0.39 0.62 1.59 table_scan 34.95 32.53 0.93 types_table_scan 74.46 127.81 1.72 reads_mean_multiplier 1.25 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.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.55 1.24 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.73 39.61 2.37 tpcc_tps_multiplier 2.37 Overall Mean Multiple 1.51 Downloads
- 9773: Make sure
-
released this
2025-09-02 16:34:27 -05:00 | 1064 commits to main since this releaseMerged PRs
dolt
- 9753: Fixes for dolt_tests
Couple of fixes fordolt_tests:- Allow comparison of int64 values, which enables running aggregate queries like
sumandavg, for instance. - Can check if values are/are not null
- Fixed a bug where NULL test_group_name values would break the function.
- Allow comparison of int64 values, which enables running aggregate queries like
- 9751: Optimize commit iterator
Changes:- use the commitMetadata and commitHeight (if available) in iterator
- reduce string and regex operations when resolving a known hash commit spec
- directly access parent rather than allocating slice
The result of these changes is roughly 1.7x speed up inselect * from dolt_log()queries.
Addresses: https://github.com/dolthub/dolt/issues/9743
- 9749: support
mcp_serverin the thedolt sql-serverconfiguration file
This PR is part two of supporting mcp directly in Dolt. This one adds themcp_serverkey to thedolt sql-serverconfig.yaml, allowing users to start/configure the http dolt-mcp server here, instead of only with cli arguments. If both the config file definesmcp_serverand mcp related cli arguments are supplied, the cli args take precendence over the config file definitions. - 9740: Add support for excluding databases from binlog replication
MySQL allows databases to be excluded from binlog replication through the--replicate-ignore-dbcommand line parameter. Instead of exposing this as a CLI parameter, Dolt exposes a@@binlog_ignore_dbssystem variable where users can list one or more comma-separated database names to have those databases excluded from binlog replication. - 9737: add DOLT_PAGER to override default pager
Fixes: https://github.com/dolthub/dolt/issues/9736 - 9727:
dolt_test_runtable function
Addsdolt_test_run:
Takes in one of the 3 following argument formats:test [test name]to run a specific testgroup [group name]to run a group of tests*as a wildcard to run all tests
- 9726: go: cmd/dolt: sql.go: Enable Auto GC when running
dolt sql.
During something like an mysqldump import, Dolt disk utilization can be unexpectedly high if we do run GC. This change enables Auto GC by default when runningdolt sqlin local mode.
Auto GC can be optionally disabled by passing the--disable-auto-gcflag to thedolt sqlinvocation.
Auto GC behavior fordolt sql-serveris not changed. It is still enabled through theconfig.yamlfile, and is off by default. - 9716: add option to start an http mcp server when dolt sql-server is running
This PR adds arguments to thedolt sql-servercommand that allow users to start a dolt-mcp http server with a single command. The dolt-mcp server connects directly to the started sql-server on its sql port.
Additionally, the specifiedlog-levelis respected by the dolt-mcp server, and it's logs are written to the same log stream as the sql-server, prefixed with "dolt-mcp".
This is the first of two PRs, where this one supports running the MCP server via command line flag arguments, and the second PR (not implemented) will support MCP server configuration via Dolt's config.yaml. - 9708: field align a few packages
companion pr: https://github.com/dolthub/go-mysql-server/pull/3168 - 9682: aws archive conjoin support
go-mysql-server
- 3187: Allow aggregate/window functions with match expressions
fixes dolthub/dolt#6556
Seems like the scoping issue has already been fixed. - 3186: /go.mod: bump go
- 3180: dolthub/dolt#9738 - Add CREATE VIEW parentheses tests for MySQL compatibility
Fixes dolthub/dolt#9738
Companion dolthub/vitess#429 - 3178: Do not materialize any output for WindowPartitionIter if input is empty
Fixes dolthub/dolt#6899
The comment aboutcountdoesn't seem to apply sincecountis an aggregation and not a window function.
Also fixes bug in Dolt wheredense_rankwas not working because text storage objects were not being compared properly. - 3176: Trim strings to number prefix when cast
fixes dolthub/dolt#9733
adds tests for dolthub/dolt#9735 and dolthub/dolt#9739 - 3175: Support filtering by comment in
show table status
fixes dolthub/dolt#6894- update "Comments" to "Comment" in show table status schema
- include table comment in table status row
- 3168: align struct fields to reduce memory usage
Golang does not automatically arrange the fields of a struct to reduce memory usage.
I used fieldalignment to rearrange the member variables of all the structs in GMS so they are more compact. The result should be a lower memory footprint and slightly better performance.
I avoided making changes to the test files as they do not impact our performance.
TODO:- field align spatial types package
- field align collations
- 2991: test: optimize database connection test logic
- Add a 1-second wait time before each test to ensure the database has started
- Update error assertions to match more specific error messages
- Adjust the test order: first test the case where the user does not exist, then test the case where the password is incorrect
vitess
- 431: /go.mod: bump go to 1.24.6
- 430: Walk OptSelect in DDL node to capture select expressions
fixes dolthub/dolt#6670
captureSelectExpressions was not getting called on DDL.OptSelect because it was not being walked - 429: dolthub/dolt#9738 - Support parentheses around SELECT in CREATE VIEW for MySQL compatibility
Fixes dolthub/dolt#9738 - 427: field align sqlparser
This PR runs thefieldalignmenttool over parts of the sqlparser. - 425: Add parsing of VECTOR type
This adds parsing and sqlType info for a VECTOR type, matching MySQL's behvaior.
Closed Issues
- 6556: Aggregate/Window mixing with MATCH expressions not yet supported
- 9759:
KEYin 'create table' error - 6670: Dolt generates different column name for aggregate function expressions.
- 9738: CREATE VIEW should support parentheses around the SELECT statement for MySQL compatibility
- 6899: lateral join with aggregation returns wrong results
- 9736: Option to turn autopaging off
- 9725: AUTO_INCREMENT not synced after primary/standby failover, causing duplicate key errors
Downloads
- 9753: Fixes for dolt_tests
-
released this
2025-08-26 11:42:54 -05:00 | 1172 commits to main since this releaseMerged PRs
dolt
- 9730: Fix dolt_conflicts_resolve for doltgres
- 9728: dolthub/dolt#9725 - Fix AUTO_INCREMENT reuse after HA failover by refreshing trackers
Fixes #9725
Newly promoted primary could reuse AUTO_INCREMENT values due to a stale in-memory tracker. On promotion, we now synchronously refresh AUTO_INCREMENT trackers for databases already loaded in the session, aligning sequences with the current working sets so the first post-promotion inserts do not reuse existing IDs. - 9721: disable
only_full_group_byin sysbench
Since our group validation much more closely aligns with MySQL, we discovered that sysbench scriptgroupby_scan.luais not valid in MySQL without disablingONLY_FULL_GROUP_BYinsql_mode. This PR fixes the local test scripts and the benchmark runners to accept aconfig.yamlwith thesql_modeset. - 9719: Drop old event messages
Changes the event collector/emitter to drop old events and not grow unbounded when events can't be delivered.
The event collector already batched 64 events per request whenLogEventmessages were being sent successfully. However, when there are issues sendingLogEventmessages, the events queue up, with no upper bound, and eachLogEventrequest gets larger and larger. This change limits the tracked "unsent" events to that existing 64 event batch size. - 9710: Fixes for Doltgres-related procedure calling
This contains some fixes related to calling Dolt functions in Doltgres.
Required by: - 9702: go: cmd/dolt: cli_context: Slightly rework CliContext and LateBinderyQueryist lifecycle.
Rework CliContext and LateBinderyQueryist lifecycle so that CliContext itself isClosed when we are done with it. If it instantiated the LateBinderQueryist, it closes it at that time.
Previously LateBinderQueryist was responsible for returning acloser(), which a caller ofCliContext.QueryEnginecould see as non-niland call at the end of its work. This works well when a QueryEngine is used exactly one time or when QueryEngine usage is completely nested, as is the case with the backslash command implementations called fromdolt sql. But in tests, we sometimes use command instances back-to-back, on the same CliContext instance, where it results in using the Queryist after it has already been closed.
This PR also reworks result types so that callers of QueryEngine can know if they are connected locally or remotely and if the QueryEngine interaction they are making is the first one in the session. Some callers need to inspect that state to implement helpful error checks and guard rails, and they were previously using things like a non-nilcloserand interface casts to concrete types to implement these checks. - 9678: dolt_tests system table
Addsdolt_testssystem table. The table currently has no functionality, but behaves similarly to the other writable system tables likedolt_ignoreanddolt_query_catalog.
go-mysql-server
- 3175: Support filtering by comment in
show table status
fixes dolthub/dolt#6894- update "Comments" to "Comment" in show table status schema
- include table comment in table status row
- 3174: Make
SHOW VARIABLESdisplay boolean values as ON/OFF to match MySQL
Changes the output ofSHOW VARIABLESto match MySQL's output, where boolean values are shown asONorOFF. Also adds definitions for two replication related system variables. - 3173: Mask column names from non-triggered tables in UpdateJoins
fixes dolthub/dolt#9403 - 3172: Add correlated columns from subqueries to GroupBy select dependencies
fixes dolthub/dolt#9699 - 3169: go.mod: Bump go-icu-regex. Picks up a wazero bump which improves amd64 behavior on builds with go 1.24.0+.
- 3166: Unskip GroupBy validation on Project, Having, and Sort nodes
Fixes dolthub/dolt#4998
Still need to allow group by unique non-nullable columns (dolthub/dolt#9700)
Query plans needed to be updated because Subquery.String and GroupBy.String changed. The latter was due to SelectedExprs being renamed to SelectDeps.
Dolt bump: dolthub/dolt#9704
Closed Issues
- 9725: AUTO_INCREMENT not synced after primary/standby failover, causing duplicate key errors
- 6894:
show table status"Comments" column does not match MySQL "Comment" column - 9403: Triggers are unable to get the right column when joined tables share a column name
- 9699: GroupBy nodes for aggregate columns need to include select dependencies from subqueries
- 4736: migrate: column type cannot be auto-incremented
- 4998:
GroupByvalidation not running on nodes wrapped inHaving,Project, orSort(validation is also way too strict when it does run)
Performance
Read Tests MySQL Dolt Multiple covering_index_scan 1.86 0.68 0.37 groupby_scan 13.22 21.11 1.6 index_join 1.47 2.61 1.78 index_join_scan 1.44 1.44 1.0 index_scan 34.33 32.53 0.95 oltp_point_select 0.2 0.29 1.45 oltp_read_only 3.75 5.37 1.43 select_random_points 0.35 0.61 1.74 select_random_ranges 0.38 0.64 1.68 table_scan 34.33 32.53 0.95 types_table_scan 74.46 127.81 1.72 reads_mean_multiplier 1.33 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.06 11.87 1.31 oltp_update_index 4.18 3.3 0.79 oltp_update_non_index 4.18 3.25 0.78 oltp_write_only 5.28 6.55 1.24 types_delete_insert 8.43 6.91 0.82 writes_mean_multiplier 0.93 TPC-C TPS Tests MySQL Dolt Multiple tpcc-scale-factor-1 94.92 39.42 2.41 tpcc_tps_multiplier 2.41 Overall Mean Multiple 1.56 Downloads
-
released this
2025-08-20 13:56:20 -05:00 | 1235 commits to main since this releaseMerged PRs
dolt
go-mysql-server
- 3169: go.mod: Bump go-icu-regex. Picks up a wazero bump which improves amd64 behavior on builds with go 1.24.0+.
- 3158: cache
sql.Schemainplan.Projectandplan.TableAlias
Changes:plan.Project.Schema()andplan.TableAlias.Schema()create a newsql.Schemaevery time they are called, which can be a lot during analysis. So, the results are cached.sql.Index.Expressions()retrieves a new[]string, so we should cache that as well. Additionally, many times we unqualify the results,so I added aUnqualifiedExpressions()to avoid doing this extra processing every time.- changes
idxExprsColumnsto avoid usingstrings.Splitto avoid extra allocations
Closed Issues
- 9641: 48 is beyond the maximum value that can be held by 1 bits
Downloads
-
released this
2025-08-19 14:08:27 -05:00 | 1239 commits to main since this releaseMerged PRs
dolt
- 9701: go: SysbenchDockerfile: Mirror the download tarball for sqlite.
Fixes broken Github actions based on recently implemented robot checks on the sqlite server. - 9697: dolthub/dolt#9641 - Fix CSV export for bit union generalization
Fixes dolthub/dolt#9641
Add normalization in CSV string export conversion to detect non-canonical types. - 9693: Ensure that errors are displayed in interactive mode
Due to an accidental variable shadowing, error messages that occurred when iterating over query results wouldn't be displayed if the user runsdolt sqlin interactive mode.
Prior behavior:Fixed behavior:db/main*> SELECT JSON_PRETTY("not valid json"); db/main*>db/main*> SELECT JSON_PRETTY("not valid json"); Invalid JSON text in argument 1 to function json_pretty: "not valid json" db/main*> - 9681: reduce creation of new
strings and[]string
Changes:- reduces string operations by caching the revision database name
Companion PR: https://github.com/dolthub/go-mysql-server/pull/3158
- reduces string operations by caching the revision database name
- 9680: @@port returns correct port
Fixes: https://github.com/dolthub/dolt/issues/5898 - 9674: Remove references to branch wildcards in Dolt CI YAML in AGENT.md
Dolt CI does not support wildcards in branch specs. - 9672: Add support for altering table comments
fixes dolthub/dolt#9279
relies on dolthub/go-mysql-server#3156 - 9670: Unskip the LOAD DATA with NULLs and defaults BATS fixed by corresponding GMS changes
Companion fix is here: https://github.com/dolthub/go-mysql-server/pull/3155 - 9663: avoid using
sql.Row.Append()
Companion PR: https://github.com/dolthub/go-mysql-server/pull/3154
go-mysql-server
- 3164: handle RowIter as result from Eval function in TableFunctionWrapper
- 3161: Allow hash functions to work on BINARY columns when the binary is not valid UTF8
Previous, as part of computing hashes for MySQL's hash functions (MD5, SHA1, etc), we could convert the input into a text type. But this would cause errors in strict mode of the input was a binary value that was not valid utf8.
By converting the input into a binary type, we keep all the same behavior, except that binary inputs now work correctly. - 3158: cache
sql.Schemainplan.Projectandplan.TableAlias
Changes:plan.Project.Schema()andplan.TableAlias.Schema()create a newsql.Schemaevery time they are called, which can be a lot during analysis. So, the results are cached.sql.Index.Expressions()retrieves a new[]string, so we should cache that as well. Additionally, many times we unqualify the results,so I added aUnqualifiedExpressions()to avoid doing this extra processing every time.- changes
idxExprsColumnsto avoid usingstrings.Splitto avoid extra allocations
- 3156: Add support for altering table comments
part of dolthub/dolt#9279
relies on dolthub/vitess#424
dolt changes made in dolthub/dolt#9672 - 3155: Made LOAD DATA handle NULL values and defaults correctly
- 3154: avoid using
sql.Row.Append()
sql.Row.Append()will always make a deep copy of the row, so we should avoid it.
Instead we have copies to cachedsql.Rowsor reuse the backing array throughappend()(sometimes golang's runtime will allocate a new one anyway). - 3152: Validate trigger name length is not over 96 chars
We weren't enforcing any name length constraints on triggers, and when customers created triggers with very long names (i.e. over 64 characters, the MySQL limit), they could encounter problems with table schemas that don't support longer lengths.
In this change, we apply a max trigger name length of 96 characters and rejectCREATE TRIGGERstatements that create triggers with names longer than that limit. We chose 96 characters for the limit, instead of copying MySQL's 64 character limit, so that this change would not break existing applications that are creating trigger names slightly longer than MySQL's 64 character limit. - 3148: dolthub/dolt#9641 - Fix BIT Overflow
Fixes dolthub/dolt#9641
Fixed Max1Row optimization being incorrectly applied to UNION subqueries. Also fixed UNION schema type reconciliation using GeneralizeTypes(). - 3073: Allow select aliases to be in group by/having
fixes dolthub/dolt#7095 - 3005: Added support for
@@port,@@hostname, and other system variables
fixes dolthub/dolt#5898
related to dolthub/dolt#6037
MySQL docs
vitess
- 425: Add parsing of VECTOR type
This adds parsing and sqlType info for a VECTOR type, matching MySQL's behvaior. - 424: Add AlterCommentSpec to DDL
part of dolthub/dolt#9279 - 423: Allow using FOR UPDATE NOWAIT in SELECT statements
Fixes https://github.com/dolthub/dolt/issues/9604
Closed Issues
Downloads
- 9701: go: SysbenchDockerfile: Mirror the download tarball for sqlite.
-
released this
2025-08-12 16:18:34 -05:00 | 1312 commits to main since this releaseMerged PRs
dolt
- 9668: Initialize a branch's working set when referenced as a branch-revision database
When a new branch is pushed to a SQL server through the RemotesAPI, that branch will not have its working set initialized yet. If a customer accesses that branch as a branch-revision database (e.g.mydb/my_new_branch) and performs a write operation, the lack of a working set will cause an error. This change fixes that case by initializing a branch-revision database's working set if it has not been created yet. - 9667: Fix another primary key ordering test
- 9665: A Primary Key BATS test to unskip.
Found testing Cursor Agent with GPT-5 - 9655: Skip flaky 'archive: too few chunks' test in Lambda environment
- 9649: Removed root object presence from some locations
Root objects occupy the same namespace as tables, however they shouldn't be returned in places that expect to see only tables. This PR allows for a distinction when querying for names, so that locations that only work with tables (such as some system tables) no longer receive root object names.
Required for: - 9648: Bug fix: ensure
dolt_checkout()initializes a branch's working set
dolt_checkout()already had logic to initialize a branch's working set if one was not available, but the error it expected to see to trigger that logic was not being returned by the functions it called. This changes thecheckoutExistingBranch()function so that it also resolves the working set for that branch and returns adoltdb.ErrWorkingSetNotFounderror if the working set is not available. - 9647: Refactor
SetSystemVarandGetRowsForSql - 9646: Add UUID key recommendation to default AGENT.md
I notice that Claude Code likes auto_increment primary keys but Dolt likes UUID keys better. So, I added a section to AGENT.md. - 9642: Fix table usage during merge
We would always assume that tables are used in certain situations (rather than root objects), which would lead to a panic. - 9639: Small fixes to ci, --help & valid branch names
Two small changes to CI:dolt ci importnow requires that the branches you list underon.action,on.pull_requestare valid branch names. This also blocks off attempting to use the*wildcard identifier, which we do not support.- I also expanded the
dolt ci import --helppage to include the specification for the workflow yaml files.
- 9638: cache keys in iters to reduce gc
Companion PR: https://github.com/dolthub/go-mysql-server/pull/3146 - 9637: dolthub/dolt#9582 - Fix cherry-pick timestamp preservation
Fixes dolthub/dolt#9582
Cherry-pick now preserves original commit timestamp during operations. - 9635: Stop processing earlier when dolt_pull() is a no-op
User demonstrated that a no-op pull was taking far too long. Turns out we should be stopping processing but instead do a lot of unnecessary status printing computation only to throw it away. This change just short circuits any work if the current branch is already up-to-date.
go-mysql-server
- 3152: Validate trigger name length is not over 96 chars
We weren't enforcing any name length constraints on triggers, and when customers created triggers with very long names (i.e. over 64 characters, the MySQL limit), they could encounter problems with table schemas that don't support longer lengths.
In this change, we apply a max trigger name length of 96 characters and rejectCREATE TRIGGERstatements that create triggers with names longer than that limit. We chose 96 characters for the limit, instead of copying MySQL's 64 character limit, so that this change would not break existing applications that are creating trigger names slightly longer than MySQL's 64 character limit. - 3150: Misc code clean up
- 3147: dolthub/go-mysql-server#3144 - Fix parseErr tracing to show error messages instead of memory addresses
Fixes dolthub/go-mysql-server#3144
Add Error() method to parseErr struct so tracing systems show actual error messages instead of memory addresses like "{0xc006f85d80}". - 3146: allocate fewer
sql.Rows
This PR removes extra sql.Row allocations where it has no impact on logic.
Doltgres error: https://github.com/dolthub/doltgresql/pull/1735 - 3145: fix panic over
SetOps with joins and subqueries
The analyzer ruleassignExecIndexeswill apply aStripRowNodeover any joins within a subquery.
The analyzer rulefinalizeUnionsrecursively calls the analyzer (callingassignExecIndexes), resulting inStripRowNodes getting applied twice.
The double stripping results in rows that are too short and panics.
This PR tells the finalizeUnions selector to skipassignExecIndexes, preventing the nestedStripRowNodes.
Also has some small formatting and naming clean up.
fixes: https://github.com/dolthub/dolt/issues/9631 - 3142: Add support for
DELETE ... RETURNING
Adds support for theRETURNINGclause inDELETEstatements. This syntax is supported in Postgres/Doltgres, but not in Dolt/GMS/MySQL.
Tests for this functionality are in the associated Doltgres PR: https://github.com/dolthub/doltgresql/pull/1712 - 3139: Remove the go-kit dependency
This library depends on https://github.com/go-kit/kit.
It looks to only use this for this single package: https://github.com/go-kit/kit/blob/master/metrics/discard/discard.go
Although the usage of this package is safe, thego-kitlibrary hasn't been maintained since 2023 - and is throwing some warnings in our security scanning.
Can we look at removing usage of this external library?
The proposed PR replaces it with an internal interface - but also allows configuration via a config options.
Alternatively it could maybe be dropped completely? It's only a no-op.
Closed Issues
- 9509: Add
agent.mdtodolt_docspopulated oninit - 9631:
handler caught panic: runtime error: slice bounds out of rangeon SELECT...EXCEPT query - 9628: In the result of the following query, the dashboard_id field appears to be incorrect — it returns the value of entity_id instead of the actual dashboard_id.
- 3144: Planbuilder: Traces do not record parse exceptions correctly
Performance
Read Tests MySQL Dolt Multiple covering_index_scan 1.89 0.68 0.36 groupby_scan 13.22 19.29 1.46 index_join 1.47 2.52 1.71 index_join_scan 1.44 1.44 1.0 index_scan 34.33 31.37 0.91 oltp_point_select 0.2 0.29 1.45 oltp_read_only 3.75 5.37 1.43 select_random_points 0.35 0.61 1.74 select_random_ranges 0.38 0.64 1.68 table_scan 34.95 32.53 0.93 types_table_scan 75.82 132.49 1.75 reads_mean_multiplier 1.31 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.06 11.87 1.31 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.43 6.91 0.82 writes_mean_multiplier 0.93 TPC-C TPS Tests MySQL Dolt Multiple tpcc-scale-factor-1 94.91 38.61 2.46 tpcc_tps_multiplier 2.46 Overall Mean Multiple 1.57 Downloads
- 9668: Initialize a branch's working set when referenced as a branch-revision database
-
released this
2025-08-06 16:36:20 -05:00 | 1355 commits to main since this releaseMerged PRs
dolt
go-mysql-server
- 3145: fix panic over
SetOps with joins and subqueries
The analyzer ruleassignExecIndexeswill apply aStripRowNodeover any joins within a subquery.
The analyzer rulefinalizeUnionsrecursively calls the analyzer (callingassignExecIndexes), resulting inStripRowNodes getting applied twice.
The double stripping results in rows that are too short and panics.
This PR tells the finalizeUnions selector to skipassignExecIndexes, preventing the nestedStripRowNodes.
Also has some small formatting and naming clean up.
fixes: https://github.com/dolthub/dolt/issues/9631 - 3141: dolthub/dolt#9628 - Fix UNION column mapping bug in nested multi-way operations
Fixes dolthub/dolt#9628
Fixed column scrambling in UNION queries with 3+ branches. The bug caused duplicate rows with wrong column positions when processing nested UNION operations like (A UNION B) UNION C.
SetOp nodes now preserve schema order by recursing to left child instead of using sorted column set.
Closed Issues
- 9628: In the result of the following query, the dashboard_id field appears to be incorrect — it returns the value of entity_id instead of the actual dashboard_id.
Performance
Read Tests MySQL Dolt Multiple covering_index_scan 1.89 0.68 0.36 groupby_scan 13.22 20.0 1.51 index_join 1.47 2.52 1.71 index_join_scan 1.44 1.47 1.02 index_scan 34.33 31.37 0.91 oltp_point_select 0.2 0.29 1.45 oltp_read_only 3.75 5.37 1.43 select_random_points 0.35 0.62 1.77 select_random_ranges 0.38 0.64 1.68 table_scan 34.95 32.53 0.93 types_table_scan 77.19 127.81 1.66 reads_mean_multiplier 1.31 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.06 11.87 1.31 oltp_update_index 4.25 3.36 0.79 oltp_update_non_index 4.18 3.25 0.78 oltp_write_only 5.28 6.55 1.24 types_delete_insert 8.43 7.04 0.84 writes_mean_multiplier 0.93 TPC-C TPS Tests MySQL Dolt Multiple tpcc-scale-factor-1 94.61 38.76 2.44 tpcc_tps_multiplier 2.44 Overall Mean Multiple 1.56 Downloads
- 3145: fix panic over
-
released this
2025-08-06 15:55:44 -05:00 | 1357 commits to main since this releaseMerged PRs
dolt
- 9579: Add option to memory-map archive file indexes
This PR adds a configuration option to use mmap to access archive indexes instead of holding them entirely in process memory.
The main benefits of this configuration are:- Faster startup times for CLI commands
- Less memory usage for CLI commands that only need to access a small part of the storage layer
It also comes with some downsides: - mmap doesn't play well with Go's process scheduler (https://valyala.medium.com/mmap-in-go-considered-harmful-d92a25cb161d). Threads that are blocked on a page fault can't do something else while the page is being swapped in. This can cause performance issues in some cases.
- additional complexity: the code is different for unix vs windows, and this is the first time that a configuration setting can impact how the DB is loaded.
We have several ways to configure Dolt, and I opted to add this as adolt configsetting. Potentially a better solution would be something that lets users configure it separately for running a SQL server vs other commands, but that was outside the scope of the PR.
I'm not really happy with how I ended up having to add an extra boolean parameter to a bunch of DB loading functions. If there was aDbConfigstruct or similar it would have ended up there, but I don't think there is.
Testing
Testing presents a challenge because this only effects loading archive files from disc, not archive files loaded over the network or created in memory. So the go unit tests (which use in-memory db files) can't test this.
I added a bats test that asserts that chunk lookups still resolve when the config option is set, and asserts that an in-memory index is not used. I don't think we currently run bats tests for windows though, so the windows implementation may not be tested. - 9522: Root Object Conflicts & Merging
This adds a new root object type,Conflict, which is specially handled by Dolt to represent conflicts between root objects. As Doltgres does not have to worry about the CLI (only Dolt functions and system tables), the implementation surface area is a bit smaller, and this is specifically designed for conflict resolution via those methods.
Prerequisite for:
go-mysql-server
- 3143: Add stack trace in error from panic handler
- 3141: dolthub/dolt#9628 - Fix UNION column mapping bug in nested multi-way operations
Fixes dolthub/dolt#9628
Fixed column scrambling in UNION queries with 3+ branches. The bug caused duplicate rows with wrong column positions when processing nested UNION operations like (A UNION B) UNION C.
SetOp nodes now preserve schema order by recursing to left child instead of using sorted column set. - 3137: Bug fix: ordered aggregates in triggers
Fixes a customer-reported issue usinggroup_concat()in a trigger (https://github.com/dolthub/dolt/issues/9616). Also changes OrderedAggregation logic to account for one output scope field per-OrderedAggregation expression.
Closed Issues
- 9631:
handler caught panic: runtime error: slice bounds out of rangeon SELECT...EXCEPT query - 9628: In the result of the following query, the dashboard_id field appears to be incorrect — it returns the value of entity_id instead of the actual dashboard_id.
- 9616: Error using
group_concat()function in a trigger
Downloads
- 9579: Add option to memory-map archive file indexes
mirror of
https://github.com/dolthub/dolt.git
synced 2025-12-16 20:25:20 -06:00