@antelopejs/postgres 0.0.1-stage → 0.2.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/LICENSE +190 -0
- package/README.md +152 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.js +90 -0
- package/dist/config.js.map +1 -0
- package/dist/connection.d.ts +14 -0
- package/dist/connection.js +128 -0
- package/dist/connection.js.map +1 -0
- package/dist/implementations/database/changes.d.ts +19 -0
- package/dist/implementations/database/changes.js +100 -0
- package/dist/implementations/database/changes.js.map +1 -0
- package/dist/implementations/database/coerce.d.ts +15 -0
- package/dist/implementations/database/coerce.js +195 -0
- package/dist/implementations/database/coerce.js.map +1 -0
- package/dist/implementations/database/context.d.ts +32 -0
- package/dist/implementations/database/context.js +50 -0
- package/dist/implementations/database/context.js.map +1 -0
- package/dist/implementations/database/cursors.d.ts +16 -0
- package/dist/implementations/database/cursors.js +269 -0
- package/dist/implementations/database/cursors.js.map +1 -0
- package/dist/implementations/database/ddl.d.ts +62 -0
- package/dist/implementations/database/ddl.js +355 -0
- package/dist/implementations/database/ddl.js.map +1 -0
- package/dist/implementations/database/expression.d.ts +7 -0
- package/dist/implementations/database/expression.js +30 -0
- package/dist/implementations/database/expression.js.map +1 -0
- package/dist/implementations/database/external-catalog.d.ts +22 -0
- package/dist/implementations/database/external-catalog.js +82 -0
- package/dist/implementations/database/external-catalog.js.map +1 -0
- package/dist/implementations/database/external-errors.d.ts +20 -0
- package/dist/implementations/database/external-errors.js +67 -0
- package/dist/implementations/database/external-errors.js.map +1 -0
- package/dist/implementations/database/external-payload.d.ts +32 -0
- package/dist/implementations/database/external-payload.js +206 -0
- package/dist/implementations/database/external-payload.js.map +1 -0
- package/dist/implementations/database/external-refusals.d.ts +5 -0
- package/dist/implementations/database/external-refusals.js +23 -0
- package/dist/implementations/database/external-refusals.js.map +1 -0
- package/dist/implementations/database/external-schema.d.ts +3 -0
- package/dist/implementations/database/external-schema.js +121 -0
- package/dist/implementations/database/external-schema.js.map +1 -0
- package/dist/implementations/database/external-types.d.ts +29 -0
- package/dist/implementations/database/external-types.js +373 -0
- package/dist/implementations/database/external-types.js.map +1 -0
- package/dist/implementations/database/external-writes.d.ts +3 -0
- package/dist/implementations/database/external-writes.js +298 -0
- package/dist/implementations/database/external-writes.js.map +1 -0
- package/dist/implementations/database/feed-pipeline.d.ts +12 -0
- package/dist/implementations/database/feed-pipeline.js +92 -0
- package/dist/implementations/database/feed-pipeline.js.map +1 -0
- package/dist/implementations/database/feeds.d.ts +34 -0
- package/dist/implementations/database/feeds.js +338 -0
- package/dist/implementations/database/feeds.js.map +1 -0
- package/dist/implementations/database/fields.d.ts +37 -0
- package/dist/implementations/database/fields.js +114 -0
- package/dist/implementations/database/fields.js.map +1 -0
- package/dist/implementations/database/identifier.d.ts +8 -0
- package/dist/implementations/database/identifier.js +62 -0
- package/dist/implementations/database/identifier.js.map +1 -0
- package/dist/implementations/database/instances.d.ts +4 -0
- package/dist/implementations/database/instances.js +57 -0
- package/dist/implementations/database/instances.js.map +1 -0
- package/dist/implementations/database/introspect.d.ts +3 -0
- package/dist/implementations/database/introspect.js +36 -0
- package/dist/implementations/database/introspect.js.map +1 -0
- package/dist/implementations/database/jsonb.d.ts +29 -0
- package/dist/implementations/database/jsonb.js +54 -0
- package/dist/implementations/database/jsonb.js.map +1 -0
- package/dist/implementations/database/listener.d.ts +3 -0
- package/dist/implementations/database/listener.js +93 -0
- package/dist/implementations/database/listener.js.map +1 -0
- package/dist/implementations/database/migrate.d.ts +6 -0
- package/dist/implementations/database/migrate.js +282 -0
- package/dist/implementations/database/migrate.js.map +1 -0
- package/dist/implementations/database/payload.d.ts +24 -0
- package/dist/implementations/database/payload.js +113 -0
- package/dist/implementations/database/payload.js.map +1 -0
- package/dist/implementations/database/pipeline.d.ts +10 -0
- package/dist/implementations/database/pipeline.js +56 -0
- package/dist/implementations/database/pipeline.js.map +1 -0
- package/dist/implementations/database/query.d.ts +11 -0
- package/dist/implementations/database/query.js +189 -0
- package/dist/implementations/database/query.js.map +1 -0
- package/dist/implementations/database/readings.d.ts +17 -0
- package/dist/implementations/database/readings.js +133 -0
- package/dist/implementations/database/readings.js.map +1 -0
- package/dist/implementations/database/reaper.d.ts +6 -0
- package/dist/implementations/database/reaper.js +121 -0
- package/dist/implementations/database/reaper.js.map +1 -0
- package/dist/implementations/database/relation.d.ts +65 -0
- package/dist/implementations/database/relation.js +237 -0
- package/dist/implementations/database/relation.js.map +1 -0
- package/dist/implementations/database/result.d.ts +4 -0
- package/dist/implementations/database/result.js +70 -0
- package/dist/implementations/database/result.js.map +1 -0
- package/dist/implementations/database/row-source.d.ts +64 -0
- package/dist/implementations/database/row-source.js +279 -0
- package/dist/implementations/database/row-source.js.map +1 -0
- package/dist/implementations/database/schema.d.ts +15 -0
- package/dist/implementations/database/schema.js +143 -0
- package/dist/implementations/database/schema.js.map +1 -0
- package/dist/implementations/database/selection.d.ts +18 -0
- package/dist/implementations/database/selection.js +129 -0
- package/dist/implementations/database/selection.js.map +1 -0
- package/dist/implementations/database/sql.d.ts +24 -0
- package/dist/implementations/database/sql.js +48 -0
- package/dist/implementations/database/sql.js.map +1 -0
- package/dist/implementations/database/stage.d.ts +22 -0
- package/dist/implementations/database/stage.js +76 -0
- package/dist/implementations/database/stage.js.map +1 -0
- package/dist/implementations/database/stages-aggregate.d.ts +11 -0
- package/dist/implementations/database/stages-aggregate.js +112 -0
- package/dist/implementations/database/stages-aggregate.js.map +1 -0
- package/dist/implementations/database/stages-array.d.ts +2 -0
- package/dist/implementations/database/stages-array.js +162 -0
- package/dist/implementations/database/stages-array.js.map +1 -0
- package/dist/implementations/database/stages-core.d.ts +2 -0
- package/dist/implementations/database/stages-core.js +107 -0
- package/dist/implementations/database/stages-core.js.map +1 -0
- package/dist/implementations/database/stages-date.d.ts +2 -0
- package/dist/implementations/database/stages-date.js +65 -0
- package/dist/implementations/database/stages-date.js.map +1 -0
- package/dist/implementations/database/stages-group.d.ts +5 -0
- package/dist/implementations/database/stages-group.js +151 -0
- package/dist/implementations/database/stages-group.js.map +1 -0
- package/dist/implementations/database/stages-join.d.ts +2 -0
- package/dist/implementations/database/stages-join.js +162 -0
- package/dist/implementations/database/stages-join.js.map +1 -0
- package/dist/implementations/database/stages-numeric.d.ts +2 -0
- package/dist/implementations/database/stages-numeric.js +152 -0
- package/dist/implementations/database/stages-numeric.js.map +1 -0
- package/dist/implementations/database/stages-object.d.ts +2 -0
- package/dist/implementations/database/stages-object.js +81 -0
- package/dist/implementations/database/stages-object.js.map +1 -0
- package/dist/implementations/database/stages-projection.d.ts +2 -0
- package/dist/implementations/database/stages-projection.js +75 -0
- package/dist/implementations/database/stages-projection.js.map +1 -0
- package/dist/implementations/database/stages-rows.d.ts +2 -0
- package/dist/implementations/database/stages-rows.js +101 -0
- package/dist/implementations/database/stages-rows.js.map +1 -0
- package/dist/implementations/database/stages-selection.d.ts +2 -0
- package/dist/implementations/database/stages-selection.js +146 -0
- package/dist/implementations/database/stages-selection.js.map +1 -0
- package/dist/implementations/database/stages-string.d.ts +2 -0
- package/dist/implementations/database/stages-string.js +101 -0
- package/dist/implementations/database/stages-string.js.map +1 -0
- package/dist/implementations/database/subquery.d.ts +4 -0
- package/dist/implementations/database/subquery.js +49 -0
- package/dist/implementations/database/subquery.js.map +1 -0
- package/dist/implementations/database/types.d.ts +37 -0
- package/dist/implementations/database/types.js +57 -0
- package/dist/implementations/database/types.js.map +1 -0
- package/dist/implementations/database/utils.d.ts +16 -0
- package/dist/implementations/database/utils.js +38 -0
- package/dist/implementations/database/utils.js.map +1 -0
- package/dist/implementations/database/value.d.ts +10 -0
- package/dist/implementations/database/value.js +153 -0
- package/dist/implementations/database/value.js.map +1 -0
- package/dist/implementations/database/writes-atomic.d.ts +6 -0
- package/dist/implementations/database/writes-atomic.js +93 -0
- package/dist/implementations/database/writes-atomic.js.map +1 -0
- package/dist/implementations/database/writes-identity.d.ts +4 -0
- package/dist/implementations/database/writes-identity.js +181 -0
- package/dist/implementations/database/writes-identity.js.map +1 -0
- package/dist/implementations/database/writes-insert.d.ts +2 -0
- package/dist/implementations/database/writes-insert.js +136 -0
- package/dist/implementations/database/writes-insert.js.map +1 -0
- package/dist/implementations/database/writes-shared.d.ts +36 -0
- package/dist/implementations/database/writes-shared.js +64 -0
- package/dist/implementations/database/writes-shared.js.map +1 -0
- package/dist/implementations/database/writes.d.ts +16 -0
- package/dist/implementations/database/writes.js +52 -0
- package/dist/implementations/database/writes.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +2 -0
- package/dist/logger.js +6 -0
- package/dist/logger.js.map +1 -0
- package/dist/test/antelope.test.d.ts +2 -0
- package/dist/test/antelope.test.js +88 -0
- package/dist/test/antelope.test.js.map +1 -0
- package/dist/test/atomic.test.d.ts +1 -0
- package/dist/test/atomic.test.js +132 -0
- package/dist/test/atomic.test.js.map +1 -0
- package/dist/test/contention.test.d.ts +1 -0
- package/dist/test/contention.test.js +183 -0
- package/dist/test/contention.test.js.map +1 -0
- package/dist/test/indexes.test.d.ts +1 -0
- package/dist/test/indexes.test.js +311 -0
- package/dist/test/indexes.test.js.map +1 -0
- package/dist/test/unit/changes.spec.d.ts +1 -0
- package/dist/test/unit/changes.spec.js +103 -0
- package/dist/test/unit/changes.spec.js.map +1 -0
- package/dist/test/unit/coerce.spec.d.ts +1 -0
- package/dist/test/unit/coerce.spec.js +162 -0
- package/dist/test/unit/coerce.spec.js.map +1 -0
- package/dist/test/unit/config.spec.d.ts +1 -0
- package/dist/test/unit/config.spec.js +123 -0
- package/dist/test/unit/config.spec.js.map +1 -0
- package/dist/test/unit/connection.spec.d.ts +1 -0
- package/dist/test/unit/connection.spec.js +171 -0
- package/dist/test/unit/connection.spec.js.map +1 -0
- package/dist/test/unit/cursors.spec.d.ts +1 -0
- package/dist/test/unit/cursors.spec.js +823 -0
- package/dist/test/unit/cursors.spec.js.map +1 -0
- package/dist/test/unit/ddl.spec.d.ts +1 -0
- package/dist/test/unit/ddl.spec.js +571 -0
- package/dist/test/unit/ddl.spec.js.map +1 -0
- package/dist/test/unit/expression-array.spec.d.ts +1 -0
- package/dist/test/unit/expression-array.spec.js +488 -0
- package/dist/test/unit/expression-array.spec.js.map +1 -0
- package/dist/test/unit/expression-date.spec.d.ts +1 -0
- package/dist/test/unit/expression-date.spec.js +329 -0
- package/dist/test/unit/expression-date.spec.js.map +1 -0
- package/dist/test/unit/expression-numeric.spec.d.ts +1 -0
- package/dist/test/unit/expression-numeric.spec.js +362 -0
- package/dist/test/unit/expression-numeric.spec.js.map +1 -0
- package/dist/test/unit/expression-object.spec.d.ts +1 -0
- package/dist/test/unit/expression-object.spec.js +230 -0
- package/dist/test/unit/expression-object.spec.js.map +1 -0
- package/dist/test/unit/expression-stages.spec.d.ts +1 -0
- package/dist/test/unit/expression-stages.spec.js +82 -0
- package/dist/test/unit/expression-stages.spec.js.map +1 -0
- package/dist/test/unit/expression-string.spec.d.ts +1 -0
- package/dist/test/unit/expression-string.spec.js +249 -0
- package/dist/test/unit/expression-string.spec.js.map +1 -0
- package/dist/test/unit/expression.spec.d.ts +1 -0
- package/dist/test/unit/expression.spec.js +449 -0
- package/dist/test/unit/expression.spec.js.map +1 -0
- package/dist/test/unit/external-comparisons.spec.d.ts +1 -0
- package/dist/test/unit/external-comparisons.spec.js +145 -0
- package/dist/test/unit/external-comparisons.spec.js.map +1 -0
- package/dist/test/unit/external-types.spec.d.ts +1 -0
- package/dist/test/unit/external-types.spec.js +191 -0
- package/dist/test/unit/external-types.spec.js.map +1 -0
- package/dist/test/unit/feeds.spec.d.ts +1 -0
- package/dist/test/unit/feeds.spec.js +374 -0
- package/dist/test/unit/feeds.spec.js.map +1 -0
- package/dist/test/unit/fields.spec.d.ts +1 -0
- package/dist/test/unit/fields.spec.js +79 -0
- package/dist/test/unit/fields.spec.js.map +1 -0
- package/dist/test/unit/identifier.spec.d.ts +1 -0
- package/dist/test/unit/identifier.spec.js +50 -0
- package/dist/test/unit/identifier.spec.js.map +1 -0
- package/dist/test/unit/payload.spec.d.ts +1 -0
- package/dist/test/unit/payload.spec.js +278 -0
- package/dist/test/unit/payload.spec.js.map +1 -0
- package/dist/test/unit/pipeline-aggregate.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-aggregate.spec.js +199 -0
- package/dist/test/unit/pipeline-aggregate.spec.js.map +1 -0
- package/dist/test/unit/pipeline-fixture.d.ts +79 -0
- package/dist/test/unit/pipeline-fixture.js +277 -0
- package/dist/test/unit/pipeline-fixture.js.map +1 -0
- package/dist/test/unit/pipeline-group.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-group.spec.js +390 -0
- package/dist/test/unit/pipeline-group.spec.js.map +1 -0
- package/dist/test/unit/pipeline-join.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-join.spec.js +165 -0
- package/dist/test/unit/pipeline-join.spec.js.map +1 -0
- package/dist/test/unit/pipeline-lookup.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-lookup.spec.js +268 -0
- package/dist/test/unit/pipeline-lookup.spec.js.map +1 -0
- package/dist/test/unit/pipeline-projection.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-projection.spec.js +183 -0
- package/dist/test/unit/pipeline-projection.spec.js.map +1 -0
- package/dist/test/unit/pipeline-rows.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-rows.spec.js +321 -0
- package/dist/test/unit/pipeline-rows.spec.js.map +1 -0
- package/dist/test/unit/pipeline-selection.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-selection.spec.js +257 -0
- package/dist/test/unit/pipeline-selection.spec.js.map +1 -0
- package/dist/test/unit/pipeline-stages.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-stages.spec.js +226 -0
- package/dist/test/unit/pipeline-stages.spec.js.map +1 -0
- package/dist/test/unit/pipeline.spec.d.ts +1 -0
- package/dist/test/unit/pipeline.spec.js +72 -0
- package/dist/test/unit/pipeline.spec.js.map +1 -0
- package/dist/test/unit/query.spec.d.ts +1 -0
- package/dist/test/unit/query.spec.js +212 -0
- package/dist/test/unit/query.spec.js.map +1 -0
- package/dist/test/unit/reaper.spec.d.ts +1 -0
- package/dist/test/unit/reaper.spec.js +122 -0
- package/dist/test/unit/reaper.spec.js.map +1 -0
- package/dist/test/unit/relation.spec.d.ts +1 -0
- package/dist/test/unit/relation.spec.js +348 -0
- package/dist/test/unit/relation.spec.js.map +1 -0
- package/dist/test/unit/result.spec.d.ts +1 -0
- package/dist/test/unit/result.spec.js +128 -0
- package/dist/test/unit/result.spec.js.map +1 -0
- package/dist/test/unit/row-source.spec.d.ts +1 -0
- package/dist/test/unit/row-source.spec.js +141 -0
- package/dist/test/unit/row-source.spec.js.map +1 -0
- package/dist/test/unit/schema.spec.d.ts +1 -0
- package/dist/test/unit/schema.spec.js +44 -0
- package/dist/test/unit/schema.spec.js.map +1 -0
- package/dist/test/unit/selection.spec.d.ts +1 -0
- package/dist/test/unit/selection.spec.js +182 -0
- package/dist/test/unit/selection.spec.js.map +1 -0
- package/dist/test/unit/spec-fixture.d.ts +11 -0
- package/dist/test/unit/spec-fixture.js +71 -0
- package/dist/test/unit/spec-fixture.js.map +1 -0
- package/dist/test/unit/sql.spec.d.ts +1 -0
- package/dist/test/unit/sql.spec.js +38 -0
- package/dist/test/unit/sql.spec.js.map +1 -0
- package/dist/test/unit/subquery.spec.d.ts +1 -0
- package/dist/test/unit/subquery.spec.js +154 -0
- package/dist/test/unit/subquery.spec.js.map +1 -0
- package/dist/test/unit/types.spec.d.ts +1 -0
- package/dist/test/unit/types.spec.js +39 -0
- package/dist/test/unit/types.spec.js.map +1 -0
- package/dist/test/unit/utils.spec.d.ts +1 -0
- package/dist/test/unit/utils.spec.js +22 -0
- package/dist/test/unit/utils.spec.js.map +1 -0
- package/dist/test/unit/value.spec.d.ts +1 -0
- package/dist/test/unit/value.spec.js +195 -0
- package/dist/test/unit/value.spec.js.map +1 -0
- package/dist/test/unit/writes-atomic.spec.d.ts +1 -0
- package/dist/test/unit/writes-atomic.spec.js +66 -0
- package/dist/test/unit/writes-atomic.spec.js.map +1 -0
- package/dist/test/unit/writes-insert.spec.d.ts +1 -0
- package/dist/test/unit/writes-insert.spec.js +270 -0
- package/dist/test/unit/writes-insert.spec.js.map +1 -0
- package/dist/test/unit/writes-replace.spec.d.ts +1 -0
- package/dist/test/unit/writes-replace.spec.js +100 -0
- package/dist/test/unit/writes-replace.spec.js.map +1 -0
- package/dist/test/unit/writes-target.spec.d.ts +1 -0
- package/dist/test/unit/writes-target.spec.js +118 -0
- package/dist/test/unit/writes-target.spec.js.map +1 -0
- package/dist/test/unit/writes-update.spec.d.ts +1 -0
- package/dist/test/unit/writes-update.spec.js +297 -0
- package/dist/test/unit/writes-update.spec.js.map +1 -0
- package/dist/test-external/fixture.d.ts +6 -0
- package/dist/test-external/fixture.js +136 -0
- package/dist/test-external/fixture.js.map +1 -0
- package/dist/test-external/native.test.d.ts +1 -0
- package/dist/test-external/native.test.js +132 -0
- package/dist/test-external/native.test.js.map +1 -0
- package/dist/test-external/reads.test.d.ts +1 -0
- package/dist/test-external/reads.test.js +232 -0
- package/dist/test-external/reads.test.js.map +1 -0
- package/dist/test-external/refusals.test.d.ts +1 -0
- package/dist/test-external/refusals.test.js +93 -0
- package/dist/test-external/refusals.test.js.map +1 -0
- package/dist/test-external/registration.test.d.ts +1 -0
- package/dist/test-external/registration.test.js +127 -0
- package/dist/test-external/registration.test.js.map +1 -0
- package/dist/test-external/sales.d.ts +5 -0
- package/dist/test-external/sales.js +126 -0
- package/dist/test-external/sales.js.map +1 -0
- package/dist/test-external/startup.test.d.ts +1 -0
- package/dist/test-external/startup.test.js +15 -0
- package/dist/test-external/startup.test.js.map +1 -0
- package/dist/test-external/writes.test.d.ts +1 -0
- package/dist/test-external/writes.test.js +315 -0
- package/dist/test-external/writes.test.js.map +1 -0
- package/package.json +75 -7
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParamCollector = exports.JSON_NULL = void 0;
|
|
4
|
+
exports.QuoteIdentifier = QuoteIdentifier;
|
|
5
|
+
exports.QuoteLiteral = QuoteLiteral;
|
|
6
|
+
exports.QualifiedColumn = QualifiedColumn;
|
|
7
|
+
exports.JsonKey = JsonKey;
|
|
8
|
+
exports.Param = Param;
|
|
9
|
+
const types_1 = require("./types");
|
|
10
|
+
exports.JSON_NULL = "'null'::jsonb";
|
|
11
|
+
class ParamCollector {
|
|
12
|
+
values = [];
|
|
13
|
+
add(value) {
|
|
14
|
+
this.values.push(value);
|
|
15
|
+
return `$${this.values.length}`;
|
|
16
|
+
}
|
|
17
|
+
all() {
|
|
18
|
+
return [...this.values];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ParamCollector = ParamCollector;
|
|
22
|
+
function QuoteIdentifier(name) {
|
|
23
|
+
if (name.includes("\0")) {
|
|
24
|
+
throw new Error("Identifiers cannot contain NUL bytes");
|
|
25
|
+
}
|
|
26
|
+
return `"${name.replace(/"/g, '""')}"`;
|
|
27
|
+
}
|
|
28
|
+
function QuoteLiteral(value) {
|
|
29
|
+
if (value.includes("\0")) {
|
|
30
|
+
throw new Error("String literals cannot contain NUL bytes");
|
|
31
|
+
}
|
|
32
|
+
const quoted = value.replace(/'/g, "''");
|
|
33
|
+
if (!quoted.includes("\\")) {
|
|
34
|
+
return `'${quoted}'`;
|
|
35
|
+
}
|
|
36
|
+
return `E'${quoted.replace(/\\/g, "\\\\")}'`;
|
|
37
|
+
}
|
|
38
|
+
function QualifiedColumn(alias, column) {
|
|
39
|
+
return `${QuoteIdentifier(alias)}.${QuoteIdentifier(column)}`;
|
|
40
|
+
}
|
|
41
|
+
function JsonKey(source, key) {
|
|
42
|
+
return `(${source} -> ${QuoteLiteral(key)})`;
|
|
43
|
+
}
|
|
44
|
+
function Param(params, value, type) {
|
|
45
|
+
const encoded = (0, types_1.IsJsonBacked)(type) ? JSON.stringify(value) : value;
|
|
46
|
+
return { sql: `(${params.add(encoded)}::${(0, types_1.PhysicalType)(type)})`, type };
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../../src/implementations/database/sql.ts"],"names":[],"mappings":";;;AAkDA,0CAKC;AAED,oCASC;AAGD,0CAEC;AAGD,0BAEC;AAED,sBAOC;AArFD,mCAAmE;AAmCtD,QAAA,SAAS,GAAG,eAAe,CAAC;AAEzC,MAAa,cAAc;IACR,MAAM,GAAc,EAAE,CAAC;IAEjC,GAAG,CAAC,KAAc;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAClC,CAAC;IAEM,GAAG;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;CACF;AAXD,wCAWC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,SAAgB,YAAY,CAAC,KAAa;IACxC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,MAAM,GAAG,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;AAC/C,CAAC;AAGD,SAAgB,eAAe,CAAC,KAAa,EAAE,MAAc;IAC3D,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;AAChE,CAAC;AAGD,SAAgB,OAAO,CAAC,MAAc,EAAE,GAAW;IACjD,OAAO,IAAI,MAAM,OAAO,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,SAAgB,KAAK,CACnB,MAAsB,EACtB,KAAc,EACd,IAAa;IAEb,MAAM,OAAO,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnE,OAAO,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAA,oBAAY,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { QueryStage } from "@antelopejs/interface-database/common";
|
|
2
|
+
import type { Compiled } from "./sql";
|
|
3
|
+
import type { DecodingContext } from "./context";
|
|
4
|
+
import { type RowSource } from "./row-source";
|
|
5
|
+
export interface ExpressionState {
|
|
6
|
+
current?: Compiled | RowSource;
|
|
7
|
+
timezone?: string;
|
|
8
|
+
}
|
|
9
|
+
export type StageHandler = (state: ExpressionState, stage: QueryStage, context: DecodingContext) => ExpressionState;
|
|
10
|
+
export type StageMap = Record<string, StageHandler>;
|
|
11
|
+
export type ValueStage = (value: Compiled, args: readonly (Compiled | undefined)[], stage: QueryStage, context: DecodingContext) => Compiled;
|
|
12
|
+
export type RawValueStage = (value: Compiled, stage: QueryStage, context: DecodingContext) => Compiled;
|
|
13
|
+
export declare const FIRST_OPERAND = 0;
|
|
14
|
+
export declare const SECOND_OPERAND = 1;
|
|
15
|
+
export declare function AsValue(state: ExpressionState): Compiled;
|
|
16
|
+
export declare function AsSource(state: ExpressionState): RowSource;
|
|
17
|
+
export declare function RequireOperand(value: Compiled | undefined, stage: QueryStage, index: number): Compiled;
|
|
18
|
+
export declare function FieldNames(stage: QueryStage, index?: number): string[];
|
|
19
|
+
export declare function Lift(handler: ValueStage): StageHandler;
|
|
20
|
+
export declare function LiftRaw(handler: RawValueStage): StageHandler;
|
|
21
|
+
export declare function BuildStages<Operator>(operators: Record<string, Operator>, build: (operator: Operator) => StageHandler): StageMap;
|
|
22
|
+
export declare function FieldOf(source: RowSource, stage: QueryStage, context: DecodingContext): Compiled;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SECOND_OPERAND = exports.FIRST_OPERAND = void 0;
|
|
4
|
+
exports.AsValue = AsValue;
|
|
5
|
+
exports.AsSource = AsSource;
|
|
6
|
+
exports.RequireOperand = RequireOperand;
|
|
7
|
+
exports.FieldNames = FieldNames;
|
|
8
|
+
exports.Lift = Lift;
|
|
9
|
+
exports.LiftRaw = LiftRaw;
|
|
10
|
+
exports.BuildStages = BuildStages;
|
|
11
|
+
exports.FieldOf = FieldOf;
|
|
12
|
+
const value_1 = require("./value");
|
|
13
|
+
const row_source_1 = require("./row-source");
|
|
14
|
+
exports.FIRST_OPERAND = 0;
|
|
15
|
+
exports.SECOND_OPERAND = 1;
|
|
16
|
+
const EMPTY_STATE = "Expression has no value to operate on";
|
|
17
|
+
function RequireCurrent(state) {
|
|
18
|
+
if (!state.current) {
|
|
19
|
+
throw new Error(EMPTY_STATE);
|
|
20
|
+
}
|
|
21
|
+
return state.current;
|
|
22
|
+
}
|
|
23
|
+
function IsCompiled(current) {
|
|
24
|
+
return "sql" in current;
|
|
25
|
+
}
|
|
26
|
+
function AsValue(state) {
|
|
27
|
+
const current = RequireCurrent(state);
|
|
28
|
+
return IsCompiled(current) ? current : current.toJson();
|
|
29
|
+
}
|
|
30
|
+
function AsSource(state) {
|
|
31
|
+
const current = RequireCurrent(state);
|
|
32
|
+
return IsCompiled(current) ? new row_source_1.JsonRowSource(current) : current;
|
|
33
|
+
}
|
|
34
|
+
function RequireOperand(value, stage, index) {
|
|
35
|
+
if (!value) {
|
|
36
|
+
throw new Error(`Stage '${stage.stage}' requires an operand at position ${index}`);
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function FieldNames(stage, index = exports.FIRST_OPERAND) {
|
|
41
|
+
const fields = stage.args[index];
|
|
42
|
+
const named = Array.isArray(fields) && fields.every((field) => typeof field === "string");
|
|
43
|
+
if (!named) {
|
|
44
|
+
throw new Error(`Stage '${stage.stage}' requires a list of field names`);
|
|
45
|
+
}
|
|
46
|
+
return fields;
|
|
47
|
+
}
|
|
48
|
+
function Lift(handler) {
|
|
49
|
+
return (state, stage, context) => {
|
|
50
|
+
const value = AsValue(state);
|
|
51
|
+
const args = stage.args.map((arg) => (0, value_1.DecodeValue)(arg, context));
|
|
52
|
+
return { current: handler(value, args, stage, context) };
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function LiftRaw(handler) {
|
|
56
|
+
return (state, stage, context) => ({
|
|
57
|
+
current: handler(AsValue(state), stage, context),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function BuildStages(operators, build) {
|
|
61
|
+
const stages = {};
|
|
62
|
+
for (const [name, operator] of Object.entries(operators)) {
|
|
63
|
+
stages[name] = build(operator);
|
|
64
|
+
}
|
|
65
|
+
return stages;
|
|
66
|
+
}
|
|
67
|
+
function FieldOf(source, stage, context) {
|
|
68
|
+
const def = (0, value_1.DecodeValue)(stage.args[exports.SECOND_OPERAND], context);
|
|
69
|
+
const name = stage.args[exports.FIRST_OPERAND];
|
|
70
|
+
if (typeof name === "string") {
|
|
71
|
+
return source.field(name, def);
|
|
72
|
+
}
|
|
73
|
+
const key = RequireOperand((0, value_1.DecodeValue)(name, context), stage, exports.FIRST_OPERAND);
|
|
74
|
+
return source.dynamicField(key, def);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage.js","sourceRoot":"","sources":["../../../src/implementations/database/stage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { QueryStage } from "@antelopejs/interface-database/common";
|
|
2
|
+
import type { Compiled } from "./sql";
|
|
3
|
+
import type { PipelineStageMap } from "./pipeline";
|
|
4
|
+
export type Aggregation = (operand: Compiled, distinct?: boolean) => Compiled;
|
|
5
|
+
export declare function NamedField(stage: QueryStage): string | undefined;
|
|
6
|
+
export declare const Total: Aggregation;
|
|
7
|
+
export declare const Mean: Aggregation;
|
|
8
|
+
export declare const Minimum: Aggregation;
|
|
9
|
+
export declare const Maximum: Aggregation;
|
|
10
|
+
export declare function Tally(operand?: Compiled): Compiled;
|
|
11
|
+
export declare const AGGREGATE_STAGES: PipelineStageMap;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AGGREGATE_STAGES = exports.Maximum = exports.Minimum = exports.Mean = exports.Total = void 0;
|
|
7
|
+
exports.NamedField = NamedField;
|
|
8
|
+
exports.Tally = Tally;
|
|
9
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
10
|
+
const readings_1 = require("./readings");
|
|
11
|
+
const relation_1 = require("./relation");
|
|
12
|
+
const AGGREGATE_BLOCKERS = [
|
|
13
|
+
"projection",
|
|
14
|
+
"limit",
|
|
15
|
+
"offset",
|
|
16
|
+
"distinct",
|
|
17
|
+
"aggregated",
|
|
18
|
+
];
|
|
19
|
+
const DISTINCT_BLOCKERS = [
|
|
20
|
+
...AGGREGATE_BLOCKERS,
|
|
21
|
+
"ordered",
|
|
22
|
+
];
|
|
23
|
+
const COUNT = "count";
|
|
24
|
+
const SUM = "sum";
|
|
25
|
+
const AVERAGE = "avg";
|
|
26
|
+
const MINIMUM = "min";
|
|
27
|
+
const MAXIMUM = "max";
|
|
28
|
+
const DISTINCT = "distinct";
|
|
29
|
+
const ALL_ROWS = "*";
|
|
30
|
+
const EMPTY_SUM = "0";
|
|
31
|
+
const DEDUPED = "DISTINCT ";
|
|
32
|
+
function NamedField(stage) {
|
|
33
|
+
const field = stage.options?.field;
|
|
34
|
+
if (field === undefined) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
(0, node_assert_1.default)(typeof field === "string", `The '${stage.stage}' stage was given a field that is not a name`);
|
|
38
|
+
return field;
|
|
39
|
+
}
|
|
40
|
+
function NamedOperand(relation, stage) {
|
|
41
|
+
const field = NamedField(stage);
|
|
42
|
+
return field === undefined ? undefined : relation.source.field(field);
|
|
43
|
+
}
|
|
44
|
+
function Operand(relation, stage) {
|
|
45
|
+
return NamedOperand(relation, stage) ?? (0, relation_1.CurrentValue)(relation);
|
|
46
|
+
}
|
|
47
|
+
function Applied(func, argument, distinct = false) {
|
|
48
|
+
return `${func}(${distinct ? DEDUPED : ""}${argument})`;
|
|
49
|
+
}
|
|
50
|
+
function Summed(operand) {
|
|
51
|
+
return operand.native?.numeric ? operand.native.sql : (0, readings_1.Numeric)(operand).sql;
|
|
52
|
+
}
|
|
53
|
+
const Total = (operand, distinct) => (0, readings_1.AsFloat)(`COALESCE(${Applied(SUM, Summed(operand), distinct)}, ${EMPTY_SUM})`);
|
|
54
|
+
exports.Total = Total;
|
|
55
|
+
const Mean = (operand, distinct) => (0, readings_1.AsFloat)(Applied(AVERAGE, Summed(operand), distinct));
|
|
56
|
+
exports.Mean = Mean;
|
|
57
|
+
function Ordered(operand) {
|
|
58
|
+
if (operand.native?.numeric) {
|
|
59
|
+
return { sql: operand.native.sql, type: operand.type };
|
|
60
|
+
}
|
|
61
|
+
return readings_1.ORDERED_KINDS[operand.type.kind] ? operand : (0, readings_1.Numeric)(operand);
|
|
62
|
+
}
|
|
63
|
+
function Extremum(func) {
|
|
64
|
+
return (operand, distinct) => {
|
|
65
|
+
const ordered = Ordered(operand);
|
|
66
|
+
const applied = Applied(func, ordered.sql, distinct);
|
|
67
|
+
return ordered.type.kind === "float"
|
|
68
|
+
? (0, readings_1.AsFloat)(applied)
|
|
69
|
+
: { sql: `(${applied})`, type: ordered.type };
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
exports.Minimum = Extremum(MINIMUM);
|
|
73
|
+
exports.Maximum = Extremum(MAXIMUM);
|
|
74
|
+
function Tally(operand) {
|
|
75
|
+
const named = operand !== undefined;
|
|
76
|
+
return (0, readings_1.AsFloat)(Applied(COUNT, named ? operand.sql : ALL_ROWS, named));
|
|
77
|
+
}
|
|
78
|
+
function SetAggregate(relation, value) {
|
|
79
|
+
const aggregate = (0, relation_1.SetProjection)(relation, value);
|
|
80
|
+
(0, relation_1.AbsorbOrder)(aggregate);
|
|
81
|
+
aggregate.single = true;
|
|
82
|
+
aggregate.aggregated = true;
|
|
83
|
+
return aggregate;
|
|
84
|
+
}
|
|
85
|
+
function AggregateStage(aggregate) {
|
|
86
|
+
return (relation, stage, context) => {
|
|
87
|
+
const prepared = (0, relation_1.Prepare)(relation, AGGREGATE_BLOCKERS, context);
|
|
88
|
+
return SetAggregate(prepared, aggregate(Operand(prepared, stage)));
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const CountStage = (relation, stage, context) => {
|
|
92
|
+
const prepared = (0, relation_1.Prepare)(relation, AGGREGATE_BLOCKERS, context);
|
|
93
|
+
return SetAggregate(prepared, Tally(NamedOperand(prepared, stage)));
|
|
94
|
+
};
|
|
95
|
+
const DistinctStage = (relation, stage, context) => {
|
|
96
|
+
const prepared = (0, relation_1.Prepare)(relation, DISTINCT_BLOCKERS, context);
|
|
97
|
+
prepared.distinct = true;
|
|
98
|
+
const field = NamedField(stage);
|
|
99
|
+
if (field === undefined) {
|
|
100
|
+
return prepared;
|
|
101
|
+
}
|
|
102
|
+
return (0, relation_1.SetProjection)(prepared, prepared.source.field(field));
|
|
103
|
+
};
|
|
104
|
+
exports.AGGREGATE_STAGES = {
|
|
105
|
+
[SUM]: AggregateStage(exports.Total),
|
|
106
|
+
[AVERAGE]: AggregateStage(exports.Mean),
|
|
107
|
+
[MINIMUM]: AggregateStage(exports.Minimum),
|
|
108
|
+
[MAXIMUM]: AggregateStage(exports.Maximum),
|
|
109
|
+
[COUNT]: CountStage,
|
|
110
|
+
[DISTINCT]: DistinctStage,
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=stages-aggregate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stages-aggregate.js","sourceRoot":"","sources":["../../../src/implementations/database/stages-aggregate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ARRAY_STAGES = void 0;
|
|
4
|
+
const coerce_1 = require("./coerce");
|
|
5
|
+
const value_1 = require("./value");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
const jsonb_1 = require("./jsonb");
|
|
8
|
+
const readings_1 = require("./readings");
|
|
9
|
+
const stage_1 = require("./stage");
|
|
10
|
+
const ELEMENTS_FUNCTION = "jsonb_array_elements";
|
|
11
|
+
const LENGTH_FUNCTION = "jsonb_array_length";
|
|
12
|
+
const BUILD_ARRAY = "jsonb_build_array";
|
|
13
|
+
const CONTAINS = "@>";
|
|
14
|
+
const AT_INDEX = "->";
|
|
15
|
+
const NO_ELEMENTS = "0";
|
|
16
|
+
const EMPTY_SUM = "0";
|
|
17
|
+
const AFTER_START = ">";
|
|
18
|
+
const BEFORE_END = "<=";
|
|
19
|
+
const ARRAY_ORIGIN = "0";
|
|
20
|
+
function ElementType(type) {
|
|
21
|
+
return type.kind === "array" ? type.elem : types_1.OPAQUE;
|
|
22
|
+
}
|
|
23
|
+
function Element(alias, type) {
|
|
24
|
+
return (0, coerce_1.Cast)({ sql: (0, jsonb_1.WalkColumn)(alias, jsonb_1.VALUE_COLUMN), type: types_1.OPAQUE }, type);
|
|
25
|
+
}
|
|
26
|
+
function Ordinal(alias) {
|
|
27
|
+
return (0, jsonb_1.WalkColumn)(alias, jsonb_1.ORDINAL_COLUMN);
|
|
28
|
+
}
|
|
29
|
+
function WalkElements(json, alias, aggregate, predicate) {
|
|
30
|
+
return (0, jsonb_1.Walk)({
|
|
31
|
+
func: ELEMENTS_FUNCTION,
|
|
32
|
+
json,
|
|
33
|
+
alias,
|
|
34
|
+
columns: [jsonb_1.VALUE_COLUMN],
|
|
35
|
+
aggregate,
|
|
36
|
+
predicate,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const MEASURES = {
|
|
40
|
+
arr_count: (length) => (0, readings_1.AsFloat)(length),
|
|
41
|
+
arr_empty: (length) => ({ sql: `(${length} = ${NO_ELEMENTS})`, type: types_1.BOOL }),
|
|
42
|
+
};
|
|
43
|
+
function MeasureStage(measure) {
|
|
44
|
+
return (0, stage_1.LiftRaw)((value) => {
|
|
45
|
+
const json = (0, readings_1.AsJson)(value);
|
|
46
|
+
const measured = measure(`${LENGTH_FUNCTION}(${json.sql})`);
|
|
47
|
+
return {
|
|
48
|
+
sql: (0, jsonb_1.GuardJson)(json, jsonb_1.ARRAY_TYPEOF, measured.sql),
|
|
49
|
+
type: measured.type,
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function Position(key) {
|
|
54
|
+
return `(${(0, readings_1.ClampToRange)((0, readings_1.Numeric)(key).sql, readings_1.INT4_MIN, readings_1.INT4_MAX)}::int)`;
|
|
55
|
+
}
|
|
56
|
+
const IndexStage = (0, stage_1.Lift)((value, args, stage) => {
|
|
57
|
+
const elem = ElementType(value.type);
|
|
58
|
+
const json = (0, readings_1.AsJson)(value);
|
|
59
|
+
const key = (0, stage_1.RequireOperand)(args[stage_1.FIRST_OPERAND], stage, stage_1.FIRST_OPERAND);
|
|
60
|
+
const item = `(${json.sql} ${AT_INDEX} ${Position(key)})`;
|
|
61
|
+
const element = (0, coerce_1.Cast)({ sql: item, type: types_1.OPAQUE }, elem);
|
|
62
|
+
return {
|
|
63
|
+
sql: (0, jsonb_1.GuardJson)(json, jsonb_1.ARRAY_TYPEOF, element.sql),
|
|
64
|
+
type: element.type,
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
const IncludesStage = (0, stage_1.Lift)((value, args, stage) => {
|
|
68
|
+
const json = (0, readings_1.AsJson)(value);
|
|
69
|
+
const other = (0, readings_1.AsJson)((0, stage_1.RequireOperand)(args[stage_1.FIRST_OPERAND], stage, stage_1.FIRST_OPERAND));
|
|
70
|
+
const test = `(${json.sql} ${CONTAINS} ${BUILD_ARRAY}(${other.sql}))`;
|
|
71
|
+
return { sql: test, type: types_1.BOOL };
|
|
72
|
+
});
|
|
73
|
+
function FromEnd(json, bound) {
|
|
74
|
+
const truncated = `trunc(${bound})`;
|
|
75
|
+
const counted = `GREATEST(${LENGTH_FUNCTION}(${json}) + ${truncated}, ${ARRAY_ORIGIN})`;
|
|
76
|
+
return `(CASE WHEN ${truncated} < ${ARRAY_ORIGIN} THEN ${counted} ELSE ${truncated} END)`;
|
|
77
|
+
}
|
|
78
|
+
function Bounds(json, alias, start, end) {
|
|
79
|
+
const low = FromEnd(json, (0, readings_1.Numeric)(start).sql);
|
|
80
|
+
const bounds = [`${Ordinal(alias)} ${AFTER_START} ${low}`];
|
|
81
|
+
if (end) {
|
|
82
|
+
const high = FromEnd(json, (0, readings_1.Numeric)(end).sql);
|
|
83
|
+
bounds.push(`${Ordinal(alias)} ${BEFORE_END} ${high}`);
|
|
84
|
+
}
|
|
85
|
+
return `(${bounds.join(" AND ")})`;
|
|
86
|
+
}
|
|
87
|
+
const SliceStage = (0, stage_1.Lift)((value, args, stage, context) => {
|
|
88
|
+
const elem = ElementType(value.type);
|
|
89
|
+
const json = (0, readings_1.AsJson)(value);
|
|
90
|
+
const start = (0, stage_1.RequireOperand)(args[stage_1.FIRST_OPERAND], stage, stage_1.FIRST_OPERAND);
|
|
91
|
+
const alias = context.nextAlias();
|
|
92
|
+
const collected = (0, jsonb_1.Collected)(Ordinal(alias), (0, jsonb_1.WalkColumn)(alias, jsonb_1.VALUE_COLUMN));
|
|
93
|
+
const bounds = Bounds(json.sql, alias, start, args[stage_1.SECOND_OPERAND]);
|
|
94
|
+
return {
|
|
95
|
+
sql: (0, jsonb_1.GuardJson)(json, jsonb_1.ARRAY_TYPEOF, WalkElements(json.sql, alias, collected, bounds)),
|
|
96
|
+
type: (0, types_1.ArrayOf)(elem),
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
function BindElement(value, stage, context) {
|
|
100
|
+
const func = stage.args[stage_1.FIRST_OPERAND];
|
|
101
|
+
if (!func || !Array.isArray(func.args?.[stage_1.FIRST_OPERAND])) {
|
|
102
|
+
throw new Error(`Stage '${stage.stage}' requires a callback`);
|
|
103
|
+
}
|
|
104
|
+
const alias = context.nextAlias();
|
|
105
|
+
const element = Element(alias, ElementType(value.type));
|
|
106
|
+
const body = (0, value_1.DecodeFunction)(func, context, [element]);
|
|
107
|
+
return { alias, body: (0, stage_1.RequireOperand)(body, stage, stage_1.FIRST_OPERAND) };
|
|
108
|
+
}
|
|
109
|
+
const MapStage = (0, stage_1.LiftRaw)((value, stage, context) => {
|
|
110
|
+
const lambda = BindElement(value, stage, context);
|
|
111
|
+
const json = (0, readings_1.AsJson)(value);
|
|
112
|
+
const collected = (0, jsonb_1.Collected)(Ordinal(lambda.alias), (0, readings_1.AsJson)(lambda.body).sql);
|
|
113
|
+
return {
|
|
114
|
+
sql: (0, jsonb_1.GuardJson)(json, jsonb_1.ARRAY_TYPEOF, WalkElements(json.sql, lambda.alias, collected)),
|
|
115
|
+
type: (0, types_1.ArrayOf)(lambda.body.type),
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
const FilterStage = (0, stage_1.LiftRaw)((value, stage, context) => {
|
|
119
|
+
const elem = ElementType(value.type);
|
|
120
|
+
const lambda = BindElement(value, stage, context);
|
|
121
|
+
const json = (0, readings_1.AsJson)(value);
|
|
122
|
+
const collected = (0, jsonb_1.Collected)(Ordinal(lambda.alias), (0, jsonb_1.WalkColumn)(lambda.alias, jsonb_1.VALUE_COLUMN));
|
|
123
|
+
const kept = (0, readings_1.Predicate)(lambda.body).sql;
|
|
124
|
+
return {
|
|
125
|
+
sql: (0, jsonb_1.GuardJson)(json, jsonb_1.ARRAY_TYPEOF, WalkElements(json.sql, lambda.alias, collected, kept)),
|
|
126
|
+
type: (0, types_1.ArrayOf)(elem),
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
const AS_NUMBER = () => types_1.FLOAT;
|
|
130
|
+
const AS_COMPARABLE = (elem) => readings_1.ORDERED_KINDS[elem.kind] ?? types_1.FLOAT;
|
|
131
|
+
const REDUCERS = {
|
|
132
|
+
arr_sum: { func: "sum", reading: AS_NUMBER, empty: EMPTY_SUM },
|
|
133
|
+
arr_avg: { func: "avg", reading: AS_NUMBER },
|
|
134
|
+
arr_min: { func: "min", reading: AS_COMPARABLE },
|
|
135
|
+
arr_max: { func: "max", reading: AS_COMPARABLE },
|
|
136
|
+
};
|
|
137
|
+
function Reduced(reducer, target) {
|
|
138
|
+
const reduced = `${reducer.func}(${target})`;
|
|
139
|
+
return reducer.empty ? `COALESCE(${reduced}, ${reducer.empty})` : reduced;
|
|
140
|
+
}
|
|
141
|
+
function ReducerStage(reducer) {
|
|
142
|
+
return (0, stage_1.LiftRaw)((value, _stage, context) => {
|
|
143
|
+
const alias = context.nextAlias();
|
|
144
|
+
const element = Element(alias, reducer.reading(ElementType(value.type)));
|
|
145
|
+
const json = (0, readings_1.AsJson)(value);
|
|
146
|
+
const reduced = Reduced(reducer, element.sql);
|
|
147
|
+
return {
|
|
148
|
+
sql: (0, jsonb_1.GuardJson)(json, jsonb_1.ARRAY_TYPEOF, WalkElements(json.sql, alias, reduced)),
|
|
149
|
+
type: element.type,
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
exports.ARRAY_STAGES = {
|
|
154
|
+
arr_index: IndexStage,
|
|
155
|
+
arr_includes: IncludesStage,
|
|
156
|
+
arr_slice: SliceStage,
|
|
157
|
+
arr_map: MapStage,
|
|
158
|
+
arr_filter: FilterStage,
|
|
159
|
+
...(0, stage_1.BuildStages)(MEASURES, MeasureStage),
|
|
160
|
+
...(0, stage_1.BuildStages)(REDUCERS, ReducerStage),
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=stages-array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stages-array.js","sourceRoot":"","sources":["../../../src/implementations/database/stages-array.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CORE_STAGES = void 0;
|
|
4
|
+
const readings_1 = require("./readings");
|
|
5
|
+
const value_1 = require("./value");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
const coerce_1 = require("./coerce");
|
|
8
|
+
const stage_1 = require("./stage");
|
|
9
|
+
const BOOLEAN_OPERATORS = {
|
|
10
|
+
and: "AND",
|
|
11
|
+
or: "OR",
|
|
12
|
+
};
|
|
13
|
+
const ORDERING_OPERATORS = {
|
|
14
|
+
cmp_gt: ">",
|
|
15
|
+
cmp_ge: ">=",
|
|
16
|
+
cmp_lt: "<",
|
|
17
|
+
cmp_le: "<=",
|
|
18
|
+
};
|
|
19
|
+
const ArgStage = (_state, stage, context) => {
|
|
20
|
+
const binding = context.arg(stage.args[stage_1.FIRST_OPERAND]);
|
|
21
|
+
if (typeof binding === "function") {
|
|
22
|
+
return { current: binding([stage]) };
|
|
23
|
+
}
|
|
24
|
+
return { current: binding };
|
|
25
|
+
};
|
|
26
|
+
const ConstantStage = (_state, stage, context) => ({
|
|
27
|
+
current: (0, stage_1.RequireOperand)((0, value_1.DecodeValue)(stage.args[stage_1.FIRST_OPERAND], context), stage, stage_1.FIRST_OPERAND),
|
|
28
|
+
});
|
|
29
|
+
const DefaultStage = (0, stage_1.Lift)((value, args) => (0, coerce_1.WithDefault)(value, args[stage_1.FIRST_OPERAND]));
|
|
30
|
+
const NotStage = (0, stage_1.Lift)((value) => ({
|
|
31
|
+
sql: `(${(0, readings_1.Predicate)(value).sql} IS NOT TRUE)`,
|
|
32
|
+
type: types_1.BOOL,
|
|
33
|
+
}));
|
|
34
|
+
function BooleanStage(operator) {
|
|
35
|
+
return (0, stage_1.Lift)((value, args, stage) => {
|
|
36
|
+
const other = (0, stage_1.RequireOperand)(args[stage_1.FIRST_OPERAND], stage, stage_1.FIRST_OPERAND);
|
|
37
|
+
return {
|
|
38
|
+
sql: `(${(0, readings_1.Predicate)(value).sql} ${operator} ${(0, readings_1.Predicate)(other).sql})`,
|
|
39
|
+
type: types_1.BOOL,
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
const EQUAL = "=";
|
|
44
|
+
const DISTINCT_FROM = "IS DISTINCT FROM";
|
|
45
|
+
function Comparison(value, other, operator) {
|
|
46
|
+
const pair = (0, coerce_1.UnifyOperands)(value, other, operator);
|
|
47
|
+
return {
|
|
48
|
+
sql: `(${pair.left.sql} ${operator} ${pair.right.sql})`,
|
|
49
|
+
type: types_1.BOOL,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const Identical = (value, other) => Comparison(value, other, EQUAL);
|
|
53
|
+
function Distinguishable(value, other) {
|
|
54
|
+
if ((0, types_1.IsOpaque)(value.type) === (0, types_1.IsOpaque)(other.type)) {
|
|
55
|
+
return (0, coerce_1.UnifyOperands)(value, other);
|
|
56
|
+
}
|
|
57
|
+
return { left: (0, readings_1.AsJson)(value), right: (0, readings_1.AsJson)(other), type: types_1.OPAQUE };
|
|
58
|
+
}
|
|
59
|
+
const Distinct = (value, other) => {
|
|
60
|
+
const pair = Distinguishable(value, other);
|
|
61
|
+
if (pair.converted) {
|
|
62
|
+
return {
|
|
63
|
+
sql: `((${pair.left.sql} ${EQUAL} ${pair.right.sql}) IS NOT TRUE)`,
|
|
64
|
+
type: types_1.BOOL,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
sql: `(${pair.left.sql} ${DISTINCT_FROM} ${pair.right.sql})`,
|
|
69
|
+
type: types_1.BOOL,
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
const EQUALITY_OPERATORS = {
|
|
73
|
+
eq: { compare: Identical, negated: false },
|
|
74
|
+
ne: { compare: Distinct, negated: true },
|
|
75
|
+
};
|
|
76
|
+
function NullTest(value, negated) {
|
|
77
|
+
const missing = `(${value.sql} IS NULL)`;
|
|
78
|
+
const test = (0, types_1.IsJsonBacked)(value.type)
|
|
79
|
+
? `(${missing} OR (${value.sql} = ${value_1.NULL_JSON.sql}))`
|
|
80
|
+
: missing;
|
|
81
|
+
return { sql: negated ? `(NOT ${test})` : test, type: types_1.BOOL };
|
|
82
|
+
}
|
|
83
|
+
function EqualityStage(operator) {
|
|
84
|
+
return (0, stage_1.Lift)((value, args, stage) => {
|
|
85
|
+
const other = (0, stage_1.RequireOperand)(args[stage_1.FIRST_OPERAND], stage, stage_1.FIRST_OPERAND);
|
|
86
|
+
if (other === value_1.NULL_JSON) {
|
|
87
|
+
return NullTest(value, operator.negated);
|
|
88
|
+
}
|
|
89
|
+
if (value === value_1.NULL_JSON) {
|
|
90
|
+
return NullTest(other, operator.negated);
|
|
91
|
+
}
|
|
92
|
+
return operator.compare(value, other);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function OrderingStage(operator) {
|
|
96
|
+
return (0, stage_1.Lift)((value, args, stage) => Comparison(value, (0, stage_1.RequireOperand)(args[stage_1.FIRST_OPERAND], stage, stage_1.FIRST_OPERAND), operator));
|
|
97
|
+
}
|
|
98
|
+
exports.CORE_STAGES = {
|
|
99
|
+
arg: ArgStage,
|
|
100
|
+
constant: ConstantStage,
|
|
101
|
+
default: DefaultStage,
|
|
102
|
+
not: NotStage,
|
|
103
|
+
...(0, stage_1.BuildStages)(BOOLEAN_OPERATORS, BooleanStage),
|
|
104
|
+
...(0, stage_1.BuildStages)(EQUALITY_OPERATORS, EqualityStage),
|
|
105
|
+
...(0, stage_1.BuildStages)(ORDERING_OPERATORS, OrderingStage),
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=stages-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stages-core.js","sourceRoot":"","sources":["../../../src/implementations/database/stages-core.ts"],"names":[],"mappings":"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"}
|