Merged PRs
dolt
- 10163: Bug fix: correctly copy check constraints
A customer reported a strange behavior where check constraints were getting corrupted/duplicated. The root cause was a bug in the CheckConstraint.Copy() implementation that wasn't returning a copy of the underlying checks, and allowed another part of engine to modify the check constraints accidentally. - 10149: Change
nodeCachefrom array to slice
Arrays in golang are pass by value, whereas slices are pass by reference, so thenodeCachewas getting copied everywhere. - 10147: #10138: Fix
dolt_backupsync and sync-url not taking working set changes in transaction
Fixes #10138 - 10146: #7628: Amend
dolt_backupDoltgresSQL privilege check for server only
Fixes #7628- Fix
dolt_backupsupport indolthub/doltdriver. - Fix Erlang MySQL integrations test to use locked version of Elixir 1.18.3 base docker image.
- Fix
- 10126: .github,go/utils/{publishrelease,rpmbuild}: Add a basic RPM build to the published release artifacts for Dolt.
These RPMs include the statically linked Dolt binary, installed at /usr/local/bin/dolt. They work on x86_64 and aarch64 RPM-based Linux distributions. To install them, download the appropriatedolt-...-1.{x86_64,aarch64}.rpmfile from the GitHub release artifacts and runsudo rpm -i downloaded_file.rpmon it. - 10078: journal errors, recovery, and testing
Variety of changes to provide assist in healthy journals.- Detect journal data loss by looking for parsable objects after unparsable blocks. (root hash followed by another root or chunk). Data loss detection prevents loading of DB, and produced error message in logs.
- Removed null padding during journal file creation.
- Automatically truncate journal files when they do not contain any dataloss after parsable portions of the file.
- Refactor FSCK to enable running when database is not loadable.
- Provide FSCK flag
--revive-journal-with-data-lossto backup and repair journal file
go-mysql-server
- 3322: custom
AppendDateFormat
The time package's implementation of AppendDate contains additional checks and formatting options that are not necessary. Implementing a cheaper version gives us better performance.
Benchmarks: #10150 (comment) - 3321: rewrite last query info
ReimplementLastQueryInfoto not use a map of*atomic.Valuewith constant keys
benchmarks: #10148 (comment) - 3319: Fix
TimestampFuncExprandSetOpin stored procedures
Changes: - 3318: #10113: Fix DELETE queries with NOT EXISTS uninitialized subqueries
Fixes #10113
DELETEqueries withNOT EXISTSsubqueries failed becauseEXISTSexpressions did not set therefsSubqueryflag. This causedDELETEqueries to use a simplified analyzer batch that skipped subquery initialization, leaving subqueries without execution builders.- Refactor
EXISTSexpression building to reusebuildScalar()for*ast.Subquery, ensuring refsSubquery is set. - Capture the table node for simple
DELETEqueries beforebuildWhere()wraps it. - Separate concerns between explicit targets and implicit targets in a bool, but keep all targets in the same list to handle wrapped targets.
- Add
WithTargets()method to update targets without changing the explicit/implicit flag. - Fix
offsetAssignIndexes()fast path to skip when virtual columns are present, using the full indexing path instead.
- Refactor
Closed Issues
- 10134: Dolt and Debezium - GTID error in debezium-connector-mysql
- 10138: Is dolt_add("-A") Required Before Calling the Stored Procedure dolt_backup("sync", "name")?
- 10141: Adding a procedure around a CTE query causes panic
- 10142: Referencing a procedure variable inside a non-trivial query fails
- 10137: Data returned from dolt sql-server is different from dolt sql -q
- 10113: Dolt attempted to evaluate uninitialized subquery , SQL compatibility adjustment
Performance
| Read Tests | MySQL | Dolt | Multiple |
|---|---|---|---|
| covering_index_scan | 1.82 | 0.55 | 0.3 |
| groupby_scan | 13.95 | 11.65 | 0.84 |
| index_join | 1.5 | 1.96 | 1.31 |
| index_join_scan | 1.47 | 1.34 | 0.91 |
| index_scan | 34.33 | 22.69 | 0.66 |
| 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.57 | 1.46 |
| table_scan | 34.33 | 28.16 | 0.82 |
| types_table_scan | 74.46 | 65.65 | 0.88 |
| reads_mean_multiplier | 1.06 |
| Write Tests | MySQL | Dolt | Multiple |
|---|---|---|---|
| oltp_delete_insert | 8.43 | 6.55 | 0.78 |
| oltp_insert | 4.18 | 3.19 | 0.76 |
| oltp_read_write | 9.22 | 11.65 | 1.26 |
| 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.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.72 | 36.25 | 2.59 |
| tpcc_tps_multiplier | 2.59 |
| Overall Mean Multiple | 1.52 |
|---|