Merged PRs
dolt
- 8166: [kvexec] Fix panic in non-covering strict lookup
I missed a test case innonCovLaxSecondaryLookupGen
. I tried to add more tests surrounding the specific panic query here: dolthub/go-mysql-server#2607.
Also rename therowexec
tokvexec
. - 8139: Feature: Log binlog events to disk
Major changes:- Moved binlogging initialization code from
sqlengine
toserver
, so that bin logging only happens when insql-server
mode. binlogProducer
now sends events to the newlogManager
type that writes binlog events to files on disk.binlogStreamer
now reads events from those logs and streams them to replicas (instead of receiving events directly frombinlogProducer
).DoltBinlogPrimaryController
now validates that the missing GTIDs from a replica are available in the binlog files and sends an error if the primary doesn't have enough binlog data on disk to get a replica in sync.
- Moved binlogging initialization code from
go-mysql-server
- 2606: [memo] assume self-join stats cardinality continuity
Self-join stats estimation is particularly expensive because all of the buckets exactly overlap. If the index is unique, the cardinality distribution will not change. If the index is non-unique, the cardinality will expand proportional torowCount/distinctCount
.
sysbench perf here: #8159before BenchmarkOltpJoinScan-12 1766 694524 ns/op 462834 B/op 8240 allocs/op after BenchmarkOltpJoinScan-12 2460 481166 ns/op 193569 B/op 7129 allocs/op
vitess
- 359: fix detection of multi-statements in
ComPrepare
Currently, preparing multi-statements is not supported; so we can't prepare a query likeselect ?; select ?;
.
However, the check for this condition just looked for any characters after the first;
, which meant that queries likeselect ?; \n
would incorrectly throw an error.
This was made apparent using the Prisma ORM, which runs the query:The above query ends in a newline character.SELECT TABLE_NAME AS view_name, VIEW_DEFINITION AS view_sql FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = ?;
The fix is to useSplitStatementToPieces()
, which trims these white space characters, and check if there's exactly one piece; this was taken from the vitessio repo: https://github.com/vitessio/vitess/blob/main/go/mysql/conn.go#L1204
fixes #8157 - 358: Feature: parser support for
PURGE BINARY LOGS
syntax
https://dev.mysql.com/doc/refman/8.4/en/purge-binary-logs.html - 357: Bug fix: Send an error response when the server fails to handle
COM_BINLOG_DUMP_GTID
A MySQL primary needs to be able to send back an error response when handling theCOM_BINLOG_DUMP_GTID
command. Previously, when the integrator returned an error, it was logged in the primary server logs, but it was not being sent back to the replica who sent the command. This change causes an error packet to be sent to the replica, containing the details of the error the integrator returned.
This change is difficult to test in isolation, but I have tests indolt
that will exercise this codepath.