@antelopejs/postgres 0.2.4 → 0.2.5
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/README.md +38 -52
- package/dist/connection.js +1 -1
- package/dist/connection.js.map +1 -1
- package/dist/implementations/database/context.d.ts +4 -3
- package/dist/implementations/database/context.js.map +1 -1
- package/dist/implementations/database/duplicate-key.d.ts +3 -1
- package/dist/implementations/database/duplicate-key.js +1 -2
- package/dist/implementations/database/duplicate-key.js.map +1 -1
- package/dist/implementations/database/external-discovery.js +17 -8
- package/dist/implementations/database/external-discovery.js.map +1 -1
- package/dist/implementations/database/external-errors.d.ts +10 -1
- package/dist/implementations/database/external-errors.js +57 -27
- package/dist/implementations/database/external-errors.js.map +1 -1
- package/dist/implementations/database/external-measures.js +3 -3
- package/dist/implementations/database/external-measures.js.map +1 -1
- package/dist/implementations/database/external-payload.d.ts +4 -3
- package/dist/implementations/database/external-payload.js +40 -46
- package/dist/implementations/database/external-payload.js.map +1 -1
- package/dist/implementations/database/external-rows.js +4 -1
- package/dist/implementations/database/external-rows.js.map +1 -1
- package/dist/implementations/database/external-types.js +28 -28
- package/dist/implementations/database/external-types.js.map +1 -1
- package/dist/implementations/database/external-writes.js +16 -12
- package/dist/implementations/database/external-writes.js.map +1 -1
- package/dist/implementations/database/feeds.d.ts +2 -1
- package/dist/implementations/database/feeds.js +2 -2
- package/dist/implementations/database/feeds.js.map +1 -1
- package/dist/implementations/database/fields.js +12 -14
- package/dist/implementations/database/fields.js.map +1 -1
- package/dist/implementations/database/instances.d.ts +3 -2
- package/dist/implementations/database/instances.js +4 -4
- package/dist/implementations/database/instances.js.map +1 -1
- package/dist/implementations/database/member.d.ts +41 -0
- package/dist/implementations/database/member.js +91 -0
- package/dist/implementations/database/member.js.map +1 -0
- package/dist/implementations/database/migrate.js.map +1 -1
- package/dist/implementations/database/payload.d.ts +3 -2
- package/dist/implementations/database/payload.js +33 -49
- package/dist/implementations/database/payload.js.map +1 -1
- package/dist/implementations/database/pipeline.js +4 -5
- package/dist/implementations/database/pipeline.js.map +1 -1
- package/dist/implementations/database/query.d.ts +4 -3
- package/dist/implementations/database/query.js +28 -22
- package/dist/implementations/database/query.js.map +1 -1
- package/dist/implementations/database/result.d.ts +6 -2
- package/dist/implementations/database/result.js +23 -19
- package/dist/implementations/database/result.js.map +1 -1
- package/dist/implementations/database/schema.js +30 -31
- package/dist/implementations/database/schema.js.map +1 -1
- package/dist/implementations/database/selection.js +33 -32
- package/dist/implementations/database/selection.js.map +1 -1
- package/dist/implementations/database/stage.js +4 -3
- package/dist/implementations/database/stage.js.map +1 -1
- package/dist/implementations/database/stages-aggregate.js +2 -1
- package/dist/implementations/database/stages-aggregate.js.map +1 -1
- package/dist/implementations/database/stages-array.js +1 -4
- package/dist/implementations/database/stages-array.js.map +1 -1
- package/dist/implementations/database/stages-core.js +9 -2
- package/dist/implementations/database/stages-core.js.map +1 -1
- package/dist/implementations/database/stages-date.js.map +1 -1
- package/dist/implementations/database/stages-group.js +16 -17
- package/dist/implementations/database/stages-group.js.map +1 -1
- package/dist/implementations/database/stages-join.js +6 -8
- package/dist/implementations/database/stages-join.js.map +1 -1
- package/dist/implementations/database/stages-numeric.js +4 -3
- package/dist/implementations/database/stages-numeric.js.map +1 -1
- package/dist/implementations/database/stages-projection.js +4 -2
- package/dist/implementations/database/stages-projection.js.map +1 -1
- package/dist/implementations/database/stages-rows.js +6 -4
- package/dist/implementations/database/stages-rows.js.map +1 -1
- package/dist/implementations/database/stages-selection.js +8 -6
- package/dist/implementations/database/stages-selection.js.map +1 -1
- package/dist/implementations/database/stages-string.js +4 -2
- package/dist/implementations/database/stages-string.js.map +1 -1
- package/dist/implementations/database/subquery.js +1 -1
- package/dist/implementations/database/subquery.js.map +1 -1
- package/dist/implementations/database/utils.d.ts +10 -2
- package/dist/implementations/database/utils.js +6 -1
- package/dist/implementations/database/utils.js.map +1 -1
- package/dist/implementations/database/value.d.ts +14 -6
- package/dist/implementations/database/value.js +58 -67
- package/dist/implementations/database/value.js.map +1 -1
- package/dist/implementations/database/writes-atomic.js +9 -3
- package/dist/implementations/database/writes-atomic.js.map +1 -1
- package/dist/implementations/database/writes-identity.js +11 -9
- package/dist/implementations/database/writes-identity.js.map +1 -1
- package/dist/implementations/database/writes-insert.js +11 -16
- package/dist/implementations/database/writes-insert.js.map +1 -1
- package/dist/implementations/database/writes-shared.d.ts +2 -2
- package/dist/implementations/database/writes-shared.js +4 -7
- package/dist/implementations/database/writes-shared.js.map +1 -1
- package/dist/implementations/database/writes.js +8 -8
- package/dist/implementations/database/writes.js.map +1 -1
- package/dist/test/contention.test.js +1 -2
- package/dist/test/contention.test.js.map +1 -1
- package/dist/test/indexes.test.js.map +1 -1
- package/dist/test/typed-operations.test.d.ts +1 -0
- package/dist/test/typed-operations.test.js +103 -0
- package/dist/test/typed-operations.test.js.map +1 -0
- package/dist/test/unit/config.spec.js +4 -2
- package/dist/test/unit/config.spec.js.map +1 -1
- package/dist/test/unit/expression-array-fixture.d.ts +19 -1
- package/dist/test/unit/expression-array-fixture.js.map +1 -1
- package/dist/test/unit/expression-array-walk.spec.js +4 -4
- package/dist/test/unit/expression-array-walk.spec.js.map +1 -1
- package/dist/test/unit/expression-array.spec.js +1 -1
- package/dist/test/unit/expression-array.spec.js.map +1 -1
- package/dist/test/unit/expression-date.spec.js +10 -11
- package/dist/test/unit/expression-date.spec.js.map +1 -1
- package/dist/test/unit/expression-numeric.spec.js +7 -10
- package/dist/test/unit/expression-numeric.spec.js.map +1 -1
- package/dist/test/unit/expression-object.spec.js.map +1 -1
- package/dist/test/unit/expression-predicate.spec.js +6 -5
- package/dist/test/unit/expression-predicate.spec.js.map +1 -1
- package/dist/test/unit/expression-string.spec.js +13 -4
- package/dist/test/unit/expression-string.spec.js.map +1 -1
- package/dist/test/unit/expression.spec.js +7 -1
- package/dist/test/unit/expression.spec.js.map +1 -1
- package/dist/test/unit/external-types.spec.js +10 -0
- package/dist/test/unit/external-types.spec.js.map +1 -1
- package/dist/test/unit/feeds.spec.js +18 -6
- package/dist/test/unit/feeds.spec.js.map +1 -1
- package/dist/test/unit/fields.spec.js +3 -6
- package/dist/test/unit/fields.spec.js.map +1 -1
- package/dist/test/unit/member.spec.d.ts +1 -0
- package/dist/test/unit/member.spec.js +234 -0
- package/dist/test/unit/member.spec.js.map +1 -0
- package/dist/test/unit/payload.spec.js +53 -48
- package/dist/test/unit/payload.spec.js.map +1 -1
- package/dist/test/unit/pipeline-fixture.js +5 -8
- package/dist/test/unit/pipeline-fixture.js.map +1 -1
- package/dist/test/unit/pipeline-group.spec.js.map +1 -1
- package/dist/test/unit/pipeline-lambda-ids.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-lambda-ids.spec.js +35 -0
- package/dist/test/unit/pipeline-lambda-ids.spec.js.map +1 -0
- package/dist/test/unit/pipeline-lookup.spec.js +7 -7
- package/dist/test/unit/pipeline-lookup.spec.js.map +1 -1
- package/dist/test/unit/pipeline-projection.spec.js +5 -5
- package/dist/test/unit/pipeline-projection.spec.js.map +1 -1
- package/dist/test/unit/pipeline-selection.spec.js +44 -29
- package/dist/test/unit/pipeline-selection.spec.js.map +1 -1
- package/dist/test/unit/pipeline-stages.spec.js +2 -2
- package/dist/test/unit/pipeline-stages.spec.js.map +1 -1
- package/dist/test/unit/pipeline-substream.spec.js +2 -1
- package/dist/test/unit/pipeline-substream.spec.js.map +1 -1
- package/dist/test/unit/pipeline.spec.js +7 -7
- package/dist/test/unit/pipeline.spec.js.map +1 -1
- package/dist/test/unit/result.spec.js +4 -0
- package/dist/test/unit/result.spec.js.map +1 -1
- package/dist/test/unit/schema.spec.js +18 -0
- package/dist/test/unit/schema.spec.js.map +1 -1
- package/dist/test/unit/selection.spec.js +7 -9
- package/dist/test/unit/selection.spec.js.map +1 -1
- package/dist/test/unit/utils.spec.js +8 -6
- package/dist/test/unit/utils.spec.js.map +1 -1
- package/dist/test/unit/value.spec.js +46 -27
- package/dist/test/unit/value.spec.js.map +1 -1
- package/dist/test/unit/writes-insert.spec.js +2 -3
- package/dist/test/unit/writes-insert.spec.js.map +1 -1
- package/dist/test/unit/writes-replace.spec.js +1 -2
- package/dist/test/unit/writes-replace.spec.js.map +1 -1
- package/dist/test/unit/writes-update.spec.js +2 -3
- package/dist/test/unit/writes-update.spec.js.map +1 -1
- package/dist/test-external/reads.test.js.map +1 -1
- package/package.json +8 -7
- package/dist/test/unit/invalid-fixture.d.ts +0 -3
- package/dist/test/unit/invalid-fixture.js +0 -11
- package/dist/test/unit/invalid-fixture.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `@antelopejs/postgres`
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
|
-
<a href="https://www.npmjs.com/package/@antelopejs/postgres"><img alt="npm" src="https://img.shields.io/npm/v/@antelopejs/postgres?style=for-the-badge&labelColor=000000&color=000000"></a>
|
|
5
|
-
<a href="./LICENSE"><img alt="License" src="https://img.shields.io/npm/l/@antelopejs/postgres?style=for-the-badge&labelColor=000000&color=000000"></a>
|
|
6
|
-
<a href="https://discord.gg/g4pFt6eXqu"><img src="https://img.shields.io/badge/Discord-18181B?logo=discord&style=for-the-badge&color=000000" alt="Discord"></a>
|
|
7
|
-
<a href="https://interfaces.antelopejs.com/docs/database"><img src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000" alt="Documentation"></a>
|
|
4
|
+
<a href="https://www.npmjs.com/package/@antelopejs/postgres"><img data-illustration alt="npm" src="https://img.shields.io/npm/v/@antelopejs/postgres?style=for-the-badge&labelColor=000000&color=000000"></a>
|
|
5
|
+
<a href="./LICENSE"><img data-illustration alt="License" src="https://img.shields.io/npm/l/@antelopejs/postgres?style=for-the-badge&labelColor=000000&color=000000"></a>
|
|
6
|
+
<a href="https://discord.gg/g4pFt6eXqu"><img data-illustration src="https://img.shields.io/badge/Discord-18181B?logo=discord&style=for-the-badge&color=000000" alt="Discord"></a>
|
|
7
|
+
<a href="https://interfaces.antelopejs.com/docs/database"><img data-illustration src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000" alt="Documentation"></a>
|
|
8
8
|
</div>
|
|
9
9
|
|
|
10
|
-
The PostgreSQL backend of AntelopeJS
|
|
10
|
+
The PostgreSQL backend of AntelopeJS. It runs the queries of the database interface on PostgreSQL with the [`pg`](https://github.com/brianc/node-postgres) driver, and maps schema definitions onto relational tables with native column types and indexes. It can also serve tables that already exist in a database it does not own.
|
|
11
11
|
|
|
12
12
|
Part of [AntelopeJS](https://github.com/AntelopeJS/antelopejs). Used by [AntelopeJS DMS](https://github.com/AntelopeJS/dms), the open-source back office for your PostgreSQL, MongoDB or RethinkDB database.
|
|
13
13
|
|
|
@@ -17,7 +17,14 @@ Part of [AntelopeJS](https://github.com/AntelopeJS/antelopejs). Used by [Antelop
|
|
|
17
17
|
| ------------------------------------------------------------------------------------ | ----------------------------------------------------------- |
|
|
18
18
|
| [`@antelopejs/interface-database`](https://github.com/AntelopeJS/interface-database) | [Database](https://interfaces.antelopejs.com/docs/database) |
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
The database interface pages document schemas, tables, queries, change feeds and atomic mutations.
|
|
21
|
+
|
|
22
|
+
## Requirements
|
|
23
|
+
|
|
24
|
+
<!-- antelopejs-docs-node:start -->
|
|
25
|
+
|
|
26
|
+
This package requires Node.js `>=22`.
|
|
27
|
+
<!-- antelopejs-docs-node:end -->
|
|
21
28
|
|
|
22
29
|
## Install
|
|
23
30
|
|
|
@@ -25,11 +32,9 @@ Schemas, tables, queries, change feeds and atomic mutations are documented on th
|
|
|
25
32
|
ajs project modules add @antelopejs/postgres
|
|
26
33
|
```
|
|
27
34
|
|
|
28
|
-
The command writes the module's default configuration
|
|
35
|
+
The command writes the module's default configuration, the URL `postgres://postgres@localhost:5432/antelopejs` with `migrations: "safe"`.
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
value which is not a parseable date yields `null` instead of aborting the whole statement. It is
|
|
32
|
-
the only construct used above PostgreSQL 9.5.
|
|
37
|
+
The adapter calls PostgreSQL's `pg_input_is_valid` function, so that a text or jsonb value that is not a parseable date yields `null` and does not abort the whole statement. The server must provide that function. [`src/test/antelope.test.ts`](src/test/antelope.test.ts) names the PostgreSQL image that the tests run against.
|
|
33
38
|
|
|
34
39
|
## Configuration
|
|
35
40
|
|
|
@@ -58,15 +63,15 @@ export default defineConfig({
|
|
|
58
63
|
});
|
|
59
64
|
```
|
|
60
65
|
|
|
61
|
-
| Key | Description
|
|
62
|
-
| -------------- |
|
|
63
|
-
| `mode` | `"owned"` (default) creates and converges the tables
|
|
64
|
-
| `url` | PostgreSQL connection string.
|
|
65
|
-
| `migrations` | `"safe"` (default)
|
|
66
|
-
| `schemaPrefix` | Prefix for generated PostgreSQL schema names, for several applications sharing one database.
|
|
67
|
-
| `pool` | Optional [`pg.Pool`](https://node-postgres.com/apis/pool) options, merged over the URL.
|
|
66
|
+
| Key | Description |
|
|
67
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
68
|
+
| `mode` | `"owned"` (default) creates and converges the tables. `"external"` serves existing tables without changing them. |
|
|
69
|
+
| `url` | PostgreSQL connection string. |
|
|
70
|
+
| `migrations` | `"safe"` (default) adds columns and indexes, and also drops or swaps indexes that the adapter owns. `"destructive"` also alters and drops columns. See [Schema convergence](./docs/storage.md#schema-convergence). |
|
|
71
|
+
| `schemaPrefix` | Prefix for generated PostgreSQL schema names, for several applications sharing one database. |
|
|
72
|
+
| `pool` | Optional [`pg.Pool`](https://node-postgres.com/apis/pool) options, merged over the URL. |
|
|
68
73
|
|
|
69
|
-
|
|
74
|
+
[docs/configuration.md](./docs/configuration.md) lists the options for cursors, the statement timeout and change feeds.
|
|
70
75
|
|
|
71
76
|
## Quick start
|
|
72
77
|
|
|
@@ -76,30 +81,22 @@ In the module that stores data, add the database interface:
|
|
|
76
81
|
pnpm add @antelopejs/interface-database
|
|
77
82
|
```
|
|
78
83
|
|
|
79
|
-
Then follow the [database interface guide](https://framework.antelopejs.com/docs/guides/database) to declare a schema and query it. The same code runs on [`@antelopejs/mongodb`](https://github.com/AntelopeJS/mongodb) and [`@antelopejs/rethinkdb`](https://github.com/AntelopeJS/rethinkdb)
|
|
84
|
+
Then follow the [database interface guide](https://framework.antelopejs.com/docs/guides/database) to declare a schema and query it. The same code runs on [`@antelopejs/mongodb`](https://github.com/AntelopeJS/mongodb) and [`@antelopejs/rethinkdb`](https://github.com/AntelopeJS/rethinkdb). [Behaviour worth knowing](./docs/behaviour.md) records where the backends differ.
|
|
80
85
|
|
|
81
86
|
## Storage layout
|
|
82
87
|
|
|
83
|
-
Unlike the document-store backends, this module
|
|
84
|
-
DDL: each AntelopeJS schema becomes a PostgreSQL schema, each table a real table, and each
|
|
85
|
-
declared scalar field a natively typed, natively indexable column. Queries compile to a single
|
|
86
|
-
SQL statement. Filters become `WHERE` clauses, joins become `JOIN`s, and a `filter` or `orderBy`
|
|
87
|
-
over a declared field reaches its btree index.
|
|
88
|
+
Unlike the document-store backends, this module turns schema field declarations into DDL. Each AntelopeJS schema becomes a PostgreSQL schema, each table a real table, and each declared scalar field a column with a native type and native indexes. A query compiles to a single SQL statement. Filters become `WHERE` clauses, joins become `JOIN`s, and a `filter` or `orderBy` over a declared field reaches its btree index.
|
|
88
89
|
|
|
89
|
-
- One PostgreSQL schema per AntelopeJS schema id
|
|
90
|
-
- Declared scalar fields become typed columns
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
- Change feeds
|
|
94
|
-
|
|
95
|
-
**Requires PostgreSQL 16 or later.** The adapter uses `pg_input_is_valid` so that a text or jsonb
|
|
96
|
-
value which is not a parseable date yields `null` instead of aborting the whole statement. It is
|
|
97
|
-
the only construct used above PostgreSQL 9.5.
|
|
90
|
+
- One PostgreSQL schema per AntelopeJS schema id.
|
|
91
|
+
- Declared scalar fields become typed columns. Objects, arrays and undeclared fields live in `jsonb`.
|
|
92
|
+
- An `_instance` discriminator column keeps schema instances apart.
|
|
93
|
+
- Schema convergence adds columns and indexes, drops or swaps the indexes the adapter owns, and refuses destructive column changes unless you turn them on.
|
|
94
|
+
- Change feeds are a durable log plus a pull-based reader.
|
|
98
95
|
|
|
99
96
|
## Documentation
|
|
100
97
|
|
|
101
|
-
- [Database](https://interfaces.antelopejs.com/docs/database)
|
|
102
|
-
- [Configuration](https://framework.antelopejs.com/docs/concepts/configuration)
|
|
98
|
+
- [Database](https://interfaces.antelopejs.com/docs/database) is the `@antelopejs/interface-database` contract that this module implements.
|
|
99
|
+
- [Configuration](https://framework.antelopejs.com/docs/concepts/configuration) covers module sources, `config` blocks and config variables in `antelope.config.ts`.
|
|
103
100
|
|
|
104
101
|
This repository documents what is specific to the PostgreSQL backend:
|
|
105
102
|
|
|
@@ -119,24 +116,16 @@ This repository documents what is specific to the PostgreSQL backend:
|
|
|
119
116
|
| Package | Supported | Tested with |
|
|
120
117
|
| ---------------------------------------- | ---------------- | ----------- |
|
|
121
118
|
| `@antelopejs/interface-core` | `>=0.1.1 <1.0.0` | `0.2.0` |
|
|
122
|
-
| `@antelopejs/interface-database` | `>=0.
|
|
119
|
+
| `@antelopejs/interface-database` | `>=0.3.0 <0.4.0` | `0.3.0` |
|
|
123
120
|
| `@antelopejs/interface-database-catalog` | `>=0.0.3 <0.1.0` | `0.0.3` |
|
|
124
121
|
|
|
125
122
|
<!-- antelopejs-docs-compat:end -->
|
|
126
123
|
|
|
127
|
-
|
|
128
|
-
| ---------------------------------------- | ---------------- |
|
|
129
|
-
| `@antelopejs/interface-database` | `>=0.2.0 <0.3.0` |
|
|
130
|
-
| `@antelopejs/interface-database-catalog` | `>=0.0.3 <0.1.0` |
|
|
131
|
-
| `@antelopejs/interface-core` | `>=0.1.1 <1.0.0` |
|
|
132
|
-
|
|
133
|
-
The module is developed and tested against `@antelopejs/core` `^1.14.0` on Node.js 24 (the `.nvmrc` version CI runs), with the `pg` driver `^8.22.0` and PostgreSQL 18.
|
|
124
|
+
CI tests every Node.js major listed under `node-versions` in [`.github/workflows/ci.yml`](.github/workflows/ci.yml), and [`.nvmrc`](.nvmrc) names the version for local work. The `dependencies` field of [`package.json`](package.json) sets the `pg` driver range, and [`src/test/antelope.test.ts`](src/test/antelope.test.ts) names the PostgreSQL image that the tests run against.
|
|
134
125
|
|
|
135
126
|
## Contributing
|
|
136
127
|
|
|
137
|
-
|
|
138
|
-
runs on any version its `pg` dependency supports. The floor comes from `testcontainers`, a
|
|
139
|
-
devDependency whose bundled `undici` calls `worker_threads.markAsUncloneable`, absent from Node 20.
|
|
128
|
+
The `engines` field of [`package.json`](package.json) sets the Node.js floor. The floor comes from Testcontainers, a dev dependency whose bundled `undici` calls `worker_threads.markAsUncloneable`, which older Node.js majors lack.
|
|
140
129
|
|
|
141
130
|
```bash
|
|
142
131
|
pnpm install
|
|
@@ -147,12 +136,9 @@ pnpm test:unit # fast loop: this repository's unit specs, no Docker
|
|
|
147
136
|
pnpm test # everything, against PostgreSQL: unit specs, conformance and external-mode suites
|
|
148
137
|
```
|
|
149
138
|
|
|
150
|
-
`pnpm test`
|
|
151
|
-
repository's own tests, it runs the shared conformance suite of `@antelopejs/interface-database`,
|
|
152
|
-
discovered from `antelopeJs.implements`.
|
|
139
|
+
`pnpm test` starts PostgreSQL with Testcontainers, so it needs a Docker daemon. Besides this repository's own tests, it runs the shared conformance suites of the interfaces listed in `antelopeJs.implements`.
|
|
153
140
|
|
|
154
|
-
To test against an existing server instead of a container, set `PG_TEST_URL`. It must point to a
|
|
155
|
-
disposable instance: the external suite drops and recreates a fixture database and may create a role.
|
|
141
|
+
To test against an existing server instead of a container, set `PG_TEST_URL`. It must point to a disposable instance, because the external suite drops and recreates a fixture database and may create a role.
|
|
156
142
|
|
|
157
143
|
```bash
|
|
158
144
|
PG_TEST_URL=postgres://postgres:postgres@localhost:5432/antelopejs_test pnpm test
|
package/dist/connection.js
CHANGED
|
@@ -118,7 +118,7 @@ function WarnSlowAcquire() {
|
|
|
118
118
|
logger_1.Logger.Warn(SLOW_ACQUIRE);
|
|
119
119
|
}
|
|
120
120
|
function GuardHeldClient(client) {
|
|
121
|
-
const checkin = client.release;
|
|
121
|
+
const checkin = client.release.bind(client);
|
|
122
122
|
client.on(CLIENT_ERROR, ReportHeldClientError);
|
|
123
123
|
client.release = (...args) => {
|
|
124
124
|
client.off(CLIENT_ERROR, ReportHeldClientError);
|
package/dist/connection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { Relation } from "./relation";
|
|
|
3
3
|
import type { RowSource } from "./row-source";
|
|
4
4
|
import type { OriginResolver } from "./selection";
|
|
5
5
|
import { type Compiled, ParamCollector } from "./sql";
|
|
6
|
+
export type ParameterId = number | string;
|
|
6
7
|
export type SubqueryProvider = (stages: QueryStage[]) => Compiled;
|
|
7
8
|
export type ArgumentBinding = RowSource | SubqueryProvider | Compiled;
|
|
8
9
|
export declare function IsSubqueryProvider(binding: ArgumentBinding): binding is SubqueryProvider;
|
|
@@ -23,9 +24,9 @@ export declare class DecodingContext {
|
|
|
23
24
|
constructor(compilers: Compilers, resolveOrigin?: OriginResolver | undefined);
|
|
24
25
|
sibling(): DecodingContext;
|
|
25
26
|
nextAlias(): string;
|
|
26
|
-
bind(id:
|
|
27
|
-
unbind(id:
|
|
28
|
-
arg(id:
|
|
27
|
+
bind(id: ParameterId, binding: ArgumentBinding): void;
|
|
28
|
+
unbind(id: ParameterId): void;
|
|
29
|
+
arg(id: ParameterId): ArgumentBinding;
|
|
29
30
|
expression(stages: QueryStage[], source?: RowSource): Compiled;
|
|
30
31
|
subquery(stages: QueryStage[]): Compiled;
|
|
31
32
|
relation(stages: QueryStage[]): Relation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/implementations/database/context.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/implementations/database/context.ts"],"names":[],"mappings":";;;;;;AAmBA,gDAIC;AAvBD,8DAAiC;AAMjC,+BAAsD;AAatD,SAAgB,kBAAkB,CAChC,OAAwB;IAExB,OAAO,OAAO,OAAO,KAAK,UAAU,CAAC;AACvC,CAAC;AAoCD,MAAM,YAAY,GAAG,GAAG,CAAC;AAQzB,MAAa,eAAe;IAkBP;IACD;IAlBF,MAAM,GAAG,IAAI,oBAAc,EAAE,CAAC;IAE7B,QAAQ,GAAyC,EAAE,CAAC;IAC7D,YAAY,GAAG,CAAC,CAAC;IAazB,YACmB,SAAoB,EACrB,aAA8B;QAD7B,cAAS,GAAT,SAAS,CAAW;QACrB,kBAAa,GAAb,aAAa,CAAiB;IAC7C,CAAC;IAGG,OAAO;QACZ,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;IAEM,SAAS;QACd,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;IACjD,CAAC;IAEM,IAAI,CAAC,EAAe,EAAE,OAAwB;QACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,EAAe;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAEM,GAAG,CAAC,EAAe;QACxB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnB,CAAC,CAAC,SAAS,CAAC;QACd,IAAA,qBAAM,EAAC,OAAO,EAAE,4BAA4B,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,UAAU,CAAC,MAAoB,EAAE,MAAkB;QACxD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAEM,QAAQ,CAAC,MAAoB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAGM,QAAQ,CAAC,MAAoB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF;AA3DD,0CA2DC"}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
+
import { DatabaseError } from "pg";
|
|
2
|
+
import { DuplicateKeyError } from "@antelopejs/interface-database";
|
|
1
3
|
import type { TableOrigin } from "./relation";
|
|
2
|
-
export declare function DuplicateKeyFailure(err:
|
|
4
|
+
export declare function DuplicateKeyFailure(err: DatabaseError, origin: TableOrigin): Promise<DatabaseError | DuplicateKeyError>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DuplicateKeyFailure = DuplicateKeyFailure;
|
|
4
|
-
const pg_1 = require("pg");
|
|
5
4
|
const interface_database_1 = require("@antelopejs/interface-database");
|
|
6
5
|
const connection_1 = require("../../connection");
|
|
7
6
|
const ddl_1 = require("./ddl");
|
|
@@ -33,7 +32,7 @@ async function IsPrimaryKey(schemaName, constraint) {
|
|
|
33
32
|
return result.rows.length > 0;
|
|
34
33
|
}
|
|
35
34
|
async function DuplicateKeyFailure(err, origin) {
|
|
36
|
-
if (
|
|
35
|
+
if (err.code !== UNIQUE_VIOLATION) {
|
|
37
36
|
return err;
|
|
38
37
|
}
|
|
39
38
|
const constraint = err.constraint ?? "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicate-key.js","sourceRoot":"","sources":["../../../src/implementations/database/duplicate-key.ts"],"names":[],"mappings":";;AAyDA,kDAgBC;
|
|
1
|
+
{"version":3,"file":"duplicate-key.js","sourceRoot":"","sources":["../../../src/implementations/database/duplicate-key.ts"],"names":[],"mappings":";;AAyDA,kDAgBC;AAxED,uEAAmE;AAEnE,iDAAyC;AACzC,+BAAoC;AACpC,qCAAoC;AACpC,mCAAoC;AAEpC,6CAA2E;AAE3E,MAAM,gBAAgB,GAAG,OAAO,CAAC;AACjC,MAAM,kBAAkB,GAAG,CAAC,iBAAS,CAAC,CAAC;AAEvC,MAAM,kBAAkB,GAAG;;;;6DAIkC,CAAC;AAY9D,SAAS,UAAU,CAAC,MAAmB;IACrC,MAAM,OAAO,GAAG,IAAA,iBAAQ,EAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IACxE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC1C,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAA,iBAAW,EAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,IAAA,sBAAS,EAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAA,iCAAoB,EAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAGD,KAAK,UAAU,YAAY,CAAC,UAAkB,EAAE,UAAkB;IAChE,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAK,EAAC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,CAAC;AAUM,KAAK,UAAU,mBAAmB,CACvC,GAAkB,EAClB,MAAmB;IAEnB,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,sCAAiB,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,YAAY,CAAC,IAAA,uBAAU,EAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,sCAAiB,CAAC,iBAAS,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.RelationName = RelationName;
|
|
4
7
|
exports.ReadInfo = ReadInfo;
|
|
@@ -10,6 +13,7 @@ exports.Summarize = Summarize;
|
|
|
10
13
|
exports.ReferenceOf = ReferenceOf;
|
|
11
14
|
exports.ReadReferences = ReadReferences;
|
|
12
15
|
exports.DescribeRow = DescribeRow;
|
|
16
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
13
17
|
const connection_1 = require("../../connection");
|
|
14
18
|
const external_catalog_1 = require("./external-catalog");
|
|
15
19
|
const external_declarations_1 = require("./external-declarations");
|
|
@@ -68,13 +72,18 @@ const REFERENCES_SQL = `
|
|
|
68
72
|
const INFO_SQL = `
|
|
69
73
|
SELECT current_setting('server_version') AS version, current_database() AS database,
|
|
70
74
|
current_user AS role`;
|
|
71
|
-
const KINDS =
|
|
72
|
-
r
|
|
73
|
-
p
|
|
74
|
-
v
|
|
75
|
-
m
|
|
76
|
-
f
|
|
77
|
-
|
|
75
|
+
const KINDS = new Map([
|
|
76
|
+
["r", "table"],
|
|
77
|
+
["p", "partitioned"],
|
|
78
|
+
["v", "view"],
|
|
79
|
+
["m", "materialized"],
|
|
80
|
+
["f", "foreign"],
|
|
81
|
+
]);
|
|
82
|
+
function KindOf(row) {
|
|
83
|
+
const kind = KINDS.get(row.kind);
|
|
84
|
+
(0, node_assert_1.default)(kind, `Relation ${RelationName(row)} has the unlisted kind '${row.kind}'`);
|
|
85
|
+
return kind;
|
|
86
|
+
}
|
|
78
87
|
const PARTIAL_GRANTS = "SELECT is granted on some of its columns only";
|
|
79
88
|
const NOT_READABLE = "the connected role cannot SELECT from it";
|
|
80
89
|
function RelationName(row) {
|
|
@@ -133,7 +142,7 @@ async function SummaryOf(row, key) {
|
|
|
133
142
|
return {
|
|
134
143
|
schema: row.schema,
|
|
135
144
|
name: row.name,
|
|
136
|
-
kind:
|
|
145
|
+
kind: KindOf(row),
|
|
137
146
|
...(await EstimateOf(row)),
|
|
138
147
|
key,
|
|
139
148
|
unmappable: UnmappableReason(row),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-discovery.js","sourceRoot":"","sources":["../../../src/implementations/database/external-discovery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"external-discovery.js","sourceRoot":"","sources":["../../../src/implementations/database/external-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,15 @@ interface ExternalWriteFacts {
|
|
|
15
15
|
code?: string;
|
|
16
16
|
detail?: string;
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
interface DatabaseError {
|
|
19
|
+
code?: string;
|
|
20
|
+
column?: string;
|
|
21
|
+
constraint?: string;
|
|
22
|
+
table?: string;
|
|
23
|
+
detail?: string;
|
|
24
|
+
message: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function IsDatabaseError(value: unknown): value is DatabaseError;
|
|
27
|
+
export declare function ExternalWriteFailure(error: DatabaseError, external: ExternalRelation): DatabaseError | ExternalWriteError;
|
|
19
28
|
export declare function InvalidValues(failures: string[]): ExternalWriteError;
|
|
20
29
|
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ExternalWriteError = void 0;
|
|
4
|
+
exports.IsDatabaseError = IsDatabaseError;
|
|
4
5
|
exports.ExternalWriteFailure = ExternalWriteFailure;
|
|
5
6
|
exports.InvalidValues = InvalidValues;
|
|
7
|
+
const guards_1 = require("./guards");
|
|
6
8
|
const identifier_1 = require("./identifier");
|
|
7
9
|
class ExternalWriteError extends Error {
|
|
8
10
|
kind;
|
|
@@ -21,40 +23,68 @@ class ExternalWriteError extends Error {
|
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
exports.ExternalWriteError = ExternalWriteError;
|
|
26
|
+
function IsOptionalText(value) {
|
|
27
|
+
return value === undefined || (0, guards_1.IsString)(value);
|
|
28
|
+
}
|
|
29
|
+
function IsDatabaseError(value) {
|
|
30
|
+
return ((0, guards_1.IsDocument)(value) &&
|
|
31
|
+
(0, guards_1.IsString)(value.message) &&
|
|
32
|
+
[
|
|
33
|
+
value.code,
|
|
34
|
+
value.column,
|
|
35
|
+
value.constraint,
|
|
36
|
+
value.table,
|
|
37
|
+
value.detail,
|
|
38
|
+
].every(IsOptionalText));
|
|
39
|
+
}
|
|
24
40
|
function Detail(error) {
|
|
25
41
|
return error.detail ? `: ${error.detail}` : "";
|
|
26
42
|
}
|
|
27
|
-
const MAPPINGS =
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const referenced = (error.detail ?? "").includes("is still referenced");
|
|
41
|
-
return new ExternalWriteError(referenced
|
|
42
|
-
? `The row of ${relation} is still referenced through "${error.constraint}"${Detail(error)}`
|
|
43
|
-
: `A referenced row does not exist for "${error.constraint}" of ${relation}${Detail(error)}`, {
|
|
44
|
-
kind: referenced ? "referenced" : "reference",
|
|
43
|
+
const MAPPINGS = new Map([
|
|
44
|
+
[
|
|
45
|
+
"23502",
|
|
46
|
+
(error, relation) => new ExternalWriteError(`Field '${error.column}' of ${relation} is required`, {
|
|
47
|
+
kind: "missing",
|
|
48
|
+
fields: error.column ? [error.column] : [],
|
|
49
|
+
code: error.code,
|
|
50
|
+
}),
|
|
51
|
+
],
|
|
52
|
+
[
|
|
53
|
+
"23505",
|
|
54
|
+
(error, relation) => new ExternalWriteError(`A row of ${relation} already has this value of unique "${error.constraint}"${Detail(error)}`, {
|
|
55
|
+
kind: "duplicate",
|
|
45
56
|
constraint: error.constraint,
|
|
46
57
|
code: error.code,
|
|
47
58
|
detail: error.detail,
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
}),
|
|
60
|
+
],
|
|
61
|
+
[
|
|
62
|
+
"23503",
|
|
63
|
+
(error, relation) => {
|
|
64
|
+
const referenced = (error.detail ?? "").includes("is still referenced");
|
|
65
|
+
return new ExternalWriteError(referenced
|
|
66
|
+
? `The row of ${relation} is still referenced through "${error.constraint}"${Detail(error)}`
|
|
67
|
+
: `A referenced row does not exist for "${error.constraint}" of ${relation}${Detail(error)}`, {
|
|
68
|
+
kind: referenced ? "referenced" : "reference",
|
|
69
|
+
constraint: error.constraint,
|
|
70
|
+
code: error.code,
|
|
71
|
+
detail: error.detail,
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
"23514",
|
|
77
|
+
(error, relation) => new ExternalWriteError(`The row breaks check "${error.constraint}" of ${relation}`, { kind: "check", constraint: error.constraint, code: error.code }),
|
|
78
|
+
],
|
|
79
|
+
[
|
|
80
|
+
"42501",
|
|
81
|
+
(error, relation) => new ExternalWriteError(`The connected role may not write to ${relation}: ${error.message}`, { kind: "forbidden", code: error.code }),
|
|
82
|
+
],
|
|
83
|
+
]);
|
|
84
|
+
function ExternalWriteFailure(error, external) {
|
|
85
|
+
const mapping = error.code ? MAPPINGS.get(error.code) : undefined;
|
|
56
86
|
if (!mapping) {
|
|
57
|
-
return
|
|
87
|
+
return error;
|
|
58
88
|
}
|
|
59
89
|
return mapping(error, (0, identifier_1.QualifiedName)(external.schema, external.table));
|
|
60
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-errors.js","sourceRoot":"","sources":["../../../src/implementations/database/external-errors.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"external-errors.js","sourceRoot":"","sources":["../../../src/implementations/database/external-errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ exports.Mapped = Mapped;
|
|
|
7
7
|
exports.ValueOf = ValueOf;
|
|
8
8
|
exports.Sequentially = Sequentially;
|
|
9
9
|
const connection_1 = require("../../connection");
|
|
10
|
+
const guards_1 = require("./guards");
|
|
10
11
|
const DEFAULT_STATEMENT_TIMEOUT_MS = 5000;
|
|
11
12
|
const LOCK_TIMEOUT_MS = 1000;
|
|
12
13
|
const SAVEPOINT = "measure";
|
|
@@ -15,8 +16,7 @@ let statementTimeoutMs = DEFAULT_STATEMENT_TIMEOUT_MS;
|
|
|
15
16
|
function SetMeasureTimeoutForTests(ms) {
|
|
16
17
|
statementTimeoutMs = ms ?? DEFAULT_STATEMENT_TIMEOUT_MS;
|
|
17
18
|
}
|
|
18
|
-
function Failed(
|
|
19
|
-
const code = error.code ?? "unknown";
|
|
19
|
+
function Failed(code) {
|
|
20
20
|
return TIMEOUT_CODES.includes(code)
|
|
21
21
|
? { status: "timeout" }
|
|
22
22
|
: { status: "error", code };
|
|
@@ -32,7 +32,7 @@ function SessionOver(client) {
|
|
|
32
32
|
}
|
|
33
33
|
catch (error) {
|
|
34
34
|
await client.query(`ROLLBACK TO SAVEPOINT ${SAVEPOINT}`);
|
|
35
|
-
return Failed(error);
|
|
35
|
+
return Failed((0, guards_1.IsDocument)(error) && (0, guards_1.IsString)(error.code) ? error.code : "unknown");
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-measures.js","sourceRoot":"","sources":["../../../src/implementations/database/external-measures.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"external-measures.js","sourceRoot":"","sources":["../../../src/implementations/database/external-measures.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type DocumentView, type Member } from "./member";
|
|
1
2
|
import { type SqlType } from "./types";
|
|
2
3
|
import type { DecodingContext } from "./context";
|
|
3
4
|
import type { Compiled } from "./sql";
|
|
@@ -8,7 +9,7 @@ export interface ExternalAssignment {
|
|
|
8
9
|
field: string;
|
|
9
10
|
descriptor: ColumnDescriptor;
|
|
10
11
|
value: Compiled;
|
|
11
|
-
raw?:
|
|
12
|
+
raw?: Member;
|
|
12
13
|
toDefault?: boolean;
|
|
13
14
|
}
|
|
14
15
|
export interface ExternalPayload {
|
|
@@ -20,7 +21,7 @@ export interface KeyFieldClaim {
|
|
|
20
21
|
field: string;
|
|
21
22
|
descriptor: ColumnDescriptor;
|
|
22
23
|
type: SqlType;
|
|
23
|
-
raw:
|
|
24
|
+
raw: Member;
|
|
24
25
|
}
|
|
25
26
|
export declare function KeyFieldValue(claim: KeyFieldClaim, context: DecodingContext): Compiled;
|
|
26
27
|
export interface AssertedKey {
|
|
@@ -29,4 +30,4 @@ export interface AssertedKey {
|
|
|
29
30
|
claimedBy: string;
|
|
30
31
|
}
|
|
31
32
|
export declare function KeyValue(asserted: AssertedKey, context: DecodingContext): Compiled;
|
|
32
|
-
export declare function SplitExternalPayload(document:
|
|
33
|
+
export declare function SplitExternalPayload(document: DocumentView, model: TableModel, context: DecodingContext, mode: ExternalWriteMode): ExternalPayload;
|