1.0 Beta 3​

This changelog summarizes new features and breaking changes in EdgeDB 1.0 beta 3 “Ross”.

Migrations​

We continue working on improving our schema and migration tools:

  • Prohibit mixing computed and regular links or properties (#2099).

  • Don’t ask for conversion expressions when changing type of computed link or property (#2658).

  • Fix some migration issues involving rebasing (#2536).

  • Fix backlink processing in SDL schemas (#1824).

  • Improve migration prompts (#2547, #2591).

EdgeQL​

  • Add free shapes (#2533).

    This construct provides a way to arbitrarily structure data without providing a specific underlying object. It is easier to package data that potentially contains empty sets this way, rather than using a tuple:

  1. ```
  2. with U := (select User filter .name like '%user%')
  3. select {
  4. matches := U {name},
  5. total := count(U),
  6. total_users := count(User),
  7. };
  8. ```
  • Add cal::relative_duration, which is similar to duration but instead uses fuzzy units like years, months and days in addition to the more standard units like seconds (#2559).

  • Enforce duration constraints in SQL as opposed to only during casting (#2539).

  • Implement path-like syntax for accessing enum types’ members (#2625):

  1. ```
  2. select Color.Red;
  3. ```
  4. is equivalent to
  5. ```
  6. select <Color>'Red';
  7. ```
  • Allow removal and reordering of enum elements (#2564).

  • Implement assert_single() which allows to perform a cardinality check in run-time (#2695):

  1. ```
  2. select assert_single((select User filter .name = "Unique"));
  3. ```
  4. ```
  5. {default::User {id: ...}}
  6. ```
  7. ```
  8. select assert_single((select User))
  9. ```
  10. ```
  11. ERROR: CardinalityViolationError: assert_single violation: more than
  12. one element returned by an expression
  13. ```
  • Adjust the precedence of detached to match that of exists (#2638).

    This makes it apply to shapes in a more intuitive fashion:

  1. ```
  2. select detached User {
  3. exclamation := User.name ++ '!'
  4. }
  5. ```
  6. The above expression will now interpret the `User` inside that shape as the same `detached` User as mentioned at the root of the shape.
  • Prohibit backlink syntax for computed links (#2619).

  • Prohibit “$” as the first character in identifiers (#2595).

  • Fix how ?? works with tuples (#2602).

  • Fix cardinality inference of computed links and properties (#2585).

  • Fix how distinct applies to collections of shapes (#2540).

  • Fix some cases of nested unless conflict bugs (#2555).

  • Fix how nested volatile computed expressions get executed (#2545).

  • Fix how using expressions propagate to subtypes (#2543).

GraphQL​

  • Reflect json into a custom GraphQL type (#2782).

    The json values will be reflected into a custom JSON type that renders as seamless JSON. Assuming additional_data is a JSON value, here’s how a GraphQL query would work:

  1. ```
  2. {
  3. Book {
  4. additional_data
  5. }
  6. }
  7. ```
  8. producing:
  9. ```
  10. {
  11. "data": {
  12. "Book": [
  13. {
  14. "additional_data": {
  15. "dimensions": "6 x 8 in",
  16. "# of illustrations": 5,
  17. "illustrator": "Alice White"
  18. }
  19. }
  20. ]
  21. }
  22. }
  23. ```
  24. Theres a limitation that in order for GraphQL type validation to work JSON values have to be passed as variables.
  • Remove the helper stdgraphql module as it is no loger needed (#2692).

  • Fix an issue with inline fragments (#1800).

TLS​

We’ve implemented RFC 1008: TLS and ALPN. With Transport Layer Security (TLS) Protocol enabled by default, it is possible to leverage the TLS Application-Layer Protocol Negotiation (ALPN) Extension for secure and reliable protocol selection on top of the TLS transport, allowing EdgeDB to multiplex different frontend protocols like the binary protocol and the HTTP-based protocol on the same port.

Command-Line Tools​

We’ve changed some of the CLI commands and groupings. There are some top-level “frequently used” commands such as edgedb dump, edgedb restore, edgedb migrate, edgedb query, edgedb info and edgedb cli upgrade. Other commands are grouped into categories: edgedb configure, edgedb migration, edgedb list, edgedb describe, edgedb instance, edgedb project and edgedb server.

Here’s a more comprehensive list of the CLI commands:

SUBCOMMAND

DESCRIPTION

dump

Create a database backup

restore

Restore a database backup from file

configure

Modify database configuration

migration apply

Bring current database to the latest or a specified revision

migration create

Create a migration script

migration status

Show current migration state

migration log

Show all migration versions

migrate

An alias for edgedb migration apply

database create

Create a new DB

describe object

Describe a database object

describe schema

Describe schema of the current database

list

List matching database objects by name and type

query

Execute EdgeQL queries

info

Show information about the EdgeDB installation

project init

Initialize a new or existing project

project unlink

Clean-up the project configuration

project info

Get various metadata about the project

project upgrade

Upgrade EdgeDB instance used for the current project

instance create

Initialize a new EdgeDB instance

instance list

Show all instances

instance status

Show status of a matching instance

instance start

Start an instance

instance stop

Stop an instance

instance restart

Restart an instance

instance destroy

Destroy an instance and remove the data

instance link

Link a remote instance

instance unlink

Unlink a remote instance

instance logs

Show logs of an instance

instance upgrade

Upgrade installations and instances

instance revert

Revert a major instance upgrade

instance reset-password

Reset password for a user in the instance

server

Manage local EdgeDB installations

cli upgrade

Upgrade the edgedb command-line tool

Bindings​

We’ve changed the location where EdgeDB stores credentials and other instance information, so all the bindings need to be updated to their latest versions in order to properly work with this release.