1.35.4
Merged PRs
dolt
- 7617: go/libraries/doltcore/merge: fulltext_rebuild.go: Add some comments, refactor some things into functions, even if they are still too big.
- 7616: [sqle] don't panic reading history table
Found an issue with the history table while testing GORM. It's specific to the ComPrepare interface, this doesn't trigger with a simple PREPARE query.DEBU[0197] preparing query paramsCount=2 query="SELECT column_name, column_default, is_nullable = 'YES', data_type, character_maximum_length, column_type, column_key, extra, column_comment, numeric_precision, numeric_scale , datetime_precision FROM information_schema.columns WHERE table_schema = ? AND table_name = ? ORDER BY ORDINAL_POSITION" statementId=2 ERRO[0197] mysql_server caught panic: interface conversion: sql.Table is *sqle.WritableDoltTable, not *sqle.AlterableDoltTable /Users/maxhoffman/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.18.1-0.20240313225114-4a2f2300d770/sql/planbuilder/parse.go:169 (0x101612ae7) com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).BindOnly.func1: panic(r) /usr/local/go/src/runtime/panic.go:914 (0x1000d2187) gopanic: done = runOpenDeferFrame(d) /usr/local/go/src/runtime/iface.go:263 (0x1000a516f) panicdottypeE: panic(&TypeAssertionError{iface, have, want, ""}) /usr/local/go/src/runtime/iface.go:273 (0x1000a5128) panicdottypeI: panicdottypeE(t, want, iface) /Users/maxhoffman/go/github.com/dolthub/dolt/go/libraries/doltcore/sqle/database.go:357 (0x101a1f1a7) com/dolthub/dolt/go/libraries/doltcore/sqle.Database.getTableInsensitive: return NewHistoryTable(baseTable.(*AlterableDoltTable).DoltTable, db.ddb, head), true, nil
- 7615: [sqle] Allow bindvars in most function constructors
This fixes all but thediff_table()
function I think. That requires heavier refactoring to support prepared statements. - 7610: Optimize full-text to selectively rebuild
This changes the Full-Text rebuild process to only trigger on tables that were changed in both roots (ours and theirs), rather than rebuilding every time a merge is performed regardless of what was actually changed. The rules here are fairly permissive, in that if a parent table or any of the indexed child tables are changed in both, then we rebuild all Full-Text indexes for that table. I chose this behavior out of caution, as dual changes in a single child table is probably due to some kind of renaming, so it's safer to rebuild everything for that table. - 7609: Drop the nbs.addr type in favor of hash.Hash type
These two types were essentially the same, with the addition of the Prefix and Suffix methods to hash.Hash they are
the same. - 7592: go/store/datas/pull: Restore puller optimization for parallel HasMany calls. Fix crash in pull_chunk_tracker.
go-mysql-server
- 2393: Restored and refactored missing functionality required by Dolt
- 2392: implement
sql_mode = 'NO_AUTO_VALUE_ON_ZERO'
This PR implements the sql_mode NO_AUTO_VALUE_ON_ZERO.
This makes it so that 0 values (not NULL) do not increment the auto_increment counter.
MySQL Docs: https://dev.mysql.com/doc/refman/8.3/en/example-auto-increment.html
fixes #7600 - 2390: Remove the NewDefaultServer, which doesn't work for any included session implementation
Fixes dolthub/go-mysql-server#2364
Added amemory.NewSessionBuilder
method, now used in the example code. - 2380: Stubbing out support for
COM_BINLOG_DUMP_GTID
command
Stubbing out support for two newmysql.Handler
methods to support streaming binlog events from a server to a client.
Depends on Vitess PR: dolthub/vitess#317
Related to #7512
vitess
- 319: make constraint name optional for primary key
fixes #7601 - 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
- 7604: wikipedia import into mediawiki can consistently produce a Dolt deadlock
- 7600: Specifying an AUTO_INCREMENT primary key results in spurious
duplicate primary key given
error - 7602: Conditionally creating a table in a script produces index already exists error
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.97 | 1.4 |
groupby_scan | 12.98 | 17.32 | 1.3 |
index_join | 1.32 | 5.09 | 3.9 |
index_join_scan | 1.25 | 2.18 | 1.7 |
index_scan | 33.72 | 63.32 | 1.9 |
oltp_point_select | 0.17 | 0.48 | 2.8 |
oltp_read_only | 3.36 | 7.98 | 2.4 |
select_random_points | 0.32 | 0.77 | 2.4 |
select_random_ranges | 0.38 | 0.94 | 2.5 |
table_scan | 34.33 | 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 | 6.91 | 0.9 |
oltp_insert | 3.75 | 3.43 | 0.9 |
oltp_read_write | 8.28 | 15.83 | 1.9 |
oltp_update_index | 3.82 | 3.55 | 0.9 |
oltp_update_non_index | 3.82 | 3.49 | 0.9 |
oltp_write_only | 5.37 | 7.98 | 1.5 |
types_delete_insert | 7.7 | 7.7 | 1.0 |
writes_mean_multiplier | 1.1 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 101.1 | 22.45 | 4.6 |
tpcc_tps_multiplier | 4.6 |
Overall Mean Multiple | 2.63 |
---|