Examples - SurrealTools/Documentation GitHub Wiki
Select country_id.{id, countryName: name}
DEFINE FIELD num ON TABLE data TYPE int ASSERT $value IN 1..=256;
LET $item = RETURN (SELECT * FROM array::flatten($user.cart) WHERE product == $product_id);
UPDATE $user SET cart += {
LET $item = IF not($item) THEN
CREATE cart_item SET quantity = $quantity, product = $product_id, user = $user
ELSE
UPDATE $item SET quantity = $quantity
END;
RETURN $item.id;
};
SELECT * FROM array::flatten($user.cart) FETCH product;
DEFINE FIELD managers ON TABLE organisation VALUE <future> {
LET $id = master_organisation;
LET $inherited = SELECT managers FROM organisation WHERE id IN [$id];
return array::union(
$inherited[0].managers || [],
manager_roles || []
);
};
SELECT {
LET $data = SELECT title FROM $parent.song_book_id;
RETURN $data[0].title;
} AS song_book_title FROM songs;
DEFINE FUNCTION fn::achieve(
$user: record(user),
$achievement: record(achievement)
) {
LET $result = IF $auth.username != $user.name THEN
RETURN "Not authorized to add achievement for other acount than your.";
ELSE IF array::len((SELECT VALUE time FROM achieve WHERE in = $user AND out = $achievement)) > 0 THEN
RETURN "You already achieve this achievement.";
ELSE {
RELATE $user->achieve->$achievement SET time = time::now();
RETURN "Achievement added with success";
}
END;
RETURN $result;
};
or even simpler:
DEFINE FUNCTION fn::achieve(
$user: record(user),
$achievement: record(achievement)
) {
RETURN IF $auth.username != $user.name THEN
RETURN "Not authorized to add achievement for other acount than your.";
ELSE IF array::len((SELECT VALUE time FROM achieve WHERE in = $user AND out = $achievement)) > 0 THEN
RETURN "You already achieve this achievement.";
ELSE {
RELATE $user->achieve->$achievement SET time = time::now();
RETURN "Achievement added with success";
}
END;
};
DEFINE FUNCTION fn::count_and_paged($table: string, $start: number, $limit: number) {
LET $table = type::table($table);
{
total: (SELECT count() FROM ONLY $table GROUP ALL).count,
paged: SELECT * FROM $table START $start LIMIT $limit,
}
};
fn::count_and_paged('user', 0, 5);