Merged PRs
dolt
- 9306: go: store/datas/pull: clone.go: Improve robust of Clone for certain remoteapi implementations when the remote Conjoins.
The clone code works by listing the remote table files and downloading them into the local table file store. When the remote is a remoteapi implementation, like a DoltHub repository, this resulting in listing the remote table files and using URLs to fetch each of them.
The URLs returned from these APIs can expire and they need to be refreshed. This refresh can happen in two ways:- There is explicit support in the TableFileSource representation returned by the API to include a mechanism to refresh it. DoltHub uses this, and the Dolt client will make use of that support to refresh expired URLs.
- The heavy handed approach is to list the table files again and use the newly returned URLs.
The Clone code has explicit support for doing (2), and it is necessary for remoteapi implementations with expiring URLs but without explicit RefreshTableFileUrl support. dolt itself, when running a remote as part of sql-server for example, does not implement RefreshTableFileUrl support, and so the re-list support is still necessary.
This PR changes the Clone implementation so that, on a retry, it makes all the newly returned table file sources available for the next try, but it keeps the old sources around if they no longer come back from ListTableFiles. In this way, we get strictly more robust behavior than before.
The downside is that, when the remote file is actually gone, the Clone code will continue attempting to download it until it reaches a terminal download failure. This change in behavior is not as disruptive as the current behavior, and so we make this new trade off for now.
- 9299: Improved chunk tracking during clone
Decrement the chunk counter when a file completes. Add a completion status message. Fix a potential race that @reltuk identified in review. - 9298: Last easy unskip according to Claude
- 9296: Check for invalid ancestor merge spec
fixes #9294 - 9295: Various unskipped bats tests identified and fixed by Claude Code.
- 9289: Fix load data tabs test
- 9288: The where clause on a dolt diff command is always validated
Even if there is an empty diff - 9287: Fix skip test for another load data issue
- 9122: implement
dolt_branch_status()
This PR implementsdolt_branch_status(<base_branch>, <feature_branch1>, <feature_branch2>, ...)
.
The function comparesbase_branch
against each of the feature branches and outputs a table that lists how many commits ahead and behind base branch.
Additionally, this PR contains some cleanup/refactoring.
addresses: #9090
go-mysql-server
- 3010: Add query time to logger
This is a proposed fix for Dolt issue: #8909
I'm not certain if we want to just add this field or replace connect time. I think this implementation is safer. - 3009: New skipped tests for group_concat
The ORDER BY clauses in aggregates likegroup_concat
do not work correctly with subqueries. Lots of varied tests demonstrating this defect. - 3004: Add support for
IS NULL
expressions with records
The implementation in GMS forIS NULL
checks if the value isNULL
or not. For record and composite types in Postgres,IS NULL
needs to check if each value in the record or composite type isNULL
to determine if the value isNULL
. See dolthub/doltgresql#1520 for more details.
This change creates a new shared type, namedTupleValue
, in GMS that is used for record values (and eventually, composite type values). I also considered giving Doltgres it's own, customIsNull
implementation, but the analyzer does specific checks and optimizations when it looks for*expression.IsNull
instances, which would stop working correctly. - 3002: fix table functions in stored procedures
- 3001: Support for injected expressions with ORDER BY clauses
Depends on 416
vitess
- 416: New flavor of injected expression
- 415: Fix implementation for
REVOKE ALL...
This PR fixesREVOKE ALL [PRIVILEGES], GRANT OPTION ...
so that it parse to the same thing asREVOKE ALL PRIVILEGES
as they are equivalent in MySQL. TheGRANT
privilege is already part of all privileges, specifying it is just for clarity.
Additionally, this PR adds syntax support for theIF EXISTS
option andIGNORE UNKNOWN USER
option that is part ofREVOKE
statements.
MySQL Docs: https://dev.mysql.com/doc/refman/8.4/en/revoke.html
Syntax for: #9228
Closed Issues
- 8909: Dolt start time of queries in logs is all pinned to the connection open start time
- 7984: Implement
dolt_help
set of system tables - 8345: dolt does not reload all statistics on server restart
- 9240: Clone Status reports more chunks being downloaded than it says exist
- 9294: HEAD^0 causes panic
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.86 | 0.67 | 0.36 |
groupby_scan | 13.46 | 18.61 | 1.38 |
index_join | 1.44 | 2.43 | 1.69 |
index_join_scan | 1.42 | 1.47 | 1.04 |
index_scan | 34.33 | 30.26 | 0.88 |
oltp_point_select | 0.18 | 0.26 | 1.44 |
oltp_read_only | 3.43 | 5.28 | 1.54 |
select_random_points | 0.33 | 0.6 | 1.82 |
select_random_ranges | 0.36 | 0.62 | 1.72 |
table_scan | 34.33 | 32.53 | 0.95 |
types_table_scan | 75.82 | 123.28 | 1.63 |
reads_mean_multiplier | 1.31 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.9 | 6.32 | 0.71 |
oltp_insert | 4.1 | 3.07 | 0.75 |
oltp_read_write | 8.74 | 11.65 | 1.33 |
oltp_update_index | 4.18 | 3.19 | 0.76 |
oltp_update_non_index | 4.18 | 3.07 | 0.73 |
oltp_write_only | 5.67 | 6.32 | 1.11 |
types_delete_insert | 8.28 | 6.67 | 0.81 |
writes_mean_multiplier | 0.89 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 97.48 | 39.64 | 2.46 |
tpcc_tps_multiplier | 2.46 |
Overall Mean Multiple | 1.55 |
---|