Merged PRs
dolt
- 7179: go: sqle: DoltDatabaseProvider: If we encounter an error while creating a database, try to clean up after ourselves so we do not leave partially initialized database state around.
- 7178: go: sqle: cluster: Create missing remotes for cluster replication on startup if they do not already exist.
Previouslydolt sql-server
would error if there were existing databases and they were missing any of the remotes listed as cluster replication remotes in the config.yaml. This changes it so that those remotes are automatically created at startup instead. - 7175: /go/store/{blobstore,datas,nbs}: working, needs cleanup
- 7173: go: sqle: cluster: Fix MySQLDb and dolt_branch_control replication for the cases where you have more than one standby server in the cluster.
Previously these changes would only get replicated to the first database in the cluster. - 7171: Db/oc persister
- 7169: More detailed warning message for import schema not matching
Updates the warning message fordolt table import
to print when the import schema does not match the destination table's schema, not just when there are fewer columns in the import file. Also updates the warning message to list the column names that differ between the import file and the destination table's schema.
Resolves: #6113 - 7161: Return a different error message for tx commit conflicts depending on
@autocommit
When a transaction commit conflict occurs, the next steps to take are slightly different depending on whether@autocommit
is enabled or not. This PR changes the error message we return to describe those steps in more detail when@autocommit
is enabled. - 7153: proto/third_party/flatbuffers,go/gen/fb/serial: Bump flatc to pick up the version that only has Try accessors.
- 7137: Adding tests for column name metadata through MySQL C++ and Rust Connector
Added assertions that result set column name metadata is populated for the C++ and Rust MySQL Connector libraries. - 7115: serialize
on update
expressions
This PR add serialization forON UPDATE
expressions on columns.
This change requires changes to the flatbuffer schema as we have to store an additonal field.
Older versions are able to read and modify databases in the newer version without any error, but anyON UPDATE
functionality is missing (which makes sense). Tables withON UPDATE ...
defined on them won't be displayed and performing anUPDATE
won't trigger any of the defined expressions to run. So, this should be a Feature Verison bump.
companion pr: dolthub/go-mysql-server#2188
fixes #6030 - 7114: .github: Iterate on getting bats tests running with lambdabats.
go-mysql-server
- 2203: guard
ctx.Span
with nil check
We have places where we callexpression.Eval(nil, nil)
.
The null context causes a panic when we call Span on it.
This PR just adds a nil check inside the*context.Span()
receiver
fixes #7154 - 2200: Replace carder with stats
I wanted to separate 1) moving cardinality into stats objects, and 2) changing costing to start at join relations, but I kept finding small bugs and hard a time separating the two. So i did the move, fixed bugs along the way, and then regenerated plans with the changes.
Our current join plans are less useful after we start doing costed join reordering, which makes it kind of annoying that these refactors are dominated by mostly irrelevant plan changes. Still I think the current refactors were necessary, because we need the costing changes and users will still use stats-less tables. Soon I will start adding more unit-esque plan tests that are equally comprehensive but test fewer things, like whether certain plans' cardinalities are accurate, and how closely cost estimates reflect execution runtime.
Dolt side is passing: #7156 - 2199: remove delimiter before caching the prepared stmt
When using prepared statement, some create statements were being stored in the cache with delimiter at the end of it, which does not trimmed when executing the prepared statement. This causes consistency issue where in cases of storing a create statement, it will have the delimiter whereas running the same query without it being prepared statement trims before storing. - 2197: prevent RangeJoinHeap plans over Filter nodes
Currently, we don't have proper handling of nodes that aren'tRangeHeap
s in theRangeJoinIter
.
This PR makes it so that we don't create plans that would have these nodes.
Additionally, we error instead of panicking when we see an invalid node in this area.
fixes #7139 - 2194: fix decimal result scale difference on server
This PR fixes:- converting the decimal type values to given decimal column type before inserting.
- getting precision and scale of final decimal type correctly.
- 2191: Move index costing into join planning phase
Put index costing inside join planning, so that in the future join planning will have better cardinalities (statistics) for join ordering. Most of the changes will look like refactoring the way we expression index lookups in the memo. I attempted to do this in a way that makes as few changes as possible to join planning; the goal here is to set me up for rewriting cardinality checks with stats objects. It didn't go as cleanly as I wanted, I ended up shifting a lot of join plans back to lookup plans because HASH_JOIN was beating LOOKUP_JOIN in several key places.
One downside of the current PR is that it converts a sysbench MERGE_JOIN into a LOOKUP_JOIN. I would prefer fixing this in the next PR when I do a bigger costing overhaul.
Variety of fixes for join hinting, correctness, etc.
At some point we appeared to fix this:
dolthub/go-mysql-server#1893 - 2188: support
on update current_timestamp
This PR adds support for handling and executingON UPDATE
column expressions, which are triggered when an update is applied to any column in the row.
TODO:- we support
now()
for default, but not the syntax foron update
fixes #6030
- we support
Closed Issues
- 7182: Previous panic concerning CASE WHEN
- 6030:
ON UPDATE CURRENT_TIMESTAMP
in column definition does not update TIMESTAMP - 6113: Warning during csv import
- 7154: Panic when Using BETWEEN and CASE WHEN
- 7148:
UPDATE counters SET value = value + 1 WHERE key = 'foo';
should be concurrency-safe - 7164: How to connect a dolt sql-server from a remote server
Latency
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.14 | 2.86 | 1.3 |
groupby_scan | 13.22 | 17.32 | 1.3 |
index_join | 1.34 | 4.91 | 3.7 |
index_join_scan | 1.25 | 2.11 | 1.7 |
index_scan | 34.33 | 64.47 | 1.9 |
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 | 64.47 | 1.9 |
types_table_scan | 74.46 | 173.58 | 2.3 |
reads_mean_multiplier | 2.1 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 6.21 | 6.21 | 1.0 |
oltp_insert | 2.91 | 3.02 | 1.0 |
oltp_read_write | 7.56 | 15.0 | 2.0 |
oltp_update_index | 3.07 | 3.19 | 1.0 |
oltp_update_non_index | 3.19 | 3.13 | 1.0 |
oltp_write_only | 4.25 | 7.3 | 1.7 |
types_delete_insert | 5.99 | 6.79 | 1.1 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.7 |
---|