github dolthub/dolt v1.35.9
1.35.9

latest releases: v1.35.11, v1.35.10, binlog-alpha-1...
18 days ago

Merged PRs

dolt

  • 7727: Version Command Refactor
    The Version command is currently used by doltgres, but there are some issues. You can't add extra args to it, and it prints out the wrong binary name. This refactor makes the binary name printed by the Version command configurable, and it also refactors the Exec so that its functionality can be extended by doltgres without having to duplicate things like checkAndPrintVersionOutOfDateWarning, and the printing of the feature version.
  • 7724: Move Version
    Moves Version into a package where it can be referenced by external code.
  • 7721: Improve error messaging when encountering a primary key schema change during a merge.
    When a merge encounters a table that can't be merged because its primary key changed, we now:
    • Include the name of the affected table
    • Indicate whether the primary key discrepancy is between the two branches or between one branch and the common ancestor.
  • 7718: [store] use struct{} as a value in a hashset
    Testing if CI works with branch in repo. Original: #7706
  • 7713: [statspro] Avoid duplicating branch suffix when resolving stats database
    fixes: #7710
  • 7711: match mysql fk name generation
    This PR removes logic where we would use a consistent hash to create foreign key names, when one isn't explicitly provided.
    Instead, we use logic in GMS to generate a name with the template "<tbl_name>_ibfk_<num>", which matches MySQL behavior.
    As a result, we now allow multiple foreign keys over the same sets of columns (as long as the names are different).
    companion pr:
    dolthub/go-mysql-server#2438
    fixes:
    #7650
  • 7708: chore: fix function names in comment
  • 7707: go/libraries/doltcore/dbfactory, misc: Ensure we close a *grpc.ClientConn when we are done with it.
    In the cluster commithook, we had a failure mode where we would leak a *grpc.ClientConn without closing it. It turns out, if an outbound request has made on a ClientConn, it will continue retrying the connection. And we would leak one on a fixed interval, resulting in ever-increasing CPU utilization.
  • 7706: [store] use struct{} as a value in a hashset
  • 7704: Implement traditional auto-increment lock mode hold the lock for the duration of the insert iter.
    Fixes #7634
    This is the dolt half of dolthub/go-mysql-server#2439
    This adds support for innodb_autoinc_lock_mode=0 ("traditional"). When this system variable is set, the engine will guarantee that every insert statement generates consecutive IDs for AUTO INCREMENT columns.
    This PR also allows the user to set innodb_autoinc_lock_mode=1 ("consecutive"), although the behavior is currently identical to "traditional". This is acceptable because both modes make the same guarantees (that each statement gets consecutive IDs), and the observed behavior is the same in almost all cases.
    (The "consecutive" contains an additional optimization: if there is a known upper bound on the number of IDs that must be generated for an insert, under "consecutive" mode the engine will just increment the counter by that upper bound and immediately release the lock. In places where not all of those IDs are actually used, the excess are wasted. This PR does not include that optimization. Thus, with this PR, traditional and consecutive behave the same.)
  • 7699: Add per-table locking for AutoIncrementTracker
    This PR refactors the AutoIncrementTracker to hold a separate mutex for each table instead of a single mutex for the entire database.
  • 7689: Allow 'old' versions of Dolt to handle future table file versions
    Now that we are fairly certain that the dolt table format for compressed history files will have a new file signature, we want current versions of dolt to provide decent messages if one of those files is encountered.
    Automated testing of this is tricky at the moment. I hand edited an existing table file to ensure that a sane message comes back.
    Also, dolt sql-server doesn't currently print a message at all when a bad table file is encountered.
  • 7670: Add name on cd-release-pgo workflows
    add name on cd-release-pgo workflows

go-mysql-server

  • 2442: prevent panic on triggers with declare statements
    We're reusing a code from stored procedures to handle begin end blocks, but we're missing a lot of set up that prevents certain variables from being nil. Consequently, we panic in a couple places.
    This PR fixes some of those panics, but reveals other problems we have in resolving/executing triggers of this format.
    Partially addresses: #7720
  • 2440: support ALTER TABLE ... RENAME CONSTRAINT ... for foreign key constraints
    This PR adds support for ALTER TABLE ... RENAME CONSTRAINT ... for foreign key constraints.
    This is a feature that is NOT supported in MySQL, but we're adding it to make it easier to resolve merge conflicts resulting from foreign key name collisions.
    related: dolthub/go-mysql-server#2438
  • 2439: For AutoIncrement lock modes other than "interleaved", hold the lock for the duration of the insert iter.
    This is the GMS side of #7634
    This PR changes the engine to make it acquire a lock (provided by the storage layer) when innodb_autoinc_lock_mode is set to the "consecutive" or "traditional" values. More specifically, it calls a new function in the AutoIncrementSetter interface which optionally acquires a lock and returns a callback for releasing the lock.
    The in-memory DB doesn't have multithreading support, so when just using GMS, this is a no-op. A followup PR in Dolt will update its implementation of AutoIncrementSetter to handle the locking.
  • 2438: have generated index and foreign key names match mysql
    changes:
    • auto-generated secondary index names don't match (after a conflict)
    • we started at 0, while mysql starts at 2
    • auto-generate foreign key names in a way that matches mysql
    • in-memory used to just have empty string as the constraint name
      we used to error when generating foreign keys over the same sets of columns, but not anymore
      related: #7650
  • 2437: lowercase when looking up self referential foreign key columns
    fixes: #7700
  • 2429: server trace time includes parsing

vitess

  • 330: support rename constraint syntax
    This PR adds syntax support for ALTER TABLE ... RENAME CONSTRAINT [FOREIGN KEY / CHECK]... for foreign key constraints.
  • 329: Changes to binlog event creation functions
    • Exposing the Length() function in the BinlogEvent interface so calling code can access the event size present in a binlog event's header. Needed for calculating binlog file position.
    • Renaming FakeBinlogStreamBinlogStream so calling code can use it when serializing binlog events.

Closed Issues

  • 7634: Support for traditional and consecutive behavior for innodb_autoinc_lock_mode
  • 7722: remote 'origin' not found.
  • 7650: Default constraint symbol value is not same as MySQL, lead to replication breaks
  • 2394: AUTO_INCREMENT clause missing in result from SHOW CREATE TABLE
  • 7710: Statistics database qualify fails for branch connection string
  • 2364: Panic when executing sql statements from external command line tool after startup

Performance

Read Tests MySQL Dolt Multiple
covering_index_scan 2.11 3.07 1.5
groupby_scan 12.98 17.63 1.4
index_join 1.34 5.28 3.9
index_join_scan 1.27 2.26 1.8
index_scan 34.33 54.83 1.6
oltp_point_select 0.17 0.54 3.2
oltp_read_only 3.36 8.74 2.6
select_random_points 0.33 0.84 2.5
select_random_ranges 0.39 0.99 2.5
table_scan 34.33 55.82 1.6
types_table_scan 74.46 164.45 2.2
reads_mean_multiplier 2.3
Write Tests MySQL Dolt Multiple
oltp_delete_insert 7.84 6.91 0.9
oltp_insert 3.75 3.36 0.9
oltp_read_write 8.28 16.41 2.0
oltp_update_index 3.82 3.49 0.9
oltp_update_non_index 3.82 3.43 0.9
oltp_write_only 5.28 7.98 1.5
types_delete_insert 7.7 7.56 1.0
writes_mean_multiplier 1.2
TPC-C TPS Tests MySQL Dolt Multiple
tpcc-scale-factor-1 101.95 19.63 4.5
tpcc_tps_multiplier 4.5
Overall Mean Multiple 2.67

Don't miss a new dolt release

NewReleases is sending notifications on new releases.