Merged PRs
dolt
- 8261: liuliu/graph-spaces-fix
- 8259: liuliu/graph-remove-extra-s
- 8258: Bug fix: Testing for invalid global configuration dir permissions earlier, to prevent a panic
Customer issue: #8250 - 8252: go/store/nbs: Fix table_index for table files with so many chunks that certain index slice operations overflow a uint32.
- 8251: liuliu/color-string-fix
- 8248: support \checkout, \merge, \show
Until now there was an awkward behavior indolt sql
shell where the \checkout and \merge commands didn't really play nice when they could have. Specifically, if you useddolt sql
and it was connected to a remote host, then running\checkout
would give you an error telling you to stop the server. That is no longer the case. \checkout and \merge will work well in thedolt sql
shell when connected to a remote host now.
Also added the \show command
And made the expect tests more correct and expanded. - 8247: Fix displaying AddressMap non-leaf nodes in
noms show
This fixes an index out of bounds panic when trying to display AddressMap non-leaf nodes innoms show
.
I didn't add a regression test, because it turns out that allnoms show
tests only work against the old deprecated format, so adding more tests to the test suite wouldn't actually do anything. It's also mostly unused: we basically only use it as partsplunk.pl
to visualize chunks for debugging.
Instead of fixing the test suite, it would be a better use of my time to fully deprecatenoms show
and switchsplunk.pl
to usedolt show
instead. Especially now that #8143 added support for visualizing prolly tree chunks indolt show
, bringing it to feature parity withnoms show
. - 8245: Feature: support for --empty=[drop|keep] in dolt_rebase()
Adds support for the--empty
option todolt_rebase()
. This option controls how commits that become empty are handled. For example, if a branch is rebased and all the changes in one commit on that branch have already been applied to the upstream branch, then when that commit is reapplied, it will end up being empty. The two initially supported values aredrop
andkeep
. (Git also supports astop
value, which lets the user manually intervene.)
Also adds support for the--allow-empty
flag fordolt_cherry_pick()
. This flag controls whether Dolt will cherry-pick empty commits (i.e. commits that start off as empty, not commits that become empty after they are applied).
These behaviors are slightly confusing for two reasons: 1) Git distinguishes between a commit that starts off empty and a commit that becomes empty while applying its changes, and 2) rebase and cherry-pick have slightly different default values for these two options. The differences are summarized below.Commits that start empty Commits that become empty rebase
default: keep
, can be overridden with--no-keep-empty
(--keep-empty
is also supported)default: drop
, can be overridden with--empty=keep
. For interactive rebases, the default changes tostop
, which is not supported by Dolt yet.cherry-pick
default: fail
, can be overridden with--allow-empty
default: stop
, can be overridden with--empty=keep
or--empty=drop
. Dolt does not supportstop
yet, so Dolt's default is to fail.Related issue: #7830 - 8239: Rewrite the
dolt show
implementation.
dolt show
had an issue where it would not correctly display the SerialMessage for commits if provided with a hash. This came about as part of a refactor to makedolt show
not depend on theenv.DoltEnv
object, when only exists on locally running servers, and not when connected to a remote server. Unfortunately, it looks like that refactor didn't actually remove the dependency either, asDoltEnv
was still used in every possible invocation ofdolt show
To get it working, I essentially rewrote the implementation ofdolt show
in such a way that it now actually only usesDoltEnv
when it can't get the necessary information from a running server: Basically, if we need to display SerialMessages or resolve branch names, we still rely on a locally running server. This can likely be improved in the future. But calls likedolt show #hash
should now work against remote servers. - 8226: Liuliu/log one line graph
An example of the graph of us-jails:
- 8222: [kvexec] customized operator for count aggregation
Operators that count the number of rows in a relation don't have to deserialize those KV's from storage (ex:select count(y) from xy where x > 1
). There are some circumstances where we have to check for field nullability, but otherwise we can just count the KV's returned by the source iterator. - 8129: Add optimized diffing and three-way merge of indexed JSON Documents.
This PR adds some additional tests, but I plan on adding more tests around large documents before merging. Still, the implementation is ready for review.
This adds a new JSON diffing algorithm designed forIndexedJSONDocument
. Because three way merge only operates on values read from a Dolt table, which are always returned as aIndexedJSONDocuemt
, this should mean that the original implementation is no longer used.
go-mysql-server
- 2629: normalize column defaults
This PR adds a new analyzer rule to normalize literal column default values.
This rule ensures that the default value is consistent for the column type (float defaults over int columns are rounded properly).
It does this by evaluating the column default, and placing that into a NewLiteral of the proper type.
Additionally, this ensures that dolt serialization receives consistent values (normalized floats and proper types).
fixes: #8190 - 2627: Fix error when comparing incompatible types in
IndexLookup
s
When building lookups forIndexedTableAccess
, we always convert the key type to the columns type.
This is problematic when the key can't be converted to the column type without error.
The expressions used inFilters
properly handle this conversion, so we should default to that.
Example:This doesn't errror in MySQL. Also without a primary key or secondary index, the query succeeds in dolt.tmp/main*> create table t (i int primary key); tmp/main*> select * from t where i = json_array(); error: '[]interface {}' is not a valid value type for 'int'
- 2625: Bug fix: the
timestamp
function should convert to adatetime
type
MySQL'stimestamp
function, despite its name, actually returns adatetime
type and not atimestamp
type.
MySQL example:Note: We still need to add support for the second, optional parameter tomysql -uroot --protocol TCP -e "select timestamp('1000-01-01 00:00:00');" --column-type-info Field 1: `timestamp('1000-01-01 00:00:00')` Catalog: `def` Database: `` Table: `` Org_table: `` Type: DATETIME Collation: binary (63) Length: 19 Max_length: 19 Decimals: 0 Flags: BINARY +----------------------------------+ | timestamp('1000-01-01 00:00:00') | +----------------------------------+ | 1000-01-01 00:00:00 | +----------------------------------+
timestamp()
.
Customer issue: #8236
Closed Issues
- 4367: Add support for
--graph
option indolt log
- 8190: Table schema stores unnormalized expression for default values, which leads to unexpected behaviors.
- 8236: Issue with datetime(6) column using timestamp(6) range
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 1.16 | 0.6 |
groupby_scan | 12.98 | 16.71 | 1.3 |
index_join | 1.34 | 2.66 | 2.0 |
index_join_scan | 1.27 | 2.14 | 1.7 |
index_scan | 34.33 | 55.82 | 1.6 |
oltp_point_select | 0.18 | 0.3 | 1.7 |
oltp_read_only | 3.43 | 5.88 | 1.7 |
select_random_points | 0.33 | 0.65 | 2.0 |
select_random_ranges | 0.39 | 0.81 | 2.1 |
table_scan | 34.95 | 55.82 | 1.6 |
types_table_scan | 75.82 | 144.97 | 1.9 |
reads_mean_multiplier | 1.7 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.98 | 5.88 | 0.7 |
oltp_insert | 3.75 | 2.97 | 0.8 |
oltp_read_write | 8.43 | 11.87 | 1.4 |
oltp_update_index | 3.82 | 2.97 | 0.8 |
oltp_update_non_index | 3.89 | 2.91 | 0.7 |
oltp_write_only | 5.37 | 6.09 | 1.1 |
types_delete_insert | 7.7 | 6.43 | 0.8 |
writes_mean_multiplier | 0.9 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 99.52 | 39.06 | 2.5 |
tpcc_tps_multiplier | 2.5 |
Overall Mean Multiple | 1.70 |
---|