@omgbase/oqx 0.23.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +71 -2
- package/dist/ast.d.ts +53 -1
- package/dist/ast.d.ts.map +1 -1
- package/dist/ast.js +7 -1
- package/dist/ast.js.map +1 -1
- package/dist/build.d.ts +9 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +11 -2
- package/dist/build.js.map +1 -1
- package/dist/engine.d.ts +4 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +188 -13
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/optimize/analysis.d.ts.map +1 -1
- package/dist/optimize/analysis.js +24 -1
- package/dist/optimize/analysis.js.map +1 -1
- package/dist/optimize/ir.d.ts +8 -1
- package/dist/optimize/ir.d.ts.map +1 -1
- package/dist/optimize/ir.js +3 -0
- package/dist/optimize/ir.js.map +1 -1
- package/dist/optimize/rules.d.ts.map +1 -1
- package/dist/optimize/rules.js +5 -3
- package/dist/optimize/rules.js.map +1 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +467 -22
- package/dist/parser.js.map +1 -1
- package/dist/print.d.ts.map +1 -1
- package/dist/print.js +25 -0
- package/dist/print.js.map +1 -1
- package/dist/references.d.ts +6 -4
- package/dist/references.d.ts.map +1 -1
- package/dist/references.js +104 -4
- package/dist/references.js.map +1 -1
- package/dist/resolve.d.ts.map +1 -1
- package/dist/resolve.js +27 -1
- package/dist/resolve.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/walk.d.ts +1 -1
- package/dist/walk.d.ts.map +1 -1
- package/dist/walk.js +15 -0
- package/dist/walk.js.map +1 -1
- package/package.json +1 -1
- package/src/ast.ts +63 -2
- package/src/build.ts +13 -4
- package/src/engine.ts +186 -13
- package/src/index.ts +1 -1
- package/src/optimize/analysis.ts +18 -1
- package/src/optimize/ir.ts +11 -1
- package/src/optimize/rules.ts +5 -3
- package/src/parser.ts +387 -22
- package/src/print.ts +27 -3
- package/src/references.ts +95 -8
- package/src/resolve.ts +29 -2
- package/src/version.ts +1 -1
- package/src/walk.ts +18 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ All notable changes to `@omgbase/oqx` are recorded here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/) (pre-1.0: a minor bump may break).
|
|
6
6
|
|
|
7
|
+
## [0.25.0] - 2026-10-16
|
|
8
|
+
|
|
9
|
+
### Minor
|
|
10
|
+
- **OQX 0.25 — `flatten`** (`spec/oqx` 0.24 → 0.25; new suite `flatten` (74 cases): 1473 → 1547 fixtures; every `expect.ast` body gains `flatten: []`). The clause order gains `flatten <expr> [{ … }] [as <name>]` after `follow` and before `group by` (`select from where frontier follow flatten group by having order by limit offset`) — the one clause that may repeat, each fanning out the rows the previous produced. **Semantics** (SEMANTICS §25): the expression is read on each row like `where` and its value split by §3's coercion with one softening — an array → one row per element in collection order (an empty one yields none), an object → one row, absent → one row with the name absent (Dataview's rule: a missing field never drops the row), a scalar → one row with the scalar (not the §3 error: nothing is sourced from it). A written block is the receiver-block sugar — the `collect` op over the value, applied first (`flatten tags { where $it != "b" } as t`, `flatten jobs distinct { employer values order by pay desc limit 1 } as j`) — so a block that filters every element away yields no row for that parent and everything a select-position block admits is admitted. Each output row IS the parent row with the name bound at the same scope depth beside the lifts (step 4 of §2: it shadows a same-named property; `flatten tags` rebinds `tags`, `flatten tags as t` keeps the list), read by a later `flatten`, `group by` (a bound name is a key), `having`, the projection, `order by`, a template literal, `^name` from a nested block; `where`/`frontier` run before the fan-out and a `select` alias is not substituted into the expression (as into `order by`). Identity (§16): a flattened row's `$key` is the pair `[parent identity, element identity]` (an element's own `$key` when it is a row or an entry, else its structural value), nested by a chained flatten — what `distinct`, `is` and `follow` compare. Output order is parent order then element order; `order by`, the bounds and every consumer apply to the flattened rows; a single receiver fanned out is plural. **Grammar**: `as <name>` is required unless the expression is a plain navigation (its last segment is the name); `flatten`/`as` are contextual words; the parse errors — `` needs a name (`flatten size(tags) as <name>`) ``, `` duplicate flatten name 't' ``, `` expected a name after `as` ``, a literal word / `$`-name after `as`, `` is an aggregate and cannot be read in `flatten` ``, the clause-order sentence naming `flatten`. **AST** (AST.md): the `flatten` node `{ expr, name }` (`name` always filled; no block field — the block is the `op`), `query.flatten`/`subquery.flatten` (`[]` when none), `CHILDREN` visits it after `follow` (clause `flatten`, the row depth); `print` writes every flatten with `as` (`flatten tags as tags`), so the round-trip law holds; `references` (§5b) reports the expression in clause `flatten` on the rows and the names inside a block on the block receiver's step, and treats a bound name read after its clause as an alias (not a reference), like a lift; `build.flatten(expr, name)`. Engine: `flattenScopes` on every path (top level, walks, blocks); the fast paths (`exists`/`count` short-circuit, the `first` cap, cardinality-only blocks) step aside under `flatten`; `optimized ≡ naive` holds over every fixture. `LANGUAGE_VERSION` 0.25.
|
|
11
|
+
- `@omgbase/oqx-syntax`: `LANGUAGE_VERSION` 0.25; `flatten` highlighted as a clause when a value can follow, `as` as the binder before a plain name; `flatten`/`as` join the contextual words; assets regenerated; parity over every fixture.
|
|
12
|
+
|
|
13
|
+
## [0.24.0] - 2026-10-15
|
|
14
|
+
|
|
15
|
+
### Minor
|
|
16
|
+
- **OQX 0.24 — `group by` with aggregates** (`spec/oqx` 0.23 → 0.24; new suite `group-by` (94 cases): 1379 → 1473 fixtures; `projection::projection may not use count` moved to the positive case). The clause order gains `group by <key>, …` and `having <pred>` after `follow` and before `order by` (`select from where frontier follow group by having order by limit offset`; a destination block adds `depth`). **Grouping** (SEMANTICS §24): the rows a body yields become one row per distinct key tuple — key values compare as identities (absent ≡ `null`, a host row by its id, else structurally), groups come in first-appearance order; a key is `name: expr` or an unaliased navigation named by its last segment (an expression key needs the alias); a **group scope** sits where the rows did, its row the key record (one property per key, the first row's value), so a bare key name reads the key, `$it` is the record, `$key` its structural identity, and **`rows`** is the group's rows — a value and a receiver (`rows collect { select title }`, `rows count { where checked }`, `rows first { … }`, `having rows exists { … }`) inside whose block `^` reads the keys. Any other bare name at the group scope is the parse error `` `title` is not a group key or aggregate — … a key (`group by title`), an aggregate over its rows (`collect(title)`), or the rows themselves (`rows collect { select title }`) `` (plus `` `median(…)` is not an aggregate `` inside an unknown free call). **Aggregates** — reserved free-function names `count sum min max avg collect first last any all`, parsing to a new `aggregate` node wherever written (never a `call`; a host cannot serve a function by these names), legal only in a select item, `having` or `order by` of a grouped body (elsewhere a parse error naming the clause, judged over the alias-resolved `where`/`select`; nesting is an error): `count()` counts rows; every value aggregate sees the **present** values of its argument — `count(e)`, `sum(e)` (`0` of none; a non-number is the eval error `cannot sum …`), `avg(e)` (absent of none), `min(e)`/`max(e)` (§6 ordering, an unorderable value leaves the extreme unchanged, absent of none), `collect(e)` (the list in group order), `first(e)`/`last(e)` — with the SQL-spelled modifier `count(distinct e)` / `collect(distinct e)` (identity dedup; `count(distinct)` reads a field named `distinct`; rejected on `any`/`all`); `any(p)`/`all(p)` test truthiness (absent is false) and short-circuit. **`having`** filters the groups and is alias-resolved like `where` (`having n > 1`); `order by` reads the group scope (`order by count() desc`; an alias there is the unknown-name error); `limit`/`offset` bound the groups; every consumer reduces the groups (`docs count { group by layer }`); a `where`-position test may group (`where jobs exists { group by employer having count() > 1 }`); `distinct` with `group by` is the parse error `` `distinct` is redundant with `group by` ``; a grouped body with no `select` projects its keys and `count: count()` (synthesized by the parser; a key named `count` then needs a `select`); `follow` + `group by` groups the occurrences. **`count { … }` is a value** wherever a value stands (`n: jobs count { }`, `jobs count { } > 2`); `exists`/`none` stay predicates. **AST** (AST.md): `query.groupBy`/`having` and `subquery.groupBy`/`having` (materialized `null`), `groupBy { keys }` and `key { name, expr }` nodes, `aggregate { name, arg, distinct }`; `CHILDREN` visits `groupBy`/`having` after `follow` (clauses `groupBy`, `having`); `print` writes every key aliased (`group by city: city`) in clause order and an aggregate as its call; `references` (§5b) reports key expressions in clause `groupBy` on the rows, an aggregate's argument on the rows, and a name read at the group scope with a `groupBy` step (`"group by city: city"`) — a bare key name there, `rows`, and `^key` from a nested block are not references; `build.groupBy`/`key`/`aggregate`; `isAggregateName`/`AGGREGATE_NAMES` exported. Engine: group scopes (`Scope.group`), `rows` resolution, aggregates over the group's row scopes (lifts and walk intrinsics readable); the optimizer never answers a grouped block from cardinality and treats a grouped block as may-raise; `optimized ≡ naive` holds over every fixture. `LANGUAGE_VERSION` 0.24.
|
|
17
|
+
- `@omgbase/oqx-syntax`: `LANGUAGE_VERSION` 0.24; `group by` and `having` highlighted as clauses, the aggregates (`AGGREGATES`) as builtin functions before `(`, `rows` (`GROUP_ROWS`) as an intrinsic; `group`/`having` join the contextual words; assets regenerated; parity over every fixture.
|
|
18
|
+
|
|
7
19
|
## [0.23.0] - 2026-10-13
|
|
8
20
|
|
|
9
21
|
### Minor
|
package/README.md
CHANGED
|
@@ -58,6 +58,8 @@ once, and every one is optional except `from` at the top level:
|
|
|
58
58
|
from <collection> from ${people}
|
|
59
59
|
[ where <predicate> ] where age >= 18 and jobs exists { where not end }
|
|
60
60
|
[ follow <dest>, … ] follow children { depth 4 } (or: follow before, after; follow ^people { where … })
|
|
61
|
+
[ group by <key>, … ] group by city, decade: (age - age % 10) / 10 (0.24; then select reads keys, aggregates, rows)
|
|
62
|
+
[ having <predicate> ] having count() > 1
|
|
61
63
|
[ order by <expr> … ] order by age desc, name
|
|
62
64
|
[ limit N ] limit 10
|
|
63
65
|
[ offset N ] offset 20
|
|
@@ -72,8 +74,8 @@ projects and `jobs { is current }` filters — see §10). At the top level a
|
|
|
72
74
|
predicate always needs `where`, and `from ${people} count` is an error rather
|
|
73
75
|
than a projection of a field called `count`. Writing a clause out of
|
|
74
76
|
order is a parse error that names the order (`` `select` must come before
|
|
75
|
-
`from` — OQX clause order is select, from, where, follow,
|
|
76
|
-
offset ``). The same body grammar applies inside every consumer block
|
|
77
|
+
`from` — OQX clause order is select, from, where, frontier, follow, group by,
|
|
78
|
+
having, order by, limit, offset ``). The same body grammar applies inside every consumer block
|
|
77
79
|
(`collect { … }`, `exists { … }`, …), where `from` is optional because the
|
|
78
80
|
receiver supplies the rows.
|
|
79
81
|
|
|
@@ -584,6 +586,73 @@ oqx`name from ${people} where jobs exists { offset 1 }`; // ha
|
|
|
584
586
|
A storage adapter that pushes the whole query may translate them to SQL
|
|
585
587
|
`LIMIT`/`OFFSET`; the shipped `SqliteTable` leaves them to the residual.
|
|
586
588
|
|
|
589
|
+
### 8c. Grouping and aggregates (0.24)
|
|
590
|
+
|
|
591
|
+
`group by <key>, …` — after `where`/`follow`, before `order by` — turns the rows
|
|
592
|
+
a body yields into **one row per distinct key tuple**. A key is a bare name
|
|
593
|
+
(`city`), a dotted navigation named by its last segment (`meta.region`), or an
|
|
594
|
+
aliased expression (`decade: (age - age % 10) / 10`); key values compare as
|
|
595
|
+
identities (absent ≡ `null`), groups come in first-appearance order. After the
|
|
596
|
+
grouping the body reads the **group**: a select item, `having` and `order by`
|
|
597
|
+
may name a key, an **aggregate** over the group's rows, or `rows` — the group's
|
|
598
|
+
rows, a value and a receiver (`rows collect { name values }`, `rows count { where
|
|
599
|
+
active }`, `rows first { … }`); any other bare name is a parse error naming it.
|
|
600
|
+
Without a `select` the projection is the keys plus `count: count()`.
|
|
601
|
+
|
|
602
|
+
```js
|
|
603
|
+
oqx`from ${people} group by city`;
|
|
604
|
+
// [{ city: "NYC", count: 2 }, { city: "SF", count: 1 }]
|
|
605
|
+
oqx`select city, n: count(), oldest: max(age), names: collect(name) from ${people} group by city order by count() desc`;
|
|
606
|
+
oqx`select city, active: rows count { where active } from ${people} group by city having count() > 1`;
|
|
607
|
+
oqx`select decade, n: count() from ${people} group by decade: (age - age % 10) / 10 order by decade`;
|
|
608
|
+
oqx`${people} count { group by city }`; // the number of groups
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
The aggregates are reserved free-function names, legal only in a grouped body's
|
|
612
|
+
select, `having` or `order by`: `count()` counts the group's rows; every other
|
|
613
|
+
aggregate sees the **present** values of its argument — `count(e)`, `sum(e)`
|
|
614
|
+
(`0` of none; a non-number is an eval error), `avg(e)`, `min(e)`, `max(e)`
|
|
615
|
+
(OQX ordering; absent of none), `collect(e)` (the list, in group order),
|
|
616
|
+
`first(e)`, `last(e)` — with `distinct` as a modifier (`count(distinct e)`,
|
|
617
|
+
`collect(distinct e)`); `any(p)` / `all(p)` test truthiness over the rows.
|
|
618
|
+
Aggregates do not nest. `having` is the post-group `where` (it may name a select
|
|
619
|
+
alias: `having n > 1`); `order by` reads the group scope and is not rewritten
|
|
620
|
+
against aliases (`order by count()`, not `order by n`); `limit`/`offset` bound
|
|
621
|
+
the groups; `distinct` with `group by` is an error (redundant). `count { … }` is
|
|
622
|
+
now a value wherever a value stands (`n: jobs count { where pay > 1 }`), in or
|
|
623
|
+
out of a group. A nested block may group too (`jobs collect { employer, total:
|
|
624
|
+
sum(pay) group by employer }`), and every consumer reduces the groups (`jobs
|
|
625
|
+
count { group by employer }`). Spec: `spec/oqx/SEMANTICS.md` §24.
|
|
626
|
+
|
|
627
|
+
### 8d. Flatten (0.25)
|
|
628
|
+
|
|
629
|
+
`flatten <expr> [{ … }] [as <name>]` — after `follow`, before `group by`; one or
|
|
630
|
+
more — splits one value into rows: each row becomes one row per element of the
|
|
631
|
+
value, the **parent row with `name` bound** beside its own properties at the
|
|
632
|
+
same depth (`$it`, `^` and a walk's intrinsics unchanged). An array → one row
|
|
633
|
+
per element (an empty list yields none); an object → one row; **absent → one
|
|
634
|
+
row with the name absent** (a missing field never drops the row); a scalar →
|
|
635
|
+
one row with the scalar (not the §3 error — nothing is sourced from it). A plain
|
|
636
|
+
navigation names itself by its last segment (`flatten tags` rebinds `tags`;
|
|
637
|
+
`flatten tags as t` keeps the list readable); anything else needs `as`. The
|
|
638
|
+
block is the receiver block over the elements, applied first (`flatten tags {
|
|
639
|
+
where $it != "b" } as t`; `flatten jobs { employer values order by pay desc limit
|
|
640
|
+
1 } as j`). Flattens chain (`flatten jobs as j flatten j.tags as t`), `where`
|
|
641
|
+
runs before them, `group by` groups the flattened rows (a bound name is a key),
|
|
642
|
+
`order by`/`limit` and every consumer apply to them, and a flattened row's
|
|
643
|
+
`$key` is the pair `[parent, element]`, so `distinct`/`is`/`follow` tell
|
|
644
|
+
`(doc, "a")` from `(doc, "b")`.
|
|
645
|
+
|
|
646
|
+
```js
|
|
647
|
+
oqx`select name, tags from ${people} flatten tags`;
|
|
648
|
+
// [{ name: "Bob", tags: "a" }, { name: "Bob", tags: "b" }, { name: "Carol" }] (Carol has no tags)
|
|
649
|
+
oqx`select name, t from ${people} flatten tags { where $it != "b" } as t`;
|
|
650
|
+
oqx`select t, n: count() from ${people} flatten tags as t group by t order by count() desc`;
|
|
651
|
+
oqx`${people} count { flatten tags as t }`; // the number of (person, tag) rows
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
Spec: `spec/oqx/SEMANTICS.md` §25.
|
|
655
|
+
|
|
587
656
|
### 9. Recursion: `follow`
|
|
588
657
|
|
|
589
658
|
`follow <destination>, …` turns a query into a bounded recursive traversal: the
|
package/dist/ast.d.ts
CHANGED
|
@@ -26,6 +26,12 @@ export declare function isRegexOp(op: string): op is RegexOp;
|
|
|
26
26
|
export type UnaryOp = "!" | "-";
|
|
27
27
|
/** The operator of a `logical` expression. */
|
|
28
28
|
export type LogicalOp = "&&" | "||";
|
|
29
|
+
/** The aggregate functions (SEMANTICS §24, since 0.24): reserved free-function
|
|
30
|
+
* names that reduce a group's rows. `count` takes zero or one argument, every
|
|
31
|
+
* other exactly one; `any`/`all` take a predicate and admit no `distinct`. */
|
|
32
|
+
export type AggregateName = "count" | "sum" | "min" | "max" | "avg" | "collect" | "first" | "last" | "any" | "all";
|
|
33
|
+
export declare const AGGREGATE_NAMES: ReadonlySet<string>;
|
|
34
|
+
export declare function isAggregateName(name: string): name is AggregateName;
|
|
29
35
|
/** One part of a template literal (since 0.21): a decoded text run, or an
|
|
30
36
|
* interpolated expression. The strings are not nodes (no `kind`, no span). */
|
|
31
37
|
export type TemplatePart = string | Expr;
|
|
@@ -98,7 +104,39 @@ export type Expr = {
|
|
|
98
104
|
kind: "template";
|
|
99
105
|
span: Span;
|
|
100
106
|
parts: TemplatePart[];
|
|
107
|
+
} | {
|
|
108
|
+
kind: "aggregate";
|
|
109
|
+
span: Span;
|
|
110
|
+
name: AggregateName;
|
|
111
|
+
arg: Expr | null;
|
|
112
|
+
distinct: boolean;
|
|
101
113
|
} | OpNode;
|
|
114
|
+
/** One `flatten` clause (since 0.25): `flatten <expr> [{ … }] [as <name>]` —
|
|
115
|
+
* the value of `expr`, read on each row, is split into one row per element
|
|
116
|
+
* (SEMANTICS §25), each the parent row with `name` bound at the same scope
|
|
117
|
+
* depth. A written block is the implicit `collect` directive over the value
|
|
118
|
+
* (GRAMMAR §2), so `expr` is then an `op`; `name` is always filled — the alias,
|
|
119
|
+
* or the last segment of a plain navigation when `as` was omitted. */
|
|
120
|
+
export interface Flatten {
|
|
121
|
+
kind: "flatten";
|
|
122
|
+
span: Span;
|
|
123
|
+
expr: Expr;
|
|
124
|
+
name: string;
|
|
125
|
+
}
|
|
126
|
+
/** One `group by` key (since 0.24): `name: expr`, or an unaliased navigation
|
|
127
|
+
* keyed by its last segment, exactly as a `select` item is. */
|
|
128
|
+
export interface GroupKey {
|
|
129
|
+
kind: "key";
|
|
130
|
+
span: Span;
|
|
131
|
+
name: string;
|
|
132
|
+
expr: Expr;
|
|
133
|
+
}
|
|
134
|
+
/** The `group by` clause (since 0.24): one row per distinct key tuple. */
|
|
135
|
+
export interface GroupBy {
|
|
136
|
+
kind: "groupBy";
|
|
137
|
+
span: Span;
|
|
138
|
+
keys: GroupKey[];
|
|
139
|
+
}
|
|
102
140
|
/** One `order by` term. */
|
|
103
141
|
export interface OrderSpec {
|
|
104
142
|
kind: "order";
|
|
@@ -172,6 +210,15 @@ export interface Subquery {
|
|
|
172
210
|
* `depth` is destination-only. Both `null` when absent. */
|
|
173
211
|
frontier: Expr | null;
|
|
174
212
|
depth: number | null;
|
|
213
|
+
/** `flatten` clauses (since 0.25), in writing order; `[]` when there is none.
|
|
214
|
+
* Each fans the rows the previous produced out, after `follow` and before
|
|
215
|
+
* `group by` (SEMANTICS §25). */
|
|
216
|
+
flatten: Flatten[];
|
|
217
|
+
/** `group by` / `having` (since 0.24): the block's rows become one row per
|
|
218
|
+
* distinct key tuple (SEMANTICS §24); `having` filters the groups. Both
|
|
219
|
+
* `null` when absent; `having` is set only together with `groupBy`. */
|
|
220
|
+
groupBy: GroupBy | null;
|
|
221
|
+
having: Where | null;
|
|
175
222
|
/** `values` — scalar projection mode: the (single) projected expression is the
|
|
176
223
|
* row's result itself rather than being wrapped in a `{ name: value }` record,
|
|
177
224
|
* so `name values` yields `["Bob", …]` and `$it values` yields the rows. */
|
|
@@ -220,6 +267,11 @@ export interface Query {
|
|
|
220
267
|
* scope, like `where`) is a frontier (`$stop == "frontier"`, not expanded).
|
|
221
268
|
* `null` without one. */
|
|
222
269
|
frontier: Expr | null;
|
|
270
|
+
/** `flatten` clauses (since 0.25; see Subquery). */
|
|
271
|
+
flatten: Flatten[];
|
|
272
|
+
/** `group by` / `having` (since 0.24; see Subquery). */
|
|
273
|
+
groupBy: GroupBy | null;
|
|
274
|
+
having: Where | null;
|
|
223
275
|
/** `distinct` — dedup the result rows by their projected value (see OpNode). */
|
|
224
276
|
distinct: boolean;
|
|
225
277
|
/** `values` — scalar projection mode (see Subquery). */
|
|
@@ -229,7 +281,7 @@ export interface Query {
|
|
|
229
281
|
offset: Expr | null;
|
|
230
282
|
}
|
|
231
283
|
/** Every node of the tree. `AstNode["kind"]` is the closed set of node kinds. */
|
|
232
|
-
export type AstNode = Query | Subquery | OpNode | Follow | OrderSpec | SelectItem | Where | Expr;
|
|
284
|
+
export type AstNode = Query | Subquery | OpNode | Follow | Flatten | GroupBy | GroupKey | OrderSpec | SelectItem | Where | Expr;
|
|
233
285
|
/** The closed set of node kinds. */
|
|
234
286
|
export type AstKind = AstNode["kind"];
|
|
235
287
|
/** Whether a node is a scalar `Expr` (an `op` in expression position is not: it
|
package/dist/ast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}
|
package/dist/ast.js
CHANGED
|
@@ -20,9 +20,15 @@ export const REGEX_OPS = {
|
|
|
20
20
|
export function isRegexOp(op) {
|
|
21
21
|
return Object.hasOwn(REGEX_OPS, op);
|
|
22
22
|
}
|
|
23
|
+
export const AGGREGATE_NAMES = new Set([
|
|
24
|
+
"count", "sum", "min", "max", "avg", "collect", "first", "last", "any", "all",
|
|
25
|
+
]);
|
|
26
|
+
export function isAggregateName(name) {
|
|
27
|
+
return AGGREGATE_NAMES.has(name);
|
|
28
|
+
}
|
|
23
29
|
/** The expression kinds (`Expr["kind"]`), for `isExpr`. */
|
|
24
30
|
const EXPR_KINDS = new Set([
|
|
25
|
-
"lit", "ident", "outer", "binding", "member", "call", "unary", "required", "binary", "logical", "in", "range", "tuple", "template",
|
|
31
|
+
"lit", "ident", "outer", "binding", "member", "call", "unary", "required", "binary", "logical", "in", "range", "tuple", "template", "aggregate",
|
|
26
32
|
]);
|
|
27
33
|
/** Whether a node is a scalar `Expr` (an `op` in expression position is not: it
|
|
28
34
|
* is an expression only by position, see AST.md §1). */
|
package/dist/ast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,gFAAgF;AAChF,wDAAwD;AACxD,EAAE;AACF,iFAAiF;AACjF,gFAAgF;AAChF,4EAA4E;AAC5E,wCAAwC;AA0BxC,oEAAoE;AACpE,MAAM,CAAC,MAAM,SAAS,GAA+E;IACnG,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;IACzC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;IACpC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;IACzC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;CACrC,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,gFAAgF;AAChF,wDAAwD;AACxD,EAAE;AACF,iFAAiF;AACjF,gFAAgF;AAChF,4EAA4E;AAC5E,wCAAwC;AA0BxC,oEAAoE;AACpE,MAAM,CAAC,MAAM,SAAS,GAA+E;IACnG,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;IACzC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;IACpC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;IACzC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;CACrC,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAaD,MAAM,CAAC,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAgB;IACzE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAC9E,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAwND,2DAA2D;AAC3D,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC;IAC9C,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW;CAChJ,CAAC,CAAC;AAEH;wDACwD;AACxD,MAAM,UAAU,MAAM,CAAC,IAAa;IAClC,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
|
package/dist/build.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BinaryOp, Consumer, CountCmp, Expr, Follow, FollowDestination, LogicalOp, OpNode, OrderSpec, Query, SelectItem, Span, Subquery, TemplatePart, UnaryOp, Where } from "./ast.js";
|
|
1
|
+
import type { AggregateName, BinaryOp, Consumer, CountCmp, Expr, Flatten, Follow, FollowDestination, GroupBy, GroupKey, LogicalOp, OpNode, OrderSpec, Query, SelectItem, Span, Subquery, TemplatePart, UnaryOp, Where } from "./ast.js";
|
|
2
2
|
/** A fresh empty span (never shared: spans are mutable tuples). */
|
|
3
3
|
export declare const span: () => Span;
|
|
4
4
|
export declare const lit: (value: string | number | boolean | null) => Expr;
|
|
@@ -21,6 +21,8 @@ export declare const tuple: (items: Expr[]) => Expr;
|
|
|
21
21
|
/** `` `text ${expr} …` `` — a template literal (SEMANTICS §7b); `parts` alternates
|
|
22
22
|
* text, expression, text, … (odd length, text first and last). */
|
|
23
23
|
export declare const template: (parts: TemplatePart[]) => Expr;
|
|
24
|
+
/** `name(arg)` / `name(distinct arg)` / `count()` — an aggregate over the group's rows (SEMANTICS §24). */
|
|
25
|
+
export declare const aggregate: (name: AggregateName, arg?: Expr | null, distinct?: boolean) => Expr;
|
|
24
26
|
export declare const scalar: (expr: Expr) => Where;
|
|
25
27
|
export declare const and: (parts: Where[]) => Where;
|
|
26
28
|
export declare const or: (parts: Where[]) => Where;
|
|
@@ -28,6 +30,12 @@ export declare const not: (expr: Where) => Where;
|
|
|
28
30
|
export declare const field: (name: string, expr: Expr, lift?: number) => SelectItem;
|
|
29
31
|
export declare const collect: (name: string, op: OpNode) => SelectItem;
|
|
30
32
|
export declare const order: (expr: Expr, desc?: boolean) => OrderSpec;
|
|
33
|
+
/** One `group by` key, `name: expr`. */
|
|
34
|
+
export declare const key: (name: string, expr: Expr) => GroupKey;
|
|
35
|
+
/** `flatten <expr> as <name>` (SEMANTICS §25); a written block is the `collect` op over the value (`op(recv, "collect", sub)`). */
|
|
36
|
+
export declare const flatten: (expr: Expr, name: string) => Flatten;
|
|
37
|
+
/** `group by <keys>` (SEMANTICS §24). */
|
|
38
|
+
export declare const groupBy: (keys: GroupKey[]) => GroupBy;
|
|
31
39
|
/** A block body; every clause defaults to empty/absent. */
|
|
32
40
|
export declare function subquery(parts?: Partial<Omit<Subquery, "kind" | "span">>): Subquery;
|
|
33
41
|
/** `<receiver> <op> [distinct] { sub } [<relop> N]`. */
|
package/dist/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
package/dist/build.js
CHANGED
|
@@ -24,6 +24,8 @@ export const tuple = (items) => ({ kind: "tuple", span: span(), items });
|
|
|
24
24
|
/** `` `text ${expr} …` `` — a template literal (SEMANTICS §7b); `parts` alternates
|
|
25
25
|
* text, expression, text, … (odd length, text first and last). */
|
|
26
26
|
export const template = (parts) => ({ kind: "template", span: span(), parts });
|
|
27
|
+
/** `name(arg)` / `name(distinct arg)` / `count()` — an aggregate over the group's rows (SEMANTICS §24). */
|
|
28
|
+
export const aggregate = (name, arg = null, distinct = false) => ({ kind: "aggregate", span: span(), name, arg, distinct });
|
|
27
29
|
export const scalar = (expr) => ({ kind: "scalar", span: span(), expr });
|
|
28
30
|
export const and = (parts) => ({ kind: "and", span: span(), parts });
|
|
29
31
|
export const or = (parts) => ({ kind: "or", span: span(), parts });
|
|
@@ -31,11 +33,18 @@ export const not = (expr) => ({ kind: "not", span: span(), expr });
|
|
|
31
33
|
export const field = (name, expr, lift = 0) => ({ kind: "field", span: span(), name, expr, lift });
|
|
32
34
|
export const collect = (name, op) => ({ kind: "collect", span: span(), name, op });
|
|
33
35
|
export const order = (expr, desc = false) => ({ kind: "order", span: span(), expr, desc });
|
|
36
|
+
/** One `group by` key, `name: expr`. */
|
|
37
|
+
export const key = (name, expr) => ({ kind: "key", span: span(), name, expr });
|
|
38
|
+
/** `flatten <expr> as <name>` (SEMANTICS §25); a written block is the `collect` op over the value (`op(recv, "collect", sub)`). */
|
|
39
|
+
export const flatten = (expr, name) => ({ kind: "flatten", span: span(), expr, name });
|
|
40
|
+
/** `group by <keys>` (SEMANTICS §24). */
|
|
41
|
+
export const groupBy = (keys) => ({ kind: "groupBy", span: span(), keys });
|
|
34
42
|
/** A block body; every clause defaults to empty/absent. */
|
|
35
43
|
export function subquery(parts = {}) {
|
|
36
44
|
return {
|
|
37
45
|
kind: "subquery", span: span(),
|
|
38
|
-
from: [], where: null, select: [], orderBy: null, follow: null, frontier: null, depth: null,
|
|
46
|
+
from: [], where: null, select: [], orderBy: null, follow: null, frontier: null, depth: null, flatten: [], groupBy: null, having: null,
|
|
47
|
+
values: false, limit: null, offset: null,
|
|
39
48
|
...parts,
|
|
40
49
|
};
|
|
41
50
|
}
|
|
@@ -53,7 +62,7 @@ export function follow(destinations, opts = {}) {
|
|
|
53
62
|
export function query(source, parts = {}) {
|
|
54
63
|
return {
|
|
55
64
|
kind: "query", span: span(), source,
|
|
56
|
-
from: [], where: null, select: [], orderBy: null, consumer: "collect", follow: null, frontier: null,
|
|
65
|
+
from: [], where: null, select: [], orderBy: null, consumer: "collect", follow: null, frontier: null, flatten: [], groupBy: null, having: null,
|
|
57
66
|
distinct: false, values: false, limit: null, offset: null,
|
|
58
67
|
...parts,
|
|
59
68
|
};
|
package/dist/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts
CHANGED
|
@@ -80,6 +80,10 @@ export declare class InMemoryEngine implements Engine {
|
|
|
80
80
|
private applyKey;
|
|
81
81
|
private child;
|
|
82
82
|
private enter;
|
|
83
|
+
private flattenScopes;
|
|
84
|
+
private flattenElements;
|
|
85
|
+
private groupScopes;
|
|
86
|
+
private aggregate;
|
|
83
87
|
private runFollow;
|
|
84
88
|
private keyed;
|
|
85
89
|
private dedupByProjection;
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,KAAK,EAAe,MAAM,EAC3B,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,OAAO,KAAK,EAA0B,IAAI,EAAY,MAAM,qBAAqB,CAAC;AAIlF;;;kDAGkD;AAClD,MAAM,MAAM,SAAS,GACjB;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACzD;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACvC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACnC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,GAC1C;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,CAAC;AAEhD,6EAA6E;AAC7E,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;CAC5D;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|