Merged PRs
dolt
- 4372: go/dotlcore/sqle/writer: Handle
UNIQUE KEY
s overlapping with primary keys
fixed #4369 - 4371: .github/workflows: ci-bats-*.yaml: Try to paper over flakey sql-server port selection in tests with BATS_TEST_RETRIES.
- 4370: proto,go: Add RepoPath field to remotesapi Request messages. Pass it along in remotestorage ChunkStore.
- 4366: Fix bug in colDiffs
Fixes #4326 - 4364: JSON read perf
Re: dolthub/go-mysql-server#1270
types_table_scan
from425 ms/q
->134 ms/q
, ~70% faster. The nightly benchmark should be around 2.5 (from 7.9). - 4355: json_table tests
Test PR for dolthub/go-mysql-server#1261 - 4347: Add -A (--ALL) to
dolt commit
andCALL DOLT_COMMIT
-A
adds all tables (including new tables) to the staged set before committing.
Closes #4309 - 4301: have
TempTableFilesDir()
return err if.dolt
is not found
depends on dolthub/go-mysql-server#1256
If.dolt
dir is removed during runinng sql-server. Any connections will fail and it will cause the server to stop.
go-mysql-server
- 1273: fix test ordering
some tests on dolt were failing forJSON_TABLES
, due to abiguousORDER BY
Companion PR: #4355 - 1272: Removed exponential time complexity for foreign key analysis
This fixes dolthub/go-mysql-server#1268
Foreign key analysis created acyclical trees that were traversed during query execution to emulate cascade operations. This meant that cyclical foreign keys were converted to an acyclical tree. Normally this isn't possible as cyclical trees are infinitely traversable, but MySQL has a depth limit of 15, which allowed us to materialize an acyclic tree with a maximum height of 15 nodes. This, however, lead to trees with an exponential number of nodes: roughly(number_of_fks)¹⁵ × 1.5
nodes in the tree. With just 3 foreign keys, we'd get a tree with roughly 22 million nodes, which would take forever to process.
This PR completely changes the analysis step to now generate cyclical trees. In addition, depth checks are now properly implemented (during query execution rather than during analysis), being represented by a returned error once the depth limit has been reached. Interestingly, MySQL is supposed to process up to 15 operations (returning an error on the 16th), but cyclical foreign keys will error on the 15th operation. I think this is a bug in MySQL, but nonetheless the behavior has been duplicated here.
I also updated thetimestamp_test.go
file to grab an unused port. This prevents test failures due to requesting an already-in-use port. Not related to this PR in particular, but it was annoying to deal with so I fixed it. - 1271: enginetest: Add repro enginetest for unique key error
repro for Dolt bug #4372 - 1270: No new context for every json SQL convert
perf here: #4364 - 1269: cleanup top-level directories
- 1261: use json_table in crossjoin that references table column on left
Fix for: #4340
To use a column as theexpr
argument tojson_table
, the column must be part of aCROSS JOIN
and has to be on the left side of a cross join (reference). Oddly, you cannot reference the column directly nor through a subquery (stackoverflow reference).
As a result, this is partially an aliasing issue, which I do address in this PR.
Added special column resolving rules forJSONTable
for when its under a Join and subquery expression - 1256: add check for chan is closed in Listener.Close()
#4301 depends on this PR.
A test for it is added in #4301 - 1253: Support Varchar(MAX)
related to #2261
Closed Issues
- 2261: Support VARCHAR(MAX)
- 4369: Dolt panic on duplicate insertion when a column is part of both a primary key and unique key
- 4326: UI issue for
dolt diff
and dropped columns - 4235: Deleting database directory when a running server is using it panics
- 1441:
dolt_diff_*
tables can't handle dropped columns from the tables they describe. - 4309: Add
-A
option todolt commit
to add all new and modified tables - 4176: Collation not respected properly by
LIKE
andREGEXP_LIKE
- 4349: Is there a way to release momory?
- 1268: Analyzing self-referential foreign keys triggering an infinite loop
Latency
Current Default Format (__LD_1__
)
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.96 | 6.55 | 3.3 |
groupby_scan | 12.52 | 22.69 | 1.8 |
index_join | 1.18 | 16.71 | 14.2 |
index_join_scan | 1.12 | 16.12 | 14.4 |
index_scan | 30.26 | 73.13 | 2.4 |
oltp_point_select | 0.15 | 0.57 | 3.8 |
oltp_read_only | 3.02 | 9.56 | 3.2 |
select_random_points | 0.31 | 1.39 | 4.5 |
select_random_ranges | 0.36 | 1.37 | 3.8 |
table_scan | 30.81 | 69.29 | 2.2 |
types_table_scan | 69.29 | 223.34 | 3.2 |
reads_mean_multiplier | 5.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 2.81 | 19.65 | 7.0 |
oltp_insert | 1.55 | 7.98 | 5.1 |
oltp_read_write | 5.28 | 36.89 | 7.0 |
oltp_update_index | 1.58 | 9.39 | 5.9 |
oltp_update_non_index | 1.47 | 6.55 | 4.5 |
oltp_write_only | 2.39 | 26.2 | 11.0 |
types_delete_insert | 2.91 | 155.8 | 53.5 |
writes_mean_multiplier | 11.9 |
Overall Mean Multiple | 8.0 |
---|
New Format (__DOLT__
)
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.76 | 1.4 |
groupby_scan | 12.08 | 17.32 | 1.4 |
index_join | 1.18 | 4.57 | 3.9 |
index_join_scan | 1.12 | 3.89 | 3.5 |
index_scan | 30.26 | 53.85 | 1.8 |
oltp_point_select | 0.15 | 0.46 | 3.1 |
oltp_read_only | 2.91 | 8.28 | 2.8 |
select_random_points | 0.3 | 0.74 | 2.5 |
select_random_ranges | 0.35 | 1.12 | 3.2 |
table_scan | 30.81 | 63.32 | 2.1 |
types_table_scan | 69.29 | 193.38 | 2.8 |
reads_mean_multiplier | 2.6 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 3.02 | 10.84 | 3.6 |
oltp_insert | 1.58 | 2.81 | 1.8 |
oltp_read_write | 5.18 | 16.71 | 3.2 |
oltp_update_index | 1.61 | 4.91 | 3.0 |
oltp_update_non_index | 1.55 | 5.18 | 3.3 |
oltp_write_only | 2.3 | 8.28 | 3.6 |
types_delete_insert | 3.13 | 12.08 | 3.9 |
writes_mean_multiplier | 2.9 |
Overall Mean Multiple | 2.7 |
---|