This release contains backwards incompatible changes:
- Stopped Replacing Spaces in DB Names – Dolt databases take their names from the name of their directory on disk. Previously, any spaces in directory names were automatically replaced with underscores to form the name of that database. This behavior has been changed to preserve spaces in database names, in order to match MySQL's database naming rules. To re-enable the older behavior, set the
DOLT_DBNAME_REPLACE
environment variable to any value before startingdolt sql
ordolt sql-server
.
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.
Merged PRs
dolt
- 7024: Concurrent branches map
This PR converts all instances of the RepoState.Branches to a concurrent map (implementation found in utils). Avoids issues when the branches field is accessed concurrently from different routines.
This PR is waiting for #7019 to be merged first to integrate those changes. - 7023: fix dolt fetch and dolt pull
- 7020: use database name that is the same as directory name on disk
As of Dolt version1.27.0
, we allow hyphens in database name and replace space characters with underscores and reduce multiple underscore characters side by side into single underscore character.
This PR resolves:- Using the database name the same as directory name on disk allows round-trip to the database location on disk.
Note: - A potential issue might arise when the directory name has trailing space characters. MySQL do not allow database name with trailing space characters such as
mydb
, whereas Dolt allows. This will cause failing import of dolt dump to MySQL.
- Using the database name the same as directory name on disk allows round-trip to the database location on disk.
- 7019: Concurrent backups map
This PR converts all instances of the RepoState.Backups to a concurrent map (implementation found in utils). Avoids issues when the backups field is accessed concurrently from different routines. - 7016: Allow
dolt config
to run in folders without write permissions
This change allowsdolt config
to run in folders without write permissions.
Fixes: #2313 - 7015: Update docs for merge's
--abort
param
The merge CLI command and SQL stored procedure both validate that the working set is clean before it will start a merge, so the warning about uncommitted changes isn't relevant. - 7008: fix panic on foreign key references dropped table for
dolt diff
- 7004: cmd/dolt/commands/sqlserver: Restructure the start up sequence for sql-server.
We explicitly model Services, which can have an Init step, a Run step and a Stop step. Every registered service get initialized in the order they were registered in, then they all run concurrently until Stop is called, when they all get Stopped in reverse order. It's possible for clients to wait for init to be completed and be delivered any errors encountered on startup. They can also wait for stop, to be delivered any errors encountered on shutdown. - 6980: Correctly identify and report data conflicts when deleting rows and/or columns during a three-way merge.
Fixes #6747
Also fixes #6766
#6747 is important to fix because ignoring data conflicts means that a merge could put a user in a state that wouldn't be possible from a linear sequence of transactions. Issues like this (especially ones that don't display any warning to the user) need to be addressed before they cause problems.
go-mysql-server
- 2155: Allow
BLOB
/JSON
/TEXT
columns to have literal default values (MariaDB compatibility)
Technically, MySQL does NOT allowBLOB
/JSON
/TEXT
columns to have a literal default value, and requires them to be specified as an expression (i.e. wrapped in parens). We diverge from this behavior and allow it, for compatibility with MariaDB.
While testing with a binary literal, I noticed thatSQLVal
was converting that value to "BLOB
" instead of the actual binary content, so I fixed that one, too.
Related to: #7033
Dolt CI Checks: #7036 - 2154: Use max prec and scale for decimal oob
- 2153: null in-tuple bugs
fixes: #7025 - 2151: add decimal type to convert functions
fixes #7018 - 2149: updating
RangeTree
nodeMaxUpperBound
again
A previous fix involved updating the MaxUpperBound in the RangeTree when traversing the right node, turns out we need to do that when creating a new node as well.
To better catch overlapping range expressions, we now verify that the resulting ranges do not overlap (an operation which isn't too expensive). This fixes some plans from an index refactor.
Additionally, this also fixes a skipped test where the ranges were not overlapping but different than the brute force approach. - 2148: fix for foreign key that references dropped table in
information_schema.referential_constraint
table - 2147: Fix mod bool conversion
fixes: #7006 - 2146: Update
MaxUpperBound
when inserting intoRangeTree
Recent changes to index costing exposed a bug inRangeTree
. This bug is responsible for a small regression in the sqllogictests, involving a complicated filter.
When generating ranges over an index to satisfy a filter, we have to ensure that the resulting ranges do not overlap; we accomplish this efficiently through the use of a RangeTree (a multi-dimensional red-black tree) to split up and merge ranges.
Given a Range, the RangeTree returns a set of Ranges that overlap it, and we replace these with a set of ranges that cover the same area, minus the overlap.
However, during insertion (specifically when the new node is a right child), we do not update the parent'sMaxUpperBound
. This is important for deciding to search subtrees duringFindConnection()
. As a result, the RangeTree did not find all overlapping ranges, and would produce a set of Ranges that still contained overlaps.
Additionally, this PR adds a slightly better method of checking if the resulting ranges have overlaps.
There is also a skipped test; it's possible that there are multiple sets of non overlapping ranges that satisfy the same sets of filters.
There will be a follow up PR that has a better method of verifying the correctness of these ranges. - 2145: mysql server handler intercept support
Split from the PR https://github.com/dolthub/go-mysql-server/pull/2036.
Add mysql server handler intercept support. - 2144: Push filters insensitive to table name
Filter pushing bug that is specific to 1) table names with capital letters, and 2) filters that need to move through joins. The problem is not indexing specifically, but checking for an index is the easiest way to test this.
dolt bump: #7001 - 2125: Minimal index searchable interface
re: dolthub/go-mysql-server#2036
Closed Issues
- 7030: Error running
dolt_diff()
table function through ODBC - 7025: Unexpected Results when Querying with NULL values
- 6766: Merging an altered column with a deleted row currently results in a merge conflict.
- 6747: Three Way Merging won't detect a data conflict in a dropped column.
- 7009: stop renaming database names with blank spaces
- 7018: Unexpected Results about Floating-point Type Casting
- 2313: dolt config needs write access in current directory for
dolt config --add --global
- 7006: Unexpected Results when Using '%' operator
- 7005: Dropping a table referenced by a foreign key breaks some information_schema tables,
dolt diff
Latency
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.18 | 2.81 | 1.3 |
groupby_scan | 13.22 | 17.63 | 1.3 |
index_join | 1.37 | 5.09 | 3.7 |
index_join_scan | 1.27 | 2.18 | 1.7 |
index_scan | 34.33 | 54.83 | 1.6 |
oltp_point_select | 0.17 | 0.43 | 2.5 |
oltp_read_only | 3.3 | 7.7 | 2.3 |
select_random_points | 0.32 | 0.72 | 2.2 |
select_random_ranges | 0.38 | 0.86 | 2.3 |
table_scan | 34.33 | 54.83 | 1.6 |
types_table_scan | 74.46 | 155.8 | 2.1 |
reads_mean_multiplier | 2.1 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.98 | 6.79 | 0.9 |
oltp_insert | 3.75 | 3.36 | 0.9 |
oltp_read_write | 8.28 | 15.0 | 1.8 |
oltp_update_index | 3.82 | 3.43 | 0.9 |
oltp_update_non_index | 3.82 | 3.36 | 0.9 |
oltp_write_only | 5.37 | 7.56 | 1.4 |
types_delete_insert | 7.56 | 7.43 | 1.0 |
writes_mean_multiplier | 1.1 |
Overall Mean Multiple | 1.6 |
---|