Merged PRs
dolt
- 7241: Mark
rebase_order
as the primary key for thedolt_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.Resolves #3467-- 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 | +----------------------------------+----------------------------+
go-mysql-server
- 2231: fix precision for
utc_timestamp
TheUTC_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 inBetween.Eval()
with a logically equivalentAND
statement to reuse the type conversion logic incomparison.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 surroundingNOW()
functions more closely match MySQL.
Changes:- Added
NOW()
synonyms to registry - Have
CURRENT_TIMESTAMP()
,LOCALTIME()
,LOCALTIMESTAMP()
all just callNOW()
- Support parsing synonyms in
DEFAULT
andON UPDATE
expressions - Fixed
SHOW CREATE TABLE
to printCURRENT_TIMESTAMP
forNOW()
and synonyms
Companion PR: dolthub/vitess#296
Fixes: - #7129
- #6058
- Added
- 2214: Fix wrongly written 'aribtrary' -> 'arbitrary'
Fix wrongly written word 'aribtrary' -> 'arbitrary'
vitess
- 297: Fixing the
version
keyword to not require identifier quotes
Theversion
keyword still required identifier quoting in some usages, such asSELECT * FROM base.version;
. See #7237 for more details.
This change moves theversion
keyword into the main list of non-reserved keywords. There was one conflict from use of theversion
keyword in thefunction_call_keyword
rule, but it turns out that use ofversion
there is not required. We have an existing test for using theversion()
function, so I didn't add a new one. - 296: refactoring
default
andon update
expressions
This PR changes the grammar to more closely match MySQL's behavior, specifically around theNOW()
function and its synonyms.
Changes:- Throw syntax errors for
ON UPDATE
expressions against functinos that aren'tNOW()
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 plainFuncExpr
Companion PR: dolthub/go-mysql-server#2218
- Throw syntax errors for
- 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:Resolves: #7195create table t123 (c1 varchar(5) check (c1 in ('v1', 'v2')) NOT NULL);
Closed Issues
- 6058:
current_timestamp()
andnow()
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 |
---|