Skip to content

Dolt 0.15.0 released

Compare
Choose a tag to compare
@oscarbatori oscarbatori released this 28 Feb 00:15
4f1cfb6

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.