Update
update – update objects in a database
[ with with-item [, ...] ]update selector-expr[ filter filter-expr ]set shape ;
update changes the values of the specified links in all objects selected by update-selector-expr and, optionally, filtered by filter-expr.
with
Alias declarations.
The with clause allows specifying module aliases as well as expression aliases that can be referenced by the update statement. See With block for more information.
update selector-expr
An arbitrary expression returning a set of objects to be updated.
filter filter-expr
An expression of type bool used to filter the set of updated objects.
filter-expr is an expression that has a result of type bool. Only objects that satisfy the filter expression will be updated. See the description of the filter clause of the select statement for more information.
set shape
A shape expression with the new values for the links of the updated object. There are three possible assignment operations permitted within the set shape:
set { field := update-expr [, ...] }set { field += update-expr [, ...] }set { field -= update-expr [, ...] }
The most basic assignment is the :=, which just sets the field to the specified update-expr. The += and -= either add or remove the set of values specified by the update-expr from the current value of the field.
Output
On successful completion, an update statement returns the set of updated objects.
Examples
Here are a couple of examples of the update statement with simple assignments using :=:
# update the user with the name 'Alice Smith'with module exampleupdate Userfilter .name = 'Alice Smith'set {name := 'Alice J. Smith'};# update all users whose name is 'Bob'with module exampleupdate Userfilter .name like 'Bob%'set {name := User.name ++ '*'};
For usage of += and -= consider the following Post type:
# ... Assume some User type is already definedtype Post {required property title -> str;required property body -> str;# A "tags" property containing a set of stringsmulti property tags -> str;link author -> User;}
The following queries add or remove tags from some user’s posts:
with module exampleupdate Postfilter .author.name = 'Alice Smith'set {# add tagstags += {'example', 'edgeql'}};with module exampleupdate Postfilter .author.name = 'Alice Smith'set {# remove a tag, if it existtags -= 'todo'};
The statement for <x> in <expr> allows to express certain bulk updates more clearly. See Usage of for statement for more details.
︙
See also |