Merged PRs
dolt
- 7644: go/store/datas/pull: pull_chunk_fetcher: Move chunk fetching to a streaming interface instead of batch.
We want to better pipeline I/O when pulling from a remote, and moving a streaming interface where storage can see more of the addresses that are needed at once will allow us to achieve it.
For now, we implement the streaming interface just by calling the existing batch get interface. - 7643: [no release notes] odd n ends clean up
Random things I cleaned up while digging into NBS. All NoOp. - 7637:
innodb_autoinc_lock_mode
tests
companion pr: dolthub/go-mysql-server#2410 - 7629: refactor tablespec
Use changes to handle table option parsing, and apply auto_increment table option.
Additionally, changesresetScripts()
indoltHarness
to not drop and recreate all auto_increment tables.
This step is not necessary, and causes problems now because we actually display and readAUTO_INCREMENT
table option in show create table statements.
Contains changes from: #7631
Companion PR: dolthub/go-mysql-server#2401 - 7582: add dolt_hashof_table func and dolt_hashof (Deprecate hashof)
I created this function for my GDC demo. We can talk about pros and cons of integrating this back to main. - 7579: use system variable interface
Depends on GMS PR: dolthub/go-mysql-server#2375 - 7572: go/store/datas/pull: pull_table_file_writer.go: Optimize pull/push to allow for concurrent table file uploads.
Move management of the upload workers and the table file writer to its own struct which is testable in isolation.
go-mysql-server
- 2412: New interface for binlog primary callbacks
First pass on connecting the GMS layer with the Dolt layer for handling callbacks when the SQL server is acting in binlog primary mode, through the newBinlogPrimaryController
interface. This new interface pretty closely mirrors the existing callback interface for replica callbacks, theBinlogReplicaController
interface.
Related to #7512 - 2411: implement
json_search()
MySQL Docs: https://dev.mysql.com/doc/refman/8.3/en/json-search-functions.html#function_json-search - 2410: Adding system variable
innodb_autoinc_lock_mode
We currently only supportinnodb_autoinc_lock_mode = 2
, not0
or1
.
MySQL Docs:
https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html
related: #7634 - 2404: Improve handling of unsigned and decimal types in JSON
Fixes dolthub/go-mysql-server#2391
MySQL's JSON type differs from standard JSON in some important ways. It supports types not supported in standard JSON, such as separate types for integers and floats, an unsigned int type, and a decimal type.
Prior to this PR, we would convert values to JSON by using theencodings/json
package to marshall the value to a JSON string and then unmarshall it to a go map. This is not only slow, but it's incorrect for these additional types.
The main purpose of this PR is to add special handling for these types that allow them to be stored in JSON documents. We also avoid generating and parsing JSON in places where it's not actually necessary, and fix bugs where decimals get incorrectly converted into strings, or unsigned ints get converted into signed ints.
Finally, this fixes an issue where we send incorrect bytes for JSON-wrapped decimal values along the wire. - 2403: fix dbName not being used in the example
This PR makes sure thatdbName
in the example is actually being used, instead of having a hardcoded "mydb" increateTestDatabase
.
fixes #2402 - 2401: refactor and parse table options, support auto_increment table option
Table Options are now parsed as structs, so we can read/use some of the variables.
Character Sets, Collations, Create Table, TableSpec, etc. have been refactored.
Additionally, this PR adds support to parse and use the auto_increment table option.
TODO:CREATE TABLE ... LIKE ...
needs to preserve table opts, like commentsalter table add column ... auto_increment
does not work when there are already rows
Companion PR: dolthub/vitess#322
- 2399: fix custom insert ordering for pk
fixes dolthub/go-mysql-server#2397 - 2398: fix in-memory implementation of RenameTable to read from session
The in-memory implementation of RenameTable uses data from the BaseDatabase, instead of reading it from the session.
This is problematic when there are multiple alter statements.
Additonally, includes some small refactor so all functions are pointer receiver instead of a mix.
fixes dolthub/go-mysql-server#2396 - 2394: Bug fix: Set non-boolean system variable enum values to 'ON' or 'OFF'
We were automatically convertingON
andOFF
values to totrue
andfalse
when setting a system variable, which made it impossible to set system variables to those enum values. For example:SET @@GLOBAL.gtid_mode='ON'; Variable 'gtid_mode' can't be set to the value of 'true'
- 2393: Restored and refactored missing functionality required by Dolt
- 2375: create system variable interface
This PR createsSystemVariable
andSystemVariableScope
interfaces.
This allows doltgres to use these interfaces for defining and handling all the configuration parameters.
TheSystemVariable
struct is renamed toMysqlSystemVariable
.
TheSystemVariableScope
byte is renamed toMysqlSVScopeType
.
vitess
- 324: Ensure that float values parsed into expressions will always be parsed back into floats, not decimals.
- 323: Parser support for
SOURCE_AUTO_POSITION
When acting as a replica, Dolt implicitly assumesSOURCE_AUTO_POSITION
is set to1
. This adds parser support so that it can be explicitly specified. Adding this so that when we're configuring a MySQL replica, we can use the same setup code without having to special case this parameter. - 322: parse table options into struct
Instead of just making a large string that is reparsed in GMS, parse table_options into a list of structs similar to how we handle index_options and constraint_options. - 321: [ast] walk tableFuncExpr for bind variables
- 320: Updates for binlog primary protocol
- Porting over more code from
vitess.io/vitess
– support for theCOM_REGISTER_REPLICA
command. - Fixing a bug in Vitess' deserialization of the
COM_BINLOG_DUMP_GTID
command. - Adding some
String
functions to help with debugging. - Exposing the ability to flush a connection's buffer, as a short-term workaround for needing to flush the buffer more frequently than at the end of the connection in order to support `COM_BINLOG_DUMP_GTID'.
- Porting over more code from
- 317: Port: Support for Vitess server to send binlog events
Porting over support from the main Vitess repo for a server to send back binlog events over a connection. Also includes support for handling theCOM_BINLOG_DUMP_GTID
command.
Related to #7512
Closed Issues
- 7641: Does it support connecting to existing MySQL or linking to TDSQL
- 5486: Ability to "project" schema at a commit onto data at another commit
- 7630: Add topic 'mariadb' to GitHub repository
- 7621: Migrate
dolt gc
to SQL - 2402: Consistent usage of variables in the example
- 2391: Potential regression: number cast to JSON no longer read as float
- 2396: Running multiple migrations in a transaction
- 2397: Primary key column order changes column order on insert
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.02 | 1.5 |
groupby_scan | 13.46 | 17.63 | 1.3 |
index_join | 1.39 | 5.09 | 3.7 |
index_join_scan | 1.32 | 2.22 | 1.7 |
index_scan | 35.59 | 63.32 | 1.8 |
oltp_point_select | 0.18 | 0.48 | 2.7 |
oltp_read_only | 3.43 | 8.13 | 2.4 |
select_random_points | 0.33 | 0.78 | 2.4 |
select_random_ranges | 0.39 | 0.94 | 2.4 |
table_scan | 35.59 | 63.32 | 1.8 |
types_table_scan | 74.46 | 176.73 | 2.4 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.98 | 7.04 | 0.9 |
oltp_insert | 3.75 | 3.49 | 0.9 |
oltp_read_write | 8.43 | 16.12 | 1.9 |
oltp_update_index | 3.82 | 3.62 | 0.9 |
oltp_update_non_index | 3.82 | 3.55 | 0.9 |
oltp_write_only | 5.37 | 8.13 | 1.5 |
types_delete_insert | 7.7 | 7.84 | 1.0 |
writes_mean_multiplier | 1.1 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 101.78 | 22.7 | 5.0 |
tpcc_tps_multiplier | 5.0 |
Overall Mean Multiple | 2.77 |
---|