Merged PRs
dolt
- 8041: Truncate MCVs
Sort and truncate MCVs. Only keep values whose frequency is > twice the uniform frequency. This prevents us from manually summing non-outliers (which is expensive). - 8025: [prolly] Float keyRange increment bug
Incrementing the[n, n+1)
key range is a lot faster than a binary search with a tuple comparison callback. But it is subject to at least two edge cases where(n+1)
is not a valid stop range: (1)n+1 == n
, because of precision loss, and (2)n+1 < n
, because of overflow.
I added a series of GMS tests here: dolthub/go-mysql-server#2554. I couldn't find a DECIMAL failure case, I think DECIMAL always encodes a valid 1's place, and is not subject to overflow AFAICT.
go-mysql-server
- 2563: small changes to stats bucket counting
Joins don't track output MCVs anymore, they aren't in a format where they'd be useful anyways. Also assume MCVs are sorted for faster matching. - 2562: throw error on invalid utf8 encoding for strings
fixes #8040 - 2561: Fixes unexpected timezone converting when passing TIMESTAMP to unix_timestamp()
see #2111 - 2560: fix
GetField
indexes forUpdateJoin
withUpdate Trigger
This PR addresses an issue where we were incorrectly assigningGetField
indexes to anupdate join
query.
The fix involved:- adding a case for
triggerIters
torowUpdateAccumulator
- not picking
ResolvedTable
references underSubqueryAliases
when there are multiple - correctly setting the scope node for update joins
fixes #7943
- adding a case for
- 2559: Implement support for
DECLARE CONTINUE HANDLER
Fixes #7971
Previously, we would always terminate a block when encountering an error, even if there's a matching handler. Additionally, there was no mechanism to resume an error that happened inside aLOOP
construct.
This correctly implementsDECLARE CONTINUE HANDLER
by making the following changes:- Checks for handlers while executing the
Block
node instead of theBeginEnd
node. - For
DECLARE EXIT HANDLER
, theBlock
returns a special error value that propagates to the containingBeginEnd
node in order to terminate just that node.
- Checks for handlers while executing the
- 2556: Compute GetField indexes in procedure if-conditions.
Fixes #7994
It seems like we aren't running theassignExecIndexes
analysis pass on if-conditions when invoking stored procedures, which can cause execution failures if the condition has a sub-expression that has aGetField
node.
Fixing this revealed a related issue: when constructing the scope of the if-condition to determine the correct indexes, we were incorrectly including any columns from the condition's body in the scope. This was also causing incorrect index calculations forGetFields
in the if-condition, and is also fixed here.
(This only affected conditionals in stored procedures, not conditionals in triggers, because the analysis has a separate execution path for each;analyzeProcedureBodies
is not called for triggers.) - 2555: [stats] simplify stats comparison and mcv logic
Lazier comparison logic. Skip promoting/converting types when the index types match.
Remove an expensive and seemingly unnecessary bucket compression step that was re-evaluating mcvs. - 2552: support
VALUES
statement
fixes #8012
syntax: dolthub/vitess#354
vitess
- 355: New functions to create PreviousGtids events, and to update event checksum
- 354: support
VALUES
statement
This PR add syntax support forVALUES
statment as an alias forSELECT * FROM ...
.
We are still missingSELECT (VALUES ...)
(support for values as aselect_expression
).
syntax for #8012
Closed Issues
- 8034: Users are able to create branches with a "-" at the start. If you try to delete the branch after that, it looks like dolt is understanding it as an option for dolt_branch
- 8040: Inserting BINARY into VARCHAR(26) should result in error Incorrect string value
- 7943: Update with subquery join clause causes field index error/panic for table with trigger
- 8042: mysql:latest - missing error: [HY000][1524] Plugin 'mysql_native_password' is not loaded
- 7971: NOT FOUND handlers in procedures cause ERROR 1105 (HY000): EOF
- 7994: "Unable to find field with index" error on INSERT in procedure following IF (SELECT ...)
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.91 | 1.4 |
groupby_scan | 13.22 | 17.32 | 1.3 |
index_join | 1.34 | 5.37 | 4.0 |
index_join_scan | 1.27 | 2.22 | 1.7 |
index_scan | 34.33 | 53.85 | 1.6 |
oltp_point_select | 0.18 | 0.52 | 2.9 |
oltp_read_only | 3.49 | 8.28 | 2.4 |
select_random_points | 0.33 | 0.81 | 2.5 |
select_random_ranges | 0.39 | 0.97 | 2.5 |
table_scan | 34.95 | 54.83 | 1.6 |
types_table_scan | 75.82 | 142.39 | 1.9 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.13 | 6.09 | 0.7 |
oltp_insert | 3.82 | 3.02 | 0.8 |
oltp_read_write | 8.58 | 15.0 | 1.7 |
oltp_update_index | 3.89 | 3.13 | 0.8 |
oltp_update_non_index | 3.89 | 3.07 | 0.8 |
oltp_write_only | 5.37 | 6.55 | 1.2 |
types_delete_insert | 7.7 | 6.79 | 0.9 |
writes_mean_multiplier | 1.0 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 98.85 | 32.66 | 3.0 |
tpcc_tps_multiplier | 3.0 |
Overall Mean Multiple | 2.07 |
---|