@quereus/quereus 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -23
- package/dist/src/core/database.d.ts +22 -4
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +44 -6
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/statement.d.ts +0 -7
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +1 -51
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +0 -11
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/index.d.ts +13 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +9 -2
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +40 -44
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/planner/analysis/const-pass.d.ts.map +1 -1
- package/dist/src/planner/analysis/const-pass.js +12 -6
- package/dist/src/planner/analysis/const-pass.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts +11 -0
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -0
- package/dist/src/planner/building/constraint-builder.js +79 -0
- package/dist/src/planner/building/constraint-builder.js.map +1 -0
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +6 -3
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/expression.d.ts +3 -0
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +33 -7
- package/dist/src/planner/building/expression.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +4 -1
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +46 -9
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-context.js +20 -11
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.d.ts +5 -3
- package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +29 -20
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts +3 -1
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +15 -20
- 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 +25 -2
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +147 -24
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/table.d.ts +0 -10
- package/dist/src/planner/building/table.d.ts.map +1 -1
- package/dist/src/planner/building/table.js +1 -35
- 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 +7 -4
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +7 -8
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cache/correlation-detector.d.ts +11 -0
- package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -0
- package/dist/src/planner/cache/correlation-detector.js +73 -0
- package/dist/src/planner/cache/correlation-detector.js.map +1 -0
- package/dist/src/planner/cache/materialization-advisory.d.ts +12 -18
- package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.js +65 -46
- package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
- package/dist/src/planner/cache/reference-graph.d.ts +14 -9
- package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
- package/dist/src/planner/cache/reference-graph.js +93 -84
- package/dist/src/planner/cache/reference-graph.js.map +1 -1
- package/dist/src/planner/debug.d.ts +25 -0
- package/dist/src/planner/debug.d.ts.map +1 -1
- package/dist/src/planner/debug.js +127 -0
- package/dist/src/planner/debug.js.map +1 -1
- package/dist/src/planner/framework/context.d.ts +11 -0
- package/dist/src/planner/framework/context.d.ts.map +1 -1
- package/dist/src/planner/framework/context.js +25 -2
- package/dist/src/planner/framework/context.js.map +1 -1
- package/dist/src/planner/framework/registry.d.ts +3 -7
- package/dist/src/planner/framework/registry.d.ts.map +1 -1
- package/dist/src/planner/framework/registry.js +20 -31
- package/dist/src/planner/framework/registry.js.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.d.ts +2 -1
- package/dist/src/planner/nodes/add-constraint-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.js +3 -0
- package/dist/src/planner/nodes/add-constraint-node.js.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +6 -4
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cache-node.js +2 -2
- package/dist/src/planner/nodes/cache-node.js.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts +11 -4
- package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.js +38 -12
- package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
- package/dist/src/planner/nodes/create-index-node.d.ts +2 -1
- package/dist/src/planner/nodes/create-index-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-index-node.js +3 -0
- package/dist/src/planner/nodes/create-index-node.js.map +1 -1
- package/dist/src/planner/nodes/create-table-node.d.ts +2 -1
- package/dist/src/planner/nodes/create-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-table-node.js +3 -0
- package/dist/src/planner/nodes/create-table-node.js.map +1 -1
- package/dist/src/planner/nodes/create-view-node.d.ts +2 -1
- package/dist/src/planner/nodes/create-view-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-view-node.js +3 -0
- package/dist/src/planner/nodes/create-view-node.js.map +1 -1
- package/dist/src/planner/nodes/cte-node.d.ts +1 -1
- package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cte-node.js +33 -12
- package/dist/src/planner/nodes/cte-node.js.map +1 -1
- package/dist/src/planner/nodes/cte-reference-node.d.ts +18 -4
- package/dist/src/planner/nodes/cte-reference-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cte-reference-node.js +40 -10
- package/dist/src/planner/nodes/cte-reference-node.js.map +1 -1
- package/dist/src/planner/nodes/delete-node.d.ts +4 -3
- package/dist/src/planner/nodes/delete-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/delete-node.js +20 -6
- package/dist/src/planner/nodes/delete-node.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +2 -2
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.js +2 -2
- package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
- package/dist/src/planner/nodes/drop-table-node.d.ts +2 -1
- package/dist/src/planner/nodes/drop-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/drop-table-node.js +3 -0
- package/dist/src/planner/nodes/drop-table-node.js.map +1 -1
- package/dist/src/planner/nodes/drop-view-node.d.ts +2 -1
- package/dist/src/planner/nodes/drop-view-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/drop-view-node.js +3 -0
- package/dist/src/planner/nodes/drop-view-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +3 -3
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/insert-node.d.ts +2 -1
- package/dist/src/planner/nodes/insert-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/insert-node.js +18 -5
- package/dist/src/planner/nodes/insert-node.js.map +1 -1
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts +28 -0
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js +69 -0
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +1 -0
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +3 -3
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +2 -2
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +1 -1
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +23 -0
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +25 -2
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts +5 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +39 -20
- 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 +20 -8
- package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +4 -2
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +21 -13
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts +26 -2
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +82 -10
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/sequencing-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/sequencing-node.js +2 -2
- package/dist/src/planner/nodes/sequencing-node.js.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +3 -3
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/single-row.d.ts +4 -2
- package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
- package/dist/src/planner/nodes/single-row.js +3 -0
- package/dist/src/planner/nodes/single-row.js.map +1 -1
- package/dist/src/planner/nodes/sink-node.d.ts +1 -1
- package/dist/src/planner/nodes/sink-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/sink-node.js +4 -4
- package/dist/src/planner/nodes/sink-node.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +2 -2
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts +1 -0
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +64 -11
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/subquery.d.ts +4 -4
- package/dist/src/planner/nodes/subquery.d.ts.map +1 -1
- package/dist/src/planner/nodes/subquery.js +68 -23
- package/dist/src/planner/nodes/subquery.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +83 -0
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -0
- package/dist/src/planner/nodes/table-access-nodes.js +226 -0
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -0
- package/dist/src/planner/nodes/update-node.d.ts +4 -2
- package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/update-node.js +26 -13
- package/dist/src/planner/nodes/update-node.js.map +1 -1
- package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-node.js +25 -23
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +46 -50
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +13 -0
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/planning-context.js.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +59 -53
- 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.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js +62 -2
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js +31 -24
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +1 -1
- package/dist/src/planner/scopes/base.d.ts +0 -10
- package/dist/src/planner/scopes/base.d.ts.map +1 -1
- package/dist/src/planner/scopes/base.js +0 -14
- package/dist/src/planner/scopes/base.js.map +1 -1
- package/dist/src/planner/scopes/empty.d.ts +0 -2
- package/dist/src/planner/scopes/empty.d.ts.map +1 -1
- package/dist/src/planner/scopes/empty.js +0 -8
- package/dist/src/planner/scopes/empty.js.map +1 -1
- package/dist/src/planner/scopes/multi.d.ts.map +1 -1
- package/dist/src/planner/scopes/multi.js +0 -1
- package/dist/src/planner/scopes/multi.js.map +1 -1
- package/dist/src/planner/scopes/param.d.ts.map +1 -1
- package/dist/src/planner/scopes/param.js +0 -1
- package/dist/src/planner/scopes/param.js.map +1 -1
- package/dist/src/planner/scopes/registered.d.ts +0 -10
- package/dist/src/planner/scopes/registered.d.ts.map +1 -1
- package/dist/src/planner/scopes/registered.js +1 -17
- package/dist/src/planner/scopes/registered.js.map +1 -1
- package/dist/src/planner/scopes/scope.d.ts +0 -8
- package/dist/src/planner/scopes/scope.d.ts.map +1 -1
- package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
- package/dist/src/planner/validation/plan-validator.js +1 -7
- package/dist/src/planner/validation/plan-validator.js.map +1 -1
- package/dist/src/runtime/context-helpers.d.ts +45 -0
- package/dist/src/runtime/context-helpers.d.ts.map +1 -0
- package/dist/src/runtime/context-helpers.js +139 -0
- package/dist/src/runtime/context-helpers.js.map +1 -0
- package/dist/src/runtime/emission-context.d.ts +1 -0
- package/dist/src/runtime/emission-context.d.ts.map +1 -1
- package/dist/src/runtime/emission-context.js +2 -1
- package/dist/src/runtime/emission-context.js.map +1 -1
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +119 -86
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/between.d.ts +5 -0
- package/dist/src/runtime/emit/between.d.ts.map +1 -0
- package/dist/src/runtime/emit/between.js +38 -0
- package/dist/src/runtime/emit/between.js.map +1 -0
- package/dist/src/runtime/emit/binary.d.ts +0 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +0 -36
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/column-reference.d.ts.map +1 -1
- package/dist/src/runtime/emit/column-reference.js +2 -26
- package/dist/src/runtime/emit/column-reference.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +14 -121
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/cte-reference.d.ts.map +1 -1
- package/dist/src/runtime/emit/cte-reference.js +16 -48
- package/dist/src/runtime/emit/cte-reference.js.map +1 -1
- package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
- package/dist/src/runtime/emit/distinct.js +2 -8
- package/dist/src/runtime/emit/distinct.js.map +1 -1
- package/dist/src/runtime/emit/filter.d.ts.map +1 -1
- package/dist/src/runtime/emit/filter.js +6 -13
- package/dist/src/runtime/emit/filter.js.map +1 -1
- package/dist/src/runtime/emit/internal-recursive-cte-ref.d.ts +5 -0
- package/dist/src/runtime/emit/internal-recursive-cte-ref.d.ts.map +1 -0
- package/dist/src/runtime/emit/internal-recursive-cte-ref.js +23 -0
- package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +1 -0
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +40 -40
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/project.d.ts.map +1 -1
- package/dist/src/runtime/emit/project.js +13 -13
- 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 +3 -14
- package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
- package/dist/src/runtime/emit/returning.d.ts.map +1 -1
- package/dist/src/runtime/emit/returning.js +7 -14
- package/dist/src/runtime/emit/returning.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts +5 -2
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js +21 -17
- package/dist/src/runtime/emit/scan.js.map +1 -1
- package/dist/src/runtime/emit/sort.d.ts.map +1 -1
- package/dist/src/runtime/emit/sort.js +8 -11
- package/dist/src/runtime/emit/sort.js.map +1 -1
- package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
- package/dist/src/runtime/emit/subquery.js +95 -40
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
- package/dist/src/runtime/emit/table-valued-function.js +7 -22
- package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
- package/dist/src/runtime/emit/update.d.ts.map +1 -1
- package/dist/src/runtime/emit/update.js +20 -27
- package/dist/src/runtime/emit/update.js.map +1 -1
- package/dist/src/runtime/emit/window.d.ts.map +1 -1
- package/dist/src/runtime/emit/window.js +55 -83
- 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 +49 -1
- 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 +5 -4
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/runtime/scheduler.d.ts.map +1 -1
- package/dist/src/runtime/scheduler.js +47 -42
- package/dist/src/runtime/scheduler.js.map +1 -1
- package/dist/src/runtime/types.d.ts +34 -0
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js +21 -0
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +29 -16
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/util/plugin-loader.d.ts +10 -1
- package/dist/src/util/plugin-loader.d.ts.map +1 -1
- package/dist/src/util/plugin-loader.js +56 -1
- package/dist/src/util/plugin-loader.js.map +1 -1
- package/dist/src/util/working-table-iterable.d.ts.map +1 -1
- package/dist/src/util/working-table-iterable.js +8 -8
- package/dist/src/util/working-table-iterable.js.map +1 -1
- package/dist/src/vtab/manifest.d.ts +36 -0
- package/dist/src/vtab/manifest.d.ts.map +1 -1
- package/package.json +8 -3
- package/src/core/database.ts +48 -6
- package/src/core/statement.ts +1 -49
- package/src/func/builtins/explain.ts +0 -11
- package/src/index.ts +39 -5
- package/src/parser/ast.ts +11 -2
- package/src/parser/parser.ts +40 -47
- package/src/planner/analysis/const-pass.ts +281 -270
- package/src/planner/building/constraint-builder.ts +114 -0
- package/src/planner/building/delete.ts +16 -3
- package/src/planner/building/expression.ts +35 -7
- package/src/planner/building/insert.ts +14 -1
- package/src/planner/building/select-aggregates.ts +57 -11
- package/src/planner/building/select-context.ts +22 -12
- package/src/planner/building/select-modifiers.ts +35 -21
- package/src/planner/building/select-projections.ts +25 -26
- package/src/planner/building/select-window.ts +14 -9
- package/src/planner/building/select.ts +163 -31
- package/src/planner/building/table.ts +1 -40
- package/src/planner/building/update.ts +19 -4
- package/src/planner/building/with.ts +12 -13
- package/src/planner/cache/correlation-detector.ts +83 -0
- package/src/planner/cache/materialization-advisory.ts +71 -50
- package/src/planner/cache/reference-graph.ts +115 -91
- package/src/planner/debug.ts +163 -0
- package/src/planner/framework/context.ts +36 -2
- package/src/planner/framework/registry.ts +261 -274
- package/src/planner/nodes/add-constraint-node.ts +5 -1
- package/src/planner/nodes/aggregate-node.ts +6 -4
- package/src/planner/nodes/cache-node.ts +2 -2
- package/src/planner/nodes/constraint-check-node.ts +47 -13
- package/src/planner/nodes/create-index-node.ts +5 -1
- package/src/planner/nodes/create-table-node.ts +5 -1
- package/src/planner/nodes/create-view-node.ts +5 -1
- package/src/planner/nodes/cte-node.ts +45 -14
- package/src/planner/nodes/cte-reference-node.ts +49 -13
- package/src/planner/nodes/delete-node.ts +31 -7
- package/src/planner/nodes/distinct-node.ts +2 -2
- package/src/planner/nodes/dml-executor-node.ts +2 -2
- package/src/planner/nodes/drop-table-node.ts +5 -1
- package/src/planner/nodes/drop-view-node.ts +5 -1
- package/src/planner/nodes/filter.ts +3 -3
- package/src/planner/nodes/function.ts +93 -93
- package/src/planner/nodes/insert-node.ts +28 -5
- package/src/planner/nodes/internal-recursive-cte-ref-node.ts +76 -0
- package/src/planner/nodes/join-node.ts +3 -3
- package/src/planner/nodes/limit-offset.ts +2 -2
- package/src/planner/nodes/plan-node-type.ts +1 -1
- package/src/planner/nodes/plan-node.ts +39 -2
- package/src/planner/nodes/project-node.ts +39 -19
- package/src/planner/nodes/recursive-cte-node.ts +37 -9
- package/src/planner/nodes/reference.ts +4 -2
- package/src/planner/nodes/returning-node.ts +25 -13
- package/src/planner/nodes/scalar.ts +95 -11
- package/src/planner/nodes/sequencing-node.ts +2 -2
- package/src/planner/nodes/set-operation-node.ts +3 -3
- package/src/planner/nodes/single-row.ts +7 -2
- package/src/planner/nodes/sink-node.ts +5 -5
- package/src/planner/nodes/sort.ts +2 -2
- package/src/planner/nodes/stream-aggregate.ts +76 -12
- package/src/planner/nodes/subquery.ts +90 -27
- package/src/planner/nodes/{physical-access-nodes.ts → table-access-nodes.ts} +6 -6
- package/src/planner/nodes/update-node.ts +31 -13
- package/src/planner/nodes/window-node.ts +28 -22
- package/src/planner/optimizer.ts +257 -263
- package/src/planner/planning-context.ts +15 -0
- package/src/planner/rules/access/rule-select-access-path.ts +68 -64
- package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +74 -2
- package/src/planner/rules/cache/rule-materialization-advisory.ts +31 -27
- package/src/planner/scopes/base.ts +0 -17
- package/src/planner/scopes/empty.ts +0 -10
- package/src/planner/scopes/multi.ts +0 -1
- package/src/planner/scopes/param.ts +0 -1
- package/src/planner/scopes/registered.ts +1 -20
- package/src/planner/scopes/scope.ts +0 -12
- package/src/planner/validation/plan-validator.ts +1 -8
- package/src/runtime/context-helpers.ts +191 -0
- package/src/runtime/emission-context.ts +5 -2
- package/src/runtime/emit/aggregate.ts +131 -85
- package/src/runtime/emit/between.ts +51 -0
- package/src/runtime/emit/binary.ts +0 -46
- package/src/runtime/emit/column-reference.ts +3 -36
- package/src/runtime/emit/constraint-check.ts +17 -142
- package/src/runtime/emit/cte-reference.ts +23 -60
- package/src/runtime/emit/distinct.ts +2 -7
- package/src/runtime/emit/filter.ts +6 -13
- package/src/runtime/emit/internal-recursive-cte-ref.ts +37 -0
- package/src/runtime/emit/join.ts +45 -43
- package/src/runtime/emit/project.ts +18 -12
- package/src/runtime/emit/recursive-cte.ts +3 -12
- package/src/runtime/emit/returning.ts +7 -14
- package/src/runtime/emit/scan.ts +25 -23
- package/src/runtime/emit/sort.ts +8 -11
- package/src/runtime/emit/subquery.ts +108 -48
- package/src/runtime/emit/table-valued-function.ts +7 -20
- package/src/runtime/emit/update.ts +22 -29
- package/src/runtime/emit/window.ts +74 -88
- package/src/runtime/emitters.ts +52 -1
- package/src/runtime/register.ts +5 -4
- package/src/runtime/scheduler.ts +54 -54
- package/src/runtime/types.ts +45 -0
- package/src/schema/manager.ts +34 -19
- package/src/util/plugin-loader.ts +78 -4
- package/src/util/working-table-iterable.ts +15 -7
- package/src/vtab/manifest.ts +42 -0
- package/src/planner/nodes/scan.ts +0 -103
- package/src/planner/rules/physical/rule-mark-physical.ts +0 -37
- package/src/runtime/emit/table-reference.ts +0 -92
|
@@ -3,7 +3,7 @@ import { PlanNodeType } from './nodes/plan-node-type.js';
|
|
|
3
3
|
import { DEFAULT_TUNING } from './optimizer-tuning.js';
|
|
4
4
|
// Re-export for convenience
|
|
5
5
|
export { DEFAULT_TUNING };
|
|
6
|
-
import { applyRules,
|
|
6
|
+
import { applyRules, registerRules, createRule } from './framework/registry.js';
|
|
7
7
|
import { tracePhaseStart, tracePhaseEnd, traceNodeStart, traceNodeEnd } from './framework/trace.js';
|
|
8
8
|
import { defaultStatsProvider } from './stats/index.js';
|
|
9
9
|
import { createOptContext } from './framework/context.js';
|
|
@@ -16,7 +16,6 @@ import { ruleAggregateStreaming } from './rules/aggregate/rule-aggregate-streami
|
|
|
16
16
|
// Constraint rules removed - now handled in builders for correctness
|
|
17
17
|
import { ruleCteOptimization } from './rules/cache/rule-cte-optimization.js';
|
|
18
18
|
import { ruleMutatingSubqueryCache } from './rules/cache/rule-mutating-subquery-cache.js';
|
|
19
|
-
import { ruleMarkPhysical } from './rules/physical/rule-mark-physical.js';
|
|
20
19
|
// Phase 3 rules
|
|
21
20
|
import { validatePhysicalTree } from './validation/plan-validator.js';
|
|
22
21
|
import { performConstantFolding } from './analysis/const-pass.js';
|
|
@@ -44,14 +43,15 @@ export class Optimizer {
|
|
|
44
43
|
}
|
|
45
44
|
Optimizer.globalRulesRegistered = true;
|
|
46
45
|
const toRegister = [];
|
|
47
|
-
// Single-pass constant folding is
|
|
48
|
-
// Core optimization rules (converted from old system)
|
|
49
|
-
toRegister.push(createRule('aggregate-streaming', PlanNodeType.Aggregate, 'impl', ruleAggregateStreaming, 40 // High priority - fundamental logical→physical transformation
|
|
50
|
-
));
|
|
46
|
+
// Note: Single-pass constant folding is done before rules
|
|
51
47
|
// Mutating subquery cache injection - critical for correctness
|
|
52
48
|
toRegister.push(createRule('mutating-subquery-cache', PlanNodeType.Join, 'rewrite', ruleMutatingSubqueryCache, 20 // Very high priority - correctness fix to prevent multiple execution
|
|
53
49
|
));
|
|
54
|
-
|
|
50
|
+
// Phase 1.5 rules
|
|
51
|
+
toRegister.push(createRule('select-access-path', PlanNodeType.TableReference, 'impl', ruleSelectAccessPath, 25 // High priority - fundamental access path selection
|
|
52
|
+
));
|
|
53
|
+
// Core optimization rules (converted from old system)
|
|
54
|
+
toRegister.push(createRule('aggregate-streaming', PlanNodeType.Aggregate, 'impl', ruleAggregateStreaming, 40 // High priority - fundamental logical→physical transformation
|
|
55
55
|
));
|
|
56
56
|
// toRegister.push(createRule(
|
|
57
57
|
// 'project-optimization',
|
|
@@ -67,31 +67,28 @@ export class Optimizer {
|
|
|
67
67
|
// ruleFilterOptimization,
|
|
68
68
|
// 50 // Medium priority - basic optimization
|
|
69
69
|
// ));
|
|
70
|
-
//
|
|
71
|
-
toRegister.push(createRule('select-access-path', PlanNodeType.TableScan, 'impl', ruleSelectAccessPath, 30 // High priority - fundamental access path selection
|
|
72
|
-
));
|
|
73
|
-
// Phase 2 rules
|
|
74
|
-
toRegister.push(createRule('materialization-advisory', PlanNodeType.Block, // Apply to root-level nodes
|
|
75
|
-
'rewrite', ruleMaterializationAdvisory, 90 // Low priority - run last for global analysis
|
|
70
|
+
toRegister.push(createRule('cte-optimization', PlanNodeType.CTE, 'impl', ruleCteOptimization, 70 // Lower priority - caching optimization
|
|
76
71
|
));
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
PlanNodeType.
|
|
82
|
-
PlanNodeType.
|
|
83
|
-
PlanNodeType.
|
|
84
|
-
PlanNodeType.
|
|
85
|
-
PlanNodeType.
|
|
86
|
-
//
|
|
87
|
-
PlanNodeType.
|
|
88
|
-
PlanNodeType.
|
|
89
|
-
PlanNodeType.
|
|
90
|
-
PlanNodeType.
|
|
91
|
-
|
|
72
|
+
// Phase 2 rules - Materialization advisory
|
|
73
|
+
// TODO: Can we apply this more generally rather than assuming certain node types?
|
|
74
|
+
// Register for all node types that can have relational children
|
|
75
|
+
const nodeTypesWithRelationalChildren = [
|
|
76
|
+
PlanNodeType.Block, // Contains statements
|
|
77
|
+
PlanNodeType.ScalarSubquery, // Contains relational subquery
|
|
78
|
+
PlanNodeType.Exists, // Contains relational subquery
|
|
79
|
+
PlanNodeType.In, // Can contain relational subquery
|
|
80
|
+
PlanNodeType.Insert, // Has source relation
|
|
81
|
+
PlanNodeType.Update, // Has source relation
|
|
82
|
+
PlanNodeType.Delete, // Has source relation
|
|
83
|
+
PlanNodeType.CTE, // Has definition relation
|
|
84
|
+
PlanNodeType.RecursiveCTE, // Has anchor/recursive relations
|
|
85
|
+
PlanNodeType.Returning, // Wraps DML operations
|
|
86
|
+
// Scalar nodes that might contain subqueries
|
|
87
|
+
PlanNodeType.ScalarFunctionCall, // Function args might be subqueries
|
|
88
|
+
PlanNodeType.CaseExpr, // CASE conditions might be subqueries
|
|
92
89
|
];
|
|
93
|
-
for (const nodeType of
|
|
94
|
-
toRegister.push(createRule(
|
|
90
|
+
for (const nodeType of nodeTypesWithRelationalChildren) {
|
|
91
|
+
toRegister.push(createRule('materialization-advisory', nodeType, 'rewrite', ruleMaterializationAdvisory, 90 // Low priority - run last for global analysis
|
|
95
92
|
));
|
|
96
93
|
}
|
|
97
94
|
// Register all rules at once
|
|
@@ -102,8 +99,6 @@ export class Optimizer {
|
|
|
102
99
|
*/
|
|
103
100
|
optimize(plan, db) {
|
|
104
101
|
log('Starting optimization of plan', plan.nodeType);
|
|
105
|
-
// Clear rule tracking from previous runs
|
|
106
|
-
clearVisitedRules();
|
|
107
102
|
// Create optimization context
|
|
108
103
|
const context = createOptContext(this, this.stats, this.tuning, db);
|
|
109
104
|
tracePhaseStart('optimization');
|
|
@@ -135,28 +130,25 @@ export class Optimizer {
|
|
|
135
130
|
* Perform single-pass constant folding over the entire plan tree
|
|
136
131
|
*/
|
|
137
132
|
performConstantFolding(plan, context) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
return result;
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
log('Constant folding failed: %s', error);
|
|
148
|
-
// Return original plan on failure
|
|
149
|
-
return plan;
|
|
150
|
-
}
|
|
133
|
+
// Create runtime expression evaluator
|
|
134
|
+
const evaluator = createRuntimeExpressionEvaluator(context.db);
|
|
135
|
+
// Perform single-pass constant folding
|
|
136
|
+
const result = performConstantFolding(plan, evaluator);
|
|
137
|
+
log('Constant folding completed');
|
|
138
|
+
return result;
|
|
151
139
|
}
|
|
152
140
|
optimizeNode(node, context) {
|
|
153
141
|
traceNodeStart(node);
|
|
154
|
-
//
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
142
|
+
// Check if we've already optimized this exact node instance
|
|
143
|
+
const cached = context.optimizedNodes.get(node.id);
|
|
144
|
+
if (cached) {
|
|
145
|
+
log('Reusing optimized version of shared node %s (%s)', node.id, node.nodeType);
|
|
146
|
+
traceNodeEnd(node, cached);
|
|
147
|
+
return cached;
|
|
159
148
|
}
|
|
149
|
+
// Note: We removed the broken `if (node.physical)` check here
|
|
150
|
+
// The `physical` property is always truthy (it returns a PhysicalProperties object)
|
|
151
|
+
// Physical vs logical distinction should be handled by the rules themselves
|
|
160
152
|
// First optimize all children
|
|
161
153
|
const optimizedNode = this.optimizeChildren(node, context);
|
|
162
154
|
// Apply rules
|
|
@@ -165,10 +157,14 @@ export class Optimizer {
|
|
|
165
157
|
// Rules transformed the node
|
|
166
158
|
log(`Rules applied to ${optimizedNode.nodeType}, transformed to ${rulesApplied.nodeType}`);
|
|
167
159
|
traceNodeEnd(node, rulesApplied);
|
|
160
|
+
// Cache the final result
|
|
161
|
+
context.optimizedNodes.set(node.id, rulesApplied);
|
|
168
162
|
return rulesApplied;
|
|
169
163
|
}
|
|
170
164
|
// No rule applied - assume node is physical
|
|
171
165
|
traceNodeEnd(node, optimizedNode);
|
|
166
|
+
// Cache the result even if no rules applied
|
|
167
|
+
context.optimizedNodes.set(node.id, optimizedNode);
|
|
172
168
|
return optimizedNode;
|
|
173
169
|
}
|
|
174
170
|
optimizeChildren(node, context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../src/planner/optimizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAmB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAExE,4BAA4B;AAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../src/planner/optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ import type { Database } from '../core/database.js';
|
|
|
3
3
|
import type { SchemaManager } from '../schema/manager.js';
|
|
4
4
|
import type { Scope } from './scopes/scope.js';
|
|
5
5
|
import type { ScalarPlanNode } from './nodes/plan-node.js';
|
|
6
|
+
import type { CTEPlanNode } from './nodes/cte-node.js';
|
|
7
|
+
import type { CTEReferenceNode } from './nodes/cte-reference-node.js';
|
|
6
8
|
/**
|
|
7
9
|
* Debug options for query planning and execution.
|
|
8
10
|
*/
|
|
@@ -99,6 +101,12 @@ export interface PlanningContext {
|
|
|
99
101
|
columnIndex: number;
|
|
100
102
|
attributeId: number;
|
|
101
103
|
}>;
|
|
104
|
+
/**
|
|
105
|
+
* Active CTEs available in the current planning context.
|
|
106
|
+
* This map contains all CTEs from the current WITH clause and any parent WITH clauses,
|
|
107
|
+
* allowing subqueries in expressions to resolve CTE references correctly.
|
|
108
|
+
*/
|
|
109
|
+
readonly cteNodes?: Map<string, CTEPlanNode>;
|
|
102
110
|
/**
|
|
103
111
|
* Schema dependency tracker for this planning session.
|
|
104
112
|
*/
|
|
@@ -107,5 +115,10 @@ export interface PlanningContext {
|
|
|
107
115
|
* Schema object cache for resolved objects during planning.
|
|
108
116
|
*/
|
|
109
117
|
readonly schemaCache: Map<string, any>;
|
|
118
|
+
/**
|
|
119
|
+
* Cache for CTE reference nodes to ensure consistent attribute IDs across multiple references
|
|
120
|
+
* to the same CTE with the same alias. Key format: "cteName:alias"
|
|
121
|
+
*/
|
|
122
|
+
cteReferenceCache?: Map<string, CTEReferenceNode>;
|
|
110
123
|
}
|
|
111
124
|
//# sourceMappingURL=planning-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-context.d.ts","sourceRoot":"","sources":["../../../src/planner/planning-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"planning-context.d.ts","sourceRoot":"","sources":["../../../src/planner/planning-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,0BAA0B;IACtC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,qBAAqB,CAAyB;IAEtD;;OAEG;IACH,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI;IAM1D;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKzD;;OAEG;IACH,cAAc,IAAI,OAAO;IAUzB;;OAEG;IACH,eAAe,IAAI,gBAAgB,EAAE;IAIrC;;OAEG;IACH,kBAAkB,IAAI,OAAO;IAI7B;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAU1B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,kBAAkB;CAS1B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAEtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAE9B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;QAC1B,UAAU,EAAE,cAAc,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;IAExD;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEvC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-context.js","sourceRoot":"","sources":["../../../src/planner/planning-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"planning-context.js","sourceRoot":"","sources":["../../../src/planner/planning-context.ts"],"names":[],"mappings":"AAiCA;;GAEG;AACH,MAAM,OAAO,0BAA0B;IAC9B,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,eAAe,GAAG,IAAI,GAAG,EAAwB,CAAC;IAClD,qBAAqB,GAAG,IAAI,GAAG,EAAc,CAAC;IAEtD;;OAEG;IACH,gBAAgB,CAAC,GAAqB,EAAE,MAAW;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,QAAoB;QAC3C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,cAAc;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,SAAS,EAAE,CAAC;gBACnC,sDAAsD;gBACtD,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACH,eAAe;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,kBAAkB;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,kBAAkB;QACjB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACnD,IAAI,CAAC;gBACJ,QAAQ,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;QACF,CAAC;IACF,CAAC;IAEO,aAAa,CAAC,GAAqB;QAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC;QACvC,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC;IAC7D,CAAC;IAEO,kBAAkB,CAAC,GAAW;QACrC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO;YACN,IAAI,EAAE,IAAgC;YACtC,UAAU,EAAE,UAAU,IAAI,SAAS;YACnC,UAAU;YACV,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS;SAChD,CAAC;IACH,CAAC;CACD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Rule: Select Access Path
|
|
3
3
|
*
|
|
4
|
-
* Transforms:
|
|
4
|
+
* Transforms: TableReferenceNode → SeqScanNode | IndexScanNode | IndexSeekNode
|
|
5
5
|
* Conditions: When logical table access needs to be made physical
|
|
6
6
|
* Benefits: Enables cost-based access path selection and index utilization
|
|
7
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-select-access-path.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-select-access-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-select-access-path.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-select-access-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAU7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAmDzF"}
|
|
@@ -1,36 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Rule: Select Access Path
|
|
3
3
|
*
|
|
4
|
-
* Transforms:
|
|
4
|
+
* Transforms: TableReferenceNode → SeqScanNode | IndexScanNode | IndexSeekNode
|
|
5
5
|
* Conditions: When logical table access needs to be made physical
|
|
6
6
|
* Benefits: Enables cost-based access path selection and index utilization
|
|
7
7
|
*/
|
|
8
8
|
import { createLogger } from '../../../common/logger.js';
|
|
9
|
-
import {
|
|
10
|
-
import { SeqScanNode, IndexScanNode, IndexSeekNode } from '../../nodes/
|
|
9
|
+
import { TableReferenceNode } from '../../nodes/reference.js';
|
|
10
|
+
import { SeqScanNode, IndexScanNode, IndexSeekNode } from '../../nodes/table-access-nodes.js';
|
|
11
11
|
import { seqScanCost } from '../../cost/index.js';
|
|
12
12
|
const log = createLogger('optimizer:rule:select-access-path');
|
|
13
13
|
export function ruleSelectAccessPath(node, context) {
|
|
14
|
-
// Guard: only apply to
|
|
15
|
-
if (!(node instanceof
|
|
14
|
+
// Guard: only apply to TableReferenceNode
|
|
15
|
+
if (!(node instanceof TableReferenceNode)) {
|
|
16
16
|
return null;
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
if (node.physical) {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
log('Selecting access path for table %s', node.source.tableSchema.name);
|
|
18
|
+
log('Selecting access path for table %s', node.tableSchema.name);
|
|
23
19
|
try {
|
|
24
20
|
// Get table schema and virtual table module
|
|
25
|
-
const tableSchema = node.
|
|
21
|
+
const tableSchema = node.tableSchema;
|
|
26
22
|
const vtabModule = tableSchema.vtabModule;
|
|
27
23
|
// If no virtual table module, fall back to sequential scan
|
|
28
24
|
if (!vtabModule || typeof vtabModule !== 'object' || !('getBestAccessPlan' in vtabModule)) {
|
|
29
25
|
log('No getBestAccessPlan support, using sequential scan for %s', tableSchema.name);
|
|
30
|
-
return createSeqScan(node);
|
|
26
|
+
return createSeqScan(node, undefined);
|
|
31
27
|
}
|
|
32
28
|
// Extract constraints from current filter info
|
|
33
|
-
const constraints =
|
|
29
|
+
const constraints = []; // TODO: Extract from parent Filter node if any
|
|
34
30
|
// Build request for getBestAccessPlan
|
|
35
31
|
const request = {
|
|
36
32
|
columns: tableSchema.columns.map((col, index) => ({
|
|
@@ -41,7 +37,7 @@ export function ruleSelectAccessPath(node, context) {
|
|
|
41
37
|
isUnique: col.primaryKey || false // For now, assume only PK columns are unique
|
|
42
38
|
})),
|
|
43
39
|
filters: constraints,
|
|
44
|
-
estimatedRows: node.
|
|
40
|
+
estimatedRows: node.estimatedRows
|
|
45
41
|
};
|
|
46
42
|
// Call getBestAccessPlan
|
|
47
43
|
const accessPlan = vtabModule.getBestAccessPlan(context.db, tableSchema, request);
|
|
@@ -51,47 +47,36 @@ export function ruleSelectAccessPath(node, context) {
|
|
|
51
47
|
return physicalNode;
|
|
52
48
|
}
|
|
53
49
|
catch (error) {
|
|
54
|
-
log('Error selecting access path for %s: %s', node.
|
|
50
|
+
log('Error selecting access path for %s: %s', node.tableSchema.name, error);
|
|
55
51
|
// Fall back to sequential scan on error
|
|
56
52
|
return createSeqScan(node);
|
|
57
53
|
}
|
|
58
54
|
}
|
|
59
|
-
/**
|
|
60
|
-
* Extract predicate constraints from FilterInfo
|
|
61
|
-
*/
|
|
62
|
-
function extractConstraintsFromFilterInfo(node, _tableSchema) {
|
|
63
|
-
const constraints = [];
|
|
64
|
-
// Extract from FilterInfo.indexInfoOutput.aConstraint if available
|
|
65
|
-
const indexConstraints = node.filterInfo.indexInfoOutput.aConstraint;
|
|
66
|
-
if (indexConstraints) {
|
|
67
|
-
for (let i = 0; i < indexConstraints.length; i++) {
|
|
68
|
-
const constraint = indexConstraints[i];
|
|
69
|
-
if (constraint && constraint.usable) {
|
|
70
|
-
constraints.push({
|
|
71
|
-
columnIndex: constraint.iColumn,
|
|
72
|
-
op: mapConstraintOp(constraint.op),
|
|
73
|
-
usable: constraint.usable,
|
|
74
|
-
// Note: actual value would need to be extracted from args
|
|
75
|
-
value: undefined
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return constraints;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Map internal constraint op to public constraint op
|
|
84
|
-
*/
|
|
85
|
-
function mapConstraintOp(_internalOp) {
|
|
86
|
-
// This mapping would need to be based on the actual constants used
|
|
87
|
-
// For now, assume equality - in a real implementation this would map
|
|
88
|
-
// from IndexConstraintOp constants to ConstraintOp
|
|
89
|
-
return '=';
|
|
90
|
-
}
|
|
91
55
|
/**
|
|
92
56
|
* Select the appropriate physical node based on access plan
|
|
93
57
|
*/
|
|
94
58
|
function selectPhysicalNode(originalNode, accessPlan, constraints) {
|
|
59
|
+
// Create a default FilterInfo for the physical nodes
|
|
60
|
+
const filterInfo = {
|
|
61
|
+
idxNum: 0,
|
|
62
|
+
idxStr: 'fullscan',
|
|
63
|
+
constraints: [],
|
|
64
|
+
args: [],
|
|
65
|
+
indexInfoOutput: {
|
|
66
|
+
nConstraint: 0,
|
|
67
|
+
aConstraint: [],
|
|
68
|
+
nOrderBy: 0,
|
|
69
|
+
aOrderBy: [],
|
|
70
|
+
aConstraintUsage: [],
|
|
71
|
+
idxNum: 0,
|
|
72
|
+
idxStr: 'fullscan',
|
|
73
|
+
orderByConsumed: false,
|
|
74
|
+
estimatedCost: accessPlan.cost,
|
|
75
|
+
estimatedRows: BigInt(accessPlan.rows || 1000),
|
|
76
|
+
idxFlags: 0,
|
|
77
|
+
colUsed: 0n,
|
|
78
|
+
}
|
|
79
|
+
};
|
|
95
80
|
// Analyze the access plan to determine node type
|
|
96
81
|
const hasEqualityConstraints = constraints.some(c => c.op === '=' && accessPlan.handledFilters[constraints.indexOf(c)]);
|
|
97
82
|
const hasRangeConstraints = constraints.some(c => ['>', '>=', '<', '<='].includes(c.op) && accessPlan.handledFilters[constraints.indexOf(c)]);
|
|
@@ -104,7 +89,7 @@ function selectPhysicalNode(originalNode, accessPlan, constraints) {
|
|
|
104
89
|
if (hasEqualityConstraints && (accessPlan.rows || 0) <= 10) {
|
|
105
90
|
// Small result set with equality - use index seek
|
|
106
91
|
log('Using index seek (equality constraint, small result)');
|
|
107
|
-
return new IndexSeekNode(originalNode.scope, originalNode
|
|
92
|
+
return new IndexSeekNode(originalNode.scope, originalNode, filterInfo, 'primary', // Default to primary index
|
|
108
93
|
[], // seekKeys would be populated from constraints
|
|
109
94
|
false, // not a range
|
|
110
95
|
providesOrdering, accessPlan.cost);
|
|
@@ -112,22 +97,43 @@ function selectPhysicalNode(originalNode, accessPlan, constraints) {
|
|
|
112
97
|
else if (hasRangeConstraints || providesOrdering) {
|
|
113
98
|
// Range constraints or ordering required - use index scan
|
|
114
99
|
log('Using index scan (range constraints or ordering)');
|
|
115
|
-
return new IndexScanNode(originalNode.scope, originalNode
|
|
100
|
+
return new IndexScanNode(originalNode.scope, originalNode, filterInfo, 'primary', // Default to primary index
|
|
116
101
|
providesOrdering, accessPlan.cost);
|
|
117
102
|
}
|
|
118
103
|
else {
|
|
119
104
|
// Fall back to sequential scan
|
|
120
105
|
log('Using sequential scan (no beneficial index access)');
|
|
121
|
-
return createSeqScan(originalNode, accessPlan.cost);
|
|
106
|
+
return createSeqScan(originalNode, filterInfo, accessPlan.cost);
|
|
122
107
|
}
|
|
123
108
|
}
|
|
124
109
|
/**
|
|
125
110
|
* Create a sequential scan node
|
|
126
111
|
*/
|
|
127
|
-
function createSeqScan(originalNode, cost) {
|
|
128
|
-
const tableRows = originalNode.
|
|
112
|
+
function createSeqScan(originalNode, filterInfo, cost) {
|
|
113
|
+
const tableRows = originalNode.estimatedRows || 1000;
|
|
129
114
|
const scanCost = cost ?? seqScanCost(tableRows);
|
|
130
|
-
|
|
115
|
+
// Create default FilterInfo if not provided
|
|
116
|
+
const effectiveFilterInfo = filterInfo || {
|
|
117
|
+
idxNum: 0,
|
|
118
|
+
idxStr: 'fullscan',
|
|
119
|
+
constraints: [],
|
|
120
|
+
args: [],
|
|
121
|
+
indexInfoOutput: {
|
|
122
|
+
nConstraint: 0,
|
|
123
|
+
aConstraint: [],
|
|
124
|
+
nOrderBy: 0,
|
|
125
|
+
aOrderBy: [],
|
|
126
|
+
aConstraintUsage: [],
|
|
127
|
+
idxNum: 0,
|
|
128
|
+
idxStr: 'fullscan',
|
|
129
|
+
orderByConsumed: false,
|
|
130
|
+
estimatedCost: scanCost,
|
|
131
|
+
estimatedRows: BigInt(tableRows),
|
|
132
|
+
idxFlags: 0,
|
|
133
|
+
colUsed: 0n,
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
const seqScan = new SeqScanNode(originalNode.scope, originalNode, effectiveFilterInfo, scanCost);
|
|
131
137
|
return seqScan;
|
|
132
138
|
}
|
|
133
139
|
//# sourceMappingURL=rule-select-access-path.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-select-access-path.js","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-select-access-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"rule-select-access-path.js","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-select-access-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-aggregate-streaming.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/aggregate/rule-aggregate-streaming.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAO7D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"rule-aggregate-streaming.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/aggregate/rule-aggregate-streaming.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAO7D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAkI5F"}
|
|
@@ -31,8 +31,38 @@ export function ruleAggregateStreaming(node, _context) {
|
|
|
31
31
|
nulls: undefined
|
|
32
32
|
}));
|
|
33
33
|
const sortNode = new SortNode(node.scope, source, sortKeys);
|
|
34
|
+
// Create combined attributes: AggregateNode attributes + source attributes
|
|
35
|
+
// This ensures both GROUP BY/aggregate AND source column attribute IDs are preserved
|
|
36
|
+
const aggregateAttrs = node.getAttributes();
|
|
37
|
+
const sourceAttrs = node.source.getAttributes();
|
|
38
|
+
// Deduplicate by column NAME to avoid duplicate columns like 'id'
|
|
39
|
+
// (The same logical column can have different attribute IDs between aggregate and source)
|
|
40
|
+
const seenNames = new Set();
|
|
41
|
+
const combinedAttrs = [];
|
|
42
|
+
// Add aggregate attributes first (GROUP BY + aggregates)
|
|
43
|
+
for (const attr of aggregateAttrs) {
|
|
44
|
+
combinedAttrs.push(attr);
|
|
45
|
+
seenNames.add(attr.name);
|
|
46
|
+
}
|
|
47
|
+
// Add source attributes that aren't already present by name
|
|
48
|
+
for (const attr of sourceAttrs) {
|
|
49
|
+
if (!seenNames.has(attr.name)) {
|
|
50
|
+
combinedAttrs.push(attr);
|
|
51
|
+
seenNames.add(attr.name);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Final safety-pass: filter duplicates that may have slipped through
|
|
55
|
+
const uniqueByName = new Set();
|
|
56
|
+
const deduped = [];
|
|
57
|
+
for (const attr of combinedAttrs) {
|
|
58
|
+
if (!uniqueByName.has(attr.name)) {
|
|
59
|
+
deduped.push(attr);
|
|
60
|
+
uniqueByName.add(attr.name);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const finalAttrs = deduped;
|
|
34
64
|
const result = new StreamAggregateNode(node.scope, sortNode, node.groupBy, node.aggregates, undefined, // estimatedCostOverride
|
|
35
|
-
|
|
65
|
+
finalAttrs // unique list
|
|
36
66
|
);
|
|
37
67
|
// Let framework set physical properties via markPhysical()
|
|
38
68
|
// Both SortNode and StreamAggregateNode have getPhysical() methods
|
|
@@ -41,8 +71,38 @@ export function ruleAggregateStreaming(node, _context) {
|
|
|
41
71
|
}
|
|
42
72
|
else {
|
|
43
73
|
// No GROUP BY - can stream aggregate without sorting
|
|
74
|
+
// Create combined attributes: AggregateNode attributes + source attributes
|
|
75
|
+
// This ensures both GROUP BY/aggregate AND source column attribute IDs are preserved
|
|
76
|
+
const aggregateAttrs = node.getAttributes();
|
|
77
|
+
const sourceAttrs = node.source.getAttributes();
|
|
78
|
+
// Deduplicate by column NAME to avoid duplicate columns like 'id'
|
|
79
|
+
// (The same logical column can have different attribute IDs between aggregate and source)
|
|
80
|
+
const seenNames = new Set();
|
|
81
|
+
const combinedAttrs = [];
|
|
82
|
+
// Add aggregate attributes first (GROUP BY + aggregates)
|
|
83
|
+
for (const attr of aggregateAttrs) {
|
|
84
|
+
combinedAttrs.push(attr);
|
|
85
|
+
seenNames.add(attr.name);
|
|
86
|
+
}
|
|
87
|
+
// Add source attributes that aren't already present by name
|
|
88
|
+
for (const attr of sourceAttrs) {
|
|
89
|
+
if (!seenNames.has(attr.name)) {
|
|
90
|
+
combinedAttrs.push(attr);
|
|
91
|
+
seenNames.add(attr.name);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Final safety-pass: filter duplicates that may have slipped through
|
|
95
|
+
const uniqueByName = new Set();
|
|
96
|
+
const deduped = [];
|
|
97
|
+
for (const attr of combinedAttrs) {
|
|
98
|
+
if (!uniqueByName.has(attr.name)) {
|
|
99
|
+
deduped.push(attr);
|
|
100
|
+
uniqueByName.add(attr.name);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const finalAttrs = deduped;
|
|
44
104
|
const result = new StreamAggregateNode(node.scope, source, node.groupBy, node.aggregates, undefined, // estimatedCostOverride
|
|
45
|
-
|
|
105
|
+
finalAttrs // unique list
|
|
46
106
|
);
|
|
47
107
|
// Let framework set physical properties via markPhysical()
|
|
48
108
|
// StreamAggregateNode has getPhysical() method
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-aggregate-streaming.js","sourceRoot":"","sources":["../../../../../src/planner/rules/aggregate/rule-aggregate-streaming.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,oCAAoC,CAAC,CAAC;AAE/D,MAAM,UAAU,sBAAsB,CAAC,IAAc,EAAE,QAAoB;IAC1E,qCAAqC;IACrC,IAAI,CAAC,CAAC,IAAI,YAAY,aAAa,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,GAAG,CAAC,8CAA8C,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAE7D,2CAA2C;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAE3B,sCAAsC;IACtC,sDAAsD;IACtD,oDAAoD;IAEpD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,kDAAkD;QAClD,gCAAgC;QAChC,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1C,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,KAAc;YACzB,KAAK,EAAE,SAAS;SAChB,CAAC,CAAC,CAAC;QAEJ,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,IAAI,mBAAmB,CACrC,IAAI,CAAC,KAAK,EACV,QAAQ,EACR,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,UAAU,EACf,SAAS,EAAE,wBAAwB;QACnC,
|
|
1
|
+
{"version":3,"file":"rule-aggregate-streaming.js","sourceRoot":"","sources":["../../../../../src/planner/rules/aggregate/rule-aggregate-streaming.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-materialization-advisory.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/cache/rule-materialization-advisory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAK7D,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"rule-materialization-advisory.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/cache/rule-materialization-advisory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAK7D,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAsDhG"}
|