An alias is a named set of values produced by an expression.
Aliases can be referred to like regular types in other expressions. Aliases over queries that return objects essentially define a dynamic subtype of the original object type, which may have additional properties and links as may be specified by a shape in the alias expression.
Consider the following:
type User {
required property name -> str;
multi link friends -> User;
}
alias UserAlias := User {
# declare a computable link
friend_of := User.<friends[IS User]
};
One benefit that the UserAlias
provides is making EdgeQL queries
more legible:
SELECT
User.<friends[IS User].name
FILTER
.name = 'Alice';
# vs
SELECT
UserAlias.friend_of.name
FILTER
.name = 'Alice';
Another benefit is that this UserAlias
can now be exposed via
GraphQL providing access to the computable
link friend_of
, that would otherwise be inexpressible in GraphQL:
{
UserAlias(
filter: {name: {eq: "Alice"}}
) {
friend_of {
name
}
}
}