Dolt 0.15.0 released
We are excited to announce the release of Dolt 0.15.0.
SQL Type System
Previously Dolt had a much narrower type system than MySQL. For ease of use reasons, we just mapped types that we did not support to their "super type", for example using the previous Dolt release:
doltsql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE, PRIMARY KEY (name));
doltsql> describe pet;
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| name | LONGTEXT | NO | PRI | | |
| owner | LONGTEXT | YES | | | |
| species | LONGTEXT | YES | | | |
| sex | LONGTEXT | YES | | | |
| birth | DATETIME | YES | | | |
| death | DATETIME | YES | | | |
+---------+----------+------+-----+---------+-------+
Using this release of Dolt, we can see that richer type choices are respected:
doltsql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE, PRIMARY KEY (name));
doltsql> describe pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | VARCHAR(20) | NO | PRI | | |
| owner | VARCHAR(20) | YES | | | |
| species | VARCHAR(20) | YES | | | |
| sex | CHAR(1) | YES | | | |
| birth | DATE | YES | | | |
| death | DATE | YES | | | |
+---------+-------------+------+-----+---------+-------+
We hope this makes it easier for users to use Dolt in the context of their existing data infrastructure. This change is backward compatible. So old versions of Dolt can read repos written by new versions, and vice versa. That said, you should upgrade to the latest and greatest!
Unions
We also now support unions, a powerful tool for tabulating the results of analyses produced by different queries:
doltsql> (select 1 as this) union (select 2 as this);
+------+
| this |
+------+
| 1 |
| 2 |
+------+
Other
We also improved the performance of the Dolt log table, as well as making our usual assortment of bug fixes and improvements.
Merged PRs
- 435: /go/libraries/utils/iohelp/read_test.go: Skipping TestReadWithMinThroughput due to flakiness
- 434: Added skipped divide by zero bats test
- 432: go.mod: Bump go-mysql-server to support SQL UNION.
- 426: topo sort for log
- 424: Dolt log bats test rework
- 423: /go/libraries/doltcore/sqle/logictest/main/main.go: Add withdurations option
- 422: Made a file system remotes bats test file, added some tests, and move…
…d appropriate tests from remotes.bats. Added a skipped test in remotes.bats for dolt pull stomping a dirty working set - 419: add user agent to grpc calls
- 418: filter commits used by history table
replaces #409 - 417: optimize the map iterator used by the history table
- 416: bh/set-algebra
Package setalgebra provides the ability to perform algebraic set operations on mathematical sets built directly on noms
types. Unlike standard sets in computer science, which define a finitely sized collection of unordered unique values,
sets in mathematics are defined as a well-defined collection of distint objects. This can include infinitely sized
groupings such as the set of all real numbers greater than 0.
See https://en.wikipedia.org/wiki/Set_(mathematics)
There are 3 types of sets defined in this package: FiniteSet, Interval, and CompositeSet.
FiniteSet is your typical computer science set representing a finite number of unique objects stored in a map. An
example would be the set of strings {"red","blue","green"}, or the set of numbers {5, 73, 127}.
Interval is a set which can be written as an inequality such as {n | n > 0} (set of all numbers n such that n > 0) or a
chained comparison {n | 0.0 <= n <= 1.0 } (set of all floating point values between 0.0 and 1.0)
CompositeSet is a set which is made up of a FiniteSet and one or more non overlapping intervals such as
{n | n < 0 or n > 100} (set of all numbers n below 0 or greater than 100) this set contains 2 non overlapping intervals
and an empty finite set. Alternatively {n | n < 0 or {5,10,15}} (set of all numbers n below 0 or n equal to 5, 10 or 15)
which would be represented by one Interval and a FiniteSet containing 5,10, and 15.
There are 2 special sets also defined in this package: EmptySet, UniversalSet.
The EmptySet is a set that has no values in it. It has the property that when unioned with any set X, X will be the
result, and if intersected with any set X, EmptySet will be returned.
The UniversalSet is the set containing all values. It has the property that when unioned with any set X, UniversalSet is
returned and when intersected with any set X, X will be returned. - 415: publishrelease/install.sh: install -d /usr/local/bin if it does not exist.
- 414: added RepoStateReader interface
- 413: Added a couple more test cases in the limit test
- 412: Skipped bats test for DATE_ADD and DATE_SUB in the where clause
- 411: Added new test repository with TypeInfo changes
- 408: Added a group by bats test highlighting inconsistent behavior
- 406: Bumped version for release
- 404: iterate a map backward
How much do you hate this? - 403: Tim/dateformat bats
- 68: sql/{parse,plan}: Add support union parsing and execution.
This is still partial. We need type coercion and schema validation to be done
in the analysis phase. - 67: Zachmu/datemath
Fixed panic when using interval expressions in WHERE clauses. - 66: Negative Numbers
Somehow I was able to not only forget to include logic to handle negative numbers, but I forgot to also write a test for them too, and even implemented this library in dolt and didn't test for negative numbers there. I'm actually surprised. It wasn't even caught in peer review. It's the simplest things that we forget to check, and those are the ones that can cause the most havoc.
Closed Issues
- 420: Dolt log -n 10 returns wrong results. Dolt log produces correct result.