Merged PRs
dolt
- 5809: Add
dolt_ignore
system table.
Some notes:- The implementation of
dolt_ignore
is slightly more complicated than the implementation of existing writable persisted system tables (likedolt_procedures
anddolt_docs
), but I think it's better this way.
For context, tables likedolt_procedures
exist as DoltTables stored in the user's db alongside user created tables. The user can read and write from these tables, but cannot create, drop, or alter them. CLI commands reference these tables and create them if they don't already exist. This works, but it means that the logic that governs these tables is spread out across the different commands that interact with them, and the user can't interact with them until running a command that creates them.
dolt_ignore
works slightly differently: it's backed by a DoltTable, but it also has its own sql.Table implementation. This allows us to define behavior for when the backing table hasn't been created yet: reads return an empty index, and writes create the table. As far as the mysql engine is concerned, this table always exists. So for the commands that care aboutdolt_table
, the logic can be simpler. - I'm not entirely happy with the implementation: I end up defining the schema twice, once as an sql.Schema, and once as a schema.Schema. I couldn't find an easy way to convert between them. If there's discrepancies between the two definitions, it could cause issues.
dolt_ignore
only works with FORMAT_DOLT at the moment. If using FORMAT_LD, the table will be ignored bydolt add
anddolt_stash.
There's no reason it can't work with FORMAT_LD, but the logic for getting a RowIter from an Index is slightly different and I didn't invest the time to figure it out. This is currently only documented in a comment, but can be documented more widely if needed.dolt_ignore
only affects the staging and stashing of untracked files. This is consistent with git's behavior. If a table that has already been added,dolt_ignore
will not prevent further changes to it. It also won't prevent a staged table from being renamed, either to or from an ignored table name.
- The implementation of
Closed Issues
Latency
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.66 | 1.4 |
groupby_scan | 12.08 | 16.41 | 1.4 |
index_join | 1.16 | 4.03 | 3.5 |
index_join_scan | 1.12 | 2.07 | 1.8 |
index_scan | 30.26 | 54.83 | 1.8 |
oltp_point_select | 0.14 | 0.49 | 3.5 |
oltp_read_only | 2.81 | 8.43 | 3.0 |
select_random_points | 0.29 | 0.75 | 2.6 |
select_random_ranges | 0.34 | 1.14 | 3.4 |
table_scan | 30.26 | 54.83 | 1.8 |
types_table_scan | 70.55 | 173.58 | 2.5 |
reads_mean_multiplier | 2.4 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.0 | 5.77 | 1.2 |
oltp_insert | 2.39 | 2.86 | 1.2 |
oltp_read_write | 6.32 | 15.55 | 2.5 |
oltp_update_index | 2.52 | 2.97 | 1.2 |
oltp_update_non_index | 2.52 | 2.91 | 1.2 |
oltp_write_only | 3.62 | 7.43 | 2.1 |
types_delete_insert | 5.0 | 6.67 | 1.3 |
writes_mean_multiplier | 1.5 |
Overall Mean Multiple | 2.0 |
---|