Merged PRs
dolt
- 6289: Update Dolt's binary size in README
We went from 68M to 103M because of the new collations. - 6283: Remove temporary workaround for loopback bug in GMS
Resolves: #6239 - 6280: Add ignore support to dolt_cherry_pick procedure.
This updates thedolt_cherry_pick
procedure to properly work with ignored tables. - 6277: adds test for reset handling ignored tables
Adds tests fordolt reset
anddolt_reset()
to check their handling of ignored tables. - 6276: Use correct local branch name when setting upstream in
dolt_checkout
I found an issue indolt_checkout
that occurs in the narrow case where both the-b
and--track
flags are provided, in order to create a new branch that tracks an upstream branch with a different name.
In that case, we fail to set the upstream correctly because we accidentally look for a local branch to mark using the remote branch name, instead of the local branch name.
I added a regression test. - 6271: Revert transaction-unsafe implementation of
SessionStateAdapter::SetCWBHeadRef
This recently added implementation ofSetCWBHeadRef
was a designed to fix an issue when evalutatingcall dolt_branch('-m', $ACTIVE_BRANCH, $NEW_BRANCH)
(which would cause a panic) by changing the active branch on the SQL session to match the new branch. However, this implementation has some problems.
When operating on the DB from a SQL-context, we use transactions to ensure that changes are applied atomically. However currently, renaming branches doesn't use transactions because they touch multiple branches at once and we can't really model that as a transaction. This becomes a problem when mixed withDoltSession
operations, which do use transactions.
My original implementation attempted to work around this by callingcommitTransaction
before and after setting the new current working branch. This would allowSwitchActiveBranch
to see the newly created branch. However, this is not a correct use of manual transaction management and is not generally safe.
No matter the solution to the original bug, doing manual transaction management inSetCWBHeadRef
is not a good idea. It's been reverted, and the call toSetCWBHeadRef
withinRenameBranch
has been removed.
The last commit in this PR is an attempt to implement the branch switch withinRenameBranch
itself. This also uses manual transaction management, but this is isolated to a single execution path. I welcome feedback on whether there's a better way to do this. - 6270: Remove alter_statement column from dolt_schema_diff results.
Removealter_statement
column fromdolt_schema_diff
results.
This change is a result of feedback about thedolt_schema_diff
output: dolthub/docs#1575 (comment)
We're removing thealter_statement
column, and requiring the user to get this information fromdolt_patch
.
The migrated commanddolt diff
is now doing this: we identify the changed tables usingdolt_schema_diff
, then get the alter statements fromdolt_patch
.
This update also resolves #6265 , which is a feature request to return emptyto_*
/from_*
columns in cases when the table does not exist at theto
orfrom
revision.
go-mysql-server
- 1864: No parallelism for children of ordered distinct
We permitted parallelism into an OrderedDistinct node, which is a specialized Distinct node that expects results sorted on a specific index key. This change prevents parallelizing children of OrderedDistinct. - 1861: chore: remove refs to deprecated io/ioutil
- 1860: chore: unnecessary use of fmt.Sprintf
- 1859: chore: use copy(to, from) instead of a loop
- 1856: Support IPV6 loopback address for looking up user credentials
Map "::1" and "127.0.0.1" to localhost when looking up users.
There don't appear to be tests for this code path. TBD if I'll add some.
Related to: #6239 - 1854: Prevent loops in stored procedures from returning multiple result sets
The query in #6230 was causing rows from many result sets to be returned from a stored procedure. We already have code that limitsBEGIN/END
blocks to return the last SELECTed result set; this PR extends that logic to loop constructs as well.
Fixes: #6230
Dolt CI Checks: #6245 - 1853: chore: slice replace loop
- 1852: Alter stored procedure execution to deal with statements that commit transactions
This change adds checks to begin a new transaction whenever there isn't one during stored procedure execution. This lets things likedolt_commit()
execute correctly in stored procedures. - 1851:
memo.Literal
has different type than lookup
This panics on dolt:The PutField function expects the value to match the tuple descriptor exactly, and will panic if it does not.CREATE TABLE tab2(pk INTEGER PRIMARY KEY, col0 INTEGER, col1 FLOAT, col2 TEXT, col3 INTEGER, col4 FLOAT, col5 TEXT); CREATE UNIQUE INDEX idx_tab2_0 ON tab2 (col1 DESC,col4 DESC); CREATE INDEX idx_tab2_1 ON tab2 (col1,col0); CREATE INDEX idx_tab2_2 ON tab2 (col4,col0); CREATE INDEX idx_tab2_3 ON tab2 (col3 DESC); INSERT INTO tab2 VALUES(0,344,171.98,'nwowg',833,149.54,'wjiif'); INSERT INTO tab2 VALUES(1,353,589.18,'femmh',44,621.85,'qedct'); SELECT pk FROM tab2 WHERE ((((((col0 IN (SELECT col3 FROM tab2 WHERE ((col1 = 672.71)) AND col4 IN (SELECT col1 FROM tab2 WHERE ((col4 > 169.88 OR col0 > 939 AND ((col3 > 578))))) AND col0 >= 377) AND col4 >= 817.87 AND (col4 > 597.59)) OR col4 >= 434.59 AND ((col4 < 158.43)))))) AND col0 < 303) OR ((col0 > 549)) AND (col4 BETWEEN 816.92 AND 983.96) OR (col3 BETWEEN 421 AND 96);
The section of code in memo that creates a new range uses the type from the expression, but in other places it uses the index column expression types.
An alternative solution would be to have some logic in dolt to convert to the correspondingsql.Type
based off theval.Enc
- 1850: Name resolution correctness tests
This fixes many of the remaining correctness tests forTestSimpleQueries
,TestsJoinOps
,TestJoinPlanning
,TestColumnAliases
,TestDerivedTableOuterScopeVisibility
,TestAmbiguousColumnResolution
,TestReadOnlyVersionedQueries
with the new name resolution strategy.
Many of the query plans are slightly different but mostly equivalent. Join rearrangements and un-nesting in particular are better after this change, because I needed the transform logic work for both. There are a variety of other bugs the slight plan differences exposed that are fixed now.
This does not fix every set of enginetests, there is still a lot to do. But I'm locking in compatibility for most of the core tests to prevent backsliding.
The next follow-up is probably replacing the old name resolution. I will need to figure out if triggers, procs, prepared statements need any sort of special treatment.
Closed Issues
- 6239: dolt sql-server --host 0.0.0.0 authentication behavior differs from mysql
- 6265: Include added and dropped tables in
dolt_schema_diff
table function
Latency
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.71 | 1.4 |
groupby_scan | 12.3 | 16.41 | 1.3 |
index_join | 1.18 | 4.33 | 3.7 |
index_join_scan | 1.14 | 2.18 | 1.9 |
index_scan | 30.26 | 55.82 | 1.8 |
oltp_point_select | 0.15 | 0.46 | 3.1 |
oltp_read_only | 2.91 | 8.13 | 2.8 |
select_random_points | 0.3 | 0.77 | 2.6 |
select_random_ranges | 0.35 | 1.1 | 3.1 |
table_scan | 30.81 | 56.84 | 1.8 |
types_table_scan | 70.55 | 161.51 | 2.3 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.09 | 6.09 | 1.2 |
oltp_insert | 2.48 | 2.97 | 1.2 |
oltp_read_write | 6.55 | 15.55 | 2.4 |
oltp_update_index | 2.57 | 3.07 | 1.2 |
oltp_update_non_index | 2.71 | 3.02 | 1.1 |
oltp_write_only | 3.75 | 7.7 | 2.1 |
types_delete_insert | 5.18 | 6.67 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 2.0 |
---|