This release contains potentially breaking behavior changes having to do with transaction behavior and database naming.
CALL dolt_checkout('mybranch')
is no longer an error if the currently checked out branch has uncommitted changes.use mydb/mybranch; select * from information_schema.columns
and similar queries used to returntable_schema
with the branch-qualified database name.information_schema
tables,show databases
, etc. now always contain only base, unqualified database names. Thedatabase()
function still returns the name of the database in the connection string or inuse
statements.
Per Dolt's versioning policy, this may require users to update code that expects call dolt_checkout()
to fail on a dirty working set. Thus, the minor (major.minor.patch) version bump.
Merged PRs
dolt
- 6137: update maven version for orm tests
- 6133: Update README.md
Add some notes on where the final go binary goes for folks not familiar with golang - 6122: Re-merge of #5968 (transactions and db naming)
This reverts commit bb03b8c. - 6117: Moved remote bats into their own workflow so they don't cancel local …
…bats when they fail - 6107: Skip
remotes-sql-server.bats
andsql-server.bats
when running BATS in remote-engine configuration.
This should prevent the test failures that are blocking PRs, even if I don't fully understand why these test failures are happening. - 6011: Rewrite
dolt status
subcommand to use SQL queries to generate results.
Rewritedolt status
subcommand to use SQL queries to generate results.
This change addsremote
column to thedolt_branches
table. This column identifies the remote for the branch.
This change addsdolt_count_commits
function, which returns the number of commits between two commits.
Added more BATS tests fordolt status
. - 5968: Transaction and DB name resolution changes
This change introduces two major behavior changes to how dolt manages database names and session state in transactions:- It's now possible to edit different branch heads and databases without explicitly switching to a new working set via
dolt_checkout()
. E.g., this session updates the branchb1
:
These database-qualifieduse mydb; insert into `mydb/b1`.t1 values (1); commit;
INSERT
/UPDATE
etc. statements used to silently drop data if the database named wasn't the current database, in some cases. They now work correctly in all cases. We still fail transactions that attempt to make changes to more than one working set for now, but this restriction will be removed in a future revision.
2) The behavior ofdolt_checkout()
has changed. It is no longer an error to calldolt_checkout()
with a dirty working set.USE mydb/branch
is now almost exactly equivalent todolt_checkout('branch')
.dolt_checkout()
now has the side-effect of setting the session's current DB name to the base name of the database. E.g. afteruse mydb/branch
,select database(), active_branch()
returnsmydb/branch, branch
. If you thencall dolt_checkout('branch2')
, then the same query returnsmydb, branch2
.dolt_checkout
is different fromUSE
statements in that it changes which branch the unqualified database name (mydb
) resolves to for this session. - It's now possible to edit different branch heads and databases without explicitly switching to a new working set via
go-mysql-server
- 1821: Bug fix: The result schema of
SELECT INTO
should always be an empty schema
SELECT INTO
currently returns it's child node's schema as its result schema, but it doesn't actually return row data in that schema. This causes a problem over a SQL connection when clients see a result schema and then see row data that doesn't match that schema. This causes clients to freak out and close the connection from their side. SinceSELECT INTO
always sends its results to a file or SQL vars (and NOT over the SQL connection), its result schema should always be the empty schema.
Fixes: #6105 - 1819: Lazy load large character set encoding weight maps.
Improves dolt startup times substantially. - 1818: Throw correct error for non-existent qualified column on table function
Fix for: #6101 - 1817: Ignore FULLTEXT in CREATE TABLE
This change allows us to ignore any FULLTEXT keys when usingCREATE TABLE
. This should unblock customers who just need their statements to parse, but don't actually need the functionality of FULLTEXT. We still error when trying to manually add a FULLTEXT index usingALTER
orCREATE INDEX
. Since this isn't really "correct" behavior, I did not add any tests. - 1816: Support
TableFunction
aliasing
Added string field toexpression.UnresolvedTableFunction
to so an alias can be specified.
Removed the ruledisambiguate_table_functions
, TableFunctions will default to using function name as table name when alias isn't provided.
Companion PR: dolthub/vitess#244
Fix for: #5928 - 1814: Add filters to memo
Scalar expressions added to memo along with scalar properties, expression ids, filter closures. Goal here is equivalent behavior to before, just with filters represented differently. Filter organization mostly mirrors the plan package, except scalar and relational expressions are both represented as expression groups here. Done in a rush, still back and forth on whether there should be an interface there.
Additionally:
scalar expressions added to memo along with scalar properties, expression id
rewrites join planning and costing to use bitset representations of filters
refactors codegen so definition files are yaml, source is compiled independently from target code
The organization is bit wonky b/c this should be using my name resolution symbol tables, and the entire tree should be memoized not just the join tree (used temporary solutions for the problems created by both of these).
Re: #5993 - 1791: Functional dependencies
Functional dependencies track 1) key uniqueness, constant propagation, column equivalence, nullability sets.
This information is built bottom-up from tables scans through projections, and is used to answer certain questions about relational nodes:- What is the equivalence closure for a join condition?
- Are a set of filters redundant?
- Do a set of index expressions comprise a strict key for a LOOKUP_JOIN?
- Does a subquery decorrelation scope have a strict/null-safe key for an ANTI_JOIN?
- Are the grouping columns a strict key of the table (only_full_group_by is unnecessary)
- Is the relation sorted on a given column set? (is a Sort already enforced)
- Is a relation constant? (Max1Row)
Questions (1) and (3) contribute towards fixing this issue: #5993. Question (2) contributes to filter pruning. Question (4) is relevant for this issue: #5954.
- 1787: Changes to USE and prepared statements
This introduces two changes to how databases are resolved:- USE statements now are handled by the Session with a new interface
- Tables in prepared statements now retain a copy of their Database implementation, rather than re-resolving it by name during execution.
Both of these changes are to support Dolt's new database name semantics.
vitess
- 245: allow
event
as table and column name
The PR allowsEVENT
non-reserved keyword to be used as table and column name without quoting.
The missing edge case includes usingEVENT
for user name or host name. - 244: parse
table_functions
with aliases
Syntax support for: #5928 - 243: Add ignore/replace modifiers to load data
- 242: allow
EVENTS
to be parsed as non-reserved keyword
TransferredEVENTS
keywords intonon_reserved_keyword
list, allowing statements usinginformation_schema.events
table to parse.
For some reasonEVENT
cannot be transferred intonon_reserved_keyword
, causing shift/reduce and reduce/reduce conflicts.
Closed Issues
- 6123:
event
reserved keyword quoting differences with MySQL - 6101: Missing column triggers "table not found" error
- 5928: Table function aliases
- 6105: Server connection lost when executing prepared statement from mysql client
- 6119:
dolt sql-client
does not pick database - 6109: Flaky CI tests when running
start_sql_server
- 6082: Commands that use new SQL backend display incorrect error when run outside of a repo
- 5983: LOAD Data into a table with column defaults panics
- 5678: Feature request: Add --skip-empty to DOLT_COMMIT()
- 5982: LOAD DATA does not support replace or ignore options
Latency
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.0 | 2.66 | 1.3 |
groupby_scan | 12.52 | 16.71 | 1.3 |
index_join | 1.21 | 4.33 | 3.6 |
index_join_scan | 1.14 | 2.11 | 1.9 |
index_scan | 30.81 | 54.83 | 1.8 |
oltp_point_select | 0.14 | 0.46 | 3.3 |
oltp_read_only | 2.86 | 7.98 | 2.8 |
select_random_points | 0.29 | 0.75 | 2.6 |
select_random_ranges | 0.35 | 1.06 | 3.0 |
table_scan | 30.81 | 54.83 | 1.8 |
types_table_scan | 71.83 | 155.8 | 2.2 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.99 | 6.32 | 1.1 |
oltp_insert | 2.86 | 3.13 | 1.1 |
oltp_read_write | 6.79 | 15.55 | 2.3 |
oltp_update_index | 2.97 | 3.13 | 1.1 |
oltp_update_non_index | 2.91 | 3.13 | 1.1 |
oltp_write_only | 4.1 | 7.7 | 1.9 |
types_delete_insert | 5.88 | 6.91 | 1.2 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|