This release contains backwards incompatible changes:
- Branch control permissions are now replicated from the primary to all standby servers when using cluster replication.
Per Dolt’s versioning policy, this is a minor version bump because applications using Dolt cluster replication and branch permissions will now have branch permissions replicated, potentially resulting in unexpected behavior on the replica.
Merged PRs
dolt
- 6678: Hash-qualified DB errors on first reference if hash doesn't exist
- 6669: go: sqle: cluster: First pass at replicating branch control permissions.
- 6657: Delete docstring for push
- 6652: migrates fetch to use sql queries
This change updatesdolt fetch
to use the appropriate sql engine to generate results.
Related: #3922
go-mysql-server
- 2014: Improve message from json_extract() when json path doesn't start with a '$'
- 2013: Change Project nodes so they can't return negative zero.
In some cases we differ from MySQL in what types we use for intermediate results. This doesn't usually affect the final output, and can be more performant.
But if the final result of an expression is a float when MySQL deduces it to be a decimal, and we don't do anything else to value that would cause it to be coerced (such as inserting it into a table with a schema), then we could end up displaying a result of the wrong type to the user. Usually this doesn't matter, unless that result is the float value-0
when the user expects a decimal.
Ideally we'd prefer to detect the expected type and do a cast, but this is an acceptable stopgap measure. - 2012: Insert on dup col ordinal bug
A certain set of conditions caused an error for indexingon duplicate update
expressions.
The current fix is to mimic the projection mapping inside indexing. Index the duplicate expression values based on the ordinal of the destination schema. LOAD DATA for some reason needs its insert columns to not be specified, which will probably be the source of different issues at some point.
fixes: #6675 - 2009: Re-enable query logging by default for DEBUG log level
- 2007: Fixed character set IDs
Character set IDs should correlate with their default collation's ID. Previously, they were arbitrarily assigned by sorting their names alphabetically. This should not be a breaking change for anyone, as the comment on theCharacterSetID
mentions that the ID may change, and should not be persisted. Dolt, the largest integrator, abides by this rule. - 2006: Semi join and FDs bug
Returning no projections from a table causes "column not found errors" when we try to reference those expressions higher in the tree. This fixes the semi join transform to creating empty projections.
This fixes two bugs. The first is that we were too conservative checking whether index keys were strict FDs for a join relation. When a relation has a constant applied to a primary key, we can assume all of the columns returned by that join will be constant. Fixing that made it easer to test certain semi -> right lookup join transforms which were buggy. For the same case, when we are doing a lookup into table where a constant filter satisfies an index key, we need to still return a projection set that covers non-pruneable columns used in higher-level nodes. - 2004: Enable use of slices in tuples for HashLookups
Currently FusionAuth crashes Dolt with the following error:panic: runtime error: hash of unhashable type []uint8
All FusionAuth IDs are binary(16), and join on those values in a HashLookup was resulting in using two[]uint8
being used as a key to a hashtable. Nested arrays in tuples were tripping on an optimization made for short arrays. We've verified that optimization doesn't actually made a difference, so this change simplifies the code and makes it more generic. - 2000: adding new ways to say varchar
This PR makes to so the engine recognizes more ways to specify that a column is of typeVARCHAR
Companion PR: dolthub/vitess#270
Fixes #6650 - 1996: Move join indexing after all
This should put almost all indexing logic into one rule that runs once at the end of analysis for a given query. It should require one walk of the tree, be much more correct for nested join and subquery indexing, and allow us to add nodes with special indexing logic much more easily. - 1995: Added option to change protocol listener
This allows plugging in other protocol listeners besides the default MySQL one. - 1993: JSON Array Mutation
The json_array_insert() and json_array_append() methods are in the family of other mutation functions (set,insert,replace,remove).- JSON_ARRAY_APPEND()
- JSON_ARRAY_INSERT()
Related: #6585
- 1989: Improve the efficiency of
newIndexAnalyzerForNode
by avoiding visiting Filter nodes.
This prevents super-linear runtime ingenerateIndexScans
vitess
- 273: Parse for update skip locked as a no-op
While testing the FusionAuth application, there were regular panics which result from a query which does aselect for update skip locked
. This change allows us to parse these queries, but they don't impact query execution because row level locks are not supported by Dolt currently.
https://dev.mysql.com/blog-archive/mysql-8-0-1-using-skip-locked-and-nowait-to-handle-hot-rows/ - 272: Set character set IDs to current MySQL version
The character set values were set for MySQL 5.0, so they've been updated to the correct values for 8.0. - 270: support alternate ways to say
VARCHAR
This PR adds more variations toVARCHAR
, specifically including the keywordVARYING
.
Parses correctly, but needs GMS changes to actually work as a whole
Companion PR: dolthub/go-mysql-server#2000
Fixes #6650 - 269: Fix
UNION
table option and parseLAST
keyword
This PR fixes support for parsing theUNION
table option and parsingLAST
.
Additionally, it adds support for these table options in alter table statements.
Fixes #6653 - 268: tests and adding keywords for alter too
This PR add support for parsing the keywordTABLE_CHECKSUM
as an alias forCHECKSUM
as a valid table option.
Additionally,CHECKSUM
andTABLE_CHECKSUM
are added as valid keywords in alter statements as well.
Fixes #6645 - 267: Parse
TABLE <table_name>
statements
This PR adds parser support forTABLE <table_name>
syntax.
It just converts this to be aSELECT * FROM <table_name>
statement.
Fixes #6642 - 266: parsing secondary_engine
This PR parses the syntax forSECONDARY_ENGINE
, but does not store it with the table.
For the most part we seem to parse, but not store any table options.
MySQL docs aren't up-to-date yet;SECONDARY_ENGINE
is not listed as a valid table option, but it works.
https://dev.mysql.com/doc/refman/8.0/en/create-table.html
These are also apparently valid options for create index statements, so I just added the syntax there too
https://dev.mysql.com/doc/refman/8.0/en/create-index.html
Fix for: #6632 - 265: upgraded YAML library
Closed Issues
- 6675: dolt table import -u fails to properly parse order of columns
- 6627: Amending commits on a primary breaks remote based replication
- 6650: Support all the different ways to specify character types
Latency
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.91 | 1.4 |
groupby_scan | 13.22 | 17.95 | 1.4 |
index_join | 1.27 | 4.74 | 3.7 |
index_join_scan | 1.21 | 2.18 | 1.8 |
index_scan | 32.53 | 57.87 | 1.8 |
oltp_point_select | 0.14 | 0.39 | 2.8 |
oltp_read_only | 2.71 | 7.17 | 2.6 |
select_random_points | 0.31 | 0.72 | 2.3 |
select_random_ranges | 0.37 | 0.95 | 2.6 |
table_scan | 33.12 | 57.87 | 1.7 |
types_table_scan | 75.82 | 167.44 | 2.2 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.74 | 5.57 | 1.2 |
oltp_insert | 2.26 | 2.81 | 1.2 |
oltp_read_write | 5.99 | 14.21 | 2.4 |
oltp_update_index | 2.26 | 2.81 | 1.2 |
oltp_update_non_index | 2.39 | 2.76 | 1.2 |
oltp_write_only | 3.36 | 7.04 | 2.1 |
types_delete_insert | 4.74 | 6.09 | 1.3 |
writes_mean_multiplier | 1.5 |
Overall Mean Multiple | 1.9 |
---|