pipework 0.289.0 → 0.291.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 +9 -0
- package/REFERENCE.md +52 -0
- package/dist/data/db/expressions.d.ts +23 -0
- package/dist/data/db/expressions.d.ts.map +1 -1
- package/dist/data/db/expressions.js +27 -1
- package/dist/data/db/expressions.js.map +1 -1
- package/dist/data/db/filter.d.ts +3 -1
- package/dist/data/db/filter.d.ts.map +1 -1
- package/dist/data/db/filter.js +3 -1
- package/dist/data/db/filter.js.map +1 -1
- package/dist/data/db/function-definition.d.ts +46 -0
- package/dist/data/db/function-definition.d.ts.map +1 -0
- package/dist/data/db/function-definition.js +84 -0
- package/dist/data/db/function-definition.js.map +1 -0
- package/dist/data/db/function-source.d.ts +33 -2
- package/dist/data/db/function-source.d.ts.map +1 -1
- package/dist/data/db/function-source.js +47 -19
- package/dist/data/db/function-source.js.map +1 -1
- package/dist/data/db/namespace.d.ts +3 -1
- package/dist/data/db/namespace.d.ts.map +1 -1
- package/dist/data/db/namespace.js +1 -1
- package/dist/data/db/namespace.js.map +1 -1
- package/dist/data/migrate/diff.d.ts +7 -0
- package/dist/data/migrate/diff.d.ts.map +1 -1
- package/dist/data/migrate/diff.js +37 -0
- package/dist/data/migrate/diff.js.map +1 -1
- package/dist/data/migrate/history.d.ts +2 -0
- package/dist/data/migrate/history.d.ts.map +1 -1
- package/dist/data/migrate/history.js +8 -0
- package/dist/data/migrate/history.js.map +1 -1
- package/dist/data/migrate/snapshot.d.ts +3 -0
- package/dist/data/migrate/snapshot.d.ts.map +1 -1
- package/dist/data/migrate/snapshot.js +13 -0
- package/dist/data/migrate/snapshot.js.map +1 -1
- package/dist/data/migrate/sql-emit.d.ts.map +1 -1
- package/dist/data/migrate/sql-emit.js +30 -2
- package/dist/data/migrate/sql-emit.js.map +1 -1
- package/dist/data/query/sql/expressions/conditions.d.ts +2 -0
- package/dist/data/query/sql/expressions/conditions.d.ts.map +1 -1
- package/dist/data/query/sql/expressions/conditions.js +13 -0
- package/dist/data/query/sql/expressions/conditions.js.map +1 -1
- package/dist/data/query/sql/expressions/index.d.ts +1 -0
- package/dist/data/query/sql/expressions/index.d.ts.map +1 -1
- package/dist/data/query/sql/expressions/index.js +1 -0
- package/dist/data/query/sql/expressions/index.js.map +1 -1
- package/dist/data/query/sql/expressions/row.d.ts +19 -0
- package/dist/data/query/sql/expressions/row.d.ts.map +1 -0
- package/dist/data/query/sql/expressions/row.js +50 -0
- package/dist/data/query/sql/expressions/row.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/test/function-reads.d.ts +97 -0
- package/dist/test/function-reads.d.ts.map +1 -0
- package/dist/test/function-reads.js +202 -0
- package/dist/test/function-reads.js.map +1 -0
- package/dist/test/index.d.ts +1 -0
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +1 -0
- package/dist/test/index.js.map +1 -1
- package/package.json +2 -2
- package/src/data/db/expressions.ts +29 -1
- package/src/data/db/filter.ts +3 -1
- package/src/data/db/function-definition.ts +172 -0
- package/src/data/db/function-source.ts +86 -14
- package/src/data/db/namespace.ts +1 -1
- package/src/data/migrate/diff.ts +45 -0
- package/src/data/migrate/history.ts +9 -0
- package/src/data/migrate/snapshot.ts +17 -0
- package/src/data/migrate/sql-emit.ts +33 -3
- package/src/data/query/sql/expressions/conditions.ts +8 -0
- package/src/data/query/sql/expressions/index.ts +1 -0
- package/src/data/query/sql/expressions/row.ts +63 -0
- package/src/index.ts +2 -1
- package/src/test/function-reads.ts +290 -0
- package/src/test/index.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.291.0
|
|
4
|
+
|
|
5
|
+
- **Added: SQL functions as pipework-defined reads** (#979, #983 step 2). A `pipe.fn` given a `body` defines a `LANGUAGE sql` function that pipework creates and migrates: typed `args` (a list is one array argument, used as `= ANY($n)`), `columns` plus a required `rows` estimate for a set, or `returns` for a scalar, and `volatility` (`stable` by default, or `immutable`). The call is typed as before. Migrations emit `CREATE OR REPLACE FUNCTION` for a body, volatility or ROWS change, `DROP` then `CREATE` for a return-shape change, and `DROP FUNCTION` (no CASCADE) on removal; drops run first and creates last. `pipe.fn(...)` refuses, with a `[pipework] pipe.fn("name"):` error naming the fix, anything that stops Postgres inlining the function or makes its cost grow with history: a SET clause (`set` / `config` options or `set_config()` in the body; put settings such as jit on the role), another language, VOLATILE, more than one statement or any DML, `FOR UPDATE` / `FOR SHARE`, a `MATERIALIZED` CTE, a list passed as `IN ($2, $3)` or `ARRAY[$2, $3]`, a missing ROWS estimate, or a `$n` beyond the arguments. New test helpers `checkFunctionRead` / `expectFunctionRead` (`pipework/test`) judge a function, including one created by raw DDL: they fail it when it is not inlined, when the rows it touches grow with history (small vs 10x history), or when it touches more with missing statistics than after ANALYZE, and report "not checked" when the call touched no rows or the role is not a superuser (missing statistics cannot then be measured). Calls go through the labelled statement path, so `pipe.labelled` timing and the `query:large` budgets apply.
|
|
6
|
+
|
|
7
|
+
## 0.290.0
|
|
8
|
+
|
|
9
|
+
- **Added: `filter.row(...)` and `filter.rowEquals(lhs, rhs)`, row comparisons for composite keys** (#1010). `eq` / `ne` / `gt` / `gte` / `lt` / `lte` now accept a row on both sides: `gte(row(t.a, t.b, t.c), row(k.a, k.b, k.c))` renders `("t"."a", "t"."b", "t"."c") >= ("k"."a", "k"."b", "k"."c")`, so a composite-key join against a `pipe.rows` key list needs no `pipe.sql`. Each element is a column, a SQL expression (a `pipe.rows` column is one) or a JS value. A value is bound and cast to the SQL type of the column facing it on the other row (`($1::text, $2::text)`); facing an expression it is bound uncast. `rowEquals` emits the range pair `lhs >= rhs and lhs <= rhs`: Postgres splits `(a, b, c) = (x, y, z)` into three equalities and probes the shortest index holding a and b, while a row comparison is an index condition only on an index holding all its columns in order, so the pair takes the (a, b, c) index and reads only matching rows (measured under FORCE ROW LEVEL SECURITY: 50 rows read for 50 returned, against 800 read with three `eq`s). It equals equality for never-NULL keys; with a NULL element it can yield NULL where equality yields false, which differs only under `not(...)`. A row of fewer than two elements, rows of unequal length, or a row compared with a non-row throw `[pipework] row:`.
|
|
10
|
+
- Tests: the trace partition sync no longer fails after files that leave the audit chain tables installed (#998), and the reaper specs plant their fixtures in a namespace of their own, so clones sharing one test cluster no longer drop each other's (#1000).
|
|
11
|
+
|
|
3
12
|
## 0.289.0
|
|
4
13
|
|
|
5
14
|
- **Fixed: a database test project with `isolate: false` no longer loads the app's schemas twice** (#1006). Since 0.268 (#942) pipework is not inlined in such a project, so auto-setup's import of `pipework.config.ts` ran under Node while the test files' imports ran through vite. Every module the config imports (its schemas, through surfaces or handlers) evaluated twice against one pipework registry, and even a single test file failed with `Duplicate domain definition`. auto-setup now loads the config through vitest's module runner, so the app's modules evaluate once, shared with the test files. The 0.268 entry's "inlining protects nothing" missed this case. The `vitest.inlineDeps: ['pipework']` workaround is no longer needed.
|
package/REFERENCE.md
CHANGED
|
@@ -857,6 +857,8 @@ Expression helpers for `.set()`, `.values()` and `.where()` (a string or number
|
|
|
857
857
|
- `filter.arrayAt(arr, n)` — `(arr)[n]`, 1-based; negative `n` is `(arr)[cardinality(arr) + n + 1]`; NULL for 0, out of range or `'{}'`. Typed from the column (`uuid[]` gives `SQL<string | null>`); `n` must be an integer or it throws.
|
|
858
858
|
- `filter.cardinality(arr)`, `filter.arrayPosition(col, value)` (`array_position`, NULL when absent), `filter.arraySlice(col, from, to)` (`(col)[from:to]`), `filter.arrayToString(arr, delimiter)`, `filter.arrayAppend(col, value)` and `filter.arrayRemove(col, value)` (for `.set()`). Values are bound and cast to the column's element type.
|
|
859
859
|
- `filter.arrayOf(like, ...elements)` builds `ARRAY[e1, e2, ...]::<element>[]` from columns, SQL expressions or JS values; `like` is an array column that supplies the element type. Pass it as the second argument of `arrayOverlaps` / `arrayContains` / `arrayContained`: `arrayOverlaps(t.keys, arrayOf(t.keys, concat(o.key, ':x'), concat(o.key, ':*')))`.
|
|
860
|
+
- `filter.row(...elements)` builds a row constructor `(e1, e2, ...)` for composite keys; each element is a column, a SQL expression (a `pipe.rows` column is one) or a bound JS value. `eq` / `ne` / `gt` / `gte` / `lt` / `lte` accept a row on both sides (equal length, row against row): `gte(row(t.a, t.b), row(k.a, k.b))` renders `("t"."a", "t"."b") >= ("k"."a", "k"."b")`, so a composite-key join needs no `pipe.sql`. A value is bound and cast to the SQL type of the column facing it on the other side (`($1::text, $2::text)`); facing an expression it is bound uncast and Postgres infers the type. Fewer than two elements, rows of unequal length, or a row against a non-row throw `[pipework] row:`.
|
|
861
|
+
- `filter.rowEquals(lhs, rhs)` — row equality as the range pair `lhs >= rhs and lhs <= rhs`. A row comparison is a btree index condition only on an index holding all its columns in order, whereas `(a, b, c) = (x, y, z)` is split into three equalities and probes the shortest index holding a and b; the range pair takes the index over (a, b, c) and reads only matching rows. Equal to equality for never-NULL keys; with a NULL element neither is true, but the pair yields NULL where equality may yield false, which differs only under `not(...)`.
|
|
860
862
|
- `filter.concat(...parts)` — `(p1 || p2 || ...)`, at least two parts, each a string, column or expression (`scalar(...)` for a subquery). A null part makes the result null; wrap it in `coalesce` if not wanted.
|
|
861
863
|
- `pipe.sql.inList(values, cast?)` — list match for a JS list: `` sql`id ${sql.inList(ids, 'uuid')}` `` renders `IN (SELECT ...)` over the list, which Postgres hashes under any plan and across integer types, and an empty list matches nothing; never build `IN (${sql.join(...)})`, which is a syntax error when the list is empty. `cast` is the element type, default `text`.
|
|
862
864
|
- `filter.arrayReplace(col, from, to)` — `array_replace`, every `from` becomes `to`; `filter.arrayHas(col, value)` — `$value = ANY(col)`. `col` must be an array column; a JS value is bound and cast to its element type. `value` may also be a column or SQL expression of the element type: it renders `<value> = ANY(col)` with no bind or cast, so a join on `filter.arrayHas(f.memberIds, m.id)` can use `m.id`'s index.
|
|
@@ -993,6 +995,56 @@ A result column of one function (`unnestUuids(f.x)`) is a valid argument to anot
|
|
|
993
995
|
|
|
994
996
|
The default alias is the unqualified function name. Fields work with `eq`, `castUuid`, `orderBy`, joins and `select({ x: f.fromPath })`.
|
|
995
997
|
|
|
998
|
+
#### A function pipework defines: a read
|
|
999
|
+
|
|
1000
|
+
Give `pipe.fn` a `body` and pipework creates the function: the migration generator emits `CREATE OR REPLACE FUNCTION` for it, the call is typed from the definition, and it is a read under the rule that reads are key lookups. Export it from a schema file the way a table is exported; the generator finds it there. A `pipe.fn` without a `body` only refers to a function that exists already, as above.
|
|
1001
|
+
|
|
1002
|
+
```ts
|
|
1003
|
+
export const headImports = pipe.fn('canvas.head_imports', {
|
|
1004
|
+
args: [pipe.field.uuid(), pipe.field.text()], // the body refers to them as $1, $2
|
|
1005
|
+
columns: { fromPath: pipe.field.text(), line: pipe.field.integer() }, // RETURNS TABLE(from_path text, line integer)
|
|
1006
|
+
body: `select i.from_path, i.line from canvas.imports i where i.repo_id = $1 and i.sha = $2`,
|
|
1007
|
+
volatility: 'stable', // 'stable' (the default) or 'immutable'
|
|
1008
|
+
rows: 50, // typical result size of one call; required for a set
|
|
1009
|
+
})
|
|
1010
|
+
const f = headImports(repoId, sha) // the typed source described above
|
|
1011
|
+
await pipe.labelled('head-imports', async () => await db.select().from(f).where(eq(f.line, 3)))
|
|
1012
|
+
```
|
|
1013
|
+
|
|
1014
|
+
For a scalar function declare `returns: pipe.field.integer()` instead of `columns` and `rows`; its call is a typed SQL expression (`select canvas.f($1::uuid)`). A list is one array argument (`pipe.field.uuid().array()`, `column = ANY($2)`). The call is an ordinary query on the connection, so `pipe.labelled`, the timing alerts and the `query:large` budgets apply to it.
|
|
1015
|
+
|
|
1016
|
+
Migrations. The snapshot records each function by `schema.name(argument types)`. A new function, or a changed body, volatility or ROWS, is `CREATE OR REPLACE FUNCTION`. A changed result shape (Postgres cannot replace a return type) is `DROP FUNCTION` then `CREATE`. A changed argument list is a different function: the old signature is dropped and the new one created. A function removed from the schema files is dropped, without CASCADE, so a dependent object fails the migration loudly. Function drops come first in a migration, before any table or column is dropped, and function creates come last, after every table, column, index and foreign key, because a `LANGUAGE sql` body is checked when the function is created. The schema it lives in must exist, as for a table. The statement is dollar-quoted (`$pw_body$`) and always `LANGUAGE sql`, never `STRICT`, `SECURITY DEFINER` or `SET`.
|
|
1017
|
+
|
|
1018
|
+
Static rules, checked when `pipe.fn` is called, each with a `[pipework] pipe.fn("name"): ... Fix: ...` error. A read is inlined into the query that calls it only when the function allows it, and a function that is not inlined is a black box: the planner cannot push the caller's keys into it, so the rows it touches grow with history instead of with its keys. Each rule is a reason Postgres does not inline, or a reason keys do not reach the table:
|
|
1019
|
+
|
|
1020
|
+
- No SET clause (`set`, `config`, or `set_config(` in the body): a function with `proconfig` set is never inlined. A session setting such as `jit` belongs on the role, `ALTER ROLE app SET jit = off`.
|
|
1021
|
+
- `language` is `sql`: Postgres inlines only LANGUAGE sql; a plpgsql function runs per call. What cannot be one SELECT is a derivation, not a read.
|
|
1022
|
+
- `volatility` is `stable` or `immutable`: a VOLATILE function is not inlined.
|
|
1023
|
+
- The body is one SELECT (`WITH ... SELECT` allowed), with no second statement, no INSERT/UPDATE/DELETE/MERGE (also inside a CTE), no `FOR UPDATE` / `FOR SHARE`: Postgres inlines only a single plain SELECT.
|
|
1024
|
+
- No `AS MATERIALIZED` CTE: it is computed in full before the caller's keys are applied, an optimisation fence, so what it scans grows with history.
|
|
1025
|
+
- A list is one array parameter: `IN ($2, $3)` or `ARRAY[$2, $3]` over separate parameters gives each list length its own signature and plan.
|
|
1026
|
+
- A set-returning function declares `rows`: without ROWS Postgres plans every join around a guess of 1000 rows.
|
|
1027
|
+
- `$n` stays within the declared arguments. `SECURITY DEFINER`, `STRICT`, `PARALLEL` and `COST` are not options: each stops inlining.
|
|
1028
|
+
|
|
1029
|
+
#### Checking a read: `checkFunctionRead` and `expectFunctionRead` (`pipework/test`)
|
|
1030
|
+
|
|
1031
|
+
The rules above are static; whether a read is a key lookup is shown by its plan. `checkFunctionRead(db, { fn, args, tables, seed, history?, tolerance? })` returns a report (`status`: `passed`, `failed` or `not-checked`; `problems`; the four measurements) and `expectFunctionRead` throws a `[pipework]` error unless it passed. `fn` is what `pipe.fn` returned (a referenced function is checked too), `args` representative arguments, `tables` the tables it reads, and `seed(db, history)` leaves exactly `history` rows of history for the same keys the call looks up (it may truncate and refill); it is called with 200 and then 2000 by default (`history: [n, 10n]`).
|
|
1032
|
+
|
|
1033
|
+
```ts
|
|
1034
|
+
await expectFunctionRead(db, {
|
|
1035
|
+
fn: headImports, args: [repoId, 'v0'], tables: ['canvas.imports'],
|
|
1036
|
+
seed: async (db, history) => { /* truncate canvas.imports; insert `history` shas for repoId, 3 rows each */ },
|
|
1037
|
+
})
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
It counts rows touched from `EXPLAIN (ANALYZE, VERBOSE, FORMAT JSON)` of the typed call with parallelism off: for each node that scans a relation, rows returned plus rows removed by filter or index recheck, times loops, summed. It measures four times: fresh statistics at the small history (after ANALYZE), the large history seeded without analyzing (stale statistics), the large history after ANALYZE (fresh), and the large history after the tables' `pg_statistic` rows are deleted (missing; this needs a superuser, as the test cluster's role is, and autovacuum is switched off on the tables for the run and restored). A role that is not a superuser cannot delete statistics: the missing state is then not measured, the report lists it in `notChecked` and its `problems`, `status` is `not-checked` (or `failed` if something else failed) and `expectFunctionRead` throws naming it, so the state is never passed quietly. A role that cannot switch autovacuum off (not the tables' owner) makes the check throw, naming the fix: run it as the owner or a superuser. It fails when:
|
|
1041
|
+
|
|
1042
|
+
- the function was not inlined: the plan has a Function Scan on it or its call text, or its catalog row has a SET clause, a language other than sql, VOLATILE, SECURITY DEFINER or STRICT (so a function created by raw DDL is judged too, and the message says which);
|
|
1043
|
+
- rows touched at the large history exceed those at the small one by more than the tolerance (default 10% plus 5 rows): the read scans history; the message names the largest scan, and a CTE Scan (a MATERIALIZED CTE);
|
|
1044
|
+
- rows touched with stale or missing statistics exceed those after ANALYZE by more than the tolerance: the plan depends on the statistics being current (a 50-190x blow-up with stale statistics is the failure this catches).
|
|
1045
|
+
|
|
1046
|
+
A read that touches no rows on the fixture at the large history is `not-checked`, never a pass: seed rows for the keys in `args`. Scalar functions are checked the same way; one that reads a table is a call in the plan, so it is reported as not inlined.
|
|
1047
|
+
|
|
996
1048
|
### `pipe.field`
|
|
997
1049
|
|
|
998
1050
|
Field builders for domain definitions — uuid(), text(), integer(), etc.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SQL, Column } from './types.js';
|
|
2
2
|
import type { SQLWrapper } from '../query/sql/sql.js';
|
|
3
|
+
import { Row, type RowElement } from '../query/index.js';
|
|
3
4
|
import { type CollationName } from '../query/collation.js';
|
|
4
5
|
/** Returns `column + amount`. Use negative amounts for subtraction. */
|
|
5
6
|
export declare function increment(column: Column | SQL, amount: number): SQL<number>;
|
|
@@ -180,5 +181,27 @@ export declare function walCurrentLsn(): SQL<string>;
|
|
|
180
181
|
export declare function walReplayLsn(): SQL<string | null>;
|
|
181
182
|
/** PostgreSQL `pg_last_wal_replay_lsn() >= lsn::pg_lsn` — true once a replica has replayed up to the given LSN. Yields NULL (not true) on a primary, where there is no replay position. */
|
|
182
183
|
export declare function replicaFresh(createdLsn: string | Column | SQL): SQL<boolean | null>;
|
|
184
|
+
/**
|
|
185
|
+
* A row constructor `(e1, e2, ...)` for comparing composite keys: `eq` / `ne` / `gt` / `gte` / `lt` / `lte`
|
|
186
|
+
* accept a row on both sides (row against row, equal length), so a composite-key join needs no `pipe.sql`:
|
|
187
|
+
* `gte(row(t.a, t.b), row(k.a, k.b))` renders `("t"."a", "t"."b") >= ("k"."a", "k"."b")`.
|
|
188
|
+
* Each element is a column, a SQL expression (a `pipe.rows` column is one) or a bound JS value. A column or
|
|
189
|
+
* expression is embedded as written. A value is bound and, when the element facing it on the other side is
|
|
190
|
+
* a column, converted by that column's driver mapping and cast to its SQL type (`$1::text`); facing an
|
|
191
|
+
* expression it is bound without a cast and Postgres infers its type from the other side.
|
|
192
|
+
* Throws `[pipework] row:` for fewer than two elements, for rows of unequal length, and when a row is
|
|
193
|
+
* compared with a non-row.
|
|
194
|
+
*/
|
|
195
|
+
export declare function row(...elements: RowElement[]): Row;
|
|
196
|
+
/**
|
|
197
|
+
* Row equality as the range pair `lhs >= rhs and lhs <= rhs`, for a composite-key match that must use an index.
|
|
198
|
+
* Written as `(a, b, c) = (x, y, z)` Postgres splits it into three equalities, and a join then probes the shortest
|
|
199
|
+
* index holding a and b and filters c. A row comparison is a btree index condition only on an index holding all
|
|
200
|
+
* its columns in order, so the range pair takes the index over (a, b, c) and reads only the matching rows.
|
|
201
|
+
* It equals equality for keys that are never NULL. With a NULL element a match is never true, as with
|
|
202
|
+
* equality (a NULL-bearing key does not match itself), but the result can be NULL where equality gives
|
|
203
|
+
* false, which differs only under `not(...)`; keep NULL-able columns out of the row or filter them first.
|
|
204
|
+
*/
|
|
205
|
+
export declare function rowEquals(lhs: Row, rhs: Row): SQL<boolean>;
|
|
183
206
|
export {};
|
|
184
207
|
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../src/data/db/expressions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../src/data/db/expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sql } from './sql.js';
|
|
2
|
-
import { bindIfParam } from '../query/index.js';
|
|
2
|
+
import { and, bindIfParam, gte, lte, Row } from '../query/index.js';
|
|
3
3
|
import { PgArray } from '../query/pg-core/index.js';
|
|
4
4
|
import { quoteCollation } from '../query/collation.js';
|
|
5
5
|
import { is } from '../query/entity.js';
|
|
@@ -367,4 +367,30 @@ export function walReplayLsn() {
|
|
|
367
367
|
export function replicaFresh(createdLsn) {
|
|
368
368
|
return sql `pg_last_wal_replay_lsn() >= ${createdLsn}::pg_lsn`;
|
|
369
369
|
}
|
|
370
|
+
/**
|
|
371
|
+
* A row constructor `(e1, e2, ...)` for comparing composite keys: `eq` / `ne` / `gt` / `gte` / `lt` / `lte`
|
|
372
|
+
* accept a row on both sides (row against row, equal length), so a composite-key join needs no `pipe.sql`:
|
|
373
|
+
* `gte(row(t.a, t.b), row(k.a, k.b))` renders `("t"."a", "t"."b") >= ("k"."a", "k"."b")`.
|
|
374
|
+
* Each element is a column, a SQL expression (a `pipe.rows` column is one) or a bound JS value. A column or
|
|
375
|
+
* expression is embedded as written. A value is bound and, when the element facing it on the other side is
|
|
376
|
+
* a column, converted by that column's driver mapping and cast to its SQL type (`$1::text`); facing an
|
|
377
|
+
* expression it is bound without a cast and Postgres infers its type from the other side.
|
|
378
|
+
* Throws `[pipework] row:` for fewer than two elements, for rows of unequal length, and when a row is
|
|
379
|
+
* compared with a non-row.
|
|
380
|
+
*/
|
|
381
|
+
export function row(...elements) {
|
|
382
|
+
return new Row(elements);
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Row equality as the range pair `lhs >= rhs and lhs <= rhs`, for a composite-key match that must use an index.
|
|
386
|
+
* Written as `(a, b, c) = (x, y, z)` Postgres splits it into three equalities, and a join then probes the shortest
|
|
387
|
+
* index holding a and b and filters c. A row comparison is a btree index condition only on an index holding all
|
|
388
|
+
* its columns in order, so the range pair takes the index over (a, b, c) and reads only the matching rows.
|
|
389
|
+
* It equals equality for keys that are never NULL. With a NULL element a match is never true, as with
|
|
390
|
+
* equality (a NULL-bearing key does not match itself), but the result can be NULL where equality gives
|
|
391
|
+
* false, which differs only under `not(...)`; keep NULL-able columns out of the row or filter them first.
|
|
392
|
+
*/
|
|
393
|
+
export function rowEquals(lhs, rhs) {
|
|
394
|
+
return and(gte(lhs, rhs), lte(lhs, rhs));
|
|
395
|
+
}
|
|
370
396
|
//# sourceMappingURL=expressions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../src/data/db/expressions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../src/data/db/expressions.ts"],"names":[],"mappings":"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"}
|
package/dist/data/db/filter.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { and, arrayContained, arrayContains, arrayOverlaps, asc, between, desc, exists, ilike, inArray, is, isNotNull, isNull, like, not, notBetween, notExists, notIlike, notInArray, notLike, or } from '../query/index.js';
|
|
2
2
|
import { countAgg, countDistinctAgg, sumAgg, sumDistinctAgg, avgAgg, avgDistinctAgg, maxAgg, minAgg, boolAnd, boolOr, arrayAgg, stringAgg, jsonbAgg, jsonbObjectAgg, jsonbBuildObject } from './aggregates.js';
|
|
3
|
-
import { increment, decrement, add, subtract, coalesce, now, scalar, cast, collate, interval, clockTimestamp, strpos, textContains, startsWith, left, right, length, concat, arrayReplace, arrayHas, splitPart, lower, upper, trim, replace, substring, reverse, lpad, rpad, regexpReplace, regexpMatch, stringToArray, cardinality, arrayAt, arrayPosition, arraySlice, arrayToString, arrayAppend, arrayOf, arrayRemove, dateTrunc, rowNumber, rank, denseRank, over, identifier, withRecursive, caseWhen, walCurrentLsn, walReplayLsn, replicaFresh } from './expressions.js';
|
|
3
|
+
import { increment, decrement, add, subtract, coalesce, now, scalar, cast, collate, interval, clockTimestamp, strpos, textContains, startsWith, left, right, length, concat, arrayReplace, arrayHas, splitPart, lower, upper, trim, replace, substring, reverse, lpad, rpad, regexpReplace, regexpMatch, stringToArray, cardinality, arrayAt, arrayPosition, arraySlice, arrayToString, arrayAppend, arrayOf, row, rowEquals, arrayRemove, dateTrunc, rowNumber, rank, denseRank, over, identifier, withRecursive, caseWhen, walCurrentLsn, walReplayLsn, replicaFresh } from './expressions.js';
|
|
4
4
|
import { ago, castUuid, castJsonb, castTimestamp, castBoolean, castNumeric, castInteger, castText, nextSequence } from './composed.js';
|
|
5
5
|
import { json as jsonbExtract, pathText as jsonbExtractText, contains as jsonbContains, merge as jsonbMerge, concat as jsonbConcat, remove as jsonbRemove } from '../jsonb/query.js';
|
|
6
6
|
import { arrayAny, arrayAll, jsonbElements } from './array-elements.js';
|
|
@@ -93,6 +93,8 @@ export declare const filter: {
|
|
|
93
93
|
readonly arrayToString: typeof arrayToString;
|
|
94
94
|
readonly arrayAppend: typeof arrayAppend;
|
|
95
95
|
readonly arrayOf: typeof arrayOf;
|
|
96
|
+
readonly row: typeof row;
|
|
97
|
+
readonly rowEquals: typeof rowEquals;
|
|
96
98
|
readonly arrayRemove: typeof arrayRemove;
|
|
97
99
|
readonly dateTrunc: typeof dateTrunc;
|
|
98
100
|
readonly rowNumber: typeof rowNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAM,MAAM,EACjF,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAe,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAC9F,UAAU,EAAE,OAAO,EAAE,EAAE,EACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAE9M,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAM,MAAM,EACjF,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAe,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAC9F,UAAU,EAAE,OAAO,EAAE,EAAE,EACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAE9M,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAChkB,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACtI,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,QAAQ,IAAI,gBAAgB,EAAE,QAAQ,IAAI,aAAa,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpL,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACvE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAEhD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgFT,CAAA"}
|
package/dist/data/db/filter.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { and, arrayContained, arrayContains, arrayOverlaps, asc, between, desc, eq, exists, gt, gte, ilike, inArray, is, isNotNull, isNull, like, lt, lte, ne, not, notBetween, notExists, notIlike, notInArray, notLike, or, } from '../query/index.js';
|
|
2
2
|
import { countAgg, countDistinctAgg, sumAgg, sumDistinctAgg, avgAgg, avgDistinctAgg, maxAgg, minAgg, boolAnd, boolOr, arrayAgg, stringAgg, jsonbAgg, jsonbObjectAgg, jsonbBuildObject } from './aggregates.js';
|
|
3
3
|
import { except, exceptAll, intersect, intersectAll, union, unionAll } from '../query/pg-core/index.js';
|
|
4
|
-
import { increment, decrement, add, subtract, coalesce, now, scalar, cast, collate, interval, clockTimestamp, strpos, textContains, startsWith, left, right, length, concat, arrayReplace, arrayHas, splitPart, lower, upper, trim, replace, substring, reverse, lpad, rpad, regexpReplace, regexpMatch, stringToArray, cardinality, arrayAt, arrayPosition, arraySlice, arrayToString, arrayAppend, arrayOf, arrayRemove, dateTrunc, rowNumber, rank, denseRank, over, identifier, withRecursive, caseWhen, walCurrentLsn, walReplayLsn, replicaFresh } from './expressions.js';
|
|
4
|
+
import { increment, decrement, add, subtract, coalesce, now, scalar, cast, collate, interval, clockTimestamp, strpos, textContains, startsWith, left, right, length, concat, arrayReplace, arrayHas, splitPart, lower, upper, trim, replace, substring, reverse, lpad, rpad, regexpReplace, regexpMatch, stringToArray, cardinality, arrayAt, arrayPosition, arraySlice, arrayToString, arrayAppend, arrayOf, row, rowEquals, arrayRemove, dateTrunc, rowNumber, rank, denseRank, over, identifier, withRecursive, caseWhen, walCurrentLsn, walReplayLsn, replicaFresh } from './expressions.js';
|
|
5
5
|
import { ago, castUuid, castJsonb, castTimestamp, castBoolean, castNumeric, castInteger, castText, nextSequence } from './composed.js';
|
|
6
6
|
import { json as jsonbExtract, pathText as jsonbExtractText, contains as jsonbContains, merge as jsonbMerge, concat as jsonbConcat, remove as jsonbRemove } from '../jsonb/query.js';
|
|
7
7
|
import { arrayAny, arrayAll, jsonbElements } from './array-elements.js';
|
|
@@ -52,6 +52,8 @@ export const filter = {
|
|
|
52
52
|
arrayToString,
|
|
53
53
|
arrayAppend,
|
|
54
54
|
arrayOf,
|
|
55
|
+
row,
|
|
56
|
+
rowEquals,
|
|
55
57
|
arrayRemove,
|
|
56
58
|
dateTrunc,
|
|
57
59
|
rowNumber,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAC1F,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAC9F,UAAU,EAAE,OAAO,EAAE,EAAE,GACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAC9M,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACvG,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** Marks a callable returned by `pipe.fn` that carries a definition (a `body`), so the migration generator can find it among a schema file's exports. */
|
|
2
|
+
export declare const FUNCTION_DEFINITION: unique symbol;
|
|
3
|
+
export type FunctionVolatility = 'stable' | 'immutable';
|
|
4
|
+
/** One column of a set-returning function's result, as the snapshot and the DDL carry it. */
|
|
5
|
+
export interface FunctionColumnDefinition {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly type: string;
|
|
8
|
+
}
|
|
9
|
+
/** A function pipework creates and migrates: what the snapshot records and the DDL is emitted from. */
|
|
10
|
+
export interface FunctionDefinition {
|
|
11
|
+
readonly schema: string;
|
|
12
|
+
readonly name: string;
|
|
13
|
+
/** SQL types of the arguments, in call order. */
|
|
14
|
+
readonly args: readonly string[];
|
|
15
|
+
/** `table`: RETURNS TABLE(columns) with a ROWS estimate. `scalar`: RETURNS type. */
|
|
16
|
+
readonly returns: {
|
|
17
|
+
readonly kind: 'table';
|
|
18
|
+
readonly columns: readonly FunctionColumnDefinition[];
|
|
19
|
+
readonly rows: number;
|
|
20
|
+
} | {
|
|
21
|
+
readonly kind: 'scalar';
|
|
22
|
+
readonly type: string;
|
|
23
|
+
};
|
|
24
|
+
readonly body: string;
|
|
25
|
+
readonly volatility: FunctionVolatility;
|
|
26
|
+
}
|
|
27
|
+
/** What `pipe.fn` was given, for the rules that look at it before it becomes a definition. */
|
|
28
|
+
export interface FunctionDefinitionInput {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly argCount: number;
|
|
31
|
+
readonly body: string;
|
|
32
|
+
readonly spec: Readonly<Record<string, unknown>>;
|
|
33
|
+
readonly setReturning: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** The identity of a function in a snapshot: `schema.name(type, type)`; a changed argument list is a different function. */
|
|
36
|
+
export declare function functionKey(def: Pick<FunctionDefinition, 'schema' | 'name' | 'args'>): string;
|
|
37
|
+
/**
|
|
38
|
+
* The static rules of a pipework-defined read. Each exists because Postgres inlines a SQL function into the
|
|
39
|
+
* calling query only when the function allows it, and a function that is not inlined is a black box the planner
|
|
40
|
+
* cannot push the caller's keys into; its rows touched then grow with history instead of with its keys.
|
|
41
|
+
* Throws a `[pipework]` error naming the rule and the fix.
|
|
42
|
+
*/
|
|
43
|
+
export declare function assertReadFunction(input: FunctionDefinitionInput): void;
|
|
44
|
+
/** The dollar-quote tag for a body: `$pw_body$`, lengthened until the body does not contain it. */
|
|
45
|
+
export declare function bodyQuote(body: string): string;
|
|
46
|
+
//# sourceMappingURL=function-definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function-definition.d.ts","sourceRoot":"","sources":["../../../src/data/db/function-definition.ts"],"names":[],"mappings":"AAEA,yJAAyJ;AACzJ,eAAO,MAAM,mBAAmB,eAAuC,CAAA;AAEvE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEvD,6FAA6F;AAC7F,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,uGAAuG;AACvG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,oFAAoF;IACpF,QAAQ,CAAC,OAAO,EACZ;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,wBAAwB,EAAE,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACxG;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAA;CACxC;AAED,8FAA8F;AAC9F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAChD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAC/B;AAQD,4HAA4H;AAC5H,wBAAgB,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAE7F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI,CA8GvE;AAED,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { blankLiterals, stripComments } from '../migrate/statements.js';
|
|
2
|
+
/** Marks a callable returned by `pipe.fn` that carries a definition (a `body`), so the migration generator can find it among a schema file's exports. */
|
|
3
|
+
export const FUNCTION_DEFINITION = Symbol.for('pipework.fn.definition');
|
|
4
|
+
const SPEC_KEYS = new Set(['args', 'columns', 'returns', 'body', 'volatility', 'rows', 'language']);
|
|
5
|
+
function fail(name, message, fix) {
|
|
6
|
+
throw new Error(`[pipework] pipe.fn("${name}"): ${message}\n\n Fix: ${fix}\n`);
|
|
7
|
+
}
|
|
8
|
+
/** The identity of a function in a snapshot: `schema.name(type, type)`; a changed argument list is a different function. */
|
|
9
|
+
export function functionKey(def) {
|
|
10
|
+
return `${def.schema}.${def.name}(${def.args.join(', ')})`;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The static rules of a pipework-defined read. Each exists because Postgres inlines a SQL function into the
|
|
14
|
+
* calling query only when the function allows it, and a function that is not inlined is a black box the planner
|
|
15
|
+
* cannot push the caller's keys into; its rows touched then grow with history instead of with its keys.
|
|
16
|
+
* Throws a `[pipework]` error naming the rule and the fix.
|
|
17
|
+
*/
|
|
18
|
+
export function assertReadFunction(input) {
|
|
19
|
+
const { name, spec, body } = input;
|
|
20
|
+
for (const key of ['set', 'config', 'settings']) {
|
|
21
|
+
if (key in spec) {
|
|
22
|
+
fail(name, `"${key}" is a SET clause, which a read function cannot have. Postgres never inlines a function with a SET clause (proconfig is set), so the planner cannot push the caller's keys into it and every call plans and scans on its own.`, 'remove it. A session setting such as jit belongs on the role (`ALTER ROLE app SET jit = off`), not on a function.');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const unknown = Object.keys(spec).filter(k => !SPEC_KEYS.has(k) && k !== 'set' && k !== 'config' && k !== 'settings');
|
|
26
|
+
if (unknown.length > 0) {
|
|
27
|
+
fail(name, `unknown option${unknown.length > 1 ? 's' : ''} ${unknown.map(k => `"${k}"`).join(', ')}.`, `a read function takes ${[...SPEC_KEYS].join(', ')}. SECURITY DEFINER, STRICT, PARALLEL and COST are not offered: each stops Postgres inlining the function.`);
|
|
28
|
+
}
|
|
29
|
+
const language = spec['language'];
|
|
30
|
+
if (language !== undefined && language !== 'sql') {
|
|
31
|
+
fail(name, `language "${String(language)}" is not allowed for a read. Postgres inlines only LANGUAGE sql functions; a plpgsql function is a black box that runs per call and cannot be pushed into.`, 'write the read as one LANGUAGE sql SELECT. A computation that cannot be one SELECT is a derivation (maintained on write), not a read.');
|
|
32
|
+
}
|
|
33
|
+
const volatility = spec['volatility'];
|
|
34
|
+
if (volatility !== undefined && volatility !== 'stable' && volatility !== 'immutable') {
|
|
35
|
+
fail(name, `volatility "${String(volatility)}" is not allowed for a read. Postgres does not inline a VOLATILE function into the calling query.`, "use 'stable' (reads tables) or 'immutable' (reads nothing that changes).");
|
|
36
|
+
}
|
|
37
|
+
if (input.setReturning) {
|
|
38
|
+
const rows = spec['rows'];
|
|
39
|
+
if (typeof rows !== 'number' || !Number.isInteger(rows) || rows <= 0) {
|
|
40
|
+
fail(name, 'a set-returning function needs a ROWS estimate (a positive integer). Without it Postgres assumes 1000 rows for the call, and plans every join and filter around that guess.', 'give `rows` the typical result size for one call, e.g. `rows: 50`.');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if (spec['rows'] !== undefined) {
|
|
44
|
+
fail(name, '`rows` applies to a set-returning function, and this one returns a scalar.', 'remove `rows`, or declare `columns` to return a set.');
|
|
45
|
+
}
|
|
46
|
+
const code = blankLiterals(stripComments(body));
|
|
47
|
+
const trimmed = code.trim().replace(/;\s*$/, '');
|
|
48
|
+
if (/;/.test(trimmed)) {
|
|
49
|
+
fail(name, 'the body has more than one statement. Postgres inlines a function only when its body is a single SELECT.', 'make the body one SELECT (use a CTE or a join for the second step).');
|
|
50
|
+
}
|
|
51
|
+
if (!/^(select|with|\(\s*select)\b/i.test(trimmed)) {
|
|
52
|
+
fail(name, 'the body is not a SELECT. A read function is one SELECT statement; Postgres inlines only a single SELECT.', 'start the body with SELECT or WITH ... SELECT.');
|
|
53
|
+
}
|
|
54
|
+
if (/\b(insert\s+into|update\s+[\w".]+\s+set|delete\s+from|merge\s+into|truncate\s+(?:table\s+)?["\w])/i.test(trimmed)) {
|
|
55
|
+
fail(name, 'the body writes (INSERT, UPDATE, DELETE, MERGE or TRUNCATE, possibly inside a CTE). A read function is one SELECT; a body with a data-modifying statement is not inlined.', 'move the write to pipe.insert / pipe.update / pipe.delete.');
|
|
56
|
+
}
|
|
57
|
+
if (/\bfor\s+(no\s+key\s+update|update|key\s+share|share)\b/i.test(trimmed)) {
|
|
58
|
+
fail(name, 'the body takes row locks (FOR UPDATE / FOR SHARE). Postgres does not inline a function that locks rows.', 'remove the locking clause; a read does not lock.');
|
|
59
|
+
}
|
|
60
|
+
if (/\bset_config\s*\(/i.test(trimmed)) {
|
|
61
|
+
fail(name, 'the body calls set_config(), which is a SET clause in disguise: it makes the function VOLATILE and Postgres does not inline it.', 'remove it. A session setting belongs on the role (`ALTER ROLE app SET ... `).');
|
|
62
|
+
}
|
|
63
|
+
if (/\bas\s+materialized\b/i.test(trimmed)) {
|
|
64
|
+
fail(name, 'the body has a MATERIALIZED CTE. Postgres computes it once, in full, before the caller\'s keys are applied: it is an optimisation fence, and the rows it scans grow with history, not with the keys.', 'drop the MATERIALIZED keyword (a CTE used once is inlined by default), or write the CTE as a subquery or a join.');
|
|
65
|
+
}
|
|
66
|
+
if (/\bin\s*\(\s*\$\d+\s*(?:,\s*\$\d+\s*)+\)/i.test(trimmed) || /\barray\s*\[\s*\$\d+\s*(?:,\s*\$\d+\s*)+\]/i.test(trimmed)) {
|
|
67
|
+
fail(name, 'a list is passed as separate parameters ($1, $2, ...). A list argument is one array parameter: separate parameters give every list length its own signature and its own plan.', 'declare one array argument (`pipe.field.uuid().array()`) and write `column = ANY($n)`.');
|
|
68
|
+
}
|
|
69
|
+
for (const m of trimmed.matchAll(/\$(\d+)/g)) {
|
|
70
|
+
const n = Number(m[1]);
|
|
71
|
+
if (n < 1 || n > input.argCount) {
|
|
72
|
+
fail(name, `the body refers to $${n}, but the function declares ${input.argCount} argument${input.argCount === 1 ? '' : 's'}.`, 'refer to arguments as $1 ... $n, in the order of `args`.');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** The dollar-quote tag for a body: `$pw_body$`, lengthened until the body does not contain it. */
|
|
77
|
+
export function bodyQuote(body) {
|
|
78
|
+
let tag = '$pw_body$';
|
|
79
|
+
let i = 0;
|
|
80
|
+
while (body.includes(tag))
|
|
81
|
+
tag = `$pw_body${++i}$`;
|
|
82
|
+
return tag;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=function-definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function-definition.js","sourceRoot":"","sources":["../../../src/data/db/function-definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { Subquery } from '../query/subquery.js';
|
|
|
3
3
|
import type { Column } from './types.js';
|
|
4
4
|
import type { InferFieldOutput } from '../domain/brand.js';
|
|
5
5
|
import type { FieldDescriptor } from '../domain/types.js';
|
|
6
|
+
import { type FunctionDefinition, type FunctionVolatility } from './function-definition.js';
|
|
6
7
|
type AnyField = FieldDescriptor<any, any>;
|
|
7
8
|
/** Declares a SQL function's argument and result-column shapes. See {@link fn}. */
|
|
8
9
|
export interface FunctionSpec<TArgs extends readonly AnyField[], TColumns extends Record<string, AnyField>> {
|
|
@@ -10,6 +11,35 @@ export interface FunctionSpec<TArgs extends readonly AnyField[], TColumns extend
|
|
|
10
11
|
readonly args: readonly [...TArgs];
|
|
11
12
|
/** One `pipe.field.*` descriptor per result column; keys are camelCase, columns are their snake_case. */
|
|
12
13
|
readonly columns: TColumns;
|
|
14
|
+
/** The body of a function pipework creates: one `LANGUAGE sql` SELECT that refers to the arguments as `$1`, `$2`, ... Without it the function is only referenced (it exists already). */
|
|
15
|
+
readonly body?: string;
|
|
16
|
+
/** `'stable'` (the default) or `'immutable'`; a read is never volatile. Only with `body`. */
|
|
17
|
+
readonly volatility?: FunctionVolatility;
|
|
18
|
+
/** The typical number of rows one call returns, a planner estimate (ROWS). Required with `body`. */
|
|
19
|
+
readonly rows?: number;
|
|
20
|
+
/** Only `'sql'`: Postgres inlines no other language. */
|
|
21
|
+
readonly language?: 'sql';
|
|
22
|
+
}
|
|
23
|
+
/** Declares a SQL function that returns one value. See {@link fn}. */
|
|
24
|
+
export interface ScalarFunctionSpec<TArgs extends readonly AnyField[], TReturn extends AnyField> {
|
|
25
|
+
readonly args: readonly [...TArgs];
|
|
26
|
+
readonly returns: TReturn;
|
|
27
|
+
readonly body: string;
|
|
28
|
+
readonly volatility?: FunctionVolatility;
|
|
29
|
+
readonly language?: 'sql';
|
|
30
|
+
}
|
|
31
|
+
/** A function callable with typed arguments; `definition` is set when pipework creates it (the spec had a `body`). */
|
|
32
|
+
export type DefinedCall<TCall> = TCall & {
|
|
33
|
+
readonly definition: FunctionDefinition | undefined;
|
|
34
|
+
/** Where the function lives and its argument types; what a plan or catalog check looks it up by. */
|
|
35
|
+
readonly ref: FunctionRef;
|
|
36
|
+
};
|
|
37
|
+
/** A function's schema, name and SQL argument types. */
|
|
38
|
+
export interface FunctionRef {
|
|
39
|
+
readonly schema: string;
|
|
40
|
+
readonly name: string;
|
|
41
|
+
readonly args: readonly string[];
|
|
42
|
+
readonly setReturning: boolean;
|
|
13
43
|
}
|
|
14
44
|
/** A column whose data type is `T` (and that cannot be null unless `T` can). */
|
|
15
45
|
type ColumnOf<T> = Column & {
|
|
@@ -33,7 +63,7 @@ export type FunctionSource<TAlias extends string, TColumns extends Record<string
|
|
|
33
63
|
as<TNew extends string>(alias: TNew): FunctionSource<TNew, TColumns>;
|
|
34
64
|
};
|
|
35
65
|
/**
|
|
36
|
-
* Declares a
|
|
66
|
+
* Declares a SQL function and returns a callable. A set-returning one (`columns`) yields a source for `.from()` and joins.
|
|
37
67
|
* Each argument is a value, a column or a SQL expression of the declared type. A value is bound as a parameter,
|
|
38
68
|
* converted the way a column of that field is on insert (jsonb as JSON text, dates, bigints, arrays), and cast to its
|
|
39
69
|
* declared SQL type: `ext.f($1::uuid, $2::text)`. A null binds SQL NULL. An array argument (`field.uuid().array()`) is
|
|
@@ -41,6 +71,7 @@ export type FunctionSource<TAlias extends string, TColumns extends Record<string
|
|
|
41
71
|
* `unnest(t.arr::uuid[])`, so an array column can be unnested in a lateral join (`.crossJoinLateral(unnestUuids(t.arr))`).
|
|
42
72
|
* Result columns are typed from `columns`; the default alias is the function's unqualified name.
|
|
43
73
|
*/
|
|
44
|
-
export declare function fn<const TArgs extends readonly AnyField[],
|
|
74
|
+
export declare function fn<const TArgs extends readonly AnyField[], TReturn extends AnyField>(name: string, spec: ScalarFunctionSpec<TArgs, TReturn>): DefinedCall<(...values: ArgValues<TArgs>) => SQL<InferFieldOutput<TReturn>>>;
|
|
75
|
+
export declare function fn<const TArgs extends readonly AnyField[], TColumns extends Record<string, AnyField>>(name: string, spec: FunctionSpec<TArgs, TColumns>): DefinedCall<(...values: ArgValues<TArgs>) => FunctionSource<string, TColumns>>;
|
|
45
76
|
export {};
|
|
46
77
|
//# sourceMappingURL=function-source.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-source.d.ts","sourceRoot":"","sources":["../../../src/data/db/function-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAI/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"function-source.d.ts","sourceRoot":"","sources":["../../../src/data/db/function-source.ts"],"names":[],"mappings":"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"}
|