Merged PRs
dolt
- 2444: proto: Bump eventsapi proto. Pick up definition for ClientEventType_DUMP.
- 2438: Export method needed for dolthub fix
- 2437: parquet reader for import update and replace
Added parquet reader for import update and import replace only, for import create, schema file is required. - 2432: go/libraries/doltcore/table/untyped/xlsx: Fix bug where this spammed internal representation of the imported rows to Stdout.
These lines were not visible from the CLI because of color, but it still cost
performance. In an embedded context, these could end up in stdout. - 2431: Fix issue with not clearing conflicts correctly
Added change inconflict_source.go
to just returnErrNoConflicts
when there are no conflicts rather than printing an empty table.
Added extra check inresolve.go
to callClearConflicts()
when there are zero rows in conflict after resolving table.
Removed skip statement from bats test that checked for these behaviors.
Edited case-sensitivity test for selectingdolt_conflicts_test
, as that now returns aErrNoConflicts
. - 2426: Move Import Write Path to Engine
- 2403: parquet file type for export
added parquet file type for export, write only
go-mysql-server
- 645: Fix Context Creation
- 641: Expanded index matches, added many index queries
Besides the obvious addition of a ton of tests (ALL of which make use of indexes, which are enforced by theEXPLAIN
statements), this also allows for another scenario to match indexes, although we're still missing a fairly important one. I'll list the scenarios below (assume an index over columns (v1
,v2
,v3
).
The new one we now match: previously expressions had to match the index prefix, but now it has been expanded to require only the first index expression be matched. Therefore, the filterWHERE v1 = 5 AND v3 = 2
is now used by indexes as we can still filter onv1 = 5
using the same principles that partial indexes use.v3 = 2
may not allow for rows to be skipped on the integrator's side when reading from their internal store, but may allow for them to be skipped when returning to the engine (removing the conversion to asql.Row
from the integrator's implementation which should be a fairly substantial speed increase).
This has the added consequence that we can properly combine all ranges that make use of a specific index. That is,
will now combine the two ranges (separated by(v1 > 1 AND v3 > 1) OR (v1 < 4 AND v2 < 4)
OR
). Reducing the prefix limitation has greatly increased the index match possibility. Just to note, the returned indexes are sorted by whether they're an exact match, then by how many expressions are a prefix, then by the index size, and lastly by the index name, so you should always get the "best" index for any given set of expressions.
The above works in the case of a single index existing over the three columns. If (v1
,v3
,v2
) is another index then the above example will match to two different indexes (both being a perfect prefix to an index). There is a way to get around this by taking note of which index has been used previously if multiple indexes share the same columns (or some indexes are subsets/supersets of some other indexes), however this was attempted and abandoned due to the added complexity and time it would take to implement.
Also built off of this, we cannot match
As the(v1 > 1 AND v3 > 1) OR (v2 < 4)
(v2 < 4)
is missing the first index expression (v1
), therefore no index is used here (one is used by MySQL, which was tested to confirm that one should be in this case). Again this would be fixed by taking note of which indexes have already been used, as we only need the prefix to be matched one, and then all other sets of expressions just need to be subsets.
Either way, we should now match many more queries than previously. - 640: Add utilities needed by Dolt import path
- 638: Add support for inserting empty value tuples
There was an edge case where if columns were not provided, it required there to be exactly num columns for value tuples, even if there are default values for those columns.
Added a helper functionexistsNonZeroValues
to avoid this. - 637: crossjoins converted to inner join if parent filter has suitable join condition
Filter predicates can be pushed into Join nodes under certain conditions:- Filter is the parent of a CrossJoin
- Predicate expressions cover the two Join node dependency trees
Filter predicates have to be divided specially to maintain logical equivalence. OnlyAND
conjugates can be split and checked individually for join candidacy. If multiple conjugate trees match the join expression, a new conjugateAND
of the subtrees are used as the join condition.
Nested CrossJoins should be converted to InnerJoins if the parent filter has suitable join comparisons for each.
- 636: Fixed small issue with used expressions and partial indexes
vitess
- 92: parser can detect insert into () values <tuple_list>
added new case for insert_data
should be able to correctly parseinsert into test_tb values ()
insert into test_tb () values ()
insert into test_tb values (), (), ...
insert into test_tb () values (), (), ...
- 91: added FORMAT keyword
added format expression keywordClosed Issues
- 2390: Table with new columns not detected as modified
- 2336: Resolving conflicts without committing does not allow you to continue to modify the working set
- 2420: Support empty VALUES, column list on INSERT
- 2381: Dolt dump to parquet
- 643: pls dont rush the API 1.0 but do think properly and optimize for performance
- 172: Support for prepared statements