@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
package/src/core/statement.ts
CHANGED
|
@@ -106,6 +106,7 @@ export class Statement {
|
|
|
106
106
|
try {
|
|
107
107
|
const currentAst = this.getAstStatement();
|
|
108
108
|
const planResult = this.db._buildPlan([currentAst], this.boundArgs);
|
|
109
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
109
110
|
const dependencies = (planResult as any).schemaDependencies; // Extract dependencies from planning context
|
|
110
111
|
plan = this.db.optimizer.optimize(planResult, this.db) as BlockNode;
|
|
111
112
|
|
|
@@ -241,7 +242,7 @@ export class Statement {
|
|
|
241
242
|
context: new Map(),
|
|
242
243
|
tableContexts: new Map(),
|
|
243
244
|
tracer: this.db.getInstructionTracer(),
|
|
244
|
-
enableMetrics: this.db.getOption('runtime_metrics'),
|
|
245
|
+
enableMetrics: Boolean(this.db.getOption('runtime_metrics')),
|
|
245
246
|
};
|
|
246
247
|
|
|
247
248
|
const results = await scheduler.run(runtimeCtx);
|
|
@@ -255,6 +256,7 @@ export class Statement {
|
|
|
255
256
|
yield* results as AsyncIterable<Row>;
|
|
256
257
|
}
|
|
257
258
|
}
|
|
259
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
258
260
|
} catch (e: any) {
|
|
259
261
|
errorLog('Runtime execution failed in iterateRows for current statement: %O', e);
|
|
260
262
|
if (e instanceof QuereusError) throw e;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { registerWindowFunction } from '../../schema/window-function.js';
|
|
2
2
|
import { SqlDataType } from '../../common/types.js';
|
|
3
|
+
import { AggValue } from '../registration.js';
|
|
3
4
|
|
|
4
5
|
// Built-in window function schemas
|
|
5
6
|
export function registerBuiltinWindowFunctions(): void {
|
|
@@ -68,13 +69,13 @@ export function registerBuiltinWindowFunctions(): void {
|
|
|
68
69
|
},
|
|
69
70
|
requiresOrderBy: false,
|
|
70
71
|
kind: 'aggregate',
|
|
71
|
-
step: (state:
|
|
72
|
+
step: (state: AggValue, value: AggValue) => {
|
|
72
73
|
if (state === null || state === undefined) {
|
|
73
74
|
state = 0;
|
|
74
75
|
}
|
|
75
76
|
return value !== null ? state + 1 : state;
|
|
76
77
|
},
|
|
77
|
-
final: (state:
|
|
78
|
+
final: (state: AggValue) => state || 0
|
|
78
79
|
});
|
|
79
80
|
|
|
80
81
|
registerWindowFunction({
|
|
@@ -88,14 +89,14 @@ export function registerBuiltinWindowFunctions(): void {
|
|
|
88
89
|
},
|
|
89
90
|
requiresOrderBy: false,
|
|
90
91
|
kind: 'aggregate',
|
|
91
|
-
step: (state:
|
|
92
|
+
step: (state: AggValue, value: AggValue) => {
|
|
92
93
|
if (value === null) return state;
|
|
93
94
|
if (state === null || state === undefined) {
|
|
94
95
|
return Number(value);
|
|
95
96
|
}
|
|
96
97
|
return state + Number(value);
|
|
97
98
|
},
|
|
98
|
-
final: (state:
|
|
99
|
+
final: (state: AggValue) => state
|
|
99
100
|
});
|
|
100
101
|
|
|
101
102
|
registerWindowFunction({
|
|
@@ -109,7 +110,7 @@ export function registerBuiltinWindowFunctions(): void {
|
|
|
109
110
|
},
|
|
110
111
|
requiresOrderBy: false,
|
|
111
112
|
kind: 'aggregate',
|
|
112
|
-
step: (state:
|
|
113
|
+
step: (state: AggValue, value: AggValue) => {
|
|
113
114
|
if (value === null) return state;
|
|
114
115
|
if (!state) {
|
|
115
116
|
state = { sum: 0, count: 0 };
|
|
@@ -118,7 +119,7 @@ export function registerBuiltinWindowFunctions(): void {
|
|
|
118
119
|
state.count += 1;
|
|
119
120
|
return state;
|
|
120
121
|
},
|
|
121
|
-
final: (state:
|
|
122
|
+
final: (state: AggValue) => state ? state.sum / state.count : null
|
|
122
123
|
});
|
|
123
124
|
|
|
124
125
|
registerWindowFunction({
|
|
@@ -132,14 +133,14 @@ export function registerBuiltinWindowFunctions(): void {
|
|
|
132
133
|
},
|
|
133
134
|
requiresOrderBy: false,
|
|
134
135
|
kind: 'aggregate',
|
|
135
|
-
step: (state:
|
|
136
|
+
step: (state: AggValue, value: AggValue) => {
|
|
136
137
|
if (value === null) return state;
|
|
137
138
|
if (state === null || state === undefined) {
|
|
138
139
|
return value;
|
|
139
140
|
}
|
|
140
141
|
return value < state ? value : state;
|
|
141
142
|
},
|
|
142
|
-
final: (state:
|
|
143
|
+
final: (state: AggValue) => state
|
|
143
144
|
});
|
|
144
145
|
|
|
145
146
|
registerWindowFunction({
|
|
@@ -153,13 +154,13 @@ export function registerBuiltinWindowFunctions(): void {
|
|
|
153
154
|
},
|
|
154
155
|
requiresOrderBy: false,
|
|
155
156
|
kind: 'aggregate',
|
|
156
|
-
step: (state:
|
|
157
|
+
step: (state: AggValue, value: AggValue) => {
|
|
157
158
|
if (value === null) return state;
|
|
158
159
|
if (state === null || state === undefined) {
|
|
159
160
|
return value;
|
|
160
161
|
}
|
|
161
162
|
return value > state ? value : state;
|
|
162
163
|
},
|
|
163
|
-
final: (state:
|
|
164
|
+
final: (state: AggValue) => state
|
|
164
165
|
});
|
|
165
166
|
}
|
|
@@ -451,3 +451,45 @@ export const strftimeFunc = createScalarFunction(
|
|
|
451
451
|
}
|
|
452
452
|
}
|
|
453
453
|
);
|
|
454
|
+
|
|
455
|
+
// IsISODate(text)
|
|
456
|
+
export const isISODateFunc = createScalarFunction(
|
|
457
|
+
{ name: 'IsISODate', numArgs: 1, deterministic: true },
|
|
458
|
+
(value: SqlValue): SqlValue => {
|
|
459
|
+
if (typeof value !== 'string') return 0;
|
|
460
|
+
const s = value.trim();
|
|
461
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(s)) return 0;
|
|
462
|
+
try {
|
|
463
|
+
const d = Temporal.PlainDate.from(s);
|
|
464
|
+
return d.toString() === s ? 1 : 0;
|
|
465
|
+
} catch {
|
|
466
|
+
return 0;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
);
|
|
470
|
+
|
|
471
|
+
// IsISODateTime(text)
|
|
472
|
+
export const isISODateTimeFunc = createScalarFunction(
|
|
473
|
+
{ name: 'IsISODateTime', numArgs: 1, deterministic: true },
|
|
474
|
+
(value: SqlValue): SqlValue => {
|
|
475
|
+
if (typeof value !== 'string') return 0;
|
|
476
|
+
const s = value.trim();
|
|
477
|
+
// YYYY-MM-DDTHH:MM[:SS[.fraction]] [timezone]
|
|
478
|
+
const re =
|
|
479
|
+
/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?(?:Z|[+-]\d{2}:\d{2})?$/;
|
|
480
|
+
if (!re.test(s)) return 0;
|
|
481
|
+
const hasZone = /(?:Z|[+-]\d{2}:\d{2})$/.test(s);
|
|
482
|
+
try {
|
|
483
|
+
if (hasZone) {
|
|
484
|
+
// Zoned ISO string
|
|
485
|
+
void Temporal.Instant.from(s);
|
|
486
|
+
return 1;
|
|
487
|
+
}
|
|
488
|
+
// Plain ISO local date-time
|
|
489
|
+
void Temporal.PlainDateTime.from(s);
|
|
490
|
+
return 1;
|
|
491
|
+
} catch {
|
|
492
|
+
return 0;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
);
|
|
@@ -6,7 +6,69 @@ import { QuereusError } from "../../common/errors.js";
|
|
|
6
6
|
import { StatusCode } from "../../common/types.js";
|
|
7
7
|
import type { Database } from "../../core/database.js";
|
|
8
8
|
import { safeJsonStringify } from "../../util/serialization.js";
|
|
9
|
-
import { InstructionTraceEvent } from "../../runtime/types.js";
|
|
9
|
+
import { CollectingInstructionTracer, InstructionTraceEvent } from "../../runtime/types.js";
|
|
10
|
+
import { PlanNode, RelationalPlanNode } from "../../planner/nodes/plan-node.js";
|
|
11
|
+
import { EmissionContext } from "../../runtime/emission-context.js";
|
|
12
|
+
import { emitPlanNode } from "../../runtime/emitters.js";
|
|
13
|
+
import { Scheduler } from "../../runtime/scheduler.js";
|
|
14
|
+
import { analyzeRowSpecific } from "../../planner/analysis/constraint-extractor.js";
|
|
15
|
+
import { Parser } from "../../parser/parser.js";
|
|
16
|
+
import * as AST from "../../parser/ast.js";
|
|
17
|
+
import { GlobalScope } from "../../planner/scopes/global.js";
|
|
18
|
+
import { ParameterScope } from "../../planner/scopes/param.js";
|
|
19
|
+
import type { PlanningContext } from "../../planner/planning-context.js";
|
|
20
|
+
import { BuildTimeDependencyTracker } from "../../planner/planning-context.js";
|
|
21
|
+
import { buildBlock } from "../../planner/building/block.js";
|
|
22
|
+
|
|
23
|
+
// Helper function to safely get function name from nodes that have it
|
|
24
|
+
function getFunctionName(node: PlanNode): string | null {
|
|
25
|
+
// Check for nodes that have functionName property
|
|
26
|
+
if ('functionName' in node && typeof (node as any).functionName === 'string') {
|
|
27
|
+
return (node as any).functionName;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Helper function to safely get alias from nodes that have it
|
|
33
|
+
function getAlias(node: PlanNode): string | null {
|
|
34
|
+
// Check for nodes that have alias property
|
|
35
|
+
if ('alias' in node && typeof (node as any).alias === 'string') {
|
|
36
|
+
return (node as any).alias;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Helper function to safely get table name or related identifier
|
|
42
|
+
function getObjectName(node: PlanNode): string | null {
|
|
43
|
+
// Check for function name first (table functions, scalar functions, etc.)
|
|
44
|
+
const functionName = getFunctionName(node);
|
|
45
|
+
if (functionName) {
|
|
46
|
+
return functionName;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Check for table schema in table reference nodes
|
|
50
|
+
if ('tableSchema' in node) {
|
|
51
|
+
const tableSchema = (node as any).tableSchema;
|
|
52
|
+
if (tableSchema && typeof tableSchema.name === 'string') {
|
|
53
|
+
return tableSchema.schemaName ? `${tableSchema.schemaName}.${tableSchema.name}` : tableSchema.name;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Check for CTE name
|
|
58
|
+
if ('cteName' in node && typeof (node as any).cteName === 'string') {
|
|
59
|
+
return (node as any).cteName;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Check for view schema in view reference nodes
|
|
63
|
+
if ('viewSchema' in node) {
|
|
64
|
+
const viewSchema = (node as any).viewSchema;
|
|
65
|
+
if (viewSchema && typeof viewSchema.name === 'string') {
|
|
66
|
+
return viewSchema.schemaName ? `${viewSchema.schemaName}.${viewSchema.name}` : viewSchema.name;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
10
72
|
|
|
11
73
|
// Query plan explanation function (table-valued function)
|
|
12
74
|
export const queryPlanFunc = createIntegratedTableValuedFunction(
|
|
@@ -47,7 +109,7 @@ export const queryPlanFunc = createIntegratedTableValuedFunction(
|
|
|
47
109
|
|
|
48
110
|
// Traverse the plan tree and yield information about each node
|
|
49
111
|
let nodeId = 1;
|
|
50
|
-
const nodeStack: Array<{ node:
|
|
112
|
+
const nodeStack: Array<{ node: PlanNode; parentId: number | null; level: number }> = [
|
|
51
113
|
{ node: plan, parentId: null, level: 0 }
|
|
52
114
|
];
|
|
53
115
|
|
|
@@ -64,7 +126,7 @@ export const queryPlanFunc = createIntegratedTableValuedFunction(
|
|
|
64
126
|
let objectName: string | null = null;
|
|
65
127
|
let alias: string | null = null;
|
|
66
128
|
const estCost = node.estimatedCost || 1.0;
|
|
67
|
-
const estRows = (node as
|
|
129
|
+
const estRows = (node as RelationalPlanNode).estimatedRows || 10;
|
|
68
130
|
|
|
69
131
|
// Use node's toString() method for detail if available
|
|
70
132
|
if (typeof node.toString === 'function') {
|
|
@@ -74,32 +136,21 @@ export const queryPlanFunc = createIntegratedTableValuedFunction(
|
|
|
74
136
|
if (node.nodeType) {
|
|
75
137
|
op = node.nodeType.replace(/Node$/, '').toUpperCase();
|
|
76
138
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
alias = node.alias || null;
|
|
81
|
-
break;
|
|
82
|
-
default:
|
|
83
|
-
// For other node types, try to extract common properties
|
|
84
|
-
if (node.alias) {
|
|
85
|
-
alias = node.alias;
|
|
86
|
-
}
|
|
87
|
-
if (node.tableName) {
|
|
88
|
-
objectName = node.tableName;
|
|
89
|
-
}
|
|
90
|
-
if (node.functionName) {
|
|
91
|
-
objectName = node.functionName;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
139
|
+
// Extract object name and alias using helper functions
|
|
140
|
+
objectName = getObjectName(node);
|
|
141
|
+
alias = getAlias(node);
|
|
94
142
|
}
|
|
95
143
|
|
|
96
|
-
// Get logical properties
|
|
144
|
+
// Get logical properties using the correct method name
|
|
97
145
|
let properties: string | null = null;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
if
|
|
101
|
-
|
|
146
|
+
const logicalAttributes = node.getLogicalAttributes();
|
|
147
|
+
if (logicalAttributes && Object.keys(logicalAttributes).length > 0) {
|
|
148
|
+
// Attach minimal QuickPick diagnostics from optimizer if available
|
|
149
|
+
const diag = db.optimizer.getLastDiagnostics?.();
|
|
150
|
+
if (diag?.quickpick) {
|
|
151
|
+
(logicalAttributes as any).quickpick = diag.quickpick;
|
|
102
152
|
}
|
|
153
|
+
properties = safeJsonStringify(logicalAttributes);
|
|
103
154
|
}
|
|
104
155
|
|
|
105
156
|
// Get physical properties (if available)
|
|
@@ -124,13 +175,13 @@ export const queryPlanFunc = createIntegratedTableValuedFunction(
|
|
|
124
175
|
];
|
|
125
176
|
|
|
126
177
|
// Add children to stack (in reverse order so they're processed in correct order)
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
const children = node.getChildren ? node.getChildren() : [];
|
|
178
|
+
// getChildren() is guaranteed to exist on all PlanNode instances
|
|
179
|
+
const children = node.getChildren();
|
|
130
180
|
for (let i = children.length - 1; i >= 0; i--) {
|
|
131
181
|
nodeStack.push({ node: children[i], parentId: currentId, level });
|
|
132
182
|
}
|
|
133
183
|
}
|
|
184
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
134
185
|
} catch (error: any) {
|
|
135
186
|
// If planning fails, yield an error row
|
|
136
187
|
yield [1, null, 0, 'ERROR', 'ERROR', `Failed to plan SQL: ${error.message}`, null, null, null, null, null, null];
|
|
@@ -170,10 +221,6 @@ export const schedulerProgramFunc = createIntegratedTableValuedFunction(
|
|
|
170
221
|
const plan = db.getPlan(sql);
|
|
171
222
|
|
|
172
223
|
// Emit the plan to get the instruction tree
|
|
173
|
-
const { EmissionContext } = await import('../../runtime/emission-context.js');
|
|
174
|
-
const { emitPlanNode } = await import('../../runtime/emitters.js');
|
|
175
|
-
const { Scheduler } = await import('../../runtime/scheduler.js');
|
|
176
|
-
|
|
177
224
|
const emissionContext = new EmissionContext(db);
|
|
178
225
|
const rootInstruction = emitPlanNode(plan, emissionContext);
|
|
179
226
|
|
|
@@ -214,6 +261,7 @@ export const schedulerProgramFunc = createIntegratedTableValuedFunction(
|
|
|
214
261
|
}
|
|
215
262
|
}
|
|
216
263
|
}
|
|
264
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
217
265
|
} catch (error: any) {
|
|
218
266
|
// If compilation fails, yield an error instruction
|
|
219
267
|
yield [0, 'ERROR', '[]', `Failed to compile SQL: ${error.message}`, null, 0, null];
|
|
@@ -272,7 +320,7 @@ export const stackTraceFunc = createIntegratedTableValuedFunction(
|
|
|
272
320
|
});
|
|
273
321
|
|
|
274
322
|
// Add frames based on plan node types
|
|
275
|
-
const addPlanFrames = (node:
|
|
323
|
+
const addPlanFrames = (node: PlanNode, depth: number = 0) => {
|
|
276
324
|
if (!node || depth > 10) return; // Prevent infinite recursion
|
|
277
325
|
|
|
278
326
|
switch (node.nodeType) {
|
|
@@ -280,28 +328,29 @@ export const stackTraceFunc = createIntegratedTableValuedFunction(
|
|
|
280
328
|
stack.push({
|
|
281
329
|
name: 'buildBlock',
|
|
282
330
|
location: 'building/block.ts:buildBlock',
|
|
283
|
-
vars: { statementCount: node.statements?.length || 0 }
|
|
331
|
+
vars: { statementCount: ('statements' in node) ? (node as any).statements?.length || 0 : 0 }
|
|
284
332
|
});
|
|
285
333
|
break;
|
|
286
334
|
case 'Filter':
|
|
287
335
|
stack.push({
|
|
288
336
|
name: 'buildFilter',
|
|
289
337
|
location: 'building/select.ts:buildSelectStmt',
|
|
290
|
-
vars: { condition: node.condition?.toString() || 'unknown' }
|
|
338
|
+
vars: { condition: ('condition' in node) ? (node as any).condition?.toString() || 'unknown' : 'unknown' }
|
|
291
339
|
});
|
|
292
340
|
break;
|
|
293
341
|
case 'Project':
|
|
294
342
|
stack.push({
|
|
295
343
|
name: 'buildProject',
|
|
296
344
|
location: 'building/select.ts:buildSelectStmt',
|
|
297
|
-
vars: { projectionCount: node.projections?.length || 0 }
|
|
345
|
+
vars: { projectionCount: ('projections' in node) ? (node as any).projections?.length || 0 : 0 }
|
|
298
346
|
});
|
|
299
347
|
break;
|
|
300
348
|
}
|
|
301
349
|
|
|
302
350
|
// Recursively add frames for children
|
|
303
|
-
|
|
304
|
-
children
|
|
351
|
+
// getChildren() is guaranteed to exist on all PlanNode instances
|
|
352
|
+
const children = node.getChildren();
|
|
353
|
+
children.forEach((child: PlanNode) => addPlanFrames(child, depth + 1));
|
|
305
354
|
};
|
|
306
355
|
|
|
307
356
|
addPlanFrames(plan);
|
|
@@ -319,6 +368,7 @@ export const stackTraceFunc = createIntegratedTableValuedFunction(
|
|
|
319
368
|
0 // is_virtual
|
|
320
369
|
];
|
|
321
370
|
}
|
|
371
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
322
372
|
} catch (error: any) {
|
|
323
373
|
// If analysis fails, yield an error frame
|
|
324
374
|
yield [0, 0, 'error', 'stack_trace', JSON.stringify({ error: error.message })];
|
|
@@ -371,12 +421,12 @@ export const executionTraceFunc = createIntegratedTableValuedFunction(
|
|
|
371
421
|
instructionDependencies.set(addr, dependencies);
|
|
372
422
|
instructionOperations.set(addr, description);
|
|
373
423
|
}
|
|
424
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
374
425
|
} catch (schedulerError: any) {
|
|
375
426
|
console.warn('Could not get scheduler program info:', schedulerError.message);
|
|
376
427
|
}
|
|
377
428
|
|
|
378
429
|
// Import the CollectingInstructionTracer
|
|
379
|
-
const { CollectingInstructionTracer } = await import('../../runtime/types.js');
|
|
380
430
|
const tracer = new CollectingInstructionTracer();
|
|
381
431
|
|
|
382
432
|
// Parse the query and execute with tracing
|
|
@@ -391,9 +441,9 @@ export const executionTraceFunc = createIntegratedTableValuedFunction(
|
|
|
391
441
|
}
|
|
392
442
|
|
|
393
443
|
await stmt.finalize();
|
|
394
|
-
} catch (executionError:
|
|
444
|
+
} catch (executionError: unknown) {
|
|
395
445
|
// If execution fails, we might still have some trace events
|
|
396
|
-
console.warn('Query execution failed during tracing:', executionError.message);
|
|
446
|
+
console.warn('Query execution failed during tracing:', executionError instanceof Error ? executionError.message : String(executionError));
|
|
397
447
|
}
|
|
398
448
|
|
|
399
449
|
// Get the collected trace events
|
|
@@ -484,6 +534,7 @@ export const executionTraceFunc = createIntegratedTableValuedFunction(
|
|
|
484
534
|
];
|
|
485
535
|
}
|
|
486
536
|
|
|
537
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
487
538
|
} catch (error: any) {
|
|
488
539
|
// If tracing setup fails, yield an error event
|
|
489
540
|
yield [
|
|
@@ -530,7 +581,6 @@ export const rowTraceFunc = createIntegratedTableValuedFunction(
|
|
|
530
581
|
|
|
531
582
|
try {
|
|
532
583
|
// Import the CollectingInstructionTracer
|
|
533
|
-
const { CollectingInstructionTracer } = await import('../../runtime/types.js');
|
|
534
584
|
const tracer = new CollectingInstructionTracer();
|
|
535
585
|
|
|
536
586
|
// Parse the query and execute with tracing
|
|
@@ -545,6 +595,7 @@ export const rowTraceFunc = createIntegratedTableValuedFunction(
|
|
|
545
595
|
}
|
|
546
596
|
|
|
547
597
|
await stmt.finalize();
|
|
598
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
548
599
|
} catch (executionError: any) {
|
|
549
600
|
// If execution fails, we might still have some trace events
|
|
550
601
|
console.warn('Query execution failed during row tracing:', executionError.message);
|
|
@@ -595,13 +646,13 @@ export const rowTraceFunc = createIntegratedTableValuedFunction(
|
|
|
595
646
|
];
|
|
596
647
|
}
|
|
597
648
|
|
|
598
|
-
} catch (error:
|
|
649
|
+
} catch (error: unknown) {
|
|
599
650
|
// If tracing setup fails, yield an error event
|
|
600
651
|
yield [
|
|
601
652
|
0, // instruction_index
|
|
602
653
|
'ROW_TRACE_SETUP', // operation
|
|
603
654
|
0, // row_index
|
|
604
|
-
safeJsonStringify(`Failed to setup row trace: ${error.message}`), // row_data
|
|
655
|
+
safeJsonStringify(`Failed to setup row trace: ${error instanceof Error ? error.message : String(error)}`), // row_data
|
|
605
656
|
Date.now(), // timestamp_ms
|
|
606
657
|
null // row_count
|
|
607
658
|
];
|
|
@@ -635,3 +686,94 @@ export const schemaSizeFunc = createIntegratedTableValuedFunction(
|
|
|
635
686
|
// TODO: Implementation of schemaSizeFunc
|
|
636
687
|
}
|
|
637
688
|
);
|
|
689
|
+
|
|
690
|
+
// Explain assertion analysis and prepared parameterization (pre-physical)
|
|
691
|
+
export const explainAssertionFunc = createIntegratedTableValuedFunction(
|
|
692
|
+
{
|
|
693
|
+
name: 'explain_assertion',
|
|
694
|
+
numArgs: 1,
|
|
695
|
+
deterministic: true,
|
|
696
|
+
returnType: {
|
|
697
|
+
typeClass: 'relation',
|
|
698
|
+
isReadOnly: true,
|
|
699
|
+
isSet: false,
|
|
700
|
+
columns: [
|
|
701
|
+
{ name: 'assertion', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: false, isReadOnly: true }, generated: true },
|
|
702
|
+
{ name: 'relation_key', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: false, isReadOnly: true }, generated: true },
|
|
703
|
+
{ name: 'base', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: false, isReadOnly: true }, generated: true },
|
|
704
|
+
{ name: 'classification', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: false, isReadOnly: true }, generated: true },
|
|
705
|
+
{ name: 'prepared_pk_params', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: true, isReadOnly: true }, generated: true }, // JSON array of param names or NULL
|
|
706
|
+
{ name: 'violation_sql', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: false, isReadOnly: true }, generated: true }
|
|
707
|
+
],
|
|
708
|
+
keys: [],
|
|
709
|
+
rowConstraints: []
|
|
710
|
+
}
|
|
711
|
+
},
|
|
712
|
+
async function* (db: Database, assertionName: SqlValue): AsyncIterable<Row> {
|
|
713
|
+
if (typeof assertionName !== 'string') {
|
|
714
|
+
throw new QuereusError('explain_assertion(name) requires an assertion name', StatusCode.ERROR);
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
// Find assertion across all schemas
|
|
718
|
+
const all = db.schemaManager.getAllAssertions();
|
|
719
|
+
const assertion = all.find(a => a.name.toLowerCase() === assertionName.toLowerCase());
|
|
720
|
+
if (!assertion) {
|
|
721
|
+
throw new QuereusError(`Assertion not found: ${assertionName}`, StatusCode.NOTFOUND);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
const sql = assertion.violationSql;
|
|
725
|
+
|
|
726
|
+
// Build pre-physical plan for analysis
|
|
727
|
+
let ast: AST.Statement;
|
|
728
|
+
try {
|
|
729
|
+
const parser = new Parser();
|
|
730
|
+
ast = parser.parse(sql) as AST.Statement;
|
|
731
|
+
} catch (e) {
|
|
732
|
+
throw new QuereusError(`Failed to parse assertion SQL: ${(e as Error).message}`, StatusCode.ERROR, e as Error);
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
const globalScope = new GlobalScope(db.schemaManager);
|
|
736
|
+
const parameterScope = new ParameterScope(globalScope);
|
|
737
|
+
const ctx: PlanningContext = {
|
|
738
|
+
db,
|
|
739
|
+
schemaManager: db.schemaManager,
|
|
740
|
+
parameters: {},
|
|
741
|
+
scope: parameterScope,
|
|
742
|
+
cteNodes: new Map(),
|
|
743
|
+
schemaDependencies: new BuildTimeDependencyTracker(),
|
|
744
|
+
schemaCache: new Map(),
|
|
745
|
+
cteReferenceCache: new Map(),
|
|
746
|
+
outputScopes: new Map()
|
|
747
|
+
};
|
|
748
|
+
|
|
749
|
+
const plan = buildBlock(ctx, [ast]);
|
|
750
|
+
const analyzed = db.optimizer.optimizeForAnalysis(plan, db) as unknown as RelationalPlanNode;
|
|
751
|
+
|
|
752
|
+
// Classify row/global per relationKey
|
|
753
|
+
const classifications = analyzeRowSpecific(analyzed);
|
|
754
|
+
|
|
755
|
+
for (const [relationKey, cls] of classifications) {
|
|
756
|
+
const base = `${relationKey.split('#')[0]}`;
|
|
757
|
+
let prepared: string | null = null;
|
|
758
|
+
if (cls === 'row' && base) {
|
|
759
|
+
// Prepared parameters are PK-based: ["pk0", "pk1", ...]
|
|
760
|
+
const [schemaName, tableName] = base.split('.');
|
|
761
|
+
const table = db._findTable(tableName, schemaName);
|
|
762
|
+
if (table) {
|
|
763
|
+
const pkCount = table.primaryKeyDefinition.length;
|
|
764
|
+
const names = Array.from({ length: pkCount }, (_, i) => `pk${i}`);
|
|
765
|
+
prepared = JSON.stringify(names);
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
yield [
|
|
770
|
+
assertion.name,
|
|
771
|
+
relationKey,
|
|
772
|
+
base,
|
|
773
|
+
cls,
|
|
774
|
+
prepared,
|
|
775
|
+
sql
|
|
776
|
+
];
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
);
|
|
@@ -13,12 +13,12 @@ import { lengthFunc, substrFunc, substringFunc, likeFunc, globFunc, trimFunc, lt
|
|
|
13
13
|
import { countStarFunc, sumFunc, avgFunc, minFunc, maxFunc, countXFunc, groupConcatFuncRev, totalFunc,
|
|
14
14
|
varPopFunc, varSampFunc, stdDevPopFunc, stdDevSampFunc } from './aggregate.js';
|
|
15
15
|
import type { FunctionSchema } from '../../schema/function.js';
|
|
16
|
-
import { dateFunc, timeFunc, datetimeFunc, juliandayFunc, strftimeFunc } from './datetime.js';
|
|
16
|
+
import { dateFunc, timeFunc, datetimeFunc, juliandayFunc, strftimeFunc, isISODateFunc, isISODateTimeFunc } from './datetime.js';
|
|
17
17
|
import { jsonValidFunc, jsonTypeFunc, jsonExtractFunc, jsonQuoteFunc, jsonArrayFunc, jsonObjectFunc, jsonInsertFunc, jsonReplaceFunc, jsonSetFunc, jsonRemoveFunc,
|
|
18
18
|
jsonArrayLengthFunc, jsonPatchFunc,
|
|
19
19
|
jsonGroupArrayFunc, jsonGroupObjectFunc } from './json.js';
|
|
20
20
|
import { generateSeriesFunc } from './generation.js';
|
|
21
|
-
import { queryPlanFunc, schedulerProgramFunc, stackTraceFunc, executionTraceFunc, rowTraceFunc } from './explain.js';
|
|
21
|
+
import { queryPlanFunc, schedulerProgramFunc, stackTraceFunc, executionTraceFunc, rowTraceFunc, explainAssertionFunc } from './explain.js';
|
|
22
22
|
import { schemaFunc, tableInfoFunc, functionInfoFunc } from './schema.js';
|
|
23
23
|
import { jsonEachFunc, jsonTreeFunc } from './json-tvf.js';
|
|
24
24
|
|
|
@@ -82,6 +82,8 @@ export const BUILTIN_FUNCTIONS: FunctionSchema[] = [
|
|
|
82
82
|
datetimeFunc,
|
|
83
83
|
juliandayFunc,
|
|
84
84
|
strftimeFunc,
|
|
85
|
+
isISODateFunc,
|
|
86
|
+
isISODateTimeFunc,
|
|
85
87
|
// JSON Functions
|
|
86
88
|
jsonValidFunc,
|
|
87
89
|
jsonTypeFunc,
|
|
@@ -108,6 +110,7 @@ export const BUILTIN_FUNCTIONS: FunctionSchema[] = [
|
|
|
108
110
|
stackTraceFunc,
|
|
109
111
|
executionTraceFunc,
|
|
110
112
|
rowTraceFunc,
|
|
113
|
+
explainAssertionFunc,
|
|
111
114
|
// Schema introspection functions
|
|
112
115
|
schemaFunc,
|
|
113
116
|
tableInfoFunc,
|