@quereus/quereus 0.2.1 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -1
- package/dist/src/common/errors.js.map +1 -1
- package/dist/src/common/json-types.d.ts +11 -0
- package/dist/src/common/json-types.d.ts.map +1 -0
- package/dist/src/common/json-types.js +3 -0
- package/dist/src/common/json-types.js.map +1 -0
- package/dist/src/common/types.d.ts +1 -0
- package/dist/src/common/types.d.ts.map +1 -1
- package/dist/src/core/database-options.d.ts +2 -2
- package/dist/src/core/database-options.d.ts.map +1 -1
- package/dist/src/core/database-options.js.map +1 -1
- package/dist/src/core/database.d.ts +61 -14
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +481 -54
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +3 -1
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
- package/dist/src/func/builtins/datetime.d.ts +2 -0
- package/dist/src/func/builtins/datetime.d.ts.map +1 -1
- package/dist/src/func/builtins/datetime.js +39 -0
- package/dist/src/func/builtins/datetime.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts +1 -0
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +159 -36
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +5 -2
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/func/builtins/json-helpers.d.ts +8 -8
- package/dist/src/func/builtins/json-helpers.d.ts.map +1 -1
- package/dist/src/func/builtins/json-helpers.js +3 -3
- package/dist/src/func/builtins/json-helpers.js.map +1 -1
- package/dist/src/func/builtins/json-tvf.d.ts.map +1 -1
- package/dist/src/func/builtins/json-tvf.js +1 -1
- package/dist/src/func/builtins/json-tvf.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +3 -2
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +22 -1
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/context.d.ts.map +1 -1
- package/dist/src/func/context.js +5 -0
- package/dist/src/func/context.js.map +1 -1
- package/dist/src/func/registration.d.ts +2 -1
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +83 -4
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/lexer.d.ts +11 -0
- package/dist/src/parser/lexer.d.ts.map +1 -1
- package/dist/src/parser/lexer.js +29 -21
- package/dist/src/parser/lexer.js.map +1 -1
- package/dist/src/parser/parser.d.ts +16 -0
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +542 -26
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/visitor.d.ts.map +1 -1
- package/dist/src/parser/visitor.js +1 -0
- package/dist/src/parser/visitor.js.map +1 -1
- package/dist/src/planner/analysis/binding-collector.d.ts +5 -0
- package/dist/src/planner/analysis/binding-collector.d.ts.map +1 -0
- package/dist/src/planner/analysis/binding-collector.js +73 -0
- package/dist/src/planner/analysis/binding-collector.js.map +1 -0
- package/dist/src/planner/analysis/const-evaluator.js +1 -1
- package/dist/src/planner/analysis/const-evaluator.js.map +1 -1
- package/dist/src/planner/analysis/const-pass.d.ts.map +1 -1
- package/dist/src/planner/analysis/const-pass.js +1 -1
- package/dist/src/planner/analysis/const-pass.js.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts +67 -31
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +513 -84
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.d.ts +17 -0
- package/dist/src/planner/analysis/predicate-normalizer.d.ts.map +1 -0
- package/dist/src/planner/analysis/predicate-normalizer.js +222 -0
- package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -0
- package/dist/src/planner/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +5 -2
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/block.d.ts.map +1 -1
- package/dist/src/planner/building/block.js +16 -0
- package/dist/src/planner/building/block.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +52 -3
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-assertion.d.ts +5 -0
- package/dist/src/planner/building/create-assertion.d.ts.map +1 -0
- package/dist/src/planner/building/create-assertion.js +5 -0
- package/dist/src/planner/building/create-assertion.js.map +1 -0
- package/dist/src/planner/building/declare-schema.d.ts +8 -0
- package/dist/src/planner/building/declare-schema.d.ts.map +1 -0
- package/dist/src/planner/building/declare-schema.js +14 -0
- package/dist/src/planner/building/declare-schema.js.map +1 -0
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +37 -5
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/drop-assertion.d.ts +5 -0
- package/dist/src/planner/building/drop-assertion.d.ts.map +1 -0
- package/dist/src/planner/building/drop-assertion.js +8 -0
- package/dist/src/planner/building/drop-assertion.js.map +1 -0
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +1 -0
- package/dist/src/planner/building/expression.js.map +1 -1
- package/dist/src/planner/building/function-call.d.ts.map +1 -1
- package/dist/src/planner/building/function-call.js +2 -1
- 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 +67 -10
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/pragma.d.ts.map +1 -1
- package/dist/src/planner/building/pragma.js +1 -0
- package/dist/src/planner/building/pragma.js.map +1 -1
- package/dist/src/planner/building/schema-resolution.d.ts +2 -2
- package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +3 -2
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-compound.d.ts +2 -2
- package/dist/src/planner/building/select-compound.d.ts.map +1 -1
- package/dist/src/planner/building/select-compound.js +10 -1
- package/dist/src/planner/building/select-compound.js.map +1 -1
- package/dist/src/planner/building/select-context.d.ts +3 -3
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.d.ts +6 -5
- package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +5 -4
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +4 -5
- package/dist/src/planner/building/select-projections.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +6 -3
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts +3 -3
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +18 -8
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/table-function.d.ts.map +1 -1
- package/dist/src/planner/building/table-function.js +1 -1
- package/dist/src/planner/building/table-function.js.map +1 -1
- package/dist/src/planner/building/table.d.ts +5 -3
- package/dist/src/planner/building/table.d.ts.map +1 -1
- package/dist/src/planner/building/table.js +7 -2
- package/dist/src/planner/building/table.js.map +1 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +38 -6
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/with.d.ts +3 -3
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/debug.d.ts.map +1 -1
- package/dist/src/planner/debug.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +235 -0
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -0
- package/dist/src/planner/framework/characteristics.js +299 -0
- package/dist/src/planner/framework/characteristics.js.map +1 -0
- package/dist/src/planner/framework/context.d.ts +16 -5
- package/dist/src/planner/framework/context.d.ts.map +1 -1
- package/dist/src/planner/framework/context.js +2 -0
- package/dist/src/planner/framework/context.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts +116 -0
- package/dist/src/planner/framework/pass.d.ts.map +1 -0
- package/dist/src/planner/framework/pass.js +236 -0
- package/dist/src/planner/framework/pass.js.map +1 -0
- package/dist/src/planner/nodes/aggregate-node.d.ts +16 -6
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +40 -4
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/array-index-node.js.map +1 -1
- package/dist/src/planner/nodes/cache-node.d.ts +5 -2
- package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cache-node.js +6 -0
- package/dist/src/planner/nodes/cache-node.js.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts +10 -2
- package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.js +12 -4
- package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.d.ts +22 -0
- package/dist/src/planner/nodes/create-assertion-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/create-assertion-node.js +41 -0
- package/dist/src/planner/nodes/create-assertion-node.js.map +1 -0
- package/dist/src/planner/nodes/create-index-node.js +2 -2
- package/dist/src/planner/nodes/create-index-node.js.map +1 -1
- package/dist/src/planner/nodes/create-table-node.js +2 -2
- package/dist/src/planner/nodes/create-table-node.js.map +1 -1
- package/dist/src/planner/nodes/cte-node.d.ts +17 -2
- package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cte-node.js +9 -1
- package/dist/src/planner/nodes/cte-node.js.map +1 -1
- package/dist/src/planner/nodes/cte-reference-node.js +1 -1
- package/dist/src/planner/nodes/cte-reference-node.js.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts +62 -0
- package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -0
- package/dist/src/planner/nodes/declarative-schema.js +181 -0
- package/dist/src/planner/nodes/declarative-schema.js.map +1 -0
- package/dist/src/planner/nodes/delete-node.d.ts +8 -3
- package/dist/src/planner/nodes/delete-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/delete-node.js +10 -2
- package/dist/src/planner/nodes/delete-node.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts +3 -2
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +17 -4
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.d.ts +21 -0
- package/dist/src/planner/nodes/drop-assertion-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/drop-assertion-node.js +41 -0
- package/dist/src/planner/nodes/drop-assertion-node.js.map +1 -0
- package/dist/src/planner/nodes/drop-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/drop-table-node.js +1 -0
- package/dist/src/planner/nodes/drop-table-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts +8 -3
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +44 -0
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/insert-node.d.ts +9 -3
- package/dist/src/planner/nodes/insert-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/insert-node.js +11 -2
- package/dist/src/planner/nodes/insert-node.js.map +1 -1
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts +3 -4
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js +1 -16
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts +12 -3
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +111 -2
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/limit-offset.d.ts +7 -3
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +15 -0
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts +8 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +8 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +9 -9
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +3 -3
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/pragma.d.ts +2 -1
- package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
- package/dist/src/planner/nodes/pragma.js +3 -1
- package/dist/src/planner/nodes/pragma.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts +16 -3
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +82 -2
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.d.ts +2 -2
- package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.js +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts +13 -4
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +16 -0
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/remote-query-node.d.ts +37 -0
- package/dist/src/planner/nodes/remote-query-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/remote-query-node.js +63 -0
- package/dist/src/planner/nodes/remote-query-node.js.map +1 -0
- package/dist/src/planner/nodes/retrieve-node.d.ts +46 -0
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/retrieve-node.js +77 -0
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -0
- package/dist/src/planner/nodes/returning-node.d.ts +4 -3
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +44 -3
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/sequencing-node.d.ts +1 -1
- package/dist/src/planner/nodes/sequencing-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/sequencing-node.js.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts +1 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts +11 -2
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +23 -2
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +4 -1
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +7 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +22 -4
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/table-function-call.d.ts +2 -1
- package/dist/src/planner/nodes/table-function-call.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-function-call.js +12 -5
- package/dist/src/planner/nodes/table-function-call.js.map +1 -1
- package/dist/src/planner/nodes/transaction-node.js +2 -2
- package/dist/src/planner/nodes/transaction-node.js.map +1 -1
- package/dist/src/planner/nodes/update-node.d.ts +7 -1
- package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/update-node.js +11 -2
- package/dist/src/planner/nodes/update-node.js.map +1 -1
- package/dist/src/planner/nodes/view-reference-node.js.map +1 -1
- package/dist/src/planner/nodes/window-function.js.map +1 -1
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer-tuning.d.ts +11 -0
- package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
- package/dist/src/planner/optimizer-tuning.js +6 -0
- package/dist/src/planner/optimizer-tuning.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts +17 -3
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +159 -67
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +5 -3
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/planning-context.js +2 -0
- package/dist/src/planner/planning-context.js.map +1 -1
- package/dist/src/planner/resolve.d.ts +3 -2
- package/dist/src/planner/resolve.d.ts.map +1 -1
- package/dist/src/planner/resolve.js +6 -5
- package/dist/src/planner/resolve.js.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts +8 -3
- 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 +206 -47
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.d.ts +10 -3
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js +95 -87
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts +8 -2
- package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.js +24 -13
- package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts +9 -2
- package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js +14 -7
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts +9 -3
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js +34 -37
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts +14 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js +33 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-key-inference.d.ts +11 -0
- package/dist/src/planner/rules/join/rule-join-key-inference.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-join-key-inference.js +32 -0
- package/dist/src/planner/rules/join/rule-join-key-inference.js.map +1 -0
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts +4 -0
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +233 -0
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts +21 -0
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +125 -0
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -0
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts +21 -0
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -0
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +261 -0
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -0
- package/dist/src/planner/scopes/registered.d.ts +1 -0
- package/dist/src/planner/scopes/registered.d.ts.map +1 -1
- package/dist/src/planner/scopes/registered.js +7 -0
- package/dist/src/planner/scopes/registered.js.map +1 -1
- package/dist/src/planner/stats/index.d.ts +0 -17
- package/dist/src/planner/stats/index.d.ts.map +1 -1
- package/dist/src/planner/stats/index.js +0 -58
- package/dist/src/planner/stats/index.js.map +1 -1
- package/dist/src/planner/util/deferred-constraint.d.ts +14 -0
- package/dist/src/planner/util/deferred-constraint.d.ts.map +1 -0
- package/dist/src/planner/util/deferred-constraint.js +85 -0
- package/dist/src/planner/util/deferred-constraint.js.map +1 -0
- package/dist/src/planner/util/key-utils.d.ts +15 -0
- package/dist/src/planner/util/key-utils.d.ts.map +1 -0
- package/dist/src/planner/util/key-utils.js +43 -0
- package/dist/src/planner/util/key-utils.js.map +1 -0
- package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
- package/dist/src/planner/validation/plan-validator.js +1 -0
- package/dist/src/planner/validation/plan-validator.js.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.d.ts +33 -0
- package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -0
- package/dist/src/runtime/deferred-constraint-queue.js +172 -0
- package/dist/src/runtime/deferred-constraint-queue.js.map +1 -0
- package/dist/src/runtime/emission-context.d.ts +9 -3
- package/dist/src/runtime/emission-context.d.ts.map +1 -1
- package/dist/src/runtime/emission-context.js +5 -1
- package/dist/src/runtime/emission-context.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 -4
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +3 -2
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/array-index.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +9 -2
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/cache.d.ts.map +1 -1
- package/dist/src/runtime/emit/cache.js +1 -1
- package/dist/src/runtime/emit/cache.js.map +1 -1
- package/dist/src/runtime/emit/cast.d.ts.map +1 -1
- package/dist/src/runtime/emit/cast.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +110 -23
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/create-assertion.d.ts +5 -0
- package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -0
- package/dist/src/runtime/emit/create-assertion.js +70 -0
- package/dist/src/runtime/emit/create-assertion.js.map +1 -0
- package/dist/src/runtime/emit/cte-reference.d.ts.map +1 -1
- package/dist/src/runtime/emit/cte-reference.js.map +1 -1
- package/dist/src/runtime/emit/cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/cte.js.map +1 -1
- package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
- package/dist/src/runtime/emit/distinct.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +17 -9
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-assertion.d.ts +5 -0
- package/dist/src/runtime/emit/drop-assertion.d.ts.map +1 -0
- package/dist/src/runtime/emit/drop-assertion.js +30 -0
- package/dist/src/runtime/emit/drop-assertion.js.map +1 -0
- package/dist/src/runtime/emit/filter.d.ts.map +1 -1
- package/dist/src/runtime/emit/filter.js.map +1 -1
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/limit-offset.d.ts.map +1 -1
- package/dist/src/runtime/emit/limit-offset.js.map +1 -1
- package/dist/src/runtime/emit/pragma.js.map +1 -1
- package/dist/src/runtime/emit/project.d.ts.map +1 -1
- package/dist/src/runtime/emit/project.js.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.js +1 -1
- package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
- package/dist/src/runtime/emit/remote-query.d.ts +9 -0
- package/dist/src/runtime/emit/remote-query.d.ts.map +1 -0
- package/dist/src/runtime/emit/remote-query.js +30 -0
- package/dist/src/runtime/emit/remote-query.js.map +1 -0
- package/dist/src/runtime/emit/retrieve.d.ts +5 -0
- package/dist/src/runtime/emit/retrieve.d.ts.map +1 -0
- package/dist/src/runtime/emit/retrieve.js +9 -0
- package/dist/src/runtime/emit/retrieve.js.map +1 -0
- package/dist/src/runtime/emit/returning.d.ts.map +1 -1
- package/dist/src/runtime/emit/returning.js +1 -1
- package/dist/src/runtime/emit/returning.js.map +1 -1
- package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
- package/dist/src/runtime/emit/scalar-function.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js +20 -5
- package/dist/src/runtime/emit/scan.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts +8 -0
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -0
- package/dist/src/runtime/emit/schema-declarative.js +163 -0
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -0
- package/dist/src/runtime/emit/sequencing.d.ts.map +1 -1
- package/dist/src/runtime/emit/sequencing.js.map +1 -1
- package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
- package/dist/src/runtime/emit/set-operation.js +6 -6
- package/dist/src/runtime/emit/set-operation.js.map +1 -1
- package/dist/src/runtime/emit/sort.d.ts.map +1 -1
- package/dist/src/runtime/emit/sort.js.map +1 -1
- package/dist/src/runtime/emit/subquery.d.ts +1 -1
- package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
- package/dist/src/runtime/emit/subquery.js +6 -6
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/transaction.d.ts.map +1 -1
- package/dist/src/runtime/emit/transaction.js +48 -8
- package/dist/src/runtime/emit/transaction.js.map +1 -1
- package/dist/src/runtime/emit/values.d.ts.map +1 -1
- package/dist/src/runtime/emit/values.js.map +1 -1
- package/dist/src/runtime/emit/window.d.ts.map +1 -1
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/emitters.d.ts.map +1 -1
- package/dist/src/runtime/emitters.js +1 -0
- package/dist/src/runtime/emitters.js.map +1 -1
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +16 -2
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/runtime/scheduler.js.map +1 -1
- package/dist/src/runtime/types.d.ts +2 -2
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js +4 -1
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/runtime/utils.d.ts +2 -2
- package/dist/src/runtime/utils.d.ts.map +1 -1
- package/dist/src/runtime/utils.js +1 -0
- package/dist/src/runtime/utils.js.map +1 -1
- package/dist/src/schema/assertion.d.ts +19 -0
- package/dist/src/schema/assertion.d.ts.map +1 -0
- package/dist/src/schema/assertion.js +2 -0
- package/dist/src/schema/assertion.js.map +1 -0
- package/dist/src/schema/catalog.d.ts +44 -0
- package/dist/src/schema/catalog.d.ts.map +1 -0
- package/dist/src/schema/catalog.js +148 -0
- package/dist/src/schema/catalog.js.map +1 -0
- package/dist/src/schema/change-events.d.ts +2 -2
- package/dist/src/schema/change-events.d.ts.map +1 -1
- package/dist/src/schema/column.d.ts +2 -0
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/declared-schema-manager.d.ts +42 -0
- package/dist/src/schema/declared-schema-manager.d.ts.map +1 -0
- package/dist/src/schema/declared-schema-manager.js +71 -0
- package/dist/src/schema/declared-schema-manager.js.map +1 -0
- package/dist/src/schema/function.d.ts +3 -2
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/manager.d.ts +8 -3
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +32 -3
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts +34 -0
- package/dist/src/schema/schema-differ.d.ts.map +1 -0
- package/dist/src/schema/schema-differ.js +157 -0
- package/dist/src/schema/schema-differ.js.map +1 -0
- package/dist/src/schema/schema-hasher.d.ts +10 -0
- package/dist/src/schema/schema-hasher.d.ts.map +1 -0
- package/dist/src/schema/schema-hasher.js +39 -0
- package/dist/src/schema/schema-hasher.js.map +1 -0
- package/dist/src/schema/schema.d.ts +7 -0
- package/dist/src/schema/schema.d.ts.map +1 -1
- package/dist/src/schema/schema.js +19 -0
- package/dist/src/schema/schema.js.map +1 -1
- package/dist/src/schema/table.d.ts +28 -3
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +17 -2
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/window-function.d.ts.map +1 -1
- package/dist/src/schema/window-function.js.map +1 -1
- package/dist/src/util/ast-stringify.d.ts.map +1 -1
- package/dist/src/util/ast-stringify.js +116 -3
- package/dist/src/util/ast-stringify.js.map +1 -1
- package/dist/src/util/environment.js.map +1 -1
- package/dist/src/util/plugin-loader.d.ts +25 -2
- package/dist/src/util/plugin-loader.d.ts.map +1 -1
- package/dist/src/util/plugin-loader.js +180 -2
- package/dist/src/util/plugin-loader.js.map +1 -1
- package/dist/src/util/row-descriptor.d.ts +1 -1
- package/dist/src/util/row-descriptor.d.ts.map +1 -1
- package/dist/src/util/row-descriptor.js.map +1 -1
- package/dist/src/util/serialization.d.ts +3 -0
- package/dist/src/util/serialization.d.ts.map +1 -1
- package/dist/src/util/serialization.js +1 -0
- package/dist/src/util/serialization.js.map +1 -1
- package/dist/src/vtab/best-access-plan.d.ts +1 -1
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js +1 -0
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/manifest.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +2 -0
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +2 -1
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +24 -6
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/safe-iterate.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/safe-iterate.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +5 -0
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts +2 -1
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +3 -2
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/memory/utils/logging.d.ts +2 -2
- package/dist/src/vtab/memory/utils/logging.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/logging.js +6 -3
- package/dist/src/vtab/memory/utils/logging.js.map +1 -1
- package/dist/src/vtab/module.d.ts +25 -0
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +17 -4
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +4 -2
- package/src/common/errors.ts +1 -1
- package/src/common/json-types.ts +16 -0
- package/src/common/types.ts +2 -0
- package/src/core/database-options.ts +8 -8
- package/src/core/database.ts +537 -71
- package/src/core/statement.ts +3 -1
- package/src/func/builtins/builtin-window-functions.ts +11 -10
- package/src/func/builtins/datetime.ts +42 -0
- package/src/func/builtins/explain.ts +186 -44
- package/src/func/builtins/index.ts +5 -2
- package/src/func/builtins/json-helpers.ts +21 -21
- package/src/func/builtins/json-tvf.ts +8 -9
- package/src/func/builtins/json.ts +10 -9
- package/src/func/builtins/schema.ts +24 -4
- package/src/func/context.ts +7 -0
- package/src/func/registration.ts +5 -1
- package/src/index.ts +2 -2
- package/src/parser/ast.ts +582 -481
- package/src/parser/lexer.ts +27 -21
- package/src/parser/parser.ts +3336 -2776
- package/src/parser/visitor.ts +1 -0
- package/src/planner/analysis/binding-collector.ts +83 -0
- package/src/planner/analysis/const-evaluator.ts +1 -1
- package/src/planner/analysis/const-pass.ts +3 -2
- package/src/planner/analysis/constraint-extractor.ts +610 -123
- package/src/planner/analysis/predicate-normalizer.ts +237 -0
- package/src/planner/building/alter-table.ts +3 -1
- package/src/planner/building/block.ts +93 -78
- package/src/planner/building/constraint-builder.ts +173 -114
- package/src/planner/building/create-assertion.ts +7 -0
- package/src/planner/building/declare-schema.ts +22 -0
- package/src/planner/building/delete.ts +214 -171
- package/src/planner/building/drop-assertion.ts +11 -0
- package/src/planner/building/expression.ts +1 -0
- package/src/planner/building/function-call.ts +6 -5
- package/src/planner/building/insert.ts +428 -349
- package/src/planner/building/pragma.ts +1 -0
- package/src/planner/building/schema-resolution.ts +176 -176
- package/src/planner/building/select-aggregates.ts +5 -3
- package/src/planner/building/select-compound.ts +22 -13
- package/src/planner/building/select-context.ts +6 -6
- package/src/planner/building/select-modifiers.ts +8 -7
- package/src/planner/building/select-projections.ts +177 -176
- package/src/planner/building/select-window.ts +259 -253
- package/src/planner/building/select.ts +531 -520
- package/src/planner/building/table-function.ts +49 -48
- package/src/planner/building/table.ts +9 -3
- package/src/planner/building/update.ts +319 -270
- package/src/planner/building/with.ts +7 -7
- package/src/planner/debug.ts +1 -0
- package/src/planner/framework/characteristics.ts +503 -0
- package/src/planner/framework/context.ts +23 -6
- package/src/planner/framework/pass.ts +354 -0
- package/src/planner/nodes/aggregate-node.ts +52 -7
- package/src/planner/nodes/array-index-node.ts +1 -1
- package/src/planner/nodes/cache-node.ts +11 -2
- package/src/planner/nodes/constraint-check-node.ts +14 -5
- package/src/planner/nodes/create-assertion-node.ts +51 -0
- package/src/planner/nodes/create-index-node.ts +2 -2
- package/src/planner/nodes/create-table-node.ts +2 -2
- package/src/planner/nodes/cte-node.ts +30 -4
- package/src/planner/nodes/cte-reference-node.ts +2 -2
- package/src/planner/nodes/declarative-schema.ts +221 -0
- package/src/planner/nodes/delete-node.ts +102 -96
- package/src/planner/nodes/distinct-node.ts +20 -6
- package/src/planner/nodes/dml-executor-node.ts +1 -1
- package/src/planner/nodes/drop-assertion-node.ts +50 -0
- package/src/planner/nodes/drop-table-node.ts +1 -0
- package/src/planner/nodes/filter.ts +56 -3
- package/src/planner/nodes/insert-node.ts +126 -120
- package/src/planner/nodes/internal-recursive-cte-ref-node.ts +5 -20
- package/src/planner/nodes/join-node.ts +122 -4
- package/src/planner/nodes/limit-offset.ts +132 -113
- package/src/planner/nodes/plan-node-type.ts +95 -87
- package/src/planner/nodes/plan-node.ts +8 -8
- package/src/planner/nodes/pragma.ts +6 -3
- package/src/planner/nodes/project-node.ts +101 -7
- package/src/planner/nodes/recursive-cte-node.ts +6 -6
- package/src/planner/nodes/reference.ts +334 -312
- package/src/planner/nodes/remote-query-node.ts +73 -0
- package/src/planner/nodes/retrieve-node.ts +86 -0
- package/src/planner/nodes/returning-node.ts +52 -10
- package/src/planner/nodes/sequencing-node.ts +2 -2
- package/src/planner/nodes/set-operation-node.ts +3 -3
- package/src/planner/nodes/sort.ts +33 -4
- package/src/planner/nodes/stream-aggregate.ts +5 -1
- package/src/planner/nodes/table-access-nodes.ts +31 -6
- package/src/planner/nodes/table-function-call.ts +134 -127
- package/src/planner/nodes/transaction-node.ts +2 -2
- package/src/planner/nodes/update-node.ts +138 -132
- package/src/planner/nodes/view-reference-node.ts +1 -1
- package/src/planner/nodes/window-function.ts +2 -2
- package/src/planner/nodes/window-node.ts +1 -1
- package/src/planner/optimizer-tuning.ts +18 -0
- package/src/planner/optimizer.ts +171 -96
- package/src/planner/planning-context.ts +10 -3
- package/src/planner/resolve.ts +10 -9
- package/src/planner/rules/README.md +96 -96
- package/src/planner/rules/access/rule-select-access-path.ts +384 -184
- package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +118 -104
- package/src/planner/rules/cache/rule-cte-optimization.ts +29 -16
- package/src/planner/rules/cache/rule-materialization-advisory.ts +14 -7
- package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +38 -44
- package/src/planner/rules/join/rule-join-greedy-commute.ts +48 -0
- package/src/planner/rules/join/rule-join-key-inference.ts +35 -0
- package/src/planner/rules/join/rule-quickpick-enumeration.ts +267 -0
- package/src/planner/rules/predicate/rule-predicate-pushdown.ts +144 -0
- package/src/planner/rules/retrieve/rule-grow-retrieve.ts +337 -0
- package/src/planner/scopes/registered.ts +8 -0
- package/src/planner/stats/index.ts +0 -65
- package/src/planner/util/key-utils.ts +46 -0
- package/src/planner/validation/plan-validator.ts +5 -3
- package/src/runtime/deferred-constraint-queue.ts +196 -0
- package/src/runtime/emission-context.ts +11 -5
- package/src/runtime/emit/add-constraint.ts +26 -5
- package/src/runtime/emit/aggregate.ts +9 -7
- package/src/runtime/emit/array-index.ts +2 -2
- package/src/runtime/emit/binary.ts +26 -8
- package/src/runtime/emit/cache.ts +2 -2
- package/src/runtime/emit/cast.ts +2 -2
- package/src/runtime/emit/constraint-check.ts +148 -26
- package/src/runtime/emit/create-assertion.ts +82 -0
- package/src/runtime/emit/cte-reference.ts +2 -2
- package/src/runtime/emit/cte.ts +2 -2
- package/src/runtime/emit/distinct.ts +2 -2
- package/src/runtime/emit/dml-executor.ts +20 -12
- package/src/runtime/emit/drop-assertion.ts +45 -0
- package/src/runtime/emit/filter.ts +4 -4
- package/src/runtime/emit/join.ts +8 -7
- package/src/runtime/emit/limit-offset.ts +2 -2
- package/src/runtime/emit/pragma.ts +2 -2
- package/src/runtime/emit/project.ts +2 -2
- package/src/runtime/emit/recursive-cte.ts +2 -2
- package/src/runtime/emit/remote-query.ts +47 -0
- package/src/runtime/emit/retrieve.ts +15 -0
- package/src/runtime/emit/returning.ts +4 -4
- package/src/runtime/emit/scalar-function.ts +2 -2
- package/src/runtime/emit/scan.ts +29 -13
- package/src/runtime/emit/schema-declarative.ts +205 -0
- package/src/runtime/emit/sequencing.ts +3 -3
- package/src/runtime/emit/set-operation.ts +7 -7
- package/src/runtime/emit/sort.ts +2 -2
- package/src/runtime/emit/subquery.ts +10 -10
- package/src/runtime/emit/transaction.ts +46 -8
- package/src/runtime/emit/values.ts +2 -2
- package/src/runtime/emit/window.ts +3 -3
- package/src/runtime/emitters.ts +1 -0
- package/src/runtime/register.ts +150 -135
- package/src/runtime/scheduler.ts +2 -2
- package/src/runtime/types.ts +10 -7
- package/src/runtime/utils.ts +3 -2
- package/src/schema/assertion.ts +21 -0
- package/src/schema/catalog.ts +208 -0
- package/src/schema/change-events.ts +2 -2
- package/src/schema/column.ts +2 -0
- package/src/schema/declared-schema-manager.ts +82 -0
- package/src/schema/function.ts +5 -2
- package/src/schema/manager.ts +742 -709
- package/src/schema/schema-differ.ts +214 -0
- package/src/schema/schema-hasher.ts +44 -0
- package/src/schema/schema.ts +23 -0
- package/src/schema/table.ts +398 -364
- package/src/schema/window-function.ts +2 -0
- package/src/util/ast-stringify.ts +869 -764
- package/src/util/environment.ts +2 -2
- package/src/util/plugin-loader.ts +232 -7
- package/src/util/row-descriptor.ts +1 -1
- package/src/util/serialization.ts +2 -0
- package/src/vtab/best-access-plan.ts +2 -1
- package/src/vtab/manifest.ts +1 -0
- package/src/vtab/memory/index.ts +178 -178
- package/src/vtab/memory/layer/base.ts +275 -273
- package/src/vtab/memory/layer/interface.ts +47 -47
- package/src/vtab/memory/layer/manager.ts +33 -11
- package/src/vtab/memory/layer/safe-iterate.ts +3 -3
- package/src/vtab/memory/layer/transaction.ts +229 -229
- package/src/vtab/memory/module.ts +24 -18
- package/src/vtab/memory/table.ts +256 -253
- package/src/vtab/memory/utils/logging.ts +6 -3
- package/src/vtab/module.ts +170 -140
- package/src/vtab/table.ts +162 -143
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Instruction, RuntimeContext } from '../types.js';
|
|
2
|
+
import type { EmissionContext } from '../emission-context.js';
|
|
3
|
+
import type { Row } from '../../common/types.js';
|
|
4
|
+
import { QuereusError } from '../../common/errors.js';
|
|
5
|
+
import { StatusCode } from '../../common/types.js';
|
|
6
|
+
import type { RemoteQueryNode } from '../../planner/nodes/remote-query-node.js';
|
|
7
|
+
import type { AnyVirtualTableModule } from '../../vtab/module.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Emitter for RemoteQueryNode.
|
|
11
|
+
* Calls the virtual table's xExecutePlan() method to execute the pushed-down pipeline.
|
|
12
|
+
*/
|
|
13
|
+
export function emitRemoteQuery(plan: RemoteQueryNode, _ctx: EmissionContext): Instruction {
|
|
14
|
+
async function* run(rctx: RuntimeContext): AsyncIterable<Row> {
|
|
15
|
+
// Retrieve virtual table connection via module context
|
|
16
|
+
const { tableRef, moduleCtx } = plan;
|
|
17
|
+
// Get the table instance - need to resolve this from the table reference
|
|
18
|
+
const tableSchema = tableRef.tableSchema;
|
|
19
|
+
const vtabModule = (moduleCtx as { vtabModule?: AnyVirtualTableModule } | undefined)?.vtabModule ?? tableRef.vtabModule;
|
|
20
|
+
|
|
21
|
+
// Connect to the table to get the instance
|
|
22
|
+
const table = vtabModule.xConnect(
|
|
23
|
+
rctx.db,
|
|
24
|
+
undefined, // pAux
|
|
25
|
+
tableSchema.vtabModuleName,
|
|
26
|
+
tableSchema.schemaName,
|
|
27
|
+
tableSchema.name,
|
|
28
|
+
{} // empty config for now
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
if (!table.xExecutePlan) {
|
|
32
|
+
throw new QuereusError(
|
|
33
|
+
`Virtual table module for '${tableSchema.name}' does not implement xExecutePlan() ` +
|
|
34
|
+
`despite indicating support via supports() method.`,
|
|
35
|
+
StatusCode.INTERNAL
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
yield* table.xExecutePlan(rctx.db, plan.source, plan.moduleCtx);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
params: [],
|
|
44
|
+
run,
|
|
45
|
+
note: `remoteQuery(${plan.tableRef.tableSchema.name})`
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RetrieveNode } from '../../planner/nodes/retrieve-node.js';
|
|
2
|
+
import type { Instruction } from '../types.js';
|
|
3
|
+
import type { EmissionContext } from '../emission-context.js';
|
|
4
|
+
import { QuereusError } from '../../common/errors.js';
|
|
5
|
+
import { StatusCode } from '../../common/types.js';
|
|
6
|
+
|
|
7
|
+
export function emitRetrieve(plan: RetrieveNode, _ctx: EmissionContext): Instruction {
|
|
8
|
+
// RetrieveNode should always be rewritten by the optimizer's access path selection rule
|
|
9
|
+
// If we reach this point, it means the optimizer failed to convert it to a physical node
|
|
10
|
+
throw new QuereusError(
|
|
11
|
+
`RetrieveNode for table '${plan.tableRef.tableSchema.name}' was not rewritten to a physical access node. ` +
|
|
12
|
+
`This indicates the virtual table module has no supported access method (neither supports() nor getBestAccessPlan()).`,
|
|
13
|
+
StatusCode.INTERNAL
|
|
14
|
+
);
|
|
15
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ReturningNode } from '../../planner/nodes/returning-node.js';
|
|
2
|
-
import type { Instruction, RuntimeContext } from '../types.js';
|
|
3
|
-
import type { Row } from '../../common/types.js';
|
|
2
|
+
import type { Instruction, RuntimeContext, InstructionRun } from '../types.js';
|
|
3
|
+
import type { Row, OutputValue } from '../../common/types.js';
|
|
4
4
|
import type { EmissionContext } from '../emission-context.js';
|
|
5
5
|
import { emitPlanNode, emitCallFromPlan } from '../emitters.js';
|
|
6
6
|
import { buildRowDescriptor } from '../../util/row-descriptor.js';
|
|
@@ -19,7 +19,7 @@ export function emitReturning(plan: ReturningNode, ctx: EmissionContext): Instru
|
|
|
19
19
|
async function* run(
|
|
20
20
|
rctx: RuntimeContext,
|
|
21
21
|
executorRows: AsyncIterable<Row>,
|
|
22
|
-
...projectionCallbacks: Array<(ctx: RuntimeContext) =>
|
|
22
|
+
...projectionCallbacks: Array<(ctx: RuntimeContext) => OutputValue>
|
|
23
23
|
): AsyncIterable<Row> {
|
|
24
24
|
// Project the results from the executor rows
|
|
25
25
|
yield* withRowContextGenerator(rctx, sourceRowDescriptor, executorRows, async function* (_sourceRow) {
|
|
@@ -35,7 +35,7 @@ export function emitReturning(plan: ReturningNode, ctx: EmissionContext): Instru
|
|
|
35
35
|
|
|
36
36
|
return {
|
|
37
37
|
params: [executorInstruction, ...projectionEvaluators],
|
|
38
|
-
run,
|
|
38
|
+
run: run as InstructionRun,
|
|
39
39
|
note: `returning(${plan.projections.length} cols)`
|
|
40
40
|
};
|
|
41
41
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ScalarFunctionCallNode } from '../../planner/nodes/function.js';
|
|
2
|
-
import type { Instruction, RuntimeContext } from '../types.js';
|
|
2
|
+
import type { Instruction, RuntimeContext, InstructionRun } from '../types.js';
|
|
3
3
|
import { emitPlanNode, createValidatedInstruction } from '../emitters.js';
|
|
4
4
|
import { QuereusError } from '../../common/errors.js';
|
|
5
5
|
import { StatusCode, type SqlValue, type OutputValue } from '../../common/types.js';
|
|
@@ -36,7 +36,7 @@ export function emitScalarFunctionCall(plan: ScalarFunctionCallNode, ctx: Emissi
|
|
|
36
36
|
|
|
37
37
|
return createValidatedInstruction(
|
|
38
38
|
[...operandExprs],
|
|
39
|
-
run as
|
|
39
|
+
run as InstructionRun,
|
|
40
40
|
ctx,
|
|
41
41
|
`${plan.expression.name}(${plan.operands.length})`
|
|
42
42
|
);
|
package/src/runtime/emit/scan.ts
CHANGED
|
@@ -2,10 +2,10 @@ import { StatusCode, type Row } from "../../common/types.js";
|
|
|
2
2
|
import { SeqScanNode, IndexScanNode, IndexSeekNode } from "../../planner/nodes/table-access-nodes.js";
|
|
3
3
|
import { QuereusError } from "../../common/errors.js";
|
|
4
4
|
import type { VirtualTable } from "../../vtab/table.js";
|
|
5
|
-
import type { BaseModuleConfig } from "../../vtab/module.js";
|
|
5
|
+
import type { BaseModuleConfig, AnyVirtualTableModule } from "../../vtab/module.js";
|
|
6
6
|
import type { Instruction, RuntimeContext } from "../types.js";
|
|
7
7
|
import type { EmissionContext } from "../emission-context.js";
|
|
8
|
-
import { createValidatedInstruction } from "../emitters.js";
|
|
8
|
+
import { createValidatedInstruction, emitPlanNode } from "../emitters.js";
|
|
9
9
|
import { disconnectVTable } from "../utils.js";
|
|
10
10
|
import { buildRowDescriptor } from "../../util/row-descriptor.js";
|
|
11
11
|
import { createRowSlot } from "../context-helpers.js";
|
|
@@ -30,9 +30,9 @@ export function emitSeqScan(plan: SeqScanNode | IndexScanNode | IndexSeekNode, c
|
|
|
30
30
|
// Capture the module info key for runtime retrieval
|
|
31
31
|
const moduleKey = `vtab_module:${schema.vtabModuleName}`;
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
async function* run(runtimeCtx: RuntimeContext, ...dynamicArgs: any[]): AsyncIterable<Row> {
|
|
34
34
|
// Use the captured module info instead of doing a fresh lookup
|
|
35
|
-
const capturedModuleInfo = ctx.getCapturedSchemaObject<{ module:
|
|
35
|
+
const capturedModuleInfo = ctx.getCapturedSchemaObject<{ module: AnyVirtualTableModule, auxData?: unknown }>(moduleKey);
|
|
36
36
|
if (!capturedModuleInfo) {
|
|
37
37
|
throw new QuereusError(`Virtual table module '${schema.vtabModuleName}' was not captured during emission`, StatusCode.INTERNAL);
|
|
38
38
|
}
|
|
@@ -43,8 +43,8 @@ export function emitSeqScan(plan: SeqScanNode | IndexScanNode | IndexSeekNode, c
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
let vtabInstance: VirtualTable;
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
try {
|
|
47
|
+
const options: BaseModuleConfig = (schema.vtabArgs ?? {}) as BaseModuleConfig;
|
|
48
48
|
vtabInstance = module.xConnect(
|
|
49
49
|
runtimeCtx.db,
|
|
50
50
|
capturedModuleInfo.auxData,
|
|
@@ -66,7 +66,15 @@ export function emitSeqScan(plan: SeqScanNode | IndexScanNode | IndexSeekNode, c
|
|
|
66
66
|
|
|
67
67
|
const rowSlot = createRowSlot(runtimeCtx, rowDescriptor);
|
|
68
68
|
try {
|
|
69
|
-
|
|
69
|
+
// If this is an IndexSeek with dynamic seek keys, populate args from params
|
|
70
|
+
const effectiveFilterInfo = (() => {
|
|
71
|
+
if (plan instanceof IndexSeekNode && dynamicArgs && dynamicArgs.length > 0) {
|
|
72
|
+
return { ...plan.filterInfo, args: dynamicArgs };
|
|
73
|
+
}
|
|
74
|
+
return plan.filterInfo;
|
|
75
|
+
})();
|
|
76
|
+
|
|
77
|
+
const asyncRowIterable = vtabInstance.xQuery(effectiveFilterInfo);
|
|
70
78
|
for await (const row of asyncRowIterable) {
|
|
71
79
|
rowSlot.set(row);
|
|
72
80
|
yield row;
|
|
@@ -81,10 +89,18 @@ export function emitSeqScan(plan: SeqScanNode | IndexScanNode | IndexSeekNode, c
|
|
|
81
89
|
}
|
|
82
90
|
}
|
|
83
91
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
92
|
+
// Emit parameter instructions for dynamic seek keys (IndexSeek only)
|
|
93
|
+
const params: Instruction[] = [];
|
|
94
|
+
if (plan instanceof IndexSeekNode) {
|
|
95
|
+
for (const key of plan.getSeekKeys()) {
|
|
96
|
+
params.push(emitPlanNode(key, ctx));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return createValidatedInstruction(
|
|
101
|
+
params,
|
|
102
|
+
run,
|
|
103
|
+
ctx,
|
|
104
|
+
`${plan.nodeType}(${schema.name})`
|
|
105
|
+
);
|
|
90
106
|
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import type { EmissionContext } from '../emission-context.js';
|
|
2
|
+
import type { Instruction, RuntimeContext, InstructionRun } from '../types.js';
|
|
3
|
+
import { createLogger } from '../../common/logger.js';
|
|
4
|
+
import { StatusCode, type Row, type SqlValue } from '../../common/types.js';
|
|
5
|
+
import { QuereusError } from '../../common/errors.js';
|
|
6
|
+
import { collectSchemaCatalog } from '../../schema/catalog.js';
|
|
7
|
+
import { computeSchemaDiff, generateMigrationDDL } from '../../schema/schema-differ.js';
|
|
8
|
+
import { computeShortSchemaHash } from '../../schema/schema-hasher.js';
|
|
9
|
+
import type * as AST from '../../parser/ast.js';
|
|
10
|
+
import type { PlanNode } from '../../planner/nodes/plan-node.js';
|
|
11
|
+
|
|
12
|
+
const log = createLogger('runtime:emit:declare');
|
|
13
|
+
|
|
14
|
+
export function emitDeclareSchema(plan: PlanNode, _ctx: EmissionContext): Instruction {
|
|
15
|
+
const declareStmt = (plan as unknown as { statementAst: AST.DeclareSchemaStmt }).statementAst;
|
|
16
|
+
|
|
17
|
+
const run = (rctx: RuntimeContext): Row => {
|
|
18
|
+
const schemaName = declareStmt.schemaName || 'main';
|
|
19
|
+
log('DECLARE SCHEMA %s', schemaName);
|
|
20
|
+
|
|
21
|
+
// Clear previous declaration and seed data for this schema
|
|
22
|
+
rctx.db.declaredSchemaManager.clearSeedData(schemaName);
|
|
23
|
+
|
|
24
|
+
// Store the declared schema
|
|
25
|
+
rctx.db.declaredSchemaManager.setDeclaredSchema(schemaName, declareStmt);
|
|
26
|
+
|
|
27
|
+
// Process seed data if present
|
|
28
|
+
for (const item of declareStmt.items) {
|
|
29
|
+
if (item.type === 'declaredSeed' && item.seedData) {
|
|
30
|
+
const tableName = item.tableName;
|
|
31
|
+
const rows = Array.from(item.seedData) as Array<SqlValue[]>;
|
|
32
|
+
rctx.db.declaredSchemaManager.setSeedData(schemaName, tableName, rows);
|
|
33
|
+
log('Stored seed data for %s.%s (%d rows)', schemaName, tableName, rows.length);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Return empty row to satisfy type system (void result)
|
|
38
|
+
return [];
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
params: [],
|
|
43
|
+
run: run as InstructionRun,
|
|
44
|
+
note: `declare schema ${declareStmt.schemaName || 'main'}`
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function emitDiffSchema(plan: PlanNode, _ctx: EmissionContext): Instruction {
|
|
49
|
+
const diffStmt = (plan as unknown as { statementAst: AST.DiffSchemaStmt }).statementAst;
|
|
50
|
+
|
|
51
|
+
const run = async function* (rctx: RuntimeContext): AsyncIterable<Row> {
|
|
52
|
+
const schemaName = diffStmt.schemaName || 'main';
|
|
53
|
+
log('DIFF SCHEMA %s', schemaName);
|
|
54
|
+
|
|
55
|
+
// Get declared schema
|
|
56
|
+
const declaredSchema = rctx.db.declaredSchemaManager.getDeclaredSchema(schemaName);
|
|
57
|
+
if (!declaredSchema) {
|
|
58
|
+
throw new QuereusError(`No declared schema found for '${schemaName}'`, StatusCode.ERROR);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Collect actual catalog
|
|
62
|
+
const actualCatalog = collectSchemaCatalog(rctx.db, schemaName);
|
|
63
|
+
|
|
64
|
+
// Compute diff
|
|
65
|
+
const diff = computeSchemaDiff(declaredSchema, actualCatalog);
|
|
66
|
+
|
|
67
|
+
// Generate migration DDL statements
|
|
68
|
+
const migrationStatements = generateMigrationDDL(diff, schemaName);
|
|
69
|
+
|
|
70
|
+
// Return each DDL statement as a row
|
|
71
|
+
// This allows users to fetch the DDL and execute it themselves with custom logic
|
|
72
|
+
for (const ddl of migrationStatements) {
|
|
73
|
+
yield [ddl];
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
params: [],
|
|
79
|
+
run: run as InstructionRun,
|
|
80
|
+
note: `diff schema ${diffStmt.schemaName || 'main'}`
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function emitApplySchema(plan: PlanNode, _ctx: EmissionContext): Instruction {
|
|
85
|
+
const applyStmt = (plan as unknown as { statementAst: AST.ApplySchemaStmt }).statementAst;
|
|
86
|
+
|
|
87
|
+
const run = async (rctx: RuntimeContext): Promise<Row> => {
|
|
88
|
+
const schemaName = applyStmt.schemaName || 'main';
|
|
89
|
+
log('APPLY SCHEMA %s', schemaName);
|
|
90
|
+
|
|
91
|
+
// Get declared schema
|
|
92
|
+
const declaredSchema = rctx.db.declaredSchemaManager.getDeclaredSchema(schemaName);
|
|
93
|
+
if (!declaredSchema) {
|
|
94
|
+
throw new QuereusError(`No declared schema found for '${schemaName}'`, StatusCode.ERROR);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Ensure the target schema exists (create if it doesn't, except for main/temp)
|
|
98
|
+
const lowerSchemaName = schemaName.toLowerCase();
|
|
99
|
+
if (lowerSchemaName !== 'main' && lowerSchemaName !== 'temp') {
|
|
100
|
+
if (!rctx.db.schemaManager.getSchema(schemaName)) {
|
|
101
|
+
rctx.db.schemaManager.addSchema(schemaName);
|
|
102
|
+
log('Created schema: %s', schemaName);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Collect actual catalog
|
|
107
|
+
const actualCatalog = collectSchemaCatalog(rctx.db, schemaName);
|
|
108
|
+
|
|
109
|
+
// Compute diff
|
|
110
|
+
const diff = computeSchemaDiff(declaredSchema, actualCatalog);
|
|
111
|
+
|
|
112
|
+
// Generate migration DDL
|
|
113
|
+
const migrationStatements = generateMigrationDDL(diff, schemaName);
|
|
114
|
+
|
|
115
|
+
// Execute each migration statement
|
|
116
|
+
for (const ddl of migrationStatements) {
|
|
117
|
+
log('Executing migration DDL: %s', ddl);
|
|
118
|
+
try {
|
|
119
|
+
await rctx.db.exec(ddl);
|
|
120
|
+
} catch (e) {
|
|
121
|
+
log('Migration failed for DDL: %s', ddl);
|
|
122
|
+
throw e;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Apply seed data if requested
|
|
127
|
+
if (applyStmt.withSeed) {
|
|
128
|
+
const allSeedData = rctx.db.declaredSchemaManager.getAllSeedData(schemaName);
|
|
129
|
+
log('Seed data available for %d tables', allSeedData.size);
|
|
130
|
+
for (const [tableName, rows] of allSeedData) {
|
|
131
|
+
log('Applying seed data to %s.%s (%d rows)', schemaName, tableName, rows.length);
|
|
132
|
+
|
|
133
|
+
// Qualify table name with schema if not main
|
|
134
|
+
const qualifiedTableName = (schemaName && schemaName.toLowerCase() !== 'main')
|
|
135
|
+
? `${schemaName}.${tableName}`
|
|
136
|
+
: tableName;
|
|
137
|
+
|
|
138
|
+
// Delete existing rows, then insert seed rows in one batch
|
|
139
|
+
const deleteAndInsertSql = [
|
|
140
|
+
`DELETE FROM ${qualifiedTableName}`,
|
|
141
|
+
...rows.map(row => {
|
|
142
|
+
const values = row.map(v =>
|
|
143
|
+
v === null ? 'NULL' :
|
|
144
|
+
typeof v === 'string' ? `'${v.replace(/'/g, "''")}'` :
|
|
145
|
+
typeof v === 'number' || typeof v === 'bigint' ? String(v) :
|
|
146
|
+
'NULL'
|
|
147
|
+
).join(', ');
|
|
148
|
+
return `INSERT INTO ${qualifiedTableName} VALUES (${values})`;
|
|
149
|
+
})
|
|
150
|
+
].join('; ');
|
|
151
|
+
|
|
152
|
+
log('Executing seed SQL (length=%d): %s', deleteAndInsertSql.length, deleteAndInsertSql);
|
|
153
|
+
try {
|
|
154
|
+
await rctx.db.exec(deleteAndInsertSql);
|
|
155
|
+
log('Seed application succeeded for table %s', tableName);
|
|
156
|
+
} catch (e) {
|
|
157
|
+
log('Seed application failed for table %s: %O', tableName, e);
|
|
158
|
+
throw e;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Return empty row to satisfy type system (void result)
|
|
164
|
+
return [];
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
return {
|
|
168
|
+
params: [],
|
|
169
|
+
run: run as InstructionRun,
|
|
170
|
+
note: `apply schema ${applyStmt.schemaName || 'main'}${applyStmt.withSeed ? ' with seed' : ''}`
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export function emitExplainSchema(plan: PlanNode, _ctx: EmissionContext): Instruction {
|
|
175
|
+
const explainStmt = (plan as unknown as { statementAst: AST.ExplainSchemaStmt }).statementAst;
|
|
176
|
+
|
|
177
|
+
const run = async function* (rctx: RuntimeContext): AsyncIterable<Row> {
|
|
178
|
+
const schemaName = explainStmt.schemaName || 'main';
|
|
179
|
+
log('EXPLAIN SCHEMA %s', schemaName);
|
|
180
|
+
|
|
181
|
+
// Get declared schema
|
|
182
|
+
const declaredSchema = rctx.db.declaredSchemaManager.getDeclaredSchema(schemaName);
|
|
183
|
+
if (!declaredSchema) {
|
|
184
|
+
throw new QuereusError(`No declared schema found for '${schemaName}'`, StatusCode.ERROR);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Compute hash
|
|
188
|
+
const hash = await computeShortSchemaHash(declaredSchema);
|
|
189
|
+
|
|
190
|
+
// Return hash with version if specified
|
|
191
|
+
const result = explainStmt.version
|
|
192
|
+
? `version:${explainStmt.version},hash:${hash}`
|
|
193
|
+
: `hash:${hash}`;
|
|
194
|
+
|
|
195
|
+
yield [result];
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
return {
|
|
199
|
+
params: [],
|
|
200
|
+
run: run as InstructionRun,
|
|
201
|
+
note: `explain schema ${explainStmt.schemaName || 'main'}`
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SequencingNode } from '../../planner/nodes/sequencing-node.js';
|
|
2
|
-
import type { Instruction, RuntimeContext } from '../types.js';
|
|
2
|
+
import type { Instruction, RuntimeContext, InstructionRun } from '../types.js';
|
|
3
3
|
import { emitPlanNode } from '../emitters.js';
|
|
4
|
-
import {
|
|
4
|
+
import type { Row } from '../../common/types.js';
|
|
5
5
|
import type { EmissionContext } from '../emission-context.js';
|
|
6
6
|
|
|
7
7
|
export function emitSequencing(plan: SequencingNode, ctx: EmissionContext): Instruction {
|
|
@@ -18,7 +18,7 @@ export function emitSequencing(plan: SequencingNode, ctx: EmissionContext): Inst
|
|
|
18
18
|
|
|
19
19
|
return {
|
|
20
20
|
params: [sourceInstruction],
|
|
21
|
-
run: run as
|
|
21
|
+
run: run as InstructionRun,
|
|
22
22
|
note: `sequencing(${plan.sequenceColumnName})`
|
|
23
23
|
};
|
|
24
24
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SetOperationNode } from '../../planner/nodes/set-operation-node.js';
|
|
2
|
-
import type { Instruction, RuntimeContext } from '../types.js';
|
|
2
|
+
import type { Instruction, RuntimeContext, InstructionRun } from '../types.js';
|
|
3
3
|
import type { EmissionContext } from '../emission-context.js';
|
|
4
4
|
import { emitPlanNode } from '../emitters.js';
|
|
5
5
|
import type { Row } from '../../common/types.js';
|
|
@@ -87,25 +87,25 @@ export function emitSetOperation(plan: SetOperationNode, ctx: EmissionContext):
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
let
|
|
90
|
+
let run: InstructionRun;
|
|
91
91
|
switch (plan.op) {
|
|
92
92
|
case 'unionAll':
|
|
93
|
-
|
|
93
|
+
run = runUnionAll as InstructionRun;
|
|
94
94
|
break;
|
|
95
95
|
case 'union':
|
|
96
|
-
|
|
96
|
+
run = runUnionDistinct as InstructionRun;
|
|
97
97
|
break;
|
|
98
98
|
case 'intersect':
|
|
99
|
-
|
|
99
|
+
run = runIntersect as InstructionRun;
|
|
100
100
|
break;
|
|
101
101
|
case 'except':
|
|
102
|
-
|
|
102
|
+
run = runExcept as InstructionRun;
|
|
103
103
|
break;
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
return {
|
|
107
107
|
params: [leftInst, rightInst],
|
|
108
|
-
run
|
|
108
|
+
run,
|
|
109
109
|
note: plan.op
|
|
110
110
|
};
|
|
111
111
|
}
|
package/src/runtime/emit/sort.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SortNode } from '../../planner/nodes/sort.js';
|
|
2
|
-
import type { Instruction, RuntimeContext } from '../types.js';
|
|
2
|
+
import type { Instruction, RuntimeContext, InstructionRun } from '../types.js';
|
|
3
3
|
import { emitPlanNode, emitCallFromPlan } from '../emitters.js';
|
|
4
4
|
import { type SqlValue, type Row, type MaybePromise } from '../../common/types.js';
|
|
5
5
|
import type { EmissionContext } from '../emission-context.js';
|
|
@@ -69,7 +69,7 @@ export function emitSort(plan: SortNode, ctx: EmissionContext): Instruction {
|
|
|
69
69
|
|
|
70
70
|
return {
|
|
71
71
|
params: [sourceInstruction, ...sortKeyInstructions],
|
|
72
|
-
run: run as
|
|
72
|
+
run: run as InstructionRun,
|
|
73
73
|
note: `sort(${plan.sortKeys.length} keys)`
|
|
74
74
|
};
|
|
75
75
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
+
import type { InNode, ExistsNode, ScalarSubqueryNode } from '../../planner/nodes/subquery.js';
|
|
1
2
|
import type { Instruction, InstructionRun, RuntimeContext } from '../types.js';
|
|
2
|
-
import type { InNode, ScalarSubqueryNode, ExistsNode } from '../../planner/nodes/subquery.js';
|
|
3
3
|
import { emitPlanNode } from '../emitters.js';
|
|
4
4
|
import type { SqlValue, Row } from '../../common/types.js';
|
|
5
|
-
import { compareSqlValuesFast, resolveCollation } from '../../util/comparison.js';
|
|
6
5
|
import type { EmissionContext } from '../emission-context.js';
|
|
7
6
|
import { QuereusError } from '../../common/errors.js';
|
|
8
7
|
import { StatusCode } from '../../common/types.js';
|
|
9
8
|
import { BTree } from 'inheritree';
|
|
9
|
+
import { compareSqlValuesFast, resolveCollation } from '../../util/comparison.js';
|
|
10
10
|
import { ConstantNode } from '../../planner/nodes/plan-node.js';
|
|
11
11
|
|
|
12
12
|
export function emitScalarSubquery(plan: ScalarSubqueryNode, ctx: EmissionContext): Instruction {
|
|
13
13
|
|
|
14
|
-
async function run(
|
|
14
|
+
async function run(_rctx: RuntimeContext, input: AsyncIterable<Row>): Promise<SqlValue> {
|
|
15
15
|
let result: SqlValue = null;
|
|
16
16
|
let seen = false;
|
|
17
17
|
|
|
@@ -33,7 +33,7 @@ export function emitScalarSubquery(plan: ScalarSubqueryNode, ctx: EmissionContex
|
|
|
33
33
|
|
|
34
34
|
return {
|
|
35
35
|
params: [innerInstruction],
|
|
36
|
-
run,
|
|
36
|
+
run: run as InstructionRun,
|
|
37
37
|
note: 'SCALAR_SUBQUERY'
|
|
38
38
|
};
|
|
39
39
|
}
|
|
@@ -77,7 +77,7 @@ export function emitIn(plan: InNode, ctx: EmissionContext): Instruction {
|
|
|
77
77
|
|
|
78
78
|
return {
|
|
79
79
|
params: [sourceInstruction, conditionExpr],
|
|
80
|
-
run: runSubqueryStreaming as
|
|
80
|
+
run: runSubqueryStreaming as InstructionRun,
|
|
81
81
|
note: `IN (subquery)`
|
|
82
82
|
};
|
|
83
83
|
} else if (plan.values) {
|
|
@@ -116,7 +116,7 @@ export function emitIn(plan: InNode, ctx: EmissionContext): Instruction {
|
|
|
116
116
|
|
|
117
117
|
if (values.some(val => val instanceof Promise)) {
|
|
118
118
|
// Must resolve promises at runtime
|
|
119
|
-
runFunc = async (rctx: RuntimeContext, condition: SqlValue): Promise<SqlValue> => {
|
|
119
|
+
runFunc = (async (rctx: RuntimeContext, condition: SqlValue): Promise<SqlValue> => {
|
|
120
120
|
const resolved = await Promise.all(values);
|
|
121
121
|
|
|
122
122
|
for (const value of resolved) {
|
|
@@ -128,7 +128,7 @@ export function emitIn(plan: InNode, ctx: EmissionContext): Instruction {
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
return innerConstantRun(rctx, condition);
|
|
131
|
-
}
|
|
131
|
+
}) as InstructionRun;
|
|
132
132
|
} else {
|
|
133
133
|
for (const value of values) {
|
|
134
134
|
if (value === null) {
|
|
@@ -137,7 +137,7 @@ export function emitIn(plan: InNode, ctx: EmissionContext): Instruction {
|
|
|
137
137
|
}
|
|
138
138
|
tree.insert(value as SqlValue);
|
|
139
139
|
}
|
|
140
|
-
|
|
140
|
+
runFunc = innerConstantRun as InstructionRun;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
const conditionExpr = emitPlanNode(plan.condition, ctx);
|
|
@@ -176,7 +176,7 @@ export function emitIn(plan: InNode, ctx: EmissionContext): Instruction {
|
|
|
176
176
|
|
|
177
177
|
return {
|
|
178
178
|
params: [conditionExpr, ...valueExprs],
|
|
179
|
-
run: runDynamicValues as
|
|
179
|
+
run: runDynamicValues as InstructionRun,
|
|
180
180
|
note: `IN (${plan.values.length} dynamic values)`
|
|
181
181
|
};
|
|
182
182
|
}
|
|
@@ -197,7 +197,7 @@ export function emitExists(plan: ExistsNode, ctx: EmissionContext): Instruction
|
|
|
197
197
|
|
|
198
198
|
return {
|
|
199
199
|
params: [innerInstruction],
|
|
200
|
-
run,
|
|
200
|
+
run: run as InstructionRun,
|
|
201
201
|
note: 'EXISTS'
|
|
202
202
|
};
|
|
203
203
|
}
|
|
@@ -39,6 +39,10 @@ export function emitTransaction(plan: TransactionNode, _ctx: EmissionContext): I
|
|
|
39
39
|
throw error;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
+
// Reflect explicit transaction state in Database
|
|
43
|
+
rctx.db.markExplicitTransactionStart();
|
|
44
|
+
// Reset any prior change tracking at the start of an explicit transaction
|
|
45
|
+
rctx.db._clearChangeLog();
|
|
42
46
|
return null;
|
|
43
47
|
};
|
|
44
48
|
note = `BEGIN ${plan.mode || 'DEFERRED'}`;
|
|
@@ -46,17 +50,40 @@ export function emitTransaction(plan: TransactionNode, _ctx: EmissionContext): I
|
|
|
46
50
|
}
|
|
47
51
|
case 'commit': {
|
|
48
52
|
run = async (rctx: RuntimeContext) => {
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
// Snapshot connections before evaluating deferred constraints
|
|
54
|
+
// (constraint evaluation may open additional connections that shouldn't be committed)
|
|
55
|
+
const connectionsToCommit = rctx.db.getAllConnections();
|
|
56
|
+
log(`COMMIT: Found ${connectionsToCommit.length} active connections`);
|
|
51
57
|
|
|
52
|
-
|
|
58
|
+
try {
|
|
59
|
+
// Evaluate global assertions and deferred row-level constraints BEFORE committing connections.
|
|
60
|
+
await rctx.db.runGlobalAssertions();
|
|
61
|
+
await rctx.db.runDeferredRowConstraints();
|
|
62
|
+
|
|
63
|
+
// Mark coordinated commit to relax layer validation for sibling layers
|
|
64
|
+
rctx.db._beginCoordinatedCommit();
|
|
53
65
|
try {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
66
|
+
// Commit sequentially to avoid race conditions with layer promotion
|
|
67
|
+
for (const connection of connectionsToCommit) {
|
|
68
|
+
try {
|
|
69
|
+
await connection.commit();
|
|
70
|
+
log(`COMMIT: Successfully called on connection ${connection.connectionId}`);
|
|
71
|
+
} catch (error) {
|
|
72
|
+
log(`COMMIT: Error on connection ${connection.connectionId}: %O`, error);
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
} finally {
|
|
77
|
+
rctx.db._endCoordinatedCommit();
|
|
59
78
|
}
|
|
79
|
+
} catch (e) {
|
|
80
|
+
// If assertions fail (or a commit throws), rollback all connections
|
|
81
|
+
await Promise.allSettled(rctx.db.getAllConnections().map(c => c.rollback()));
|
|
82
|
+
throw e;
|
|
83
|
+
} finally {
|
|
84
|
+
// Always mark end of explicit transaction and clear change tracking
|
|
85
|
+
rctx.db.markExplicitTransactionEnd();
|
|
86
|
+
rctx.db._clearChangeLog();
|
|
60
87
|
}
|
|
61
88
|
return null;
|
|
62
89
|
};
|
|
@@ -80,6 +107,8 @@ export function emitTransaction(plan: TransactionNode, _ctx: EmissionContext): I
|
|
|
80
107
|
throw error;
|
|
81
108
|
}
|
|
82
109
|
}
|
|
110
|
+
// Discard top change layer
|
|
111
|
+
rctx.db._rollbackSavepointLayer();
|
|
83
112
|
return null;
|
|
84
113
|
};
|
|
85
114
|
note = `ROLLBACK TO SAVEPOINT ${plan.savepoint}`;
|
|
@@ -97,6 +126,9 @@ export function emitTransaction(plan: TransactionNode, _ctx: EmissionContext): I
|
|
|
97
126
|
throw error;
|
|
98
127
|
}
|
|
99
128
|
}
|
|
129
|
+
// Reflect explicit transaction end and clear change tracking
|
|
130
|
+
rctx.db.markExplicitTransactionEnd();
|
|
131
|
+
rctx.db._clearChangeLog();
|
|
100
132
|
return null;
|
|
101
133
|
};
|
|
102
134
|
note = 'ROLLBACK';
|
|
@@ -122,6 +154,10 @@ export function emitTransaction(plan: TransactionNode, _ctx: EmissionContext): I
|
|
|
122
154
|
throw error;
|
|
123
155
|
}
|
|
124
156
|
}
|
|
157
|
+
// Mark database as in explicit transaction (savepoints require explicit transaction context)
|
|
158
|
+
rctx.db.markExplicitTransactionStart();
|
|
159
|
+
// Track change layer
|
|
160
|
+
rctx.db._beginSavepointLayer();
|
|
125
161
|
return null;
|
|
126
162
|
};
|
|
127
163
|
note = `SAVEPOINT ${plan.savepoint}`;
|
|
@@ -146,6 +182,8 @@ export function emitTransaction(plan: TransactionNode, _ctx: EmissionContext): I
|
|
|
146
182
|
throw error;
|
|
147
183
|
}
|
|
148
184
|
}
|
|
185
|
+
// Merge top change layer into below
|
|
186
|
+
rctx.db._releaseSavepointLayer();
|
|
149
187
|
return null;
|
|
150
188
|
};
|
|
151
189
|
note = `RELEASE SAVEPOINT ${plan.savepoint}`;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ValuesNode } from '../../planner/nodes/values-node.js';
|
|
2
2
|
import type { SingleRowNode } from '../../planner/nodes/single-row.js';
|
|
3
3
|
import type { TableLiteralNode } from '../../planner/nodes/values-node.js';
|
|
4
|
-
import type { Instruction, RuntimeContext } from '../types.js';
|
|
4
|
+
import type { Instruction, RuntimeContext, InstructionRun } from '../types.js';
|
|
5
5
|
import { emitPlanNode } from '../emitters.js';
|
|
6
6
|
import { type SqlValue, type Row, StatusCode } from '../../common/types.js';
|
|
7
7
|
import { QuereusError } from '../../common/errors.js';
|
|
@@ -39,7 +39,7 @@ export function emitValues(plan: ValuesNode, ctx: EmissionContext): Instruction
|
|
|
39
39
|
|
|
40
40
|
return {
|
|
41
41
|
params: rowExprs,
|
|
42
|
-
run: run as
|
|
42
|
+
run: run as InstructionRun,
|
|
43
43
|
note: `values(${plan.rows.length} rows, ${plan.rows[0]?.length || 0} cols)`
|
|
44
44
|
};
|
|
45
45
|
}
|