github dolthub/dolt v1.30.5
1.30.5

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

Merged PRs

dolt

  • 7241: Mark rebase_order as the primary key for the dolt_rebase system table
  • 7233: Delete branch message as a push result
    Currently every push results in the message "[new branch] ..." which is misleading. Unfortunately fixing this for all updates is way harder than I want to dig into at the moment, so I'm going to make the only case we can detect easily (delete) print a better message.
  • 7183: Feature: Interactive Rebase
    Adds support for an interactive rebase workflow with Dolt. This allows users to edit their commit history, including rewording commit messages, reordering commits, dropping commits, and squashing multiple commits together. At the end of an interactive rebase, the current branch points to a new commit history created by executing the rebase plan the user specified.
    -- we start on a dev branch named myDevBranch
    select commit_hash, message from dolt_log;
    +----------------------------------+----------------------------+
    | commit_hash                      | message                    |
    +----------------------------------+----------------------------+
    | fjq1sd7t8nbqn0ddvcor1i455i0i5ken | inserting row 3            |
    | v8g3ic9j4euf68t7tfnj7je8e1j6vt9m | inserting row 2            |
    | q909vda7hc7ithb2fcgcfghuvt8epsrj | inserting row 1            |
    | 0djr0smhr9ucdjivsnabu7ls419p0f37 | creating table t           |
    | d0lte08fpl5hpcmqj90d6jqrb6i17lfi | Іnitiаlіzе dаtа repоsіtory |
    +----------------------------------+----------------------------+
    -- the interactive rebase is started by calling the dolt_rebase stored procedure
    call dolt_rebase('-i', 'main');
    -- once an interactive rebase is started, the session is placed on a temporary working
    -- branch and a dolt_rebase table is populated with the default rebase plan
    select * from dolt_rebase;
    +--------------+--------+----------------------------------+-----------------+
    | rebase_order | action | commit_hash                      | commit_message  |
    +--------------+--------+----------------------------------+-----------------+
    | 1.00         | pick   | q909vda7hc7ithb2fcgcfghuvt8epsrj | inserting row 1 |
    | 2.00         | pick   | v8g3ic9j4euf68t7tfnj7je8e1j6vt9m | inserting row 2 |
    | 3.00         | pick   | fjq1sd7t8nbqn0ddvcor1i455i0i5ken | inserting row 3 |
    +--------------+--------+----------------------------------+-----------------+
    -- users can adjust the plan to reorder commits, drop commits, change commit messages or squash commits together
    update dolt_rebase set action='reword', commit_message='inserting rows 1, 2, 3' where rebase_order=1;
    update dolt_rebase set action='fixup' where rebase_order > 1;
    -- execute the adjusted plan
    call dolt_rebase('--continue');
    -- see that the Dolt commit history has been rewritten
    select commit_hash, message from dolt_log;
    +----------------------------------+----------------------------+
    | commit_hash                      | message                    |
    +----------------------------------+----------------------------+
    | 2mggja4n903gdo5fmbvcbj9vsvgdjd8q | inserting rows 1, 2, 3     |
    | 0djr0smhr9ucdjivsnabu7ls419p0f37 | creating table t           |
    | d0lte08fpl5hpcmqj90d6jqrb6i17lfi | Іnitiаlіzе dаtа repоsіtory |
    +----------------------------------+----------------------------+
    Resolves #3467

go-mysql-server

  • 2231: fix precision for utc_timestamp
    The UTC_TIMESTAMP() function should take in an argument and round the milliseconds. For now, we stick to always returning the full precision (6 places)
  • 2230: guard ctx and session with nil
    fixes #7235
  • 2228: fix type conversion in Between expressions
    Replace the logic in Between.Eval() with a logically equivalent AND statement to reuse the type conversion logic in comparison.go
    fixes #7229
  • 2227: Add JsonIter class for iterating over the key-value pairs of a JSON object.
    This is the GMS side of automating JSON merging in Dolt: just some type aliases and a simple iterator for getting the keys in a JSON object in a deterministic order.
    It's worth pointing out that currently Dolt stores JSON in a normalized form by sorting keys by length, but the iterator here uses a simple lexicographic order instead. This difference doesn't really matter at the moment because we unmarshall the entire object into a go map no matter what. But Dolt needs to be aware of the ordering used in order to correctly compute three-way diffs.
  • 2226: Error on NOW() eval with nil context
  • 2218: implement NOW() siblings
    This PR has our behavior surrounding NOW() functions more closely match MySQL.
    Changes:
    • Added NOW() synonyms to registry
    • Have CURRENT_TIMESTAMP(), LOCALTIME(), LOCALTIMESTAMP() all just call NOW()
    • Support parsing synonyms in DEFAULT and ON UPDATE expressions
    • Fixed SHOW CREATE TABLE to print CURRENT_TIMESTAMP for NOW() and synonyms
      Companion PR: dolthub/vitess#296
      Fixes:
    • #7129
    • #6058
  • 2214: Fix wrongly written 'aribtrary' -> 'arbitrary'
    Fix wrongly written word 'aribtrary' -> 'arbitrary'

vitess

  • 297: Fixing the version keyword to not require identifier quotes
    The version keyword still required identifier quoting in some usages, such as SELECT * FROM base.version;. See #7237 for more details.
    This change moves the version keyword into the main list of non-reserved keywords. There was one conflict from use of the version keyword in the function_call_keyword rule, but it turns out that use of version there is not required. We have an existing test for using the version() function, so I didn't add a new one.
  • 296: refactoring default and on update expressions
    This PR changes the grammar to more closely match MySQL's behavior, specifically around the NOW() function and its synonyms.
    Changes:
    • Throw syntax errors for ON UPDATE expressions against functinos that aren't NOW() or a synonym.
    • Only accept integer for argument to NOW() and synonyms; syntax error for anything else
    • Simplified grammar rules
    • Removed CurTimeFuncExpr from AST in favor of plain FuncExpr
      Companion PR: dolthub/go-mysql-server#2218
  • 295: Allow inline column check constraint definitions to appear in any order
    Previously, an inline column check constraint could only appear as the very last option for a column definition. This change allows it to appear in other positions in the column definition. For example, this query now works:
    create table t123 (c1 varchar(5) check (c1 in ('v1', 'v2')) NOT NULL);
    Resolves: #7195

Closed Issues

  • 6058: current_timestamp() and now() do not return the same values
  • 7129: support current_timestamp synonyms
  • 7235: Panic when Using INNER JOIN
  • 7229: Unexpected Results when Using BETWEEN and LEFT JOIN
  • 3467: Support dolt rebase

Latency

Read Tests MySQL Dolt Multiple
covering_index_scan 2.11 2.81 1.3
groupby_scan 12.98 17.32 1.3
index_join 1.34 5.0 3.7
index_join_scan 1.27 2.11 1.7
index_scan 34.33 62.19 1.8
oltp_point_select 0.17 0.44 2.6
oltp_read_only 3.36 7.7 2.3
select_random_points 0.32 0.73 2.3
select_random_ranges 0.39 0.87 2.2
table_scan 34.33 62.19 1.8
types_table_scan 73.13 170.48 2.3
reads_mean_multiplier 2.1
Write Tests MySQL Dolt Multiple
oltp_delete_insert 6.09 6.21 1.0
oltp_insert 3.02 3.02 1.0
oltp_read_write 7.56 15.0 2.0
oltp_update_index 3.02 3.25 1.1
oltp_update_non_index 3.13 3.19 1.0
oltp_write_only 4.18 7.43 1.8
types_delete_insert 6.09 6.79 1.1
writes_mean_multiplier 1.3
Overall Mean Multiple 1.7

Don't miss a new dolt release

NewReleases is sending notifications on new releases.