Merged PRs
dolt
- 7003: Print an error when server args don't validate
We aren't printing any errors from sql-server when there are unparsable flags.
Previous Behavior:
New Behavior:$ dolt sql-server --rasdjdsdlsdk $ echo $? 1
$ dolt sql-server --rasdjdsdlsdk error: sql-server does not take positional arguments, but found 1: asdjdsdlsdk $ echo $? 1
- 6996: go: sqle: cluster: commithook: When shutting down the server, the cluster replication commithook could deadlock after the replication thread missed a wakeup signal.
Fix it so that the wakeup thread is guaranteed to see the canceled context or the wakeup signal. - 6992: go/libraries/doltcore/remotesrv: Ensure we stop the gRPC server and cancel inflight requests when we are multiplexing one port for HTTP and gRPC traffic.
- 6977: Improve the persistence of the file that stores USERs and GRANTs.
The USERs and GRANTs on a sql-server instance are stored in a separate file from the Merkle DAG table data that makes up the Dolt databases themselves. Previously, the contents of this file were not written in a crash resistant way, and they could be lost or corrupted after a crash or when taking a block-device snapshot.
This change also changes the file's permission bits to be0600
, instead of0777
, which was much more permissive than intended. - 6974: Support merging schemas with virtual / generated columns
Substantially addresses #6945, although there are a couple remaining edge cases that are hard to crack, in this PR as skipped tests.
go-mysql-server
- 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 - 2142: Idx histogram manipulation
Add simple histogram mutators for filter types. Use histogram costs for index selection when available. Addedstats
docs.
Dolt enginetests seem to be passing. Companion here: #6997
TODO:- I'd like to block statistics when only partially provided
- TPCC plans are changed and I want to revert. Blocking partial statistics might fix those, I'm trying to get all of the actual index statistics for those tables as a better enginetest/blog example.
- 2141: Fixing field metadata for
JSON
andgeometry
types
JSON
andgeometry
types should always report a binary collation in MySQL's field metadata. While debugging #6970, I noticed that MySQL was sending a binary collation for these types, but GMS was sending back the default collation. - 2140: Respect
character_set_results
when emitting field metadata
For non-binary types, we need to respect the value for thecharacter_set_results
session var (when notNULL
) and use that for the field metadata returned in the MySQL wire protocol.
The unexpected charset/collation metadata is causing DataGrip to be unable to work with some types in the table editor ( see #6970 for more details).
I've validated this behavior with MySQL by inspecting packets with Wireshark. For testing, we were already testing the behavior ofcharacter_set_results
and the charset translation, but we weren't testing the field metadata. I added support to check against the expect charset field metadata, but had to use reflection to get that data from the MySQL driver, since it's not exposed through the standard golang sql database APIs. - 2135: Resolve indexes of columns in CREATE TABLE statements early
Closed Issues
Latency
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 2.71 | 1.3 |
groupby_scan | 12.98 | 17.63 | 1.4 |
index_join | 1.37 | 5.0 | 3.6 |
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.56 | 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.36 | 0.9 |
oltp_update_non_index | 3.82 | 3.36 | 0.9 |
oltp_write_only | 5.28 | 7.56 | 1.4 |
types_delete_insert | 7.56 | 7.43 | 1.0 |
writes_mean_multiplier | 1.1 |
Overall Mean Multiple | 1.6 |
---|