Examples - SurrealTools/Documentation GitHub Wiki

Rename a field from linked record

Select country_id.{id, countryName: name}

Assert Value within range

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;

Custom Function

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);
⚠️ **GitHub.com Fallback** ⚠️