github dolthub/dolt v1.16.0
1.16.0

latest releases: v1.43.14, v1.43.13, v1.43.12...
14 months ago

This release contains backwards incompatible changes:

  • Branch control permissions are now replicated from the primary to all standby servers when using cluster replication.

Per Dolt’s versioning policy, this is a minor version bump because applications using Dolt cluster replication and branch permissions will now have branch permissions replicated, potentially resulting in unexpected behavior on the replica.

Merged PRs

dolt

  • 6678: Hash-qualified DB errors on first reference if hash doesn't exist
  • 6669: go: sqle: cluster: First pass at replicating branch control permissions.
  • 6657: Delete docstring for push
  • 6652: migrates fetch to use sql queries
    This change updates dolt fetch to use the appropriate sql engine to generate results.
    Related: #3922

go-mysql-server

  • 2014: Improve message from json_extract() when json path doesn't start with a '$'
  • 2013: Change Project nodes so they can't return negative zero.
    In some cases we differ from MySQL in what types we use for intermediate results. This doesn't usually affect the final output, and can be more performant.
    But if the final result of an expression is a float when MySQL deduces it to be a decimal, and we don't do anything else to value that would cause it to be coerced (such as inserting it into a table with a schema), then we could end up displaying a result of the wrong type to the user. Usually this doesn't matter, unless that result is the float value -0 when the user expects a decimal.
    Ideally we'd prefer to detect the expected type and do a cast, but this is an acceptable stopgap measure.
  • 2012: Insert on dup col ordinal bug
    A certain set of conditions caused an error for indexing on duplicate update expressions.
    The current fix is to mimic the projection mapping inside indexing. Index the duplicate expression values based on the ordinal of the destination schema. LOAD DATA for some reason needs its insert columns to not be specified, which will probably be the source of different issues at some point.
    fixes: #6675
  • 2009: Re-enable query logging by default for DEBUG log level
  • 2007: Fixed character set IDs
    Character set IDs should correlate with their default collation's ID. Previously, they were arbitrarily assigned by sorting their names alphabetically. This should not be a breaking change for anyone, as the comment on the CharacterSetID mentions that the ID may change, and should not be persisted. Dolt, the largest integrator, abides by this rule.
  • 2006: Semi join and FDs bug
    Returning no projections from a table causes "column not found errors" when we try to reference those expressions higher in the tree. This fixes the semi join transform to creating empty projections.
    This fixes two bugs. The first is that we were too conservative checking whether index keys were strict FDs for a join relation. When a relation has a constant applied to a primary key, we can assume all of the columns returned by that join will be constant. Fixing that made it easer to test certain semi -> right lookup join transforms which were buggy. For the same case, when we are doing a lookup into table where a constant filter satisfies an index key, we need to still return a projection set that covers non-pruneable columns used in higher-level nodes.
  • 2004: Enable use of slices in tuples for HashLookups
    Currently FusionAuth crashes Dolt with the following error: panic: runtime error: hash of unhashable type []uint8
    All FusionAuth IDs are binary(16), and join on those values in a HashLookup was resulting in using two []uint8 being used as a key to a hashtable. Nested arrays in tuples were tripping on an optimization made for short arrays. We've verified that optimization doesn't actually made a difference, so this change simplifies the code and makes it more generic.
  • 2000: adding new ways to say varchar
    This PR makes to so the engine recognizes more ways to specify that a column is of type VARCHAR
    Companion PR: dolthub/vitess#270
    Fixes #6650
  • 1996: Move join indexing after all
    This should put almost all indexing logic into one rule that runs once at the end of analysis for a given query. It should require one walk of the tree, be much more correct for nested join and subquery indexing, and allow us to add nodes with special indexing logic much more easily.
  • 1995: Added option to change protocol listener
    This allows plugging in other protocol listeners besides the default MySQL one.
  • 1993: JSON Array Mutation
    The json_array_insert() and json_array_append() methods are in the family of other mutation functions (set,insert,replace,remove).
  • 1989: Improve the efficiency of newIndexAnalyzerForNode by avoiding visiting Filter nodes.
    This prevents super-linear runtime in generateIndexScans

vitess

  • 273: Parse for update skip locked as a no-op
    While testing the FusionAuth application, there were regular panics which result from a query which does a select for update skip locked. This change allows us to parse these queries, but they don't impact query execution because row level locks are not supported by Dolt currently.
    https://dev.mysql.com/blog-archive/mysql-8-0-1-using-skip-locked-and-nowait-to-handle-hot-rows/
  • 272: Set character set IDs to current MySQL version
    The character set values were set for MySQL 5.0, so they've been updated to the correct values for 8.0.
  • 270: support alternate ways to say VARCHAR
    This PR adds more variations to VARCHAR, specifically including the keyword VARYING.
    Parses correctly, but needs GMS changes to actually work as a whole
    Companion PR: dolthub/go-mysql-server#2000
    Fixes #6650
  • 269: Fix UNION table option and parse LAST keyword
    This PR fixes support for parsing the UNION table option and parsing LAST.
    Additionally, it adds support for these table options in alter table statements.
    Fixes #6653
  • 268: tests and adding keywords for alter too
    This PR add support for parsing the keyword TABLE_CHECKSUM as an alias for CHECKSUM as a valid table option.
    Additionally, CHECKSUM and TABLE_CHECKSUM are added as valid keywords in alter statements as well.
    Fixes #6645
  • 267: Parse TABLE <table_name> statements
    This PR adds parser support for TABLE <table_name> syntax.
    It just converts this to be a SELECT * FROM <table_name> statement.
    Fixes #6642
  • 266: parsing secondary_engine
    This PR parses the syntax for SECONDARY_ENGINE, but does not store it with the table.
    For the most part we seem to parse, but not store any table options.
    MySQL docs aren't up-to-date yet; SECONDARY_ENGINE is not listed as a valid table option, but it works.
    https://dev.mysql.com/doc/refman/8.0/en/create-table.html
    These are also apparently valid options for create index statements, so I just added the syntax there too
    https://dev.mysql.com/doc/refman/8.0/en/create-index.html
    Fix for: #6632
  • 265: upgraded YAML library

Closed Issues

  • 6675: dolt table import -u fails to properly parse order of columns
  • 6627: Amending commits on a primary breaks remote based replication
  • 6650: Support all the different ways to specify character types

Latency

Read Tests MySQL Dolt Multiple
covering_index_scan 2.07 2.91 1.4
groupby_scan 13.22 17.95 1.4
index_join 1.27 4.74 3.7
index_join_scan 1.21 2.18 1.8
index_scan 32.53 57.87 1.8
oltp_point_select 0.14 0.39 2.8
oltp_read_only 2.71 7.17 2.6
select_random_points 0.31 0.72 2.3
select_random_ranges 0.37 0.95 2.6
table_scan 33.12 57.87 1.7
types_table_scan 75.82 167.44 2.2
reads_mean_multiplier 2.2
Write Tests MySQL Dolt Multiple
bulk_insert 0.001 0.001 1.0
oltp_delete_insert 4.74 5.57 1.2
oltp_insert 2.26 2.81 1.2
oltp_read_write 5.99 14.21 2.4
oltp_update_index 2.26 2.81 1.2
oltp_update_non_index 2.39 2.76 1.2
oltp_write_only 3.36 7.04 2.1
types_delete_insert 4.74 6.09 1.3
writes_mean_multiplier 1.5
Overall Mean Multiple 1.9

Don't miss a new dolt release

NewReleases is sending notifications on new releases.