@quereus/quereus 4.6.0 → 4.8.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/README.md +2 -2
- package/dist/src/common/errors.d.ts +17 -0
- package/dist/src/common/errors.d.ts.map +1 -1
- package/dist/src/common/errors.js +21 -0
- package/dist/src/common/errors.js.map +1 -1
- package/dist/src/common/types.d.ts +19 -0
- package/dist/src/common/types.d.ts.map +1 -1
- package/dist/src/common/types.js.map +1 -1
- package/dist/src/core/database-assertions.d.ts +4 -3
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +44 -14
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-events.d.ts +62 -0
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +88 -2
- package/dist/src/core/database-events.js.map +1 -1
- package/dist/src/core/database-internal.d.ts +5 -2
- package/dist/src/core/database-internal.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views-plan-builders.js +4 -2
- package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
- package/dist/src/core/database-materialized-views-plans.d.ts +12 -2
- package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.d.ts +46 -0
- package/dist/src/core/database-materialized-views.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.js +75 -4
- package/dist/src/core/database-materialized-views.js.map +1 -1
- package/dist/src/core/database.d.ts +48 -2
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +222 -11
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/derived-row-validator.d.ts.map +1 -1
- package/dist/src/core/derived-row-validator.js +7 -1
- package/dist/src/core/derived-row-validator.js.map +1 -1
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +101 -5
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/emit/ast-stringify.d.ts +18 -2
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +22 -4
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +19 -5
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/scalar.d.ts.map +1 -1
- package/dist/src/func/builtins/scalar.js +24 -20
- package/dist/src/func/builtins/scalar.js.map +1 -1
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +32 -5
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/index.d.ts +9 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +58 -1
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/parser.js +1 -1
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/utils.d.ts +13 -1
- package/dist/src/parser/utils.d.ts.map +1 -1
- package/dist/src/parser/utils.js +14 -0
- package/dist/src/parser/utils.js.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.js +7 -2
- package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.js +5 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
- package/dist/src/planner/analysis/change-scope.d.ts +11 -3
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +5 -4
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.js +13 -5
- package/dist/src/planner/analysis/coverage-prover.js.map +1 -1
- package/dist/src/planner/analysis/equi-correlation.d.ts +6 -1
- package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -1
- package/dist/src/planner/analysis/equi-correlation.js +8 -1
- package/dist/src/planner/analysis/equi-correlation.js.map +1 -1
- package/dist/src/planner/analysis/predicate-dependencies.d.ts +34 -0
- package/dist/src/planner/analysis/predicate-dependencies.d.ts.map +1 -0
- package/dist/src/planner/analysis/predicate-dependencies.js +60 -0
- package/dist/src/planner/analysis/predicate-dependencies.js.map +1 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.js +0 -26
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
- package/dist/src/planner/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +53 -17
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +9 -5
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-assertion.d.ts.map +1 -1
- package/dist/src/planner/building/create-assertion.js +72 -1
- package/dist/src/planner/building/create-assertion.js.map +1 -1
- package/dist/src/planner/building/create-view.d.ts +6 -1
- package/dist/src/planner/building/create-view.d.ts.map +1 -1
- package/dist/src/planner/building/create-view.js +12 -3
- package/dist/src/planner/building/create-view.js.map +1 -1
- package/dist/src/planner/building/ddl.d.ts.map +1 -1
- package/dist/src/planner/building/ddl.js +6 -2
- package/dist/src/planner/building/ddl.js.map +1 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +23 -10
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/dml-target.d.ts.map +1 -1
- package/dist/src/planner/building/dml-target.js +4 -0
- package/dist/src/planner/building/dml-target.js.map +1 -1
- package/dist/src/planner/building/drop-assertion.d.ts.map +1 -1
- package/dist/src/planner/building/drop-assertion.js +3 -1
- package/dist/src/planner/building/drop-assertion.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +7 -5
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/function-call.d.ts +35 -0
- package/dist/src/planner/building/function-call.d.ts.map +1 -1
- package/dist/src/planner/building/function-call.js +53 -40
- package/dist/src/planner/building/function-call.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +185 -48
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/materialized-view.d.ts.map +1 -1
- package/dist/src/planner/building/materialized-view.js +3 -1
- package/dist/src/planner/building/materialized-view.js.map +1 -1
- package/dist/src/planner/building/schema-authored-context.d.ts +69 -0
- package/dist/src/planner/building/schema-authored-context.d.ts.map +1 -0
- package/dist/src/planner/building/schema-authored-context.js +75 -0
- package/dist/src/planner/building/schema-authored-context.js.map +1 -0
- package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
- package/dist/src/planner/building/schema-resolution.js +7 -4
- package/dist/src/planner/building/schema-resolution.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +187 -2
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +414 -81
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-compound.js +2 -2
- package/dist/src/planner/building/select-compound.js.map +1 -1
- package/dist/src/planner/building/select-context.d.ts +91 -0
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js +113 -0
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.d.ts +10 -3
- package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +29 -8
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +64 -19
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
- package/dist/src/planner/building/select-ordinal.js +79 -30
- package/dist/src/planner/building/select-ordinal.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts +1 -1
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +18 -11
- package/dist/src/planner/building/select-projections.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts +13 -3
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +142 -37
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +129 -59
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +27 -13
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.js +102 -8
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +34 -4
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cache/correlation-detector.d.ts +15 -0
- package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -1
- package/dist/src/planner/cache/correlation-detector.js +26 -0
- package/dist/src/planner/cache/correlation-detector.js.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.d.ts +7 -0
- package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.js +12 -3
- package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +9 -0
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts +2 -0
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +15 -0
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/mutation/backward-body.d.ts.map +1 -1
- package/dist/src/planner/mutation/backward-body.js +4 -1
- package/dist/src/planner/mutation/backward-body.js.map +1 -1
- package/dist/src/planner/mutation/body-context.d.ts +23 -0
- package/dist/src/planner/mutation/body-context.d.ts.map +1 -0
- package/dist/src/planner/mutation/body-context.js +26 -0
- package/dist/src/planner/mutation/body-context.js.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.js +15 -2
- package/dist/src/planner/mutation/cte-flatten.js.map +1 -1
- package/dist/src/planner/mutation/decomposition.d.ts +8 -0
- package/dist/src/planner/mutation/decomposition.d.ts.map +1 -1
- package/dist/src/planner/mutation/decomposition.js +8 -3
- package/dist/src/planner/mutation/decomposition.js.map +1 -1
- package/dist/src/planner/mutation/lens-enforcement.js +1 -1
- package/dist/src/planner/mutation/multi-source.d.ts +7 -0
- package/dist/src/planner/mutation/multi-source.d.ts.map +1 -1
- package/dist/src/planner/mutation/multi-source.js +5 -0
- package/dist/src/planner/mutation/multi-source.js.map +1 -1
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts +1 -1
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -1
- package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -1
- package/dist/src/planner/mutation/scope-transform.d.ts +32 -0
- package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -1
- package/dist/src/planner/mutation/scope-transform.js +181 -33
- package/dist/src/planner/mutation/scope-transform.js.map +1 -1
- package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
- package/dist/src/planner/mutation/set-op.js +66 -16
- package/dist/src/planner/mutation/set-op.js.map +1 -1
- package/dist/src/planner/mutation/single-source.d.ts.map +1 -1
- package/dist/src/planner/mutation/single-source.js +100 -24
- package/dist/src/planner/mutation/single-source.js.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.d.ts +15 -1
- package/dist/src/planner/nodes/add-constraint-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.js +10 -1
- package/dist/src/planner/nodes/add-constraint-node.js.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.d.ts +14 -5
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +28 -21
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +27 -2
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +49 -2
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.js +17 -19
- package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.d.ts +2 -1
- package/dist/src/planner/nodes/create-assertion-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.js +5 -2
- package/dist/src/planner/nodes/create-assertion-node.js.map +1 -1
- package/dist/src/planner/nodes/cte-node.d.ts +19 -9
- package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cte-node.js +25 -9
- package/dist/src/planner/nodes/cte-node.js.map +1 -1
- package/dist/src/planner/nodes/delete-node.d.ts +20 -2
- package/dist/src/planner/nodes/delete-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/delete-node.js +11 -2
- package/dist/src/planner/nodes/delete-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts +58 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.js +107 -15
- package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.d.ts +2 -1
- package/dist/src/planner/nodes/drop-assertion-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.js +5 -2
- package/dist/src/planner/nodes/drop-assertion-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +12 -6
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts +0 -5
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +17 -20
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/insert-node.d.ts +19 -2
- package/dist/src/planner/nodes/insert-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/insert-node.js +10 -2
- package/dist/src/planner/nodes/insert-node.js.map +1 -1
- package/dist/src/planner/nodes/key-set-semi-join-node.d.ts +42 -10
- package/dist/src/planner/nodes/key-set-semi-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/key-set-semi-join-node.js +85 -16
- package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +5 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +5 -0
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +12 -0
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +16 -35
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts +16 -2
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +8 -1
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +13 -32
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts +0 -5
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +18 -24
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +89 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +64 -2
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/update-node.d.ts +19 -2
- package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/update-node.js +10 -2
- package/dist/src/planner/nodes/update-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts +18 -0
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +59 -10
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +24 -0
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/planning-context.js.map +1 -1
- package/dist/src/planner/rules/access/rule-key-set-seek.d.ts +78 -20
- package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-key-set-seek.js +297 -71
- package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -1
- package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js +2 -2
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts +11 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +46 -2
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +7 -4
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +39 -5
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.js +6 -2
- package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +10 -3
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.js +13 -7
- package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts +4 -0
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +50 -15
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +6 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.js +25 -9
- package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-key-inference.d.ts +7 -0
- package/dist/src/planner/rules/join/rule-join-key-inference.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-key-inference.js +23 -11
- package/dist/src/planner/rules/join/rule-join-key-inference.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +2 -2
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +46 -16
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +2 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +14 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts +2 -2
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +19 -22
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +33 -19
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +37 -18
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts +6 -3
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js +6 -3
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +11 -21
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/shared/access-leaf.d.ts +16 -3
- package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -1
- package/dist/src/planner/rules/shared/access-leaf.js +21 -5
- package/dist/src/planner/rules/shared/access-leaf.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
- package/dist/src/planner/stored-body-context.d.ts +57 -0
- package/dist/src/planner/stored-body-context.d.ts.map +1 -0
- package/dist/src/planner/stored-body-context.js +64 -0
- package/dist/src/planner/stored-body-context.js.map +1 -0
- package/dist/src/planner/util/ind-utils.d.ts +28 -20
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +36 -27
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts +19 -4
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +23 -7
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/planner/util/output-names.d.ts +12 -0
- package/dist/src/planner/util/output-names.d.ts.map +1 -0
- package/dist/src/planner/util/output-names.js +20 -0
- package/dist/src/planner/util/output-names.js.map +1 -0
- package/dist/src/planner/util/row-estimates.d.ts +11 -0
- package/dist/src/planner/util/row-estimates.d.ts.map +1 -1
- package/dist/src/planner/util/row-estimates.js +28 -0
- package/dist/src/planner/util/row-estimates.js.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.js +3 -2
- package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
- package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +22 -6
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/alter-schema-event.d.ts +59 -4
- package/dist/src/runtime/emit/alter-schema-event.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-schema-event.js +63 -4
- package/dist/src/runtime/emit/alter-schema-event.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +212 -92
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
- package/dist/src/runtime/emit/analyze.js +15 -4
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- package/dist/src/runtime/emit/assertion-drop-guard.d.ts +37 -0
- package/dist/src/runtime/emit/assertion-drop-guard.d.ts.map +1 -0
- package/dist/src/runtime/emit/assertion-drop-guard.js +59 -0
- package/dist/src/runtime/emit/assertion-drop-guard.js.map +1 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.d.ts +33 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.d.ts.map +1 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.js +124 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.js.map +1 -0
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +10 -227
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-assertion.js +31 -14
- package/dist/src/runtime/emit/create-assertion.js.map +1 -1
- package/dist/src/runtime/emit/cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/cte.js +11 -6
- package/dist/src/runtime/emit/cte.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +169 -1
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-assertion.js +8 -8
- package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
- package/dist/src/runtime/emit/drop-column-guards.d.ts +151 -0
- package/dist/src/runtime/emit/drop-column-guards.d.ts.map +1 -0
- package/dist/src/runtime/emit/drop-column-guards.js +230 -0
- package/dist/src/runtime/emit/drop-column-guards.js.map +1 -0
- package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-table.js +6 -0
- package/dist/src/runtime/emit/drop-table.js.map +1 -1
- package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-view.js +4 -0
- package/dist/src/runtime/emit/drop-view.js.map +1 -1
- package/dist/src/runtime/emit/key-set-semi-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/key-set-semi-join.js +5 -3
- package/dist/src/runtime/emit/key-set-semi-join.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +4 -4
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.js +34 -22
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view.js +7 -2
- package/dist/src/runtime/emit/materialized-view.js.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.js +4 -5
- package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
- package/dist/src/runtime/emit/remote-query.d.ts.map +1 -1
- package/dist/src/runtime/emit/remote-query.js +8 -3
- package/dist/src/runtime/emit/remote-query.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js +4 -1
- package/dist/src/runtime/emit/scan.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +2 -2
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/update.d.ts.map +1 -1
- package/dist/src/runtime/emit/update.js +18 -6
- package/dist/src/runtime/emit/update.js.map +1 -1
- package/dist/src/runtime/parallel-driver.d.ts +4 -3
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +8 -3
- package/dist/src/runtime/parallel-driver.js.map +1 -1
- package/dist/src/runtime/row-constraints.d.ts +85 -0
- package/dist/src/runtime/row-constraints.d.ts.map +1 -0
- package/dist/src/runtime/row-constraints.js +239 -0
- package/dist/src/runtime/row-constraints.js.map +1 -0
- package/dist/src/runtime/types.d.ts +18 -11
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/runtime/utils.d.ts.map +1 -1
- package/dist/src/runtime/utils.js +11 -0
- package/dist/src/runtime/utils.js.map +1 -1
- package/dist/src/schema/assertion.d.ts +14 -1
- package/dist/src/schema/assertion.d.ts.map +1 -1
- package/dist/src/schema/assertion.js +14 -1
- package/dist/src/schema/assertion.js.map +1 -1
- package/dist/src/schema/catalog-persistability.js +19 -3
- package/dist/src/schema/catalog-persistability.js.map +1 -1
- package/dist/src/schema/catalog.d.ts +6 -0
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +26 -36
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/column-source-resolver.d.ts +18 -0
- package/dist/src/schema/column-source-resolver.d.ts.map +1 -0
- package/dist/src/schema/column-source-resolver.js +22 -0
- package/dist/src/schema/column-source-resolver.js.map +1 -0
- package/dist/src/schema/constraint-builder.d.ts.map +1 -1
- package/dist/src/schema/constraint-builder.js +7 -1
- package/dist/src/schema/constraint-builder.js.map +1 -1
- package/dist/src/schema/ddl-generator.js +8 -0
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/lens-compiler.d.ts.map +1 -1
- package/dist/src/schema/lens-compiler.js +203 -51
- package/dist/src/schema/lens-compiler.js.map +1 -1
- package/dist/src/schema/lens-prover.d.ts +2 -3
- package/dist/src/schema/lens-prover.d.ts.map +1 -1
- package/dist/src/schema/lens-prover.js +19 -11
- package/dist/src/schema/lens-prover.js.map +1 -1
- package/dist/src/schema/manager.d.ts +30 -12
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +49 -17
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/rename-rewriter.d.ts +142 -0
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +254 -9
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/reserved-tags.d.ts +1 -1
- package/dist/src/schema/reserved-tags.d.ts.map +1 -1
- package/dist/src/schema/reserved-tags.js +4 -3
- package/dist/src/schema/reserved-tags.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts +16 -0
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +122 -11
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/view.d.ts +11 -0
- package/dist/src/schema/view.d.ts.map +1 -1
- package/dist/src/schema/view.js +12 -0
- package/dist/src/schema/view.js.map +1 -1
- package/dist/src/types/builtin-types.d.ts +38 -0
- package/dist/src/types/builtin-types.d.ts.map +1 -1
- package/dist/src/types/builtin-types.js +77 -26
- package/dist/src/types/builtin-types.js.map +1 -1
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +1 -1
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/util/abort-signal.d.ts +25 -0
- package/dist/src/util/abort-signal.d.ts.map +1 -0
- package/dist/src/util/abort-signal.js +40 -0
- package/dist/src/util/abort-signal.js.map +1 -0
- package/dist/src/util/{working-table-iterable.d.ts → array-row-iterable.d.ts} +6 -6
- package/dist/src/util/array-row-iterable.d.ts.map +1 -0
- package/dist/src/util/{working-table-iterable.js → array-row-iterable.js} +6 -6
- package/dist/src/util/array-row-iterable.js.map +1 -0
- package/dist/src/vtab/concurrency.d.ts +15 -0
- package/dist/src/vtab/concurrency.d.ts.map +1 -1
- package/dist/src/vtab/concurrency.js +17 -0
- package/dist/src/vtab/concurrency.js.map +1 -1
- package/dist/src/vtab/events.d.ts +3 -0
- package/dist/src/vtab/events.d.ts.map +1 -1
- package/dist/src/vtab/events.js.map +1 -1
- package/dist/src/vtab/manifest.d.ts +15 -0
- package/dist/src/vtab/manifest.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +10 -0
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +10 -0
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/interface.d.ts +24 -0
- package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +21 -3
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +107 -157
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts +11 -0
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +19 -0
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +57 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +103 -2
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts +12 -1
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +12 -1
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/module.d.ts +59 -2
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +8 -1
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/dist/src/vtab/test-support/commit-stall.d.ts +53 -0
- package/dist/src/vtab/test-support/commit-stall.d.ts.map +1 -0
- package/dist/src/vtab/test-support/commit-stall.js +73 -0
- package/dist/src/vtab/test-support/commit-stall.js.map +1 -0
- package/dist/src/vtab/test-support/committed-read-conformance.d.ts +96 -0
- package/dist/src/vtab/test-support/committed-read-conformance.d.ts.map +1 -0
- package/dist/src/vtab/test-support/committed-read-conformance.js +364 -0
- package/dist/src/vtab/test-support/committed-read-conformance.js.map +1 -0
- package/package.json +3 -3
- package/dist/src/util/working-table-iterable.d.ts.map +0 -1
- package/dist/src/util/working-table-iterable.js.map +0 -1
|
@@ -430,11 +430,22 @@ export class MemoryTableManager {
|
|
|
430
430
|
const connection = this.connections.get(connectionId);
|
|
431
431
|
if (!connection)
|
|
432
432
|
return;
|
|
433
|
-
// If the connection still
|
|
434
|
-
//
|
|
435
|
-
//
|
|
436
|
-
//
|
|
437
|
-
|
|
433
|
+
// If the connection still holds uncommitted work, defer disconnect until it is
|
|
434
|
+
// either committed or rolled back by the transaction coordinator. This avoids
|
|
435
|
+
// accidental rollback during implicit transactions.
|
|
436
|
+
//
|
|
437
|
+
// `hasOpenWork()` rather than an uncommitted pending layer: an eager savepoint moves
|
|
438
|
+
// the connection's uncommitted rows into `readLayer` and nulls
|
|
439
|
+
// `pendingTransactionLayer`, so the narrower test dropped a connection that was still
|
|
440
|
+
// reading — and writing, at commit — a live layer, hiding it from `isLayerInUse` while
|
|
441
|
+
// the collapse below ran.
|
|
442
|
+
//
|
|
443
|
+
// NOTE: deferral has no timeout, so a transaction abandoned without commit or rollback
|
|
444
|
+
// keeps this connection — and the layer chain it reads — reachable for the table's
|
|
445
|
+
// lifetime. The same was already true of an abandoned pending layer; if abandoned
|
|
446
|
+
// transactions ever show up as a leak, the fix is a reaper over `connections`, not a
|
|
447
|
+
// narrower test here.
|
|
448
|
+
if (connection.hasOpenWork()) {
|
|
438
449
|
logger.debugLog(`[Disconnect] Deferring disconnect of connection ${connectionId} while transaction pending for ${this._tableName}`);
|
|
439
450
|
return;
|
|
440
451
|
}
|
|
@@ -468,16 +479,7 @@ export class MemoryTableManager {
|
|
|
468
479
|
if (!connection.pendingTransactionLayer
|
|
469
480
|
&& connection.readLayer !== this._currentCommittedLayer
|
|
470
481
|
&& connection.readLayer instanceof TransactionLayer) {
|
|
471
|
-
|
|
472
|
-
let isAhead = false;
|
|
473
|
-
while (walker) {
|
|
474
|
-
if (walker === this._currentCommittedLayer) {
|
|
475
|
-
isAhead = true;
|
|
476
|
-
break;
|
|
477
|
-
}
|
|
478
|
-
walker = walker.getParent();
|
|
479
|
-
}
|
|
480
|
-
if (isAhead) {
|
|
482
|
+
if (this.chainContains(connection.readLayer, this._currentCommittedLayer)) {
|
|
481
483
|
if (connection.readLayer.getSchema() === this.tableSchema) {
|
|
482
484
|
connection.pendingTransactionLayer = new TransactionLayer(connection.readLayer);
|
|
483
485
|
if (this.eventEmitter?.hasDataListeners?.()) {
|
|
@@ -525,17 +527,7 @@ export class MemoryTableManager {
|
|
|
525
527
|
// Case C — no common ancestor reachable: a genuinely stale commit. Roll
|
|
526
528
|
// back with BUSY outside a coordinated commit (the caller can retry);
|
|
527
529
|
// inside one, preserve the prior wholesale fallback.
|
|
528
|
-
|
|
529
|
-
{
|
|
530
|
-
let cur = pendingLayer;
|
|
531
|
-
while (cur) {
|
|
532
|
-
if (cur === this._currentCommittedLayer) {
|
|
533
|
-
headIsAncestorOfPending = true;
|
|
534
|
-
break;
|
|
535
|
-
}
|
|
536
|
-
cur = cur.getParent();
|
|
537
|
-
}
|
|
538
|
-
}
|
|
530
|
+
const headIsAncestorOfPending = this.chainContains(pendingLayer, this._currentCommittedLayer);
|
|
539
531
|
let committedLayer;
|
|
540
532
|
let changes;
|
|
541
533
|
if (headIsAncestorOfPending) {
|
|
@@ -747,44 +739,13 @@ export class MemoryTableManager {
|
|
|
747
739
|
return;
|
|
748
740
|
}
|
|
749
741
|
logger.debugLog(`[Collapse] Acquired lock for ${this._tableName}`);
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
//
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
const layerToPromote = this._currentCommittedLayer;
|
|
758
|
-
const parentLayer = layerToPromote.getParent();
|
|
759
|
-
if (!parentLayer) {
|
|
760
|
-
logger.error('Collapse Layers', this._tableName, 'Committed TransactionLayer has no parent', { layerId: layerToPromote.getLayerId() });
|
|
761
|
-
break;
|
|
762
|
-
}
|
|
763
|
-
// Check if anyone is still using the parent layer or any of its ancestors
|
|
764
|
-
if (this.isLayerInUse(parentLayer)) {
|
|
765
|
-
logger.debugLog(`[Collapse] Parent layer ${parentLayer.getLayerId()} or its ancestors in use. Cannot collapse layer ${layerToPromote.getLayerId()}.`);
|
|
766
|
-
break;
|
|
767
|
-
}
|
|
768
|
-
logger.debugLog(`[Collapse] Promoting layer ${layerToPromote.getLayerId()} to become independent from parent ${parentLayer.getLayerId()} for ${this._tableName}`);
|
|
769
|
-
// With inherited BTrees, "collapsing" means making the transaction layer independent
|
|
770
|
-
// by calling clearBase() on its BTrees, effectively making it the new base data
|
|
771
|
-
layerToPromote.clearBase();
|
|
772
|
-
// Update connections that were reading from the collapsed parent layer
|
|
773
|
-
for (const conn of this.connections.values()) {
|
|
774
|
-
if (conn.readLayer === parentLayer) {
|
|
775
|
-
// Update connections to read from the now-independent transaction layer
|
|
776
|
-
conn.readLayer = layerToPromote;
|
|
777
|
-
logger.debugLog(`[Collapse] Connection ${conn.connectionId} updated to read from independent layer ${layerToPromote.getLayerId()}`);
|
|
778
|
-
}
|
|
779
|
-
}
|
|
780
|
-
collapsedCount++;
|
|
781
|
-
iterations++;
|
|
782
|
-
// The layer is now independent, but check if we can collapse further
|
|
783
|
-
// by examining if this layer can be promoted above its (now detached) parent
|
|
784
|
-
logger.debugLog(`[Collapse] Layer ${layerToPromote.getLayerId()} is now independent for ${this._tableName}`);
|
|
785
|
-
}
|
|
786
|
-
if (collapsedCount > 0) {
|
|
787
|
-
logger.operation('Collapse Layers', this._tableName, { collapsedCount, iterations });
|
|
742
|
+
// At most ONE promotion per call, and no loop: promoting detaches the head's
|
|
743
|
+
// BTrees from their base but leaves the head exactly where it is, so there is
|
|
744
|
+
// never a second layer to promote afterwards. (The former `while` re-tested
|
|
745
|
+
// `_currentCommittedLayer`, which its body never reassigned, and so re-ran
|
|
746
|
+
// `clearBase()` on the same layer up to ten times per call.)
|
|
747
|
+
if (this.promoteCommittedHead()) {
|
|
748
|
+
logger.operation('Collapse Layers', this._tableName, { collapsedCount: 1 });
|
|
788
749
|
}
|
|
789
750
|
else {
|
|
790
751
|
logger.debugLog(`[Collapse] No layers collapsed for ${this._tableName}. Current: ${this._currentCommittedLayer.getLayerId()}`);
|
|
@@ -802,33 +763,88 @@ export class MemoryTableManager {
|
|
|
802
763
|
}
|
|
803
764
|
}
|
|
804
765
|
/**
|
|
805
|
-
*
|
|
806
|
-
*
|
|
807
|
-
*
|
|
766
|
+
* Detaches the committed head from its parent (`clearBase()`), so the chain below it
|
|
767
|
+
* can be released. Returns whether it did.
|
|
768
|
+
*
|
|
769
|
+
* Caller holds the collapse latch.
|
|
770
|
+
*/
|
|
771
|
+
promoteCommittedHead() {
|
|
772
|
+
if (!(this._currentCommittedLayer instanceof TransactionLayer))
|
|
773
|
+
return false;
|
|
774
|
+
if (!this._currentCommittedLayer.isCommitted())
|
|
775
|
+
return false;
|
|
776
|
+
const layerToPromote = this._currentCommittedLayer;
|
|
777
|
+
const parentLayer = layerToPromote.getParent();
|
|
778
|
+
if (!parentLayer) {
|
|
779
|
+
logger.error('Collapse Layers', this._tableName, 'Committed TransactionLayer has no parent', { layerId: layerToPromote.getLayerId() });
|
|
780
|
+
return false;
|
|
781
|
+
}
|
|
782
|
+
// A layer any child has EVER derived from must not be promoted. `clearBase()` drops
|
|
783
|
+
// the base pointer, which removes the base's whole contribution from the tree's
|
|
784
|
+
// `chainVersion()` — and every already-derived child snapshotted that total when it
|
|
785
|
+
// was built, so each one's next `checkBase()` raises `MutatedBaseError` although no
|
|
786
|
+
// row moved. inheritree forbids it for a second reason too: the detached tree keeps
|
|
787
|
+
// sharing nodes by identity with its former base, so the base-immutability contract
|
|
788
|
+
// outlives the call.
|
|
789
|
+
//
|
|
790
|
+
// The connection-based check below cannot cover this: `disconnect` detaches
|
|
791
|
+
// still-live connections from `this.connections`, so the map is not an authoritative
|
|
792
|
+
// liveness registry. The signal has to live on the layer.
|
|
793
|
+
//
|
|
794
|
+
// NOTE: the derived-child counter never decrements (no layer-destruction hook exists),
|
|
795
|
+
// so a long-lived table whose head always has a child may never collapse. If
|
|
796
|
+
// layer-chain memory growth ever shows up, switch the promotion to inheritree's
|
|
797
|
+
// `BTree.flatten()` — a real O(n) independent copy that leaves the old tree valid for
|
|
798
|
+
// its children — behind a chain-depth threshold, rather than loosening this guard.
|
|
799
|
+
if (layerToPromote.hasDerivedChildren()) {
|
|
800
|
+
logger.debugLog(`[Collapse] Layer ${layerToPromote.getLayerId()} has derived children. Cannot promote it for ${this._tableName}.`);
|
|
801
|
+
return false;
|
|
802
|
+
}
|
|
803
|
+
// Check if anyone is still using the parent layer or any of its ancestors
|
|
804
|
+
if (this.isLayerInUse(parentLayer)) {
|
|
805
|
+
logger.debugLog(`[Collapse] Parent layer ${parentLayer.getLayerId()} or its ancestors in use. Cannot collapse layer ${layerToPromote.getLayerId()}.`);
|
|
806
|
+
return false;
|
|
807
|
+
}
|
|
808
|
+
logger.debugLog(`[Collapse] Promoting layer ${layerToPromote.getLayerId()} to become independent from parent ${parentLayer.getLayerId()} for ${this._tableName}`);
|
|
809
|
+
// With inherited BTrees, "collapsing" means making the transaction layer independent
|
|
810
|
+
// by calling clearBase() on its BTrees, effectively making it the new base data
|
|
811
|
+
layerToPromote.clearBase();
|
|
812
|
+
// No connection needs re-pointing off `parentLayer`: `isLayerInUse` above returns true
|
|
813
|
+
// for a connection whose read or pending chain reaches it — reading it directly
|
|
814
|
+
// included — so reaching here proves no attached connection holds it.
|
|
815
|
+
logger.debugLog(`[Collapse] Layer ${layerToPromote.getLayerId()} is now independent for ${this._tableName}`);
|
|
816
|
+
return true;
|
|
817
|
+
}
|
|
818
|
+
/**
|
|
819
|
+
* Whether any attached connection's read or write view still reaches `layer` — as its
|
|
820
|
+
* read layer, its pending layer, or an ancestor of either.
|
|
821
|
+
*
|
|
822
|
+
* BOTH chains are walked, and each all the way to the chain root. An eager savepoint
|
|
823
|
+
* (`MemoryTableConnection.createSavepoint`) moves the connection's uncommitted layer into
|
|
824
|
+
* `readLayer` and leaves `pendingTransactionLayer` null, so walking only the pending chain
|
|
825
|
+
* misses exactly the connection whose live snapshot the collapse would strand.
|
|
826
|
+
*
|
|
827
|
+
* Necessary but NOT sufficient as a collapse precondition: `disconnect` can drop a still-live
|
|
828
|
+
* connection from `this.connections` (it stays registered on the Database and is committed
|
|
829
|
+
* later), so a layer this reports unused may still have live derived trees. That is what
|
|
830
|
+
* {@link Layer.hasDerivedChildren} covers.
|
|
808
831
|
*/
|
|
809
832
|
isLayerInUse(layer) {
|
|
810
833
|
for (const conn of this.connections.values()) {
|
|
811
|
-
|
|
812
|
-
if (conn.readLayer === layer) {
|
|
834
|
+
if (this.chainContains(conn.readLayer, layer))
|
|
813
835
|
return true;
|
|
814
|
-
|
|
815
|
-
// Check if connection has this layer as pending transaction
|
|
816
|
-
if (conn.pendingTransactionLayer === layer) {
|
|
836
|
+
if (conn.pendingTransactionLayer && this.chainContains(conn.pendingTransactionLayer, layer))
|
|
817
837
|
return true;
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
else {
|
|
829
|
-
break;
|
|
830
|
-
}
|
|
831
|
-
}
|
|
838
|
+
}
|
|
839
|
+
return false;
|
|
840
|
+
}
|
|
841
|
+
/** Whether `layer` is `from` itself or any of its ancestors. */
|
|
842
|
+
chainContains(from, layer) {
|
|
843
|
+
let cur = from;
|
|
844
|
+
while (cur) {
|
|
845
|
+
if (cur === layer)
|
|
846
|
+
return true;
|
|
847
|
+
cur = cur.getParent();
|
|
832
848
|
}
|
|
833
849
|
return false;
|
|
834
850
|
}
|
|
@@ -1448,13 +1464,9 @@ export class MemoryTableManager {
|
|
|
1448
1464
|
// (`readLayer.getSchema() === this.tableSchema`) and drops the transaction's staged
|
|
1449
1465
|
// rows at COMMIT.
|
|
1450
1466
|
this.adoptSchemaOnOpenLayers(renamed);
|
|
1451
|
-
//
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
objectType: 'table',
|
|
1455
|
-
schemaName: this.schemaName,
|
|
1456
|
-
objectName: newName,
|
|
1457
|
-
});
|
|
1467
|
+
// No emit here (or in any other ALTER-arm manager method): the module-level
|
|
1468
|
+
// `alterTable`/`renameTable` raises the statement's ONE schema event, gated on the
|
|
1469
|
+
// engine-set `change.ddl` — so a wrapper-driven manager call announces nothing.
|
|
1458
1470
|
}
|
|
1459
1471
|
/**
|
|
1460
1472
|
* Atomically replaces the entire committed contents with `rows` by building a
|
|
@@ -1854,20 +1866,6 @@ export class MemoryTableManager {
|
|
|
1854
1866
|
this.tableSchema = finalNewTableSchema;
|
|
1855
1867
|
this.initializePrimaryKeyFunctions();
|
|
1856
1868
|
this.installReshapeOnOpenLayers(finalNewTableSchema, reshapePlans);
|
|
1857
|
-
// Emit schema change event.
|
|
1858
|
-
// NOTE: the event names the added column but not its position, which is fine while
|
|
1859
|
-
// the only non-append caller is an in-process wrapper that rebuilds its view from the
|
|
1860
|
-
// post-change schema. An append never invalidates an existing column index; an insert
|
|
1861
|
-
// does. If a position ever becomes SQL-reachable, anything that caches a column index
|
|
1862
|
-
// across this swap (planner caches, prepared statements, a wrapper's own schema
|
|
1863
|
-
// snapshot) needs to learn the insert point — so the event would have to carry it.
|
|
1864
|
-
this.eventEmitter?.emitSchemaChange?.({
|
|
1865
|
-
type: 'alter',
|
|
1866
|
-
objectType: 'column',
|
|
1867
|
-
schemaName: this.schemaName,
|
|
1868
|
-
objectName: this._tableName,
|
|
1869
|
-
columnName: newColumnSchema.name,
|
|
1870
|
-
});
|
|
1871
1869
|
logger.operation('Add Column', this._tableName, { columnName: newColumnSchema.name });
|
|
1872
1870
|
}
|
|
1873
1871
|
catch (e) {
|
|
@@ -1945,14 +1943,6 @@ export class MemoryTableManager {
|
|
|
1945
1943
|
this.implicitCoveringStructures.delete(key);
|
|
1946
1944
|
this.initializePrimaryKeyFunctions();
|
|
1947
1945
|
this.installReshapeOnOpenLayers(finalNewTableSchema, reshapePlans);
|
|
1948
|
-
// Emit schema change event
|
|
1949
|
-
this.eventEmitter?.emitSchemaChange?.({
|
|
1950
|
-
type: 'drop',
|
|
1951
|
-
objectType: 'column',
|
|
1952
|
-
schemaName: this.schemaName,
|
|
1953
|
-
objectName: this._tableName,
|
|
1954
|
-
columnName,
|
|
1955
|
-
});
|
|
1956
1946
|
logger.operation('Drop Column', this._tableName, { columnName });
|
|
1957
1947
|
}
|
|
1958
1948
|
catch (e) {
|
|
@@ -2056,15 +2046,6 @@ export class MemoryTableManager {
|
|
|
2056
2046
|
// silently dropped at COMMIT. Covered by
|
|
2057
2047
|
// `test/logic/41.8-alter-savepoint-staged-rows.sqllogic`.
|
|
2058
2048
|
this.adoptSchemaOnOpenLayers(finalNewTableSchema);
|
|
2059
|
-
// Emit schema change event
|
|
2060
|
-
this.eventEmitter?.emitSchemaChange?.({
|
|
2061
|
-
type: 'alter',
|
|
2062
|
-
objectType: 'column',
|
|
2063
|
-
schemaName: this.schemaName,
|
|
2064
|
-
objectName: this._tableName,
|
|
2065
|
-
columnName: newColumnName,
|
|
2066
|
-
oldColumnName: oldName,
|
|
2067
|
-
});
|
|
2068
2049
|
logger.operation('Rename Column', this._tableName, { oldName, newName: newColumnName });
|
|
2069
2050
|
}
|
|
2070
2051
|
catch (e) {
|
|
@@ -2143,13 +2124,6 @@ export class MemoryTableManager {
|
|
|
2143
2124
|
this.tableSchema = plan.newSchema;
|
|
2144
2125
|
this.initializePrimaryKeyFunctions();
|
|
2145
2126
|
this.propagateAlterColumnToOpenLayers(plan);
|
|
2146
|
-
this.eventEmitter?.emitSchemaChange?.({
|
|
2147
|
-
type: 'alter',
|
|
2148
|
-
objectType: 'column',
|
|
2149
|
-
schemaName: this.schemaName,
|
|
2150
|
-
objectName: this._tableName,
|
|
2151
|
-
columnName: change.columnName,
|
|
2152
|
-
});
|
|
2153
2127
|
logger.operation('Alter Column', this._tableName, { columnName: change.columnName });
|
|
2154
2128
|
}
|
|
2155
2129
|
catch (e) {
|
|
@@ -2245,12 +2219,6 @@ export class MemoryTableManager {
|
|
|
2245
2219
|
for (const { layer, prepared } of plans) {
|
|
2246
2220
|
layer.installRekeyedPrimaryKeyColumns(newSchema, prepared);
|
|
2247
2221
|
}
|
|
2248
|
-
this.eventEmitter?.emitSchemaChange?.({
|
|
2249
|
-
type: 'alter',
|
|
2250
|
-
objectType: 'table',
|
|
2251
|
-
schemaName: this.schemaName,
|
|
2252
|
-
objectName: this._tableName,
|
|
2253
|
-
});
|
|
2254
2222
|
logger.operation('Alter Primary Key', this._tableName, {
|
|
2255
2223
|
columns: newSchema.primaryKeyDefinition.map(def => def.index),
|
|
2256
2224
|
});
|
|
@@ -2647,12 +2615,6 @@ export class MemoryTableManager {
|
|
|
2647
2615
|
// stops enforcing for the rest of it; harmless for CHECK/FK (they re-freeze an
|
|
2648
2616
|
// equivalent schema, holding no per-layer structure).
|
|
2649
2617
|
this.adoptSchemaOnOpenLayers(newSchema);
|
|
2650
|
-
this.eventEmitter?.emitSchemaChange?.({
|
|
2651
|
-
type: 'alter',
|
|
2652
|
-
objectType: 'table',
|
|
2653
|
-
schemaName: this.schemaName,
|
|
2654
|
-
objectName: this._tableName,
|
|
2655
|
-
});
|
|
2656
2618
|
logger.operation('Drop Constraint', this._tableName, { constraintName });
|
|
2657
2619
|
}
|
|
2658
2620
|
catch (e) {
|
|
@@ -2733,12 +2695,6 @@ export class MemoryTableManager {
|
|
|
2733
2695
|
// check (`readLayer.getSchema() === this.tableSchema`) skips a savepoint snapshot
|
|
2734
2696
|
// restored across this ALTER and drops the transaction's staged rows at COMMIT.
|
|
2735
2697
|
this.adoptSchemaOnOpenLayers(newSchema);
|
|
2736
|
-
this.eventEmitter?.emitSchemaChange?.({
|
|
2737
|
-
type: 'alter',
|
|
2738
|
-
objectType: 'table',
|
|
2739
|
-
schemaName: this.schemaName,
|
|
2740
|
-
objectName: this._tableName,
|
|
2741
|
-
});
|
|
2742
2698
|
logger.operation('Rename Constraint', this._tableName, { oldName, newName });
|
|
2743
2699
|
}
|
|
2744
2700
|
catch (e) {
|
|
@@ -2791,12 +2747,6 @@ export class MemoryTableManager {
|
|
|
2791
2747
|
else {
|
|
2792
2748
|
throw new QuereusError(`MemoryTable ADD CONSTRAINT does not support constraint type '${constraint.type}'`, StatusCode.UNSUPPORTED);
|
|
2793
2749
|
}
|
|
2794
|
-
this.eventEmitter?.emitSchemaChange?.({
|
|
2795
|
-
type: 'alter',
|
|
2796
|
-
objectType: 'table',
|
|
2797
|
-
schemaName: this.schemaName,
|
|
2798
|
-
objectName: this._tableName,
|
|
2799
|
-
});
|
|
2800
2750
|
logger.operation('Add Constraint', this._tableName, { type: constraint.type, name: constraint.name });
|
|
2801
2751
|
}
|
|
2802
2752
|
catch (e) {
|
|
@@ -2977,8 +2927,8 @@ export class MemoryTableManager {
|
|
|
2977
2927
|
// loop above misses it, so after an in-transaction schema change (e.g. ALTER TABLE ADD
|
|
2978
2928
|
// COLUMN, now permitted inside an explicit transaction) it keeps reading a stale
|
|
2979
2929
|
// pre-change layer carrying the OLD column shape — the materialized-view-source-stale-read
|
|
2980
|
-
// bug. A detached connection
|
|
2981
|
-
//
|
|
2930
|
+
// bug. A detached connection never holds open work (`disconnect` defers while
|
|
2931
|
+
// `hasOpenWork()`), so this never discards in-flight writes.
|
|
2982
2932
|
this.repointRegisteredConnections();
|
|
2983
2933
|
// Re-pointing `readLayer` is not enough: a savepoint taken while a connection held no
|
|
2984
2934
|
// pending layer stored the layer it was READING as the view to restore. Consolidation
|