github dolthub/dolt v1.29.0
1.29.0

latest releases: v1.43.0, v1.42.20, v1.42.19...
9 months ago

This release contains backwards incompatible changes:

  • Deprecated dolt sql-client – dolt sql-client has been fully deprecated and will not be accessible via the CLI anymore. sql-client previously served as a built-in MySQL client that could be used to connect to running servers. Now, dolt sql can serve the same function with the appropriate global arguments.

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

  • 7077: remove dolt sql-client command
    Fully deprecates dolt sql-client by removing the CLI command.
    Resolves: #6886
  • 7069: go/cmd/dolt: Implement new semantics for sql-server.lock.
    sql-server.lock is changed to sql-server.info and it is only used to get connection information to a running sql-server. Exclusive access to the databases is mediated through the file system locks, which sql-server now asserts it has before running against a database.
  • 7054: remove dolt stored procedure aliases
  • 7042: Run nullness checking on merged rows during three-way merges.
    This fixes one of the failures from #7034, but it's the more important one (the panic)
    Before, we would panic when attempting to compute a merged row if that row would contain a null in a non-null column.
    Now, we allow this row to be generated, and we validate it before merging it into the table.
  • 7035: Detect data conflicts even when one branch has the same binary representation as the ancestor.
    Fixes #6746
    This fixes a bug where the following situation fails to detect a conflict:
    Branch Value
    Ancestor (1, 2)
    Left (1, 2, NULL)
    Right (1, 2, 3)
    Both branches add a column but add different values to it. This should be a data conflict, but we currently don't detect it because Ancestor and Left have the same bytes in storage.

go-mysql-server

  • 2171: Bug fixes for type handling in IF and COALESCE functions
  • 2170: have flush binary logs be noop
    fixes #7055
  • 2169: Unique table and column ids
    The motivation for this PR is making the costing/exploration phase consistent with the data structures for index costing. That means switching memo ScalarExpr back to sql.Expression. Moving the previously join-specific ids in ScalarExpr to tables and column refs lets us preserve most memo data structures and join transformation logic.
  • 2168: fix panic in math funcs
    fixes #7060
    Additionally, fixes POW() to not have the same panic and returns warnings instead of errors for certain inputs to LOG().
  • 2166: prevent panic on nil cast for time functions
    fixes #7056
  • 2165: fix update <table> set <column> = default
    This PR fixes a bug where attempting to update a column to its default would throw an unresolved error.
  • 2158: have DayName() return NULL on bad DATETIME conversions
    fixes #7039
  • 2156: Decorrelate IN_SUBQUERY refactor
    Decorrelating IN_SUBQUERY into subquery aliases adds new relations to the query plans in a way that makes table and column identifier tracking difficult. So instead of converting select * from xy where x in (select u from uv) into a subquery alias join:
    Filter(
    Tablescan(xy),
    InSubquery(
    x,
    Subquery(
    Project(u, Tablescan(uv))))))
    =>
    Join(
    (x = u),
    Tablescan(xy),
    SubqueryAlias(
    'scalarSubq0',
    Tablescan(uv)))
    
    we disambiguate the subquery and create a table-table join:
    Filter(
    Tablescan(xy),
    InSubquery(
    x,
    Subquery(
    Project(u, Tablescan(uv))))))
    =>
    Join(
    (x = u),
    Tablescan(xy),
    Tablescan(uv))
    
    We disambiguate table names and column references in the process of unnesting scopes to avoid table name clashes.
    This change is better in most places, but worse in instances when we cannot unnest now because the RHS equality expression is not a valid get field reference, for example when the subquery returns the value of a GROUP_BY or WINDOW or a synthesized alias (anything without a source column Id). This is fixable in the future.
    This also fixes a few ANTI_JOIN problems that this refactor exposed.

Closed Issues

  • 6062: Dolt interactive sql-client cli: Support database name for connection
  • 6886: Deprecate dolt sql-client
  • 7029: sql-server.lock file preventing docker instance from running
  • 7055: Support flush binary logs
  • 6746: Three Way Merging won't consider a row to have a data conflict if either side has the same binary rerpresentation as the base.
  • 7060: Crash by SQRT
  • 7056: Crash by Time Functions
  • 7048: Similar queries return different results with different orderings of the where clause
  • 2159: VSCode debug Build Error

Latency

Read Tests MySQL Dolt Multiple
covering_index_scan 2.14 2.86 1.3
groupby_scan 12.98 17.63 1.4
index_join 1.32 5.09 3.9
index_join_scan 1.25 2.14 1.7
index_scan 34.33 55.82 1.6
oltp_point_select 0.17 0.43 2.5
oltp_read_only 3.3 7.7 2.3
select_random_points 0.32 0.72 2.2
select_random_ranges 0.38 0.87 2.3
table_scan 34.33 55.82 1.6
types_table_scan 75.82 158.63 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.27 1.8
oltp_update_index 3.82 3.49 0.9
oltp_update_non_index 3.82 3.43 0.9
oltp_write_only 5.37 7.7 1.4
types_delete_insert 7.7 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.