There's no known breaking changes in this release. However, we did rewrite the Stored Procedure engine. As far as we know they changes only improve correctness but it's a big change so we made a minor version bump.
Merged PRs
dolt
- 9171: dolt status user contribution
- 9167: test for temporary tables in stored procedures
The stored procedures rewrite fixed an issue where temporary tables aren't able to be created and selected within a stored procedure; this PR adds tests to specifically test for that case.
fixes: #8762 - 9165: go: keymutex: Improve cleanup and refcnt implementation so that we can keep the mutexes map clean in more cases.
- 9155: fix status command after removing origin from remote
Fix #9130 and #9069.$ dolt clone timsehn/docs $ cd docs $ dolt remote -v origin https://doltremoteapi.dolthub.com/timsehn/docs $ dolt remote rm origin $ dolt status On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean
- 9120: Consistently use pointer receiver for ByteArray
Similar to #9100
For structs that are exclusively used in interfaces, there's no reason to not use pointer receivers instead of value receivers. Using value receivers can cause the struct to be copied every time the method is invoked.
Pointer receivers are also more correct here: copying the struct means that changes to the ImmutableValue field (such as setting its Buf field in ImmutableValue.GetBytes) won't be saved when the method exits, defeating the caching of values loaded from storage.
go-mysql-server
- 2964: Unwrap inputs to REGEXP_LIKE, REPLACE, and RPAD/LPAD functions.
These are a couple more functions whose inputs aren't being unwrapped. If the inputs come from a column with aTEXT
type, then they won't be converted to strings and the functions will fail. This PR fixes this by making sure that the inputs are converted.
We missed this previously because although we have tests for these functions, none of them tested getting the inputs from TEXT columns of a table. - 2963: From unixtime
Merged main from dolthub/go-mysql-server#2910 - 2962: fix infinite recursion with recursive stored procedures
fixes: #8763 - 2961: fix prepare statements and user vars in stored procedures
This PR adds tests for user variables within Stored Procedures.
Additionally, this PR has changes so that we don't double parsePREPARE ... FROM ...
statements, which also allows them to be used in the updated Stored Procedures call.
fixes: #8911 - 2959: Doltgres literal support
This makes literal expression implement the sqlparser.Injectable interface so they can be used in Doltgres AST conversion.
Also exports fields so literals can be edited in place (required for how Doltgres processes these in a couple places).
This is an alternative to dolthub/go-mysql-server#2946. - 2955: Add support for
UPDATE ... RETURNING
Related to: dolthub/doltgresql#1421 - 2851: rewriting stored procedures
This PR reimplements Stored Procedures so that queries are run individually, while maintaining context through the use of a stack.
companion pr: dolthub/vitess#402
vitess
Closed Issues
- 8911: can't assign local variables to user variables
- 8763: Stored procedures: stored procedure with recursive call does not terminate
- 9130: Dolt and Git differ if
status
is run after deleting theorigin
remote. - 8762: Stored procedure: temp table created in procedure not visible
- 9149: CREATE TEMPORARY TABLE during a transaction causes a commit
- 2957: Unexpected syntax error when using AFTER clause in ALTER TABLE statement
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.96 | 0.65 | 0.33 |
groupby_scan | 13.46 | 17.63 | 1.31 |
index_join | 1.44 | 2.35 | 1.63 |
index_join_scan | 1.42 | 1.44 | 1.01 |
index_scan | 34.33 | 30.26 | 0.88 |
oltp_point_select | 0.18 | 0.26 | 1.44 |
oltp_read_only | 3.36 | 5.18 | 1.54 |
select_random_points | 0.33 | 0.59 | 1.79 |
select_random_ranges | 0.36 | 0.62 | 1.72 |
table_scan | 34.33 | 32.53 | 0.95 |
types_table_scan | 75.82 | 123.28 | 1.63 |
reads_mean_multiplier | 1.29 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.9 | 6.32 | 0.71 |
oltp_insert | 4.03 | 3.13 | 0.78 |
oltp_read_write | 8.74 | 11.45 | 1.31 |
oltp_update_index | 4.1 | 3.19 | 0.78 |
oltp_update_non_index | 4.18 | 3.07 | 0.73 |
oltp_write_only | 5.67 | 6.32 | 1.11 |
types_delete_insert | 8.28 | 6.67 | 0.81 |
writes_mean_multiplier | 0.89 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 97.55 | 39.68 | 2.46 |
tpcc_tps_multiplier | 2.46 |
Overall Mean Multiple | 1.55 |
---|