github dolthub/dolt v1.26.0
1.26.0

latest releases: v1.41.1, v1.41.0, v1.40.3...
7 months ago

This release contains backwards incompatible changes:

  • Geometry Address Encoding – Previously, Geometry Types were stored inline, which subjected them to a 65K size limit. To support larger Geometries, we now store them as BLOBs. This required an entirely new encoding as well as storage layer changes. As a result, we have bumped the feature version. For now, newer versions of the dolt client can still read the inline geometries, but older dolt clients will not be able to read newer databases. Eventually, we will deprecate the old geometry encoding entirely so we recommend doing a dolt dump and import if you have any tables with spatial types.

Per Dolt’s versioning policy, this is a minor version bump because these changes may impact existing applications. Please reach out to us on GitHub or Discord if you have questions or need help with any of these changes.

Merged PRs

dolt

  • 6978: Change to use a crash resistant, atomic file update protocol for a number of file writes.
    Makes updates to branch_control, repo_state.json and some persisted config files atomic and crash resistant.
  • 6976: go/store/nbs: file_table_persister: fsync whole table file writes.
    Dolt sometimes persists whole table files, instead of appending blocks to the chunk journal. In order to be as crash resistent as the chunk journal, we should fsync the writes before we add the new table file to the database.
    Cases which use this code path and could have seen reduced durability across crashes include: dolt_fetch, dolt_pull, dolt_clone, dolt_gc, and dolt_push/dolt_backup to a file remote.
  • 6973: make GeomAddrEnc known as an address encoding
    The addition of the new GeomAddrEnc needs to be explicitly known as an address type, so that dolt gc doesn't delete the chunks created.
    fixes #6969
  • 6942: indexing refactor bump

go-mysql-server

  • 2140: Respect character_set_results when emitting field metadata
    For non-binary types, we need to respect the value for the character_set_results session var (when not NULL) and use that for the field metadata returned in the MySQL wire protocol.
    The unexpected charset/collation metadata is causing DataGrip to be unable to work with some types in the table editor ( see #6970 for more details).
    I've validated this behavior with MySQL by inspecting packets with Wireshark. For testing, we were already testing the behavior of character_set_results and the charset translation, but we weren't testing the field metadata. I added support to check against the expect charset field metadata, but had to use reflection to get that data from the MySQL driver, since it's not exposed through the standard golang sql database APIs.
  • 2138: Fixed SET working for invalid charsets/collations
    Fices #6972
  • 2137: fix nested subquery filter in exists
    We do not explore the children of subquery when attempting to decorrelate filters for exists queries; we now do this through the use of subquery.Correlated().
    We should also avoid using uncacheable subqueries as keys for IndexLookups.
    fixes #6898
  • 2136: Fix nil range correctness bug
    We accidentally treated an OR conjunction that contributes no index filters as equivalent to an empty range. As a result, we were dropping ranges in index scans.
    For example, this is the flattened version of the test query added:
    (1: and
    (3: tab3.col0 > 80)
    (4: or
    (5: and
    (6: tab3.col0 >= 87)
    (7: tab3.col0 <= 9))
    (8: tab3.col0 IS NULL))
    (9: or
    (10: tab3.col1 >= 71.7)
    (11: and
    (12: tab3.col0 >= 94)
    (13: or
    (15: tab3.col0 < 66)
    (16: and
    (17: tab3.col0 = 85)
    (18: tab3.col1 <= 42.15))
    (19: tab3.col0 = 30)))))
    
    Filters 3 and 4 are supported by the chosen index. We want to exclude 9. We build the range collection ORs before leaves, so we attempt to collect 4->9->3. So when we convert 9 to a range collection, we expect nil, but need that nil to not zero out the 3 ranges we have already accumulated.
  • 2134: Costed index scan framework
    This is the accumulation of the following PRs:
    dolthub/go-mysql-server#2093
    dolthub/go-mysql-server#2104
    dolthub/go-mysql-server#2112
    dolthub/go-mysql-server#2124
  • 2131: Fixed Full-Text defaults
    Fixes #6941
    Full-Text schema validation also considered the default expressions, which do not matter for the pseudo-index tables. The default expression evaluation occurs before the table editors are involved, so they're always receiving fully-realized rows. This means that we can skip the default check, since it doesn't matter whether the tables have default expressions or not.
    The root cause for the bug was due to comparing pointers. Same contents for the expressions, but different pointers to different objects, so defaults would always cause failure.
  • 2126: fix inner join filter pushdown, and alias matching
    This PR fixes an issue we have with InnerJoins where the filter condition uses a function and references columns from both tables. We need to properly search the expressions in a SubqueryExpression.
    Additionally, addresses an getIdx bug involving unqualifying aliases.
    partially fixes #6898

vitess

  • 289: add partial support for ':=' assignment operator
    This PR adds support for set expressions and assignment expressions.
    Does not include support for select expressions, as it's deprecated on MySQL
  • 288: allow unquoted non reserved keywords for drop and rename column ddl
    fixes #6950

Closed Issues

  • 6969: Upload to dolthub won't work for new GEOMETRY columns
  • 6972: Panic caused by invalid result character set
  • 6927: "value exceeded max field size of 65kb" when inserting large geometry

Latency

Read Tests MySQL Dolt Multiple
covering_index_scan 2.11 2.76 1.3
groupby_scan 13.7 17.32 1.3
index_join 1.34 5.0 3.7
index_join_scan 1.25 2.18 1.7
index_scan 34.33 54.83 1.6
oltp_point_select 0.17 0.43 2.5
oltp_read_only 3.3 7.56 2.3
select_random_points 0.32 0.72 2.2
select_random_ranges 0.38 0.86 2.3
table_scan 34.33 54.83 1.6
types_table_scan 74.46 155.8 2.1
reads_mean_multiplier 2.1
Write Tests MySQL Dolt Multiple
oltp_delete_insert 7.98 6.79 0.9
oltp_insert 3.75 3.36 0.9
oltp_read_write 8.28 15.0 1.8
oltp_update_index 3.82 3.36 0.9
oltp_update_non_index 3.82 3.3 0.9
oltp_write_only 5.28 7.56 1.4
types_delete_insert 7.56 7.43 1.0
writes_mean_multiplier 1.1
Overall Mean Multiple 1.6

Don't miss a new dolt release

NewReleases is sending notifications on new releases.