kw from
Контекстное слово — выражение запроса (§5.9)
Список слов: §1.4
Синтаксис
SelArm = ( "recv" Pattern "from" Expr | "send" Expr "to" Expr | "after" Expr | "else" ) "=>" Expr ;Query = "from" Pattern "in" Expr { "where" Expr } [ "order" "by" Ord { "," Ord } ]
[ "group" "by" Expr "into" Ident ] [ "skip" Expr ] [ "take" Expr ]
[ "load" "(" IdentList ")" ] [ "select" Expr ] ;Грамматика: Прил. A
Определяется в
- 5.9 Выражения запросов — Форма: from x in источник (where e)\* (order by e (asc|desc)?, …)?
- 10.5 Топики — рассылка по кластеру — Топик — распределённый broadcast с хранением во встроенном хранилище.
- 1.4 Ключевые слова — Зарезервированные (нельзя использовать как имена)
- 8.9 Программная транзакционная память — atomic { … } выполняет тело как сериализуемую транзакцию над TVar.
- 3.6 Псевдонимы, новые и уточнённые типы — distinct T создаёт новый номинальный тип с представлением T.
- 4.3 Конструирование и конструкторы — Литерал. T{ f1: e1, f2, ..base }
- 8.7 Каналы и select — tx.send(x) приостанавливается при заполненном буфере; cap
- 9.2 Номера полей и схема — Каждое поле data и каждый вариант enum имеет стабильный тег (номер в wire-формате).
Примеры
let top = from o in db.Order
where o.userId == uid && o.total > MIN_TOTAL
order by o.createdAt desc
skip page * PAGE_SIZE
take PAGE_SIZE
load(items)
let names = from u in users where u.active select u.name // List в памяти
let byRole = from u in users group by u.role into g select (g.key, g.count())@retain(ORDER_EVENTS_RETENTION)
topic OrderEvents: OrderEvent sharded by .userId
emit OrderEvents(e) // публикация
for await e in OrderEvents.subscribe(key: uid, from: .Latest) { … }
for await e in OrderEvents.subscribe(group: "indexer") { index(e) }— 10.5 Топики — рассылка по кластеру
Связанные диагностики
query-not-sql, topic-without-journal, atomic-effects, refinement-violated, bad-init, missing-field, must-close, positional-literal, sealed-literal, schema-attr, schema-break