Releases: dolthub/dolt
Releases · dolthub/dolt
0.75.0
This release turns on ACID transactions by default. 0.75.0 is meant to signify the last major release before Dolt 1.0.
Merged PRs
dolt
- 5520: go/perf/sysbench: reconfigure MySQL to use same durability level as Dolt w/ chunk journal
- 5515: go/doltcore/sqle: fix FK checks on drop PK to look at correct Fks
- 5507: fix panic from adding spatial index to non-empty table
- 5503: Display DDL for views and triggers in dolt diff
Second attempt of botched PR: #5476 - 5502: support staged set of changes for
dolt stash- added support for handling staged set of changes for
dolt stash. - added support for
--include-untrackedflag fordolt stash. - fixed untracked files being dropped when stashing working set of changes.
- added support for handling staged set of changes for
- 5501: Minor bug fixes for MySQL binlog replication
Fixes a nil pointer dereference whenfiltersis set tonilafterRESET REPLICA ALL. Adds a test for that case and a test for handling very long hostnames. - 5500: Remove obsolete DOLT_DEV NomsBinFormat.
- 5499: Fix
schema_changecolumn indolt_diff_summaryreporting false for foreign key changes - 5497: go/store/prolly/tree: assert sorted edits in ApplyMutations
- 5496: go/store/types: Thread context on Less and Compare.
- 5485: go/store/types: Remove bufferedChunks from ValueStore.
- 5484: go/store/skip: speedup skip list
micro benchmark resultsgoos: darwin goarch: amd64 pkg: github.com/dolthub/dolt/go/store/skip cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz │ before │ after │ │ sec/op │ sec/op vs base │ Get/unsorted_keys/n=64-12 182.65n ± 12% 90.91n ± 5% -50.23% (p=0.000 n=10) Get/unsorted_keys/n=2048-12 334.8n ± 7% 186.5n ± 4% -44.30% (p=0.000 n=10) Get/unsorted_keys/n=65536-12 670.1n ± 5% 475.7n ± 4% -29.02% (p=0.000 n=10) Get/ascending_keys/n=64-12 188.75n ± 11% 88.27n ± 7% -53.24% (p=0.000 n=10) Get/ascending_keys/n=2048-12 318.8n ± 3% 156.1n ± 7% -51.03% (p=0.000 n=10) Get/ascending_keys/n=65536-12 470.0n ± 8% 218.7n ± 5% -53.47% (p=0.000 n=10) Get/descending_keys/n=64-12 214.90n ± 11% 90.30n ± 5% -57.98% (p=0.000 n=10) Get/descending_keys/n=2048-12 305.3n ± 7% 151.1n ± 3% -50.50% (p=0.000 n=10) Get/descending_keys/n=65536-12 467.3n ± 9% 217.5n ± 6% -53.46% (p=0.000 n=10) Put/unsorted_keys/n=64-12 263.2n ± 11% 106.6n ± 6% -59.53% (p=0.000 n=10) Put/unsorted_keys/n=2048-12 397.1n ± 8% 206.0n ± 2% -48.12% (p=0.000 n=10) Put/unsorted_keys/n=65536-12 686.8n ± 5% 449.4n ± 2% -34.55% (p=0.000 n=10) Put/asending_keys/n=64-12 232.15n ± 41% 89.07n ± 6% -61.63% (p=0.000 n=10) Put/asending_keys/n=2048-12 365.2n ± 13% 143.1n ± 9% -60.82% (p=0.000 n=10) Put/asending_keys/n=65536-12 451.4n ± 9% 206.5n ± 7% -54.27% (p=0.000 n=10) Put/descending_keys/n=64-12 188.25n ± 14% 71.79n ± 4% -61.86% (p=0.000 n=10) Put/descending_keys/n=2048-12 209.30n ± 27% 83.79n ± 3% -59.97% (p=0.000 n=10) Put/descending_keys/n=65536-12 229.2n ± 9% 102.2n ± 1% -55.38% (p=0.000 n=10) IterAll/unsorted_keys/n=64-12 469.6n ± 10% 166.2n ± 1% -64.61% (p=0.000 n=10) IterAll/unsorted_keys/n=2048-12 18.622µ ± 8% 9.711µ ± 1% -47.85% (p=0.000 n=10) IterAll/unsorted_keys/n=65536-12 1214.1µ ± 5% 950.5µ ± 4% -21.71% (p=0.000 n=10) IterAll/asending_keys/n=64-12 456.8n ± 22% 167.4n ± 1% -63.36% (p=0.000 n=10) IterAll/asending_keys/n=2048-12 16.380µ ± 10% 7.829µ ± 8% -52.20% (p=0.000 n=10) IterAll/asending_keys/n=65536-12 598.6µ ± 8% 313.7µ ± 4% -47.60% (p=0.000 n=10) IterAll/descending_keys/n=64-12 483.3n ± 28% 166.3n ± 1% -65.58% (p=0.000 n=10) IterAll/descending_keys/n=2048-12 17.414µ ± 16% 7.964µ ± 4% -54.27% (p=0.000 n=10) IterAll/descending_keys/n=65536-12 621.1µ ± 12% 338.9µ ± 3% -45.45% (p=0.000 n=10) geomean -52.90% - 5477: Use row data hash to determine if table delta data changed
- 5476:
dolt diffbehavior for dolt_schema table updated show DDL changes
#5388
Example new behavior:lcl:~/Documents/data_dir_1/db1$ dolt diff HEAD~4 HEAD~3 dolt_schemas diff --dolt a/dolt_schemas b/dolt_schemas --- a/dolt_schemas @ p4j8pfq3pmub8fmketaes8ek0ghvgg1s +++ b/dolt_schemas @ bkf872if6l5jd79ue0130c90u8qh5o36 create view males -as select first_name +as select first_name,last_name from people where gender = "M";lcl:~/Documents/data_dir_1/db1$ dolt diff HEAD~2 HEAD dolt_schemas diff --dolt a/dolt_schemas b/dolt_schemas --- a/dolt_schemas @ m12an7km8tnft6hole0185ds1d91n5is +++ b/dolt_schemas @ l8sa0c199fmng777t3v6mtjrfs1h5vdp CREATE TRIGGER avg_age AFTER INSERT ON people for each row - update average_age set average = (SELECT AVG(age)); + update average_age set average = (SELECT AVG(age) FROM people);lcl:~/Documents/data_dir_1/db1$ dolt diff HEAD~5 HEAD dolt_schemas diff --dolt a/dolt_schemas b/dolt_schemas --- a/dolt_schemas @ 8nlac0sjnoetmcv01ps7phe5bp6mf9p3 +++ b/dolt_schemas @ l8sa0c199fmng777t3v6mtjrfs1h5vdp +CREATE TRIGGER avg_age AFTER INSERT ON people +for each row + update average_age set average = (SELECT AVG(age) FROM people); +create view males +as select first_name,last_name +from people +where gender = "M"; lcl:~/Documents/data_dir_1/db1$ dolt diff HEAD HEAD~5 dolt_schemas diff --dolt a/dolt_schemas b/dolt_schemas --- a/dolt_schemas @ l8sa0c199fmng777t3v6mtjrfs1h5vdp +++ b/dolt_schemas @ 8nlac0sjnoetmcv01ps7phe5bp6mf9p3 -CREATE TRIGGER avg_age AFTER INSERT ON people -for each row - update average_age set average = (SELECT AVG(age) FROM people); -create view males -as select first_name,last_name -from people -where gender = "M"; - 5460: Include all diff columns when a table is created or dropped
#5439 - 5450: MySQL replication fixes for
START/STOP REPLICA
I found a few places whereSTART REPLICAandSTOP REPLICAweren't working correctly. There were two major cases where the binlog replication applier routine was blocking and not processing thestopReplicationsignal:- during connection retry and backoff
- while blocking and waiting to read more binlog events over the MySQL connection
I restructured how those cases work, including pulling out a separate goroutine that makes the blockingconn.ReadBinlogEvent()call and then feeds the results back to the applier routine through channels.
- 5430: go/store/nbs: turn on chunk journal by default
- 5422: add
dolt stash
First pass ondolt stashcommands include:dolt stashdolt stash pop [<stash>]dolt stash drop [<stash>]dolt stash cleardolt stash list
No optional flags are supported for above commands.
Staged changes are not handled in this version.
Available only as CLI commands
go-mysql-server
- 1638: Fixing incorrect size for
SOURCE_HOSTmember ofSHOW REPLICA STATUS - 1637: Workaround for Issue 5482
This is a workaround for #5482. This isn't a true fix as the behavior is wrong, but will at least unblock the user. I'm currently working on proper collation coercion handling, so this will be replaced in relatively short order. - 1635: Better error message for cannot drop index
- 1634: add support for
EXTRACT
fix for: #3006
We don't support 0 for year, month, day, but MySQL does...
I didn't fix here, because it seems to be a problem stemming from thetimelibrary, and the behavior is consistent with our existingDAY(),MONTH()andYEAR()functions. - 1631: Nil operand in outer join smarter about identifying nil's source rel
We falsely attributed a nil operand to the left relation, early triggering the left outer join nil return path. Rather than iterate the row from left to right, use the comparison expression to directly evaluate for whether left comparison expr is nil. - 1630: Fix update resolve table bug
- 1629: add support for
!and fixNOToperator not working for UPDATE trigger!was not supported forIFclause inTRIGGERstatementsNOTclause was not working forUPDATETRIGGERstatements
- 1625: retu...
0.54.2
Merged PRs
dolt
- 5475: proto/third_party: Bump versions.
- 5474: go/libraries/doltcore/remotesrv: Add some rudimentary input validation on request messages.
- 5472: go/store/nbs: fix re-entrant deadlock in journal_writer
- 5469: bug fix: binlog multi-db support
We were missing the call to set the session's current database for binlogQueryevents. This was causing queries to execute against the wrong database when using binlog replication with multiple databases. Our binlog tests didn't catch this because the multi-db tests used fully qualified table names, so it didn't matter what database was currently selected.
This change adds the call to set the current database and updates the multi-db tests to use a mix ofusestatements and fully qualified table names (and also cleans up some of our query error logging to make log output more helpful for debugging). - 5461: go/doltcore/migrate: modify migrated tuples sink to sort incoming tuples
#4221 alters tuple ordering for NBF__LD_1__to sortNULLfields last. In NBF__DOLT__,NULLfields are ordered first. This change todolt migratesorts migrated tuples on-the-fly to compensate for this mismatch - 5347: add stash to clientEventType
go-mysql-server
- 1629: add support for
!and fixNOToperator not working for UPDATE trigger!was not supported forIFclause inTRIGGERstatementsNOTclause was not working forUPDATETRIGGERstatements
- 1627: Made signal statements work with user vars
Fixes #5452
Closed Issues
- 5379: Running a GetRepoMetadata request against the remotesrv within the sql-server, without data crashes the sql-server
- 5470: Error: "unsupported feature: unary operator: !" in IF in trigger definition
- 3770: Support DELETE JOINs
- 5452: dolt sql fails fails with "syntax error" on importing a trigger definition
- 5453: dolt panics in query "unknown type" in memo.go
Latency
| Read Tests | MySQL | Dolt | Multiple |
|---|---|---|---|
| covering_index_scan | 1.93 | 2.66 | 1.4 |
| groupby_scan | 12.3 | 16.41 | 1.3 |
| index_join | 1.16 | 4.18 | 3.6 |
| index_join_scan | 1.12 | 2.07 | 1.8 |
| index_scan | 30.26 | 51.94 | 1.7 |
| oltp_point_select | 0.15 | 0.48 | 3.2 |
| oltp_read_only | 3.02 | 8.43 | 2.8 |
| select_random_points | 0.3 | 0.74 | 2.5 |
| select_random_ranges | 0.35 | 1.12 | 3.2 |
| table_scan | 30.81 | 52.89 | 1.7 |
| types_table_scan | 69.29 | 158.63 | 2.3 |
| reads_mean_multiplier | 2.3 |
| Write Tests | MySQL | Dolt | Multiple |
|---|---|---|---|
| bulk_insert | 0.001 | 0.001 | 1.0 |
| oltp_delete_insert | 2.61 | 12.3 | 4.7 |
| oltp_insert | 1.32 | 2.91 | 2.2 |
| oltp_read_write | 5.0 | 17.63 | 3.5 |
| oltp_update_index | 1.34 | 6.09 | 4.5 |
| oltp_update_non_index | 1.34 | 6.67 | 5.0 |
| oltp_write_only | 2.14 | 8.9 | 4.2 |
| types_delete_insert | 2.76 | 13.22 | 4.8 |
| writes_mean_multiplier | 3.7 |
| Overall Mean Multiple | 2.9 |
|---|
0.54.1
Merged PRs
dolt
go-mysql-server
- 1627: Made signal statements work with user vars
Fixes #5452 - 1624: Update logger field when a session's database is changed
We use aconnectionDbfield to log the session's current database, but we don't always consistently update that logger field in every place where we set the session's current db. This change moves that logger field update directly intoBaseSession.SetCurrentDatabase(string)to ensure it always stays in sync. - 1619: Memo includes costs and stars best plan
Debugger memo print includes physical expression incremental processing costs, and stars the group best. The value corresponds to the incremental processing delta of executing an operator compared to a sequential processing of the inputs. The total for a group will be the group costs plus child group costs (recursively).
Example:memo: ├── G1: (tableAlias: r 11444774.0)* ├── G2: (tableAlias: i 161.0)* ├── G3: (mergeJoin 1 2 114447.7) (mergeJoin 2 1 1.6) (hashJoin 1 2 114930.7) (hashJoin 2 1 34334323.6) (lookupJoin 1 2 23003834.7) (lookupJoin 2 1 -11444450.2)* (innerJoin 2 1 1861034699.1) (innerJoin 1 2 1861034699.1) ├── G4: (tableAlias: c 12293.0)* ├── G5: (hashJoin 3 4 36879.2) (hashJoin 2 12 4058.3) (hashJoin 12 2 496.5) (hashJoin 4 3 176.1) (lookupJoin 3 4 -12257.4)* (lookupJoin 12 2 2557.0) (innerJoin 4 3 219885.1) (innerJoin 12 2 219885.1) (innerJoin 2 12 219885.1) (innerJoin 3 4 219885.1) ├── G6: (tableAlias: pm 646.0)* ├── G7: (hashJoin 5 6 1938.0) (hashJoin 2 15 22.9) (hashJoin 15 2 483.1) (hashJoin 4 14 128.2) (hashJoin 14 4 36879.0) (hashJoin 6 5 11.8) (lookupJoin 5 6 -642.4) (lookupJoin 15 2 -146.7) (lookupJoin 14 4 -12289.4)* (innerJoin 6 5 1154.5) (innerJoin 14 4 21987.6) (innerJoin 4 14 21987.6) (innerJoin 15 2 1154.5) (innerJoin 2 15 1154.5) (innerJoin 5 6 1154.5) ├── G8: (tableAlias: trf 39874374.0)* ├── G9: (hashJoin 7 8 119623122.0) (hashJoin 2 22 3.7) (hashJoin 22 2 483.0) (hashJoin 4 21 123.5) (hashJoin 21 4 36879.0) (hashJoin 6 19 7.0) (hashJoin 19 6 1938.0) (hashJoin 8 7 398744.3) (lookupJoin 7 8 -39874373.6) (lookupJoin 22 2 -159.6) (lookupJoin 21 4 -12292.6) (lookupJoin 19 6 -645.6)* (innerJoin 8 7 7132368.2) (innerJoin 19 6 114.6) (innerJoin 6 19 114.6) (innerJoin 21 4 2197.9) (innerJoin 4 21 2197.9) (innerJoin 22 2 114.6) (innerJoin 2 22 114.6) (innerJoin 7 8 7132368.2) ├── G10: (tableAlias: nt 8735.0)* ├── G11: (hashJoin 9 10 26205.0) (hashJoin 2 30 1.8) (hashJoin 30 2 483.0) (hashJoin 4 29 123.0) (hashJoin 29 4 36879.0) (hashJoin 6 27 6.5) (hashJoin 27 6 1938.0) (hashJoin 7 23 2882.6) (hashJoin 23 7 10.1) (hashJoin 10 9 87.4) (lookupJoin 9 10 -8735.0)* (lookupJoin 30 2 -160.8) (lookupJoin 29 4 -12293.0) (lookupJoin 27 6 -646.0) (innerJoin 10 9 155.2) (innerJoin 23 7 170.9) (innerJoin 7 23 170.9) (innerJoin 27 6 11.7) (innerJoin 6 27 11.7) (innerJoin 29 4 240.9) (innerJoin 4 29 240.9) (innerJoin 30 2 11.7) (innerJoin 2 30 11.7) (innerJoin 9 10 155.2) ├── G12: (mergeJoin 1 4 114447.7) (mergeJoin 4 1 122.9) (hashJoin 1 4 151326.7) (hashJoin 4 1 34334444.9) (lookupJoin 1 4 22991702.7) (lookupJoin 4 1 -11420052.8)* (innerJoin 4 1 142097512848.8) (innerJoin 1 4 142097512848.8) ├── G13: (mergeJoin 1 6 114447.7) (mergeJoin 6 1 6.5) (hashJoin 1 6 116385.7) (hashJoin 6 1 34334328.5) (lookupJoin 1 6 23003349.7) (lookupJoin 6 1 -11443474.9)* (innerJoin 6 1 7467257243.0) (innerJoin 1 6 7467257243.0) ├── G14: (hashJoin 2 13 214.8) (hashJoin 13 2 483.7) (hashJoin 3 6 1938.2) (hashJoin 6 3 59.6) (lookupJoin 13 2 -18.2) (lookupJoin 3 6 -610.4)* (innerJoin 6 3 11554.1) (innerJoin 3 6 11554.1) (innerJoin 13 2 11554.1) (innerJoin 2 13 11554.1) ├── G15: (hashJoin 4 13 336.1) (hashJoin 13 4 36879.7) (hashJoin 12 6 1951.5) (hashJoin 6 12 4063.2) (lookupJoin 13 4 -12150.2)* (lookupJoin 12 6 2072.0) (innerJoin 6 12 882275.0) (innerJoin 12 6 882275.0) (innerJoin 13 4 882275.0) (innerJoin 4 13 882275.0) ├── G16: (mergeJoin 1 8 114447.7) (mergeJoin 8 1 398743.7) (hashJoin 1 8 119737569.7) (hashJoin 8 1 34733065.7) (lookupJoin 1 8 -16870378.3)* (lookupJoin 8 1 68702717.7) (innerJoin 8 1 460916730809689.8) (innerJoin 1 8 460916730809689.8) ├── G17: (hashJoin 2 16 3433433.8) (hashJoin 16 2 11927.8) (hashJoin 3 8 119623122.2) (hashJoin 8 3 398796.9) (lookupJoin 16 2 2300238.6) (lookupJoin 3 8 -39874338.4)* (innerJoin 8 3 713236914.2) (innerJoin 3 8 713236914.2) (innerJoin 16 2 186103469.0) (innerJoin 2 16 186103469.0) ├── G18: (hashJoin 4 16 3433555.1) (hashJoin 16 4 48323.8) (hashJoin 12 8 119623135.5) (hashJoin 8 12 402800.4) (lookupJoin 16 4 2288106.6) (lookupJoin 12 8 -39871656.0)* (innerJoin 8 12 54458518000.6) (innerJoin 12 8 54458518000.6) (innerJoin 16 4 14209751284.0) (innerJoin 4 16 14209751284.0) ├── G19: (hashJoin 2 18 407.3) (hashJoin 18 2 484.4) (hashJoin 4 17 128.2) (hashJoin 17 4 36879.0) (hashJoin 5 8 119623122.0) (hashJoin 8 5 398749.1) (lookupJoin 18 2 110.8) (lookupJoin 17 4 -12289.4)* (lookupJoin 5 8 -39874370.4) (innerJoin 8 5 71323690.5) (innerJoin 5 8 71323690.5) (innerJoin 17 4 21987.6) (innerJoin 4 17 21987.6) (innerJoin 18 2 21987.6) (innerJoin 2 18 21987.6) ├── G20: (hashJoin 6 16 3433438.7) (hashJoin 16 6 13382.8) (hashJoin 13 8 119623122.7) (hashJoin 8 13 398956.9) (lookupJoin 16 6 2299753.6) (lookupJoin 13 8 -39874231.2)* (innerJoin 8 13 2861807745.6) (innerJoin 13 8 2861807745.6) (innerJoin 16 6 746725723.4) (innerJoin 6 16 746725723.4) ├── G21: (hashJoin 2 20 22.9) (hashJoin 20 2 483.1) (hashJoin 6 17 11.8) (hashJoin 17 6 1938.0) (hashJoin 14 8 119623122.0) (hashJoin 8 14 398749.1) (lookupJoin 20 2 -146.7) (lookupJoin 17 6 -642.4)* (lookupJoin 14 8 -39874370.4) (innerJoin 8 14 71323690.5) (innerJoin 14 8 71323690.5) (innerJoin 17 6 1154.5) (innerJoin 6 17 1154.5) (innerJoin 20 2 1154.5) (innerJoin 2 20 1154.5) ├── G22: (hashJoin 4 20 144.2) (hashJoin 20 4 36879.1) (hashJoin 6 18 412.1) (hashJoin 18 6 1939.4) (hashJoin 15 8 119623122.1) (hashJoin 8 15 398765.1) (lookupJoin 20 4 -12278.7) (lookupJoin 18 6 -374.2) (lookupJoin 15 8 -39874359.7)* (innerJoin 8 15 286180773.7) (innerJoin 15 8 286180773.7) (innerJoin 18 6 88226.6) (innerJoin 6 18 88226.6) (innerJoin 20 4 88226.6) (innerJoin 4 20 88226.6) ├── G23: (mergeJoin 8 10 398743.7) (mergeJoin 10 8 87.4) (hashJoin 8 10 424948.7) (hashJoin 10 8 119623209.3) (lookupJoin 8 10 80178631.1) (lookupJoin 10 8 -39856807.9)* (innerJoin 10 8 351785683457.9) (innerJoin 8 10 351785683457.9) ├── G24: (hashJoin 1 23 117330.3) (hashJoin 23 1 34334331.6) (hashJoin 16 10 37649.8) (hashJoin 10 16 3433519.6) (lookupJoin 23 1 -11442842.7)* (lookupJoin 16 10 2292809.1) (innerJoin 10 16 10096980188.9) (innerJoin 16 10 10096980188.9) (innerJoin 23 1 11106678207.9) (innerJoin 1 23 11106678207.9) ├── G25: (hashJoin 2 24 289.9) (hashJoin 24 2 484.0) (hashJoin 3 23 2882.7) (hashJoin 23 3 62.7) (hashJoin 17 10 26205.0) (hashJoin 10 17 92.7) (lookupJoin 24 2 32.1) (lookupJoin 17 10 -8731.4)* (innerJoin 10 17 15623.4) (innerJoin 17 10 15623.4) (innerJoin 23 3 17185.8) (innerJoin 3 23 17185.8) (innerJoin 24 2 15623.4) (innerJoin 2 24 15623.4) ├── G26: (hashJoin 4 24 411.2) (hashJoin 24 4 36880.0) (hashJoin 12 23 2896.1) (hashJoin 23 12 4066.3) (hashJoin 18 10 26206.4) (hashJoin 10 18 493.0) (lookupJoin 24 4 -12099.9)* (lookupJoin 18 10 -8463.1) (innerJoin 10 18 1192983.6) (innerJoin 18 10 1192983.6) (innerJoin 23 12 1312282.1) (innerJoin 12 23 1312282.1) (innerJoin 24 4 1192983.6) (innerJoin 4 24 1192983.6) ├── G27: (hashJoin 2 26 30.4) (hashJoin 26 2 483.1) (hashJoin 4 25 123.5) (hashJoin 25 4 36879.0) (hashJoin 5 23 2882.6) (hashJoin 23 5 14.9) (hashJoin 19 10 26205.0) (hashJoin 10 19 87.9) (lookupJoin 26 2 -141.7) (lookupJoin 25 4 -12292.6) (lookupJoin 19 10 -8734.6)* (innerJoin 10 19 1561.4) (innerJoin 19 10 1561.4) (innerJoin 23 5 1717.7) (innerJoin 5 23 1717.7) (innerJoin 25 4 2417.7) (innerJoin 4 25 2417.7) (innerJoin 26 2 1561.4) (innerJoin 2 26 1561.4) ├── G28: (hashJoin 6 24 294.7) (hashJoin 24 6 1939.0) (hashJoin 13 23 2883.3) (hashJoin 23 13 222.8) (hashJoin 20 10 26205.1) (hashJoin 10 20 108.7) (lookupJoin 24 6 -452.9) (lookupJoin 20 10 -8720.7)* (innerJoin 10 20 62690.6) (innerJoin 20 10 62690.6) (innerJoin 23 13 68959.8) (innerJoin 13 23 68959.8) (innerJoin 24 6 62690.6) (innerJoin 6 24 62690.6) ├── G29: (hashJoin 2 28 4.0) (hashJoin 28 2 483.0) (hashJoin 6 25 7.0) (hashJoin 25 6 1938.0) (hashJoin 14 23 2882.6) (hashJoin 23 14 14.9) (hashJoin 21 10 26205.0) (hashJoin 10 21 87.9) (lookupJoin 28 2 -159.4) (lookupJoin 25 6 -645.6) (lookupJoin 21 10 -8734.6)* (innerJoin 10 21 1561.4) (innerJoin 21 10 1561.4) (innerJoin 23 14 1717.7) (innerJoin 14 23 1717.7) (innerJoin 25 6 126.1) (innerJoin 6 25 126.1) (innerJoin 28 2 126.1) (innerJoin 2 28 126.1) └── G30: (hashJoin 4 28 125.3) (hashJoin 28 4 36879.0) (hashJoin 6 26 35.3) (hashJoin 26 6 1938.1) (hashJoin 15 23 2882.6) (hashJoin 23 15 30.9) (hashJoin 22 10 26205.0) (hashJoin 10 22 89.5) (lookupJoin 28 4 -12291.4) (lookupJoin 26 6 -626.7) (lookupJoin 22 10 -8733.6)* (innerJoin 10 22 6268.2) (innerJoin 22 10 6268.2) (innerJoin 23 15 6895.1) (innerJoin 15 23 6895.1) (innerJoin 26 6 6268.2) (innerJoin 6 26 6268.2) (innerJoin 28 4 9704.0) (innerJoin 4 28 9704.0) - 1608: Delete Join Support
Adds support for multi-table deletes.
Dolt CI Tests: #5406Remaining Work:
Triggers: Trigger execution needs some refactoring in order to support: 1) updating GetField indexes in the trigger logic to account for a larger row coming into the TriggerExecutor when multiple tables are joined together, and 2) running triggers for multiple tables on the same c...
0.54.0
Merged PRs
dolt
- 5457: Panic fix for nil dolt env in multi repo env
- 5448: Add
from_table_nameandto_table_namecolumns todolt_diff_summarytable function- Also fixes
dolt_statussystem table output for renamed tables - Table name in
dolt diff --summaryCLI command for renamed table uses arrow syntax (i.e.from_table -> to_table)
- Also fixes
- 5440: go/store/nbs: file_table_persister: Rework PruneTableFiles so that writes can proceed while we cleanup the old files.
- 5438: go/store/nbs: file_table_persister: Add a mechanism for a table persister to clean up newly unused sources after a successful conjoin.
- 5413: add dolt_patch() stored procedure
The result ofdolt_patch()stored procedure is equivalent todolt diff -r sql.
The input todolt_patch()stored procedure isdolt_patch(<from_revision>, <to_revision>, [<tablename>]), which are optional 2 revisions and optional table names.
It does not support two and three dot diffs.
Only--cachedflag is supported for now.
It returns both schema and data diff result.
Error cases of not being able to get data diff go into warning.
go-mysql-server
- 1623: Fixed Issue #1621
When using the example server, we had primary key indexes disabled for the in-memory database, so this just enables them as that is what people would expect. - 1622: fix
/anddivoperations on value of decimal type column
The cases fixed are:- the scale of decimal type column is bigger than the value stored. For example, the decimal column type is
DECIMAL(25,10)and the value stored is4990. This value is evaluated with 0 scale, whereas this should be evaluated as value with scale of 10. - the
IntPart()function of decimal package returns 0 as undefined value for out of range values. This causes it hard to differentiate between cases where the final result is valid value of 0 and the final result is out of range value.
- the scale of decimal type column is bigger than the value stored. For example, the decimal column type is
- 1620: expose some parts of show create table statement for dolt usage
- 1619: Memo includes costs and stars best plan
- 1617: Adding privilege checks for binlog commands
Added support for binlog replication privilege checks, tests to assert dynamic privileges are only used at a global scope, and opChecker support for testing dynamic privileges. - 1615: update drop column logic to drop constraints first
Updates the ordering of the drop column logic to ensure that constraints always get checked for references and dropped when columns are dropped.
Closed Issues
0.53.2
Merged PRs
dolt
- 5428: Add support for using full length commit ids in hashof() procedure
- 5423: updates reset script to disable foreign_key_checks temporarily
Currently, when reset scripts run between Prepared Script Tests errors will occur as tables with foreign keys get dropped and re-added. This change disables foreign key checks while tables are being dropped and re-added as to avoid these foreign key errors. - 5421: Add new version of
dolt_diff_summarytable function
The old version of thedolt_diff_summarytable function was renamed todolt_diff_stat
This new version ofdolt_diff_summaryreturns a summary of changed tables between two refsus_jails> select * from dolt_diff_summary("WORKING", "taylor/test"); +-----------------------------+-----------+-------------+---------------+ | table_name | diff_type | data_change | schema_change | +-----------------------------+-----------+-------------+---------------+ | jails | modified | true | false | | test | dropped | false | true | | inmate_population_snapshots | added | true | true | +-----------------------------+-----------+-------------+---------------+ 3 rows in set (0.01 sec)
- 5420: Add new version of
--summaryoption todolt diff
The old version ofdolt diff --summarywas renamed todolt diff --stat
This new version ofdolt diff --summaryreturns a summary of what tables changed/how between two refsus-jails % dolt diff --summary +-----------------------------+-----------+-------------+---------------+ | Table name | Diff type | Data change | Schema change | +-----------------------------+-----------+-------------+---------------+ | inmate_population_snapshots | dropped | true | true | | jails | modified | true | false | | test | added | false | true | +-----------------------------+-----------+-------------+---------------+ - 5415: Bump golang.org/x/text from 0.3.3 to 0.3.8 in /go/gen/proto/dolt/services/eventsapi
Bumps golang.org/x/text from 0.3.3 to 0.3.8.Commits
434eadclanguage: reject excessively large Accept-Language strings23407e7go.mod: ignore cyclic dependency for taggingb18d3ddsecure/precis: replace bytes.Compare with bytes.Equal795e854all: replace io/ioutil with io and os packageb0ca10finternal/language: bump script types to uint16 and update registryba9b0e1go.mod: update x/tools to HEADd03b418A+C: delete AUTHORS and CONTRIBUTORSb4bca84language/display: fix Tag method commentea49e3ego.mod: update x/tools to HEAD78819d0go.mod: update to golang.org/x/text v0.1.10- Additional commits viewable in compare view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/dolthub/dolt/network/alerts). - 5409: Rename diff summary to diff stat
CLI:dolt diff --summary->dolt diff --stat
SQL:dolt_diff_summary->dolt_diff_stat - 5408: binlog bug fixes – stripping checksums and applying
Queryflags
This PR fixes a couple of issues from binlog testing:
Now that we have visibility to the additional flags in theQueryflagsQuerybinlog event (dolthub/vitess#220), this PR adds handling for those flags.Checksum support
To receive messages from the primary whenbinlog_checksumsare enabled, the replica now sends a handshake signal to the primary and strips off any received checksum on binlog events. This lets us remove the requirement to disable checksums on the primary in order to use Dolt's binlog replication.Password auth for tests
This PR also includes a change in the test code for the replica connect to the primary with a password, to ensure we're testing password auth. - 5407: Restored some needed images
- 5403: Pruned docs directory. Renamed it images.
It was stale. - 5393: go/store/nbs: use chunk journal index to speedup bootstrapping
- 5360: go/doltcore/migrate: write table for migrated commit mapping
Changesdolt migrateto write a special branch calledmigrated_commitscontaining a single tablemappingwith the schema:CREATE TABLE `mapping` ( `old_commit_hash` varchar(16383) NOT NULL, `new_commit_hash` varchar(16383), PRIMARY KEY (`old_commit_hash`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_bin
- 5335: Line-based diffs for modified rows
This adds special git-style diffs for stored procedures. There are two modes. The default displays line changes with the familiar+and-prepended to each line. The second requires the flag--proc-in-place, and shows the changes in-place with the color signifying the change.
go-mysql-server
- 1614: Bump golang.org/x/text from 0.3.7 to 0.3.8
Bumps golang.org/x/text from 0.3.7 to 0.3.8.
0.53.1
Merged PRs
dolt
- 5398: go/commands/engine: get NBF from database provider
- 5396: go/commands/engine: set analyzer parallelism to 1
- 5391: Fixes comments in entrypoint
Fixes comments in entrypoint
Actually server starts at line 151 https://github.com/dolthub/dolt/pull/5391/files#diff-7cfc2aa3796f096105480a1a669658cfc12d2688b6300eef89d9ce94eef44e26L151 - 5386: go/store/nbs: aws_table_persister.go: Fix conjoin code to not error on a single short Read() by using io.ReadFull.
In #5307 we started returning a real io.Reader for chunkSource.reader(ctx). That means the Read() calls can come back short if they are directly attached to a net.TCPConn, for example. It is not an error for a Read() to come back short. Use io.ReadFull to correctly express the intent in the conjoin code for AWS remotes.
Fixes a bug where doltremoteapi fails commits sometimes. - 5383: Emit schema elements from dolt_schemas table as their DDL equivalents during
dolt dump
Fixes #5318 - 5381: Bump golang.org/x/net from 0.2.0 to 0.7.0 in /go
Bumps golang.org/x/net from 0.2.0 to 0.7.0.Commits
8e2b117http2/hpack: avoid quadratic complexity in hpack decoding547e7edhttp2: avoid referencing ResponseWrite.Write parameter after returning39940adhtml: parse comments per HTML spec87ce33ego.mod: update golang.org/x dependencies415cb6dall: fix some comments7e3c19call: correct typos in comments296f09ahttp2: case insensitive handling for 100-continuef8411danettest: fix tests on dragonfly and js/wasm8e0e7d8go.mod: update golang.org/x dependencies7805fdchttp2: rewrite inbound flow control tracking- Additional commits viewable in compare view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/dolthub/dolt/network/alerts). - 5380:
dolt_diffrespects qualified database
This change corrects thedolt_diffsystem table to use the qualified database if provided instead of always defaulting to the session's current database.
fixes: #5226 - 5374: go/store/nbs: Fix some quota leaks in conjoin, GC.
Adds a paranoid mode where we noisely detect unclosed table files. The mode can be enabled by setting an environment variable.
Fixes some unit tests, including all of go/store/... to run cleanly under the paranoid mode.
Changes the quota interface to:- Release |sz int| bytes instead of requiring a []byte with the correct length to show up.
- Work with |int| instead of |uint64|, since MaxUint64 is never allocatable and MaxInt32+z is only allocatable on 64-bit platforms.
- Not return an error on Release(). Implementations should not fail to release quota.
- 5373: go/store/nbs: rename chunks journal constants in preparation for jour…
…nal index - 5368: Make dropping and adding the same view produce no diff
Fixes #5313
Also made dropping all views (and triggers) cause the dolt_schemas table to delete itself, so that you can create views and then drop them without causing a diff. - 5367: ArtifactEditor now resets after flushing
ArtifactEditor held on to keys after flushing because it was a value receiver. Under the capacity threshold, constraint violations only flush once and we bypass this bug. For >50k constraint violations, every incremental CV will write the previous duplicate 40k CV's. - 5365: Handle multiple lines in tabular diffs
This changes our tabular output so that multiline strings display in a consistent manner. This will allow us to properly display text diffs as previewed in #5335. Modifications to that PR will follow this one.
This is how diffs will look like with this PR:

Performance-wise, I tested aSELECTover 5000 rows with two text columns containing all multiline strings for every row, and I averaged around 10% faster than the old implementation. We now sample every 100 rows rather than only the first 100, and this makes each local chunk of 100 rows visually consistent. In addition, I've cut down on the amount of formatting that is done to the columns, which is what I believe is the source of the speed increase.
As a side benefit,dolt sql-clientuses the same tabular output logic, so now our SQL client will handle multiline strings from any compatible database, not just Dolt. The default MySQL client behaves like our old implementation, so I think this is another cool win. - 5362: Tweaks to README for binlog replication launch
- 5353: Bump github.com/aws/aws-sdk-go from 1.33.0 to 1.34.0 in /go
Bumps github.com/aws/aws-sdk-go from 1.33.0 to 1.34.0.Changelog
Sourced from github.com/aws/aws-sdk-go's changelog.
Release v1.34.0 (2020-08-07)
Service Client Updates
service/glue: Updates service API and documentation- AWS Glue now adds support for Network connection type enabling you to access resources inside your VPC using Glue crawlers and Glue ETL jobs.
service/organizations: Updates service API and documentation- Documentation updates for some new error reasons.
service/s3: Updates service documentation and examples- Updates Amazon S3 API reference documentation.
service/sms: Updates service API and documentation <...
0.53.0
Merged PRs
dolt
- 5350: Dolt fixes for empty column projections
- 5348: fix --track for dolt_checkout
--trackis not working withcall dolt_checkoutas expected. This change updatesdolt_checkoutto mirror the before ofdolt checkoutin the CLI.
fixes: #5189 - 5340: go/store/nbs: Optimize memory and disk utilization during GC.
- 5331: Add child refs to memtable only when a chunk was added.
Fixes #5301 - 5330: Fixed race when multiple clients attempt to connect to the same branc…
…h the first time a replica fetches it - 5326: fixes timing for multi statement queries
This change fixes timing for multi statement queries to print the time to execute the query instead of the time to print the results or the time since the first query started. - 5320: store/datas: fix dropped errors
This fixes three droppederrvariables in thestore/dataspackage. - 5319: don't create new index if matching on primary key
- 5315: slightly better prefix compare
A slight performance improvement forfindPrefixwhen looking through table indexes that avoids amake()call andbytes.Compare - 5312: add
--trackflag fordolt_branch()procedure
It is equivalent as using--trackflag of CLIdolt branchcommand. - 5311: makes -f default behavior for dolt fetch
This change makes force fetch the default behavior fordolt fetchand removes the-fforce flag to prevent errors when fetching after a force push.
fixes: #4943 - 5308: Allow the pprof server to handle connections from non-localhost
Allow the pprof server to handle connections from non-localhost machines.
This change is necessary to reach a Docker pprof server from host machine. - 5306: dolt_remote_branches table
New system table shows remote branches with same schema as existingdolt_branchestable - 5302: fix panic for unexpected json file format
returns error message instead of panic - 5295: Trim compare string prefix
this improves a low-selectivity index scan for a customer query. - 5294: add bats test for binary string encoded to utf8
Depends on dolthub/go-mysql-server#1583
DataGrip sets thecharacter_set_resultssystem variable toutf8, which raw binary strings cannot be encoded into. MySQL returns binary type strings in hex format. - 5279: reuse cursor when verifying fks using secondary indexes
- 5252: Fix int overflow on 32-bit architectures
See also dolthub/vitess#216
$ GOARCH=386 GOOS=linux go build ./... # github.com/dolthub/dolt/go/store/skip store/skip/list.go:152:21: maxCount (untyped int constant 4294967294) overflows int
- 5220: Dolt Binlog Replication
Initial support for Dolt binlog replication from a MySQL server.
Includes support for:- Configuring a replica's source –
CHANGE REPLICATION SOURCE TO ... - Configuring optional replication filtering –
CHANGE REPLICATION FILTER ... - Showing a replica's status –
SHOW REPLICA STATUS; - Starting / stopping replication –
START REPLICA;,STOP REPLICA; - Reseting a replica –
RESET REPLICA [ALL];
Notable limitations/restrictions: - Only the default ("") replication channel is supported
- Requires row-based replication with GTID-based auto-positioning is supported
- A subset of filtering options are present (i.e.
REPLICATE_DO_TABLE,REPLICATE_IGNORE_TABLE); more can be added upon customer request - Replication privileges are not checked yet; I will follow up with this shortly
Testing: - Integration tests currently live alongside the code, but since they take ~70s to run all of them, I'm thinking about moving them to the integration-tests directory and setting up a separate GitHub actions job to run them. It is convenient that they currently get run with all the storage format variants though.
Documentation: - dolthub/docs#1177
- Configuring a replica's source –
- 5126: Bump knex from 1.0.7 to 2.4.0 in /integration-tests/mysql-client-tests/node
Bumps knex from 1.0.7 to 2.4.0.Release notes
Sourced from knex's releases.
2.4.0
New features:
Bug fixes
- Insert array into json column #5321
- Fix unexpected max acquire-timeout #5377
- Fix: orWhereJson #5361
- MySQL: Add assertion for basic where clause not to be object or array #1227
- SQLite: Fix changing the default value of a boolean column in SQLite #5319
Typings:
- add missing type for 'expirationChecker' on PgConnectionConfig #5334
2.3.0
New features:
- PostgreSQL: Explicit jsonb support for custom pg clients #5201
- SQLite: Support returning with sqlite3 and better-sqlite3 #5285
- MSSQL: Implement mapBinding mssql dialect option #5292
Typings:
- Update types for TS 4.8 #5279
- Fix typo #5267
- Fix WhereJsonObject withCompositeTableType #5306
- Fix AnalyticFunction type #5304
- Infer specific column value type in aggregations #5297
2.2.0
New features:
- Inline primary key creation for postgres flavours #5233
- SQLite: Add warning for undefined connection file #5223
- MSSQL: Add JSON parameter support for connection #5200
Bug fixes:
- PostgreSQL: add primaryKey option for uuid #5212
Typings:
2.1.0 - 26 May, 2022
... (truncated)
Changelog
Sourced from knex's changelog.
2.4.0 - 06 January, 2022
New features:
Bug fixes
- Insert array into json column #5321
- Fix unexpected max acquire-timeout #5377
- Fix: orWhereJson #5361
- MySQL: Add assertion for basic where clause not to be object or array #1227
- SQLite: Fix changing the default value of a boolean column in SQLite #5319
Typings:
- add missing type for 'expirationChecker' on PgConnectionConfig
0.52.20
Merged PRs
dolt
- 5307: Improve the performance of clone from AWS and GCS remotes.
- 5300: go/doltcore/doltdb: catch panic in gc concurrency tests
- 5291: update query timing to be accurate when using dolt sql-client
related: dolthub/go-mysql-server#1581
fixes: #5241 - 5286: allow different format options for dolt branch with track flag
Git allows:
git branch feature --track origin/feature
git branch --track request origin/feature
git branch feature --track=direct origin/feature
git branch --track=direct feature origin/feature
for creating new branch that tracks given remote tracking branch
does not allow:
git branch feature --track direct origin/feature, but Dolt allows it as--track directand--track=directare considered the same - 5282: go/store/datas/pull: try to avoid unbounded growth of outstanding absent set
- 5274, 5273, 5270, 5269: Improvements to prepare for reenabling
call dolt_gc().
go-mysql-server
- 1580: Fix panic by rewriting how we move filter conditions up.
Fixes #5214 - 1576: New analyzer rule to replace count(*) with count(1) wherever it is found
This fixes #5171
Closed Issues
- 4216: Support additional Git ancestry syntax
- 5241: The dolt sql-client query timings always show 0.00 sec
- 5187:
dolt branch --trackdoes not create a new branch - 5171: translate count(*) to count(1) automatically
- 5292: Importing a dump using
dolt sqlcreates an unexpected new database instead of using cwd
Latency
| Read Tests | MySQL | Dolt | Multiple |
|---|---|---|---|
| covering_index_scan | 1.96 | 2.81 | 1.4 |
| groupby_scan | 12.3 | 16.41 | 1.3 |
| index_join | 1.16 | 4.57 | 3.9 |
| index_join_scan | 1.12 | 3.96 | 3.5 |
| index_scan | 30.26 | 52.89 | 1.7 |
| oltp_point_select | 0.15 | 0.48 | 3.2 |
| oltp_read_only | 2.97 | 8.58 | 2.9 |
| select_random_points | 0.3 | 0.75 | 2.5 |
| select_random_ranges | 0.35 | 1.14 | 3.3 |
| table_scan | 30.81 | 61.08 | 2.0 |
| types_table_scan | 70.55 | 186.54 | 2.6 |
| reads_mean_multiplier | 2.6 |
| Write Tests | MySQL | Dolt | Multiple |
|---|---|---|---|
| bulk_insert | 0.001 | 0.001 | 1.0 |
| oltp_delete_insert | 2.76 | 11.87 | 4.3 |
| oltp_insert | 1.44 | 2.97 | 2.1 |
| oltp_read_write | 5.09 | 17.95 | 3.5 |
| oltp_update_index | 1.42 | 5.47 | 3.9 |
| oltp_update_non_index | 1.37 | 5.99 | 4.4 |
| oltp_write_only | 2.22 | 9.06 | 4.1 |
| types_delete_insert | 2.97 | 11.87 | 4.0 |
| writes_mean_multiplier | 3.4 |
| Overall Mean Multiple | 2.9 |
|---|
0.52.19
Merged PRs
dolt
- 5280: go/store/datas/pull: trim memory footprint for puller hash sets
- 5275: verify fk with secondary index even when empty
The optimization for verifying foreign keys using secondary indexes isn't used when the tables are completely different (so only additions to the merge) or if the index potentially didn't exist before merging. Rather than defaulting to using the primary key to verify the foreign keys, it's possible to just create an empty index and use the faster secondary index to verify.
This includes code from #5253 - 5253: verify fk with secondary when available
We resolve foreign key conflicts by:- diffing a before/after index to generate keys
- constructing a lookup key for the reference index
- perform a lookup into the reference index
- report a conflict if reference dependency is missing
For huge tables, we want thefromkeys to be ordered relative to thetoindex. When this is not the case, thetolookup will be random access and read a chunk from disk. Millions of random access lookups that all IO chunks from disk adds a ~1000x perf hit for validating a single FK relative to sorted lookups.
This PR does a secondary key diff -> secondary foreign key lookup. The diffs are ordered relative to one-another, and this usually makes big merges faster.
The main downside is that constraint violations still require a primary key lookup to backfill missing columns, which will usually be out-of-order relative to the secondary key iter order. Keyless fks are also excluded from the optimization for now.
go-mysql-server
- 1574: Subquery caching correctness
Rerunning cacheSubqueries recursively on subquery expressions led to an incorrect cacheability labelling. The rule should only be run once on a top-level tree. - 1573: add support for
SHOW GLOBAL VARIABLES - 1570: Fix panic by rewriting how we move filter conditions up.
Fix panic by rewriting how we move filter conditions up.
Fixes #5214
vitess
- 218: Fixed bug in COM_FIELD_LIST command implementation for table names that need quoting in a statement
Fixes #5151
Fixes #4464 - 217: Adding implicit string concatenation for a variable assignment needed for binlog replication
When amysqldumpis taken for a database tracking GTIDs, it outputs GTID tracking information via a line like:In MySQL 8.0+, the MySQL comment inserts aSET @@GLOBAL.GTID_PURGED= /*!80000 '+'*/ 'beabe64c-9dc6-11ed-8021-a0f9021e8e70:1-126';
'+'between the=and the assignment value, which gets implicitly concatenated with the adjacent quoted string in MySQL.
GMS/Dolt doesn't support this implicit string concatenation, but I wanted to get this query to work – otherwise customers will have to manually edit their mysql dump files to remove this syntax before it can be imported into Dolt. I didn't think it was worth taking on the larger change right now to support implicit quoted string concatenation everywhere (#5232), so instead, I added special handling for this case since it's important for the binlog setup experience. - 216: Fix int overflow on 32-bit architectures
$ GOARCH=386 GOOS=linux go build ./... # github.com/dolthub/vitess/go/bucketpool go/bucketpool/bucketpool.go:57:15: math.MaxUint32 (untyped int constant 4294967295) overflows int
- 215: Adding two new binlog replication statements:
RESET REPLICAandCHANGE REPLICATION FILTERS
Closed Issues
- 5151: mysql client's
information_schemaread with table names containing-can put the client in a bad state. - 4464: MySQL client with autocomplete enabled crashes connecting to Dolt if a table is named a reserved word like
rows - 5214: dolt panic during JOIN
- 5175: High load in 1) SELECT queries when we have 7000 rows and 21000 branches 2) create extra branches when we've already have 21000
- 5080: Can't edit table's data in navicat
Latency
| Read Tests | MySQL | Dolt | Multiple |
|---|---|---|---|
| covering_index_scan | 2.0 | 2.81 | 1.4 |
| groupby_scan | 12.75 | 16.71 | 1.3 |
| index_join | 1.16 | 4.57 | 3.9 |
| index_join_scan | 1.14 | 3.96 | 3.5 |
| index_scan | 30.26 | 53.85 | 1.8 |
| oltp_point_select | 0.15 | 0.49 | 3.3 |
| oltp_read_only | 2.97 | 8.58 | 2.9 |
| select_random_points | 0.3 | 0.75 | 2.5 |
| select_random_ranges | 0.35 | 1.14 | 3.3 |
| table_scan | 30.81 | 63.32 | 2.1 |
| types_table_scan | 70.55 | 189.93 | 2.7 |
| reads_mean_multiplier | 2.6 |
| Write Tests | MySQL | Dolt | Multiple |
|---|---|---|---|
| bulk_insert | 0.001 | 0.001 | 1.0 |
| oltp_delete_insert | 3.02 | 13.22 | 4.4 |
| oltp_insert | 1.5 | 3.13 | 2.1 |
| oltp_read_write | 5.18 | 18.28 | 3.5 |
| oltp_update_index | 1.55 | 6.09 | 3.9 |
| oltp_update_non_index | 1.47 | 6.67 | 4.5 |
| oltp_write_only | 2.35 | 9.39 | 4.0 |
| types_delete_insert | 3.02 | 13.22 | 4.4 |
| writes_mean_multiplier | 3.5 |
| Overall Mean Multiple | 3.0 |
|---|
0.52.18
Merged PRs
dolt
- 5271: add another layer of batching
Closed Issues
- 5175: High load in 1) SELECT queries when we have 7000 rows and 21000 branches 2) create extra branches when we've already have 21000
- 5166: Join between
dolt_loganddolt_commit_ancestorsresults in go panic - 5204: filter on database and table names should be case-insensitive
- 3681: set @@persist doesn't update session values
Latency
| Read Tests | MySQL | Dolt | Multiple |
|---|---|---|---|
| covering_index_scan | 1.93 | 2.71 | 1.4 |
| groupby_scan | 12.3 | 16.71 | 1.4 |
| index_join | 1.18 | 4.65 | 3.9 |
| index_join_scan | 1.14 | 3.96 | 3.5 |
| index_scan | 30.81 | 52.89 | 1.7 |
| oltp_point_select | 0.15 | 0.49 | 3.3 |
| oltp_read_only | 2.97 | 8.43 | 2.8 |
| select_random_points | 0.3 | 0.75 | 2.5 |
| select_random_ranges | 0.35 | 1.14 | 3.3 |
| table_scan | 30.81 | 62.19 | 2.0 |
| types_table_scan | 69.29 | 186.54 | 2.7 |
| reads_mean_multiplier | 2.6 |
| Write Tests | MySQL | Dolt | Multiple |
|---|---|---|---|
| bulk_insert | 0.001 | 0.001 | 1.0 |
| oltp_delete_insert | 2.91 | 15.0 | 5.2 |
| oltp_insert | 1.37 | 3.19 | 2.3 |
| oltp_read_write | 5.09 | 18.61 | 3.7 |
| oltp_update_index | 1.5 | 7.3 | 4.9 |
| oltp_update_non_index | 1.47 | 8.28 | 5.6 |
| oltp_write_only | 2.26 | 9.39 | 4.2 |
| types_delete_insert | 2.97 | 17.32 | 5.8 |
| writes_mean_multiplier | 4.1 |
| Overall Mean Multiple | 3.2 |
|---|