@quereus/quereus 0.7.3 → 0.7.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/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +19 -18
- package/package.json +3 -3
- package/dist/src/common/constants.js.map +0 -1
- package/dist/src/common/datatype.js.map +0 -1
- package/dist/src/common/errors.js.map +0 -1
- package/dist/src/common/json-types.js.map +0 -1
- package/dist/src/common/logger.js.map +0 -1
- package/dist/src/common/type-inference.js.map +0 -1
- package/dist/src/common/types.js.map +0 -1
- package/dist/src/core/database-options.js.map +0 -1
- package/dist/src/core/database.js.map +0 -1
- package/dist/src/core/param.js.map +0 -1
- package/dist/src/core/statement.js.map +0 -1
- package/dist/src/func/builtins/aggregate.js.map +0 -1
- package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
- package/dist/src/func/builtins/conversion.js.map +0 -1
- package/dist/src/func/builtins/datetime.js.map +0 -1
- package/dist/src/func/builtins/explain.js.map +0 -1
- package/dist/src/func/builtins/generation.js.map +0 -1
- package/dist/src/func/builtins/index.js.map +0 -1
- package/dist/src/func/builtins/json-helpers.js.map +0 -1
- package/dist/src/func/builtins/json-tvf.js.map +0 -1
- package/dist/src/func/builtins/json.js.map +0 -1
- package/dist/src/func/builtins/scalar.js.map +0 -1
- package/dist/src/func/builtins/schema.js.map +0 -1
- package/dist/src/func/builtins/string.js.map +0 -1
- package/dist/src/func/builtins/timespan.js.map +0 -1
- package/dist/src/func/context.js.map +0 -1
- package/dist/src/func/registration.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/parser/ast.js.map +0 -1
- package/dist/src/parser/index.js.map +0 -1
- package/dist/src/parser/lexer.js.map +0 -1
- package/dist/src/parser/parser.js.map +0 -1
- package/dist/src/parser/utils.js.map +0 -1
- package/dist/src/parser/visitor.js.map +0 -1
- package/dist/src/planner/analysis/binding-collector.js.map +0 -1
- package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
- package/dist/src/planner/analysis/const-pass.js.map +0 -1
- package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
- package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
- package/dist/src/planner/building/alter-table.js.map +0 -1
- package/dist/src/planner/building/block.js.map +0 -1
- package/dist/src/planner/building/constraint-builder.js.map +0 -1
- package/dist/src/planner/building/create-assertion.js.map +0 -1
- package/dist/src/planner/building/create-view.js.map +0 -1
- package/dist/src/planner/building/ddl.js.map +0 -1
- package/dist/src/planner/building/declare-schema.js.map +0 -1
- package/dist/src/planner/building/delete.js.map +0 -1
- package/dist/src/planner/building/drop-assertion.js.map +0 -1
- package/dist/src/planner/building/drop-table.js.map +0 -1
- package/dist/src/planner/building/drop-view.js.map +0 -1
- package/dist/src/planner/building/expression.js.map +0 -1
- package/dist/src/planner/building/function-call.js.map +0 -1
- package/dist/src/planner/building/insert.js.map +0 -1
- package/dist/src/planner/building/pragma.js.map +0 -1
- package/dist/src/planner/building/schema-resolution.js.map +0 -1
- package/dist/src/planner/building/select-aggregates.js.map +0 -1
- package/dist/src/planner/building/select-compound.js.map +0 -1
- package/dist/src/planner/building/select-context.js.map +0 -1
- package/dist/src/planner/building/select-modifiers.js.map +0 -1
- package/dist/src/planner/building/select-projections.js.map +0 -1
- package/dist/src/planner/building/select-window.js.map +0 -1
- package/dist/src/planner/building/select.js.map +0 -1
- package/dist/src/planner/building/table-function.js.map +0 -1
- package/dist/src/planner/building/table.js.map +0 -1
- package/dist/src/planner/building/transaction.js.map +0 -1
- package/dist/src/planner/building/update.js.map +0 -1
- package/dist/src/planner/building/with.js.map +0 -1
- package/dist/src/planner/cache/correlation-detector.js.map +0 -1
- package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
- package/dist/src/planner/cache/reference-graph.js.map +0 -1
- package/dist/src/planner/cost/index.js.map +0 -1
- package/dist/src/planner/debug/logger-utils.js.map +0 -1
- package/dist/src/planner/debug.js.map +0 -1
- package/dist/src/planner/framework/characteristics.js.map +0 -1
- package/dist/src/planner/framework/context.js.map +0 -1
- package/dist/src/planner/framework/pass.js.map +0 -1
- package/dist/src/planner/framework/physical-utils.js.map +0 -1
- package/dist/src/planner/framework/registry.js.map +0 -1
- package/dist/src/planner/framework/trace.js.map +0 -1
- package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
- package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
- package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
- package/dist/src/planner/nodes/array-index-node.js.map +0 -1
- package/dist/src/planner/nodes/block.js.map +0 -1
- package/dist/src/planner/nodes/cache-node.js.map +0 -1
- package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
- package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
- package/dist/src/planner/nodes/create-index-node.js.map +0 -1
- package/dist/src/planner/nodes/create-table-node.js.map +0 -1
- package/dist/src/planner/nodes/create-view-node.js.map +0 -1
- package/dist/src/planner/nodes/cte-node.js.map +0 -1
- package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
- package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
- package/dist/src/planner/nodes/delete-node.js.map +0 -1
- package/dist/src/planner/nodes/distinct-node.js.map +0 -1
- package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
- package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
- package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
- package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
- package/dist/src/planner/nodes/filter.js.map +0 -1
- package/dist/src/planner/nodes/function.js.map +0 -1
- package/dist/src/planner/nodes/insert-node.js.map +0 -1
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
- package/dist/src/planner/nodes/join-node.js.map +0 -1
- package/dist/src/planner/nodes/limit-offset.js.map +0 -1
- package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
- package/dist/src/planner/nodes/plan-node.js.map +0 -1
- package/dist/src/planner/nodes/pragma.js.map +0 -1
- package/dist/src/planner/nodes/project-node.js.map +0 -1
- package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
- package/dist/src/planner/nodes/reference.js.map +0 -1
- package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
- package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
- package/dist/src/planner/nodes/returning-node.js.map +0 -1
- package/dist/src/planner/nodes/scalar.js.map +0 -1
- package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
- package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
- package/dist/src/planner/nodes/single-row.js.map +0 -1
- package/dist/src/planner/nodes/sink-node.js.map +0 -1
- package/dist/src/planner/nodes/sort.js.map +0 -1
- package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
- package/dist/src/planner/nodes/subquery.js.map +0 -1
- package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
- package/dist/src/planner/nodes/table-function-call.js.map +0 -1
- package/dist/src/planner/nodes/transaction-node.js.map +0 -1
- package/dist/src/planner/nodes/update-node.js.map +0 -1
- package/dist/src/planner/nodes/values-node.js.map +0 -1
- package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
- package/dist/src/planner/nodes/window-function.js.map +0 -1
- package/dist/src/planner/nodes/window-node.js.map +0 -1
- package/dist/src/planner/optimizer-tuning.js.map +0 -1
- package/dist/src/planner/optimizer.js.map +0 -1
- package/dist/src/planner/planning-context.js.map +0 -1
- package/dist/src/planner/resolve.js.map +0 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
- package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
- package/dist/src/planner/scopes/aliased.js.map +0 -1
- package/dist/src/planner/scopes/base.js.map +0 -1
- package/dist/src/planner/scopes/empty.js.map +0 -1
- package/dist/src/planner/scopes/global.js.map +0 -1
- package/dist/src/planner/scopes/multi.js.map +0 -1
- package/dist/src/planner/scopes/param.js.map +0 -1
- package/dist/src/planner/scopes/registered.js.map +0 -1
- package/dist/src/planner/scopes/scope.js.map +0 -1
- package/dist/src/planner/stats/basic-estimates.js.map +0 -1
- package/dist/src/planner/stats/index.js.map +0 -1
- package/dist/src/planner/type-utils.js.map +0 -1
- package/dist/src/planner/util/key-utils.js.map +0 -1
- package/dist/src/planner/validation/determinism-validator.js.map +0 -1
- package/dist/src/planner/validation/plan-validator.js.map +0 -1
- package/dist/src/runtime/async-util.js.map +0 -1
- package/dist/src/runtime/cache/shared-cache.js.map +0 -1
- package/dist/src/runtime/context-helpers.js.map +0 -1
- package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
- package/dist/src/runtime/emission-context.js.map +0 -1
- package/dist/src/runtime/emit/add-constraint.js.map +0 -1
- package/dist/src/runtime/emit/aggregate.js.map +0 -1
- package/dist/src/runtime/emit/array-index.js.map +0 -1
- package/dist/src/runtime/emit/between.js.map +0 -1
- package/dist/src/runtime/emit/binary.js.map +0 -1
- package/dist/src/runtime/emit/block.js.map +0 -1
- package/dist/src/runtime/emit/cache.js.map +0 -1
- package/dist/src/runtime/emit/case.js.map +0 -1
- package/dist/src/runtime/emit/cast.js.map +0 -1
- package/dist/src/runtime/emit/collate.js.map +0 -1
- package/dist/src/runtime/emit/column-reference.js.map +0 -1
- package/dist/src/runtime/emit/constraint-check.js.map +0 -1
- package/dist/src/runtime/emit/create-assertion.js.map +0 -1
- package/dist/src/runtime/emit/create-index.js.map +0 -1
- package/dist/src/runtime/emit/create-table.js.map +0 -1
- package/dist/src/runtime/emit/create-view.js.map +0 -1
- package/dist/src/runtime/emit/cte-reference.js.map +0 -1
- package/dist/src/runtime/emit/cte.js.map +0 -1
- package/dist/src/runtime/emit/delete.js.map +0 -1
- package/dist/src/runtime/emit/distinct.js.map +0 -1
- package/dist/src/runtime/emit/dml-executor.js.map +0 -1
- package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
- package/dist/src/runtime/emit/drop-table.js.map +0 -1
- package/dist/src/runtime/emit/drop-view.js.map +0 -1
- package/dist/src/runtime/emit/filter.js.map +0 -1
- package/dist/src/runtime/emit/insert.js.map +0 -1
- package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
- package/dist/src/runtime/emit/join.js.map +0 -1
- package/dist/src/runtime/emit/limit-offset.js.map +0 -1
- package/dist/src/runtime/emit/literal.js.map +0 -1
- package/dist/src/runtime/emit/parameter.js.map +0 -1
- package/dist/src/runtime/emit/pragma.js.map +0 -1
- package/dist/src/runtime/emit/project.js.map +0 -1
- package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
- package/dist/src/runtime/emit/remote-query.js.map +0 -1
- package/dist/src/runtime/emit/retrieve.js.map +0 -1
- package/dist/src/runtime/emit/returning.js.map +0 -1
- package/dist/src/runtime/emit/scalar-function.js.map +0 -1
- package/dist/src/runtime/emit/scan.js.map +0 -1
- package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
- package/dist/src/runtime/emit/sequencing.js.map +0 -1
- package/dist/src/runtime/emit/set-operation.js.map +0 -1
- package/dist/src/runtime/emit/sink.js.map +0 -1
- package/dist/src/runtime/emit/sort.js.map +0 -1
- package/dist/src/runtime/emit/subquery.js.map +0 -1
- package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
- package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
- package/dist/src/runtime/emit/transaction.js.map +0 -1
- package/dist/src/runtime/emit/unary.js.map +0 -1
- package/dist/src/runtime/emit/update.js.map +0 -1
- package/dist/src/runtime/emit/values.js.map +0 -1
- package/dist/src/runtime/emit/window-function.js.map +0 -1
- package/dist/src/runtime/emit/window.js.map +0 -1
- package/dist/src/runtime/emitters.js.map +0 -1
- package/dist/src/runtime/register.js.map +0 -1
- package/dist/src/runtime/scheduler.js.map +0 -1
- package/dist/src/runtime/types.js.map +0 -1
- package/dist/src/runtime/utils.js.map +0 -1
- package/dist/src/schema/assertion.js.map +0 -1
- package/dist/src/schema/catalog.js.map +0 -1
- package/dist/src/schema/change-events.js.map +0 -1
- package/dist/src/schema/column.js.map +0 -1
- package/dist/src/schema/declared-schema-manager.js.map +0 -1
- package/dist/src/schema/function.js.map +0 -1
- package/dist/src/schema/manager.js.map +0 -1
- package/dist/src/schema/schema-differ.js.map +0 -1
- package/dist/src/schema/schema-hasher.js.map +0 -1
- package/dist/src/schema/schema.js.map +0 -1
- package/dist/src/schema/table.js.map +0 -1
- package/dist/src/schema/view.js.map +0 -1
- package/dist/src/schema/window-function.js.map +0 -1
- package/dist/src/types/builtin-types.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/json-type.js.map +0 -1
- package/dist/src/types/logical-type.js.map +0 -1
- package/dist/src/types/plugin-interface.js.map +0 -1
- package/dist/src/types/registry.js.map +0 -1
- package/dist/src/types/temporal-types.js.map +0 -1
- package/dist/src/types/validation.js.map +0 -1
- package/dist/src/util/affinity.js.map +0 -1
- package/dist/src/util/ast-stringify.js.map +0 -1
- package/dist/src/util/cached.js.map +0 -1
- package/dist/src/util/coercion.js.map +0 -1
- package/dist/src/util/comparison.js.map +0 -1
- package/dist/src/util/environment.js.map +0 -1
- package/dist/src/util/hash.js.map +0 -1
- package/dist/src/util/latches.js.map +0 -1
- package/dist/src/util/mutation-statement.js.map +0 -1
- package/dist/src/util/patterns.js.map +0 -1
- package/dist/src/util/plan-formatter.js.map +0 -1
- package/dist/src/util/plugin-helper.js.map +0 -1
- package/dist/src/util/row-descriptor.js.map +0 -1
- package/dist/src/util/serialization.js.map +0 -1
- package/dist/src/util/sql-literal.js.map +0 -1
- package/dist/src/util/working-table-iterable.js.map +0 -1
- package/dist/src/vtab/best-access-plan.js.map +0 -1
- package/dist/src/vtab/connection.js.map +0 -1
- package/dist/src/vtab/filter-info.js.map +0 -1
- package/dist/src/vtab/index-info.js.map +0 -1
- package/dist/src/vtab/manifest.js.map +0 -1
- package/dist/src/vtab/memory/connection.js.map +0 -1
- package/dist/src/vtab/memory/index.js.map +0 -1
- package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
- package/dist/src/vtab/memory/layer/base.js.map +0 -1
- package/dist/src/vtab/memory/layer/connection.js.map +0 -1
- package/dist/src/vtab/memory/layer/interface.js.map +0 -1
- package/dist/src/vtab/memory/layer/manager.js.map +0 -1
- package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
- package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
- package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
- package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
- package/dist/src/vtab/memory/module.js.map +0 -1
- package/dist/src/vtab/memory/table.js.map +0 -1
- package/dist/src/vtab/memory/types.js.map +0 -1
- package/dist/src/vtab/memory/utils/logging.js.map +0 -1
- package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
- package/dist/src/vtab/module.js.map +0 -1
- package/dist/src/vtab/table.js.map +0 -1
- package/src/common/constants.ts +0 -60
- package/src/common/datatype.ts +0 -85
- package/src/common/errors.ts +0 -189
- package/src/common/json-types.ts +0 -16
- package/src/common/logger.ts +0 -97
- package/src/common/type-inference.ts +0 -39
- package/src/common/types.ts +0 -151
- package/src/core/database-options.ts +0 -258
- package/src/core/database.ts +0 -1461
- package/src/core/param.ts +0 -56
- package/src/core/statement.ts +0 -528
- package/src/func/builtins/aggregate.ts +0 -269
- package/src/func/builtins/builtin-window-functions.ts +0 -166
- package/src/func/builtins/conversion.ts +0 -226
- package/src/func/builtins/datetime.ts +0 -500
- package/src/func/builtins/explain.ts +0 -779
- package/src/func/builtins/generation.ts +0 -43
- package/src/func/builtins/index.ts +0 -167
- package/src/func/builtins/json-helpers.ts +0 -237
- package/src/func/builtins/json-tvf.ts +0 -224
- package/src/func/builtins/json.ts +0 -588
- package/src/func/builtins/scalar.ts +0 -423
- package/src/func/builtins/schema.ts +0 -213
- package/src/func/builtins/string.ts +0 -306
- package/src/func/builtins/timespan.ts +0 -179
- package/src/func/context.ts +0 -258
- package/src/func/registration.ts +0 -201
- package/src/index.ts +0 -172
- package/src/parser/ast.ts +0 -581
- package/src/parser/index.ts +0 -65
- package/src/parser/lexer.ts +0 -806
- package/src/parser/parser.ts +0 -3352
- package/src/parser/utils.ts +0 -10
- package/src/parser/visitor.ts +0 -188
- package/src/planner/analysis/README.md +0 -93
- package/src/planner/analysis/binding-collector.ts +0 -83
- package/src/planner/analysis/const-evaluator.ts +0 -63
- package/src/planner/analysis/const-pass.ts +0 -282
- package/src/planner/analysis/constraint-extractor.ts +0 -764
- package/src/planner/analysis/predicate-normalizer.ts +0 -237
- package/src/planner/building/alter-table.ts +0 -49
- package/src/planner/building/block.ts +0 -93
- package/src/planner/building/constraint-builder.ts +0 -178
- package/src/planner/building/create-assertion.ts +0 -7
- package/src/planner/building/create-view.ts +0 -29
- package/src/planner/building/ddl.ts +0 -24
- package/src/planner/building/declare-schema.ts +0 -22
- package/src/planner/building/delete.ts +0 -218
- package/src/planner/building/drop-assertion.ts +0 -11
- package/src/planner/building/drop-table.ts +0 -13
- package/src/planner/building/drop-view.ts +0 -19
- package/src/planner/building/expression.ts +0 -205
- package/src/planner/building/function-call.ts +0 -129
- package/src/planner/building/insert.ts +0 -435
- package/src/planner/building/pragma.ts +0 -34
- package/src/planner/building/schema-resolution.ts +0 -176
- package/src/planner/building/select-aggregates.ts +0 -318
- package/src/planner/building/select-compound.ts +0 -119
- package/src/planner/building/select-context.ts +0 -85
- package/src/planner/building/select-modifiers.ts +0 -236
- package/src/planner/building/select-projections.ts +0 -177
- package/src/planner/building/select-window.ts +0 -259
- package/src/planner/building/select.ts +0 -567
- package/src/planner/building/table-function.ts +0 -49
- package/src/planner/building/table.ts +0 -40
- package/src/planner/building/transaction.ts +0 -23
- package/src/planner/building/update.ts +0 -331
- package/src/planner/building/with.ts +0 -180
- package/src/planner/cache/correlation-detector.ts +0 -83
- package/src/planner/cache/materialization-advisory.ts +0 -265
- package/src/planner/cache/reference-graph.ts +0 -196
- package/src/planner/cost/index.ts +0 -169
- package/src/planner/debug/logger-utils.ts +0 -68
- package/src/planner/debug.ts +0 -480
- package/src/planner/framework/README.md +0 -132
- package/src/planner/framework/characteristics.ts +0 -503
- package/src/planner/framework/context.ts +0 -239
- package/src/planner/framework/pass.ts +0 -354
- package/src/planner/framework/physical-utils.ts +0 -210
- package/src/planner/framework/registry.ts +0 -261
- package/src/planner/framework/trace.ts +0 -259
- package/src/planner/nodes/add-constraint-node.ts +0 -62
- package/src/planner/nodes/aggregate-function.ts +0 -155
- package/src/planner/nodes/aggregate-node.ts +0 -267
- package/src/planner/nodes/array-index-node.ts +0 -50
- package/src/planner/nodes/block.ts +0 -80
- package/src/planner/nodes/cache-node.ts +0 -103
- package/src/planner/nodes/constraint-check-node.ts +0 -138
- package/src/planner/nodes/create-assertion-node.ts +0 -51
- package/src/planner/nodes/create-index-node.ts +0 -41
- package/src/planner/nodes/create-table-node.ts +0 -35
- package/src/planner/nodes/create-view-node.ts +0 -44
- package/src/planner/nodes/cte-node.ts +0 -168
- package/src/planner/nodes/cte-reference-node.ts +0 -125
- package/src/planner/nodes/declarative-schema.ts +0 -221
- package/src/planner/nodes/delete-node.ts +0 -102
- package/src/planner/nodes/distinct-node.ts +0 -107
- package/src/planner/nodes/dml-executor-node.ts +0 -104
- package/src/planner/nodes/drop-assertion-node.ts +0 -50
- package/src/planner/nodes/drop-table-node.ts +0 -36
- package/src/planner/nodes/drop-view-node.ts +0 -37
- package/src/planner/nodes/filter.ts +0 -144
- package/src/planner/nodes/function.ts +0 -98
- package/src/planner/nodes/insert-node.ts +0 -126
- package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
- package/src/planner/nodes/join-node.ts +0 -336
- package/src/planner/nodes/limit-offset.ts +0 -144
- package/src/planner/nodes/plan-node-type.ts +0 -95
- package/src/planner/nodes/plan-node.ts +0 -503
- package/src/planner/nodes/pragma.ts +0 -98
- package/src/planner/nodes/project-node.ts +0 -337
- package/src/planner/nodes/recursive-cte-node.ts +0 -158
- package/src/planner/nodes/reference.ts +0 -334
- package/src/planner/nodes/remote-query-node.ts +0 -73
- package/src/planner/nodes/retrieve-node.ts +0 -86
- package/src/planner/nodes/returning-node.ts +0 -269
- package/src/planner/nodes/scalar.ts +0 -772
- package/src/planner/nodes/sequencing-node.ts +0 -113
- package/src/planner/nodes/set-operation-node.ts +0 -87
- package/src/planner/nodes/single-row.ts +0 -85
- package/src/planner/nodes/sink-node.ts +0 -61
- package/src/planner/nodes/sort.ts +0 -166
- package/src/planner/nodes/stream-aggregate.ts +0 -293
- package/src/planner/nodes/subquery.ts +0 -268
- package/src/planner/nodes/table-access-nodes.ts +0 -323
- package/src/planner/nodes/table-function-call.ts +0 -134
- package/src/planner/nodes/transaction-node.ts +0 -55
- package/src/planner/nodes/update-node.ts +0 -138
- package/src/planner/nodes/values-node.ts +0 -244
- package/src/planner/nodes/view-reference-node.ts +0 -97
- package/src/planner/nodes/window-function.ts +0 -73
- package/src/planner/nodes/window-node.ts +0 -199
- package/src/planner/optimizer-tuning.ts +0 -105
- package/src/planner/optimizer.ts +0 -332
- package/src/planner/planning-context.ts +0 -190
- package/src/planner/resolve.ts +0 -101
- package/src/planner/rules/README.md +0 -96
- package/src/planner/rules/access/rule-select-access-path.ts +0 -399
- package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
- package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
- package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
- package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
- package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
- package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
- package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
- package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
- package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
- package/src/planner/scopes/aliased.ts +0 -50
- package/src/planner/scopes/base.ts +0 -10
- package/src/planner/scopes/empty.ts +0 -12
- package/src/planner/scopes/global.ts +0 -73
- package/src/planner/scopes/multi.ts +0 -40
- package/src/planner/scopes/param.ts +0 -95
- package/src/planner/scopes/registered.ts +0 -67
- package/src/planner/scopes/scope.ts +0 -16
- package/src/planner/stats/basic-estimates.ts +0 -107
- package/src/planner/stats/index.ts +0 -158
- package/src/planner/type-utils.ts +0 -87
- package/src/planner/util/key-utils.ts +0 -46
- package/src/planner/validation/determinism-validator.ts +0 -104
- package/src/planner/validation/plan-validator.ts +0 -335
- package/src/runtime/async-util.ts +0 -283
- package/src/runtime/cache/shared-cache.ts +0 -169
- package/src/runtime/context-helpers.ts +0 -191
- package/src/runtime/deferred-constraint-queue.ts +0 -196
- package/src/runtime/emission-context.ts +0 -319
- package/src/runtime/emit/add-constraint.ts +0 -78
- package/src/runtime/emit/aggregate.ts +0 -581
- package/src/runtime/emit/array-index.ts +0 -25
- package/src/runtime/emit/between.ts +0 -51
- package/src/runtime/emit/binary.ts +0 -357
- package/src/runtime/emit/block.ts +0 -23
- package/src/runtime/emit/cache.ts +0 -64
- package/src/runtime/emit/case.ts +0 -87
- package/src/runtime/emit/cast.ts +0 -151
- package/src/runtime/emit/collate.ts +0 -9
- package/src/runtime/emit/column-reference.ts +0 -17
- package/src/runtime/emit/constraint-check.ts +0 -290
- package/src/runtime/emit/create-assertion.ts +0 -82
- package/src/runtime/emit/create-index.ts +0 -15
- package/src/runtime/emit/create-table.ts +0 -15
- package/src/runtime/emit/create-view.ts +0 -52
- package/src/runtime/emit/cte-reference.ts +0 -38
- package/src/runtime/emit/cte.ts +0 -39
- package/src/runtime/emit/delete.ts +0 -24
- package/src/runtime/emit/distinct.ts +0 -40
- package/src/runtime/emit/dml-executor.ts +0 -198
- package/src/runtime/emit/drop-assertion.ts +0 -45
- package/src/runtime/emit/drop-table.ts +0 -27
- package/src/runtime/emit/drop-view.ts +0 -49
- package/src/runtime/emit/filter.ts +0 -30
- package/src/runtime/emit/insert.ts +0 -42
- package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
- package/src/runtime/emit/join.ts +0 -148
- package/src/runtime/emit/limit-offset.ts +0 -73
- package/src/runtime/emit/literal.ts +0 -17
- package/src/runtime/emit/parameter.ts +0 -59
- package/src/runtime/emit/pragma.ts +0 -56
- package/src/runtime/emit/project.ts +0 -46
- package/src/runtime/emit/recursive-cte.ts +0 -111
- package/src/runtime/emit/remote-query.ts +0 -47
- package/src/runtime/emit/retrieve.ts +0 -15
- package/src/runtime/emit/returning.ts +0 -41
- package/src/runtime/emit/scalar-function.ts +0 -69
- package/src/runtime/emit/scan.ts +0 -106
- package/src/runtime/emit/schema-declarative.ts +0 -215
- package/src/runtime/emit/sequencing.ts +0 -24
- package/src/runtime/emit/set-operation.ts +0 -141
- package/src/runtime/emit/sink.ts +0 -27
- package/src/runtime/emit/sort.ts +0 -75
- package/src/runtime/emit/subquery.ts +0 -203
- package/src/runtime/emit/table-valued-function.ts +0 -106
- package/src/runtime/emit/temporal-arithmetic.ts +0 -302
- package/src/runtime/emit/transaction.ts +0 -205
- package/src/runtime/emit/unary.ts +0 -101
- package/src/runtime/emit/update.ts +0 -66
- package/src/runtime/emit/values.ts +0 -66
- package/src/runtime/emit/window-function.ts +0 -42
- package/src/runtime/emit/window.ts +0 -458
- package/src/runtime/emitters.ts +0 -183
- package/src/runtime/register.ts +0 -150
- package/src/runtime/scheduler.ts +0 -488
- package/src/runtime/types.ts +0 -242
- package/src/runtime/utils.ts +0 -177
- package/src/schema/assertion.ts +0 -21
- package/src/schema/catalog.ts +0 -269
- package/src/schema/change-events.ts +0 -80
- package/src/schema/column.ts +0 -51
- package/src/schema/declared-schema-manager.ts +0 -82
- package/src/schema/function.ts +0 -188
- package/src/schema/manager.ts +0 -1034
- package/src/schema/schema-differ.ts +0 -214
- package/src/schema/schema-hasher.ts +0 -26
- package/src/schema/schema.ts +0 -222
- package/src/schema/table.ts +0 -409
- package/src/schema/view.ts +0 -19
- package/src/schema/window-function.ts +0 -56
- package/src/types/builtin-types.ts +0 -350
- package/src/types/index.ts +0 -17
- package/src/types/json-type.ts +0 -152
- package/src/types/logical-type.ts +0 -91
- package/src/types/plugin-interface.ts +0 -10
- package/src/types/registry.ts +0 -204
- package/src/types/temporal-types.ts +0 -290
- package/src/types/validation.ts +0 -120
- package/src/util/affinity.ts +0 -151
- package/src/util/ast-stringify.ts +0 -887
- package/src/util/cached.ts +0 -25
- package/src/util/coercion.ts +0 -113
- package/src/util/comparison.ts +0 -510
- package/src/util/environment.ts +0 -52
- package/src/util/hash.ts +0 -90
- package/src/util/latches.ts +0 -47
- package/src/util/mutation-statement.ts +0 -135
- package/src/util/patterns.ts +0 -56
- package/src/util/plan-formatter.ts +0 -48
- package/src/util/plugin-helper.ts +0 -110
- package/src/util/row-descriptor.ts +0 -105
- package/src/util/serialization.ts +0 -47
- package/src/util/sql-literal.ts +0 -22
- package/src/util/working-table-iterable.ts +0 -38
- package/src/vtab/best-access-plan.ts +0 -244
- package/src/vtab/connection.ts +0 -36
- package/src/vtab/filter-info.ts +0 -23
- package/src/vtab/index-info.ts +0 -84
- package/src/vtab/manifest.ts +0 -86
- package/src/vtab/memory/connection.ts +0 -73
- package/src/vtab/memory/index.ts +0 -191
- package/src/vtab/memory/layer/base-cursor.ts +0 -124
- package/src/vtab/memory/layer/base.ts +0 -275
- package/src/vtab/memory/layer/connection.ts +0 -203
- package/src/vtab/memory/layer/interface.ts +0 -47
- package/src/vtab/memory/layer/manager.ts +0 -909
- package/src/vtab/memory/layer/safe-iterate.ts +0 -49
- package/src/vtab/memory/layer/scan-plan.ts +0 -84
- package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
- package/src/vtab/memory/layer/transaction.ts +0 -229
- package/src/vtab/memory/module.ts +0 -667
- package/src/vtab/memory/table.ts +0 -251
- package/src/vtab/memory/types.ts +0 -23
- package/src/vtab/memory/utils/logging.ts +0 -36
- package/src/vtab/memory/utils/primary-key.ts +0 -163
- package/src/vtab/module.ts +0 -162
- package/src/vtab/table.ts +0 -177
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Optimizer tuning parameters - centralized configuration for magic numbers
|
|
3
|
-
*/
|
|
4
|
-
export interface OptimizerTuning {
|
|
5
|
-
/** Row estimation defaults */
|
|
6
|
-
readonly defaultRowEstimate: number;
|
|
7
|
-
|
|
8
|
-
/** Maximum optimization depth to prevent infinite recursion */
|
|
9
|
-
readonly maxOptimizationDepth: number;
|
|
10
|
-
|
|
11
|
-
/** Join optimization */
|
|
12
|
-
readonly join: {
|
|
13
|
-
/** Minimum left side rows to consider caching right side */
|
|
14
|
-
readonly minLeftRowsForCaching: number;
|
|
15
|
-
/** Maximum right side rows to cache */
|
|
16
|
-
readonly maxRightRowsForCaching: number;
|
|
17
|
-
/** Cache threshold multiplier (rightSize * multiplier) */
|
|
18
|
-
readonly cacheThresholdMultiplier: number;
|
|
19
|
-
/** Maximum cache threshold */
|
|
20
|
-
readonly maxCacheThreshold: number;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
/** CTE optimization */
|
|
24
|
-
readonly cte: {
|
|
25
|
-
/** Maximum CTE size to consider for caching */
|
|
26
|
-
readonly maxSizeForCaching: number;
|
|
27
|
-
/** Cache threshold multiplier for CTEs */
|
|
28
|
-
readonly cacheThresholdMultiplier: number;
|
|
29
|
-
/** Maximum cache threshold for CTEs */
|
|
30
|
-
readonly maxCacheThreshold: number;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
/** Recursive CTE configuration */
|
|
34
|
-
readonly recursiveCte: {
|
|
35
|
-
/** Maximum iterations before recursive CTE is terminated (0 = unlimited) */
|
|
36
|
-
readonly maxIterations: number;
|
|
37
|
-
/** Default cache threshold for CTE self-references */
|
|
38
|
-
readonly defaultCacheThreshold: number;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
/** Materialization advisory configuration */
|
|
42
|
-
readonly cache: {
|
|
43
|
-
/** Row threshold for switching from memory to spill strategy */
|
|
44
|
-
readonly spillThreshold: number;
|
|
45
|
-
/** Maximum memory buffer size for spill caches */
|
|
46
|
-
readonly maxSpillBuffer: number;
|
|
47
|
-
/** Whether spill caching is enabled */
|
|
48
|
-
readonly spillEnabled: boolean;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
/** Development and debugging options */
|
|
52
|
-
readonly debug: {
|
|
53
|
-
/** Whether to validate physical plans before emission */
|
|
54
|
-
readonly validatePlan: boolean;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
/** QuickPick join enumeration tuning */
|
|
58
|
-
readonly quickpick?: {
|
|
59
|
-
/** Maximum number of random greedy tours to evaluate */
|
|
60
|
-
readonly maxTours: number;
|
|
61
|
-
/** Time limit in milliseconds for enumeration (soft cap) */
|
|
62
|
-
readonly timeLimitMs: number;
|
|
63
|
-
/** Minimum estimated plan cost to trigger enumeration */
|
|
64
|
-
readonly minTriggerCost: number;
|
|
65
|
-
/** Enable/disable QuickPick globally */
|
|
66
|
-
readonly enabled: boolean;
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Default optimizer tuning parameters
|
|
72
|
-
*/
|
|
73
|
-
export const DEFAULT_TUNING: OptimizerTuning = {
|
|
74
|
-
defaultRowEstimate: 1000,
|
|
75
|
-
maxOptimizationDepth: 50,
|
|
76
|
-
join: {
|
|
77
|
-
minLeftRowsForCaching: 1,
|
|
78
|
-
maxRightRowsForCaching: 50000,
|
|
79
|
-
cacheThresholdMultiplier: 2,
|
|
80
|
-
maxCacheThreshold: 10000
|
|
81
|
-
},
|
|
82
|
-
cte: {
|
|
83
|
-
maxSizeForCaching: 50000,
|
|
84
|
-
cacheThresholdMultiplier: 2,
|
|
85
|
-
maxCacheThreshold: 20000
|
|
86
|
-
},
|
|
87
|
-
recursiveCte: {
|
|
88
|
-
maxIterations: 10000,
|
|
89
|
-
defaultCacheThreshold: 10000
|
|
90
|
-
},
|
|
91
|
-
cache: {
|
|
92
|
-
spillThreshold: 100000,
|
|
93
|
-
maxSpillBuffer: 10000,
|
|
94
|
-
spillEnabled: true
|
|
95
|
-
},
|
|
96
|
-
debug: {
|
|
97
|
-
validatePlan: false // Default to disabled in production
|
|
98
|
-
},
|
|
99
|
-
quickpick: {
|
|
100
|
-
maxTours: 100,
|
|
101
|
-
timeLimitMs: 100,
|
|
102
|
-
minTriggerCost: 0,
|
|
103
|
-
enabled: true
|
|
104
|
-
}
|
|
105
|
-
};
|
package/src/planner/optimizer.ts
DELETED
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
import { createLogger } from '../common/logger.js';
|
|
2
|
-
import { PlanNode } from './nodes/plan-node.js';
|
|
3
|
-
import { PlanNodeType } from './nodes/plan-node-type.js';
|
|
4
|
-
import { OptimizerTuning, DEFAULT_TUNING } from './optimizer-tuning.js';
|
|
5
|
-
|
|
6
|
-
// Re-export for convenience
|
|
7
|
-
export { DEFAULT_TUNING };
|
|
8
|
-
|
|
9
|
-
import { applyRules } from './framework/registry.js';
|
|
10
|
-
import { tracePhaseStart, tracePhaseEnd, traceNodeStart, traceNodeEnd } from './framework/trace.js';
|
|
11
|
-
import { defaultStatsProvider, type StatsProvider } from './stats/index.js';
|
|
12
|
-
import { createOptContext, type OptContext } from './framework/context.js';
|
|
13
|
-
import type { OptimizerDiagnostics } from './framework/context.js';
|
|
14
|
-
import { PassManager, PassId } from './framework/pass.js';
|
|
15
|
-
// Phase 2 rules
|
|
16
|
-
import { ruleMaterializationAdvisory } from './rules/cache/rule-materialization-advisory.js';
|
|
17
|
-
// Phase 1.5 rules
|
|
18
|
-
import { ruleSelectAccessPath } from './rules/access/rule-select-access-path.js';
|
|
19
|
-
import { ruleGrowRetrieve } from './rules/retrieve/rule-grow-retrieve.js';
|
|
20
|
-
import { rulePredicatePushdown } from './rules/predicate/rule-predicate-pushdown.js';
|
|
21
|
-
import { ruleJoinKeyInference } from './rules/join/rule-join-key-inference.js';
|
|
22
|
-
import { ruleJoinGreedyCommute } from './rules/join/rule-join-greedy-commute.js';
|
|
23
|
-
// Predicate pushdown rules
|
|
24
|
-
// Core optimization rules
|
|
25
|
-
import { ruleAggregateStreaming } from './rules/aggregate/rule-aggregate-streaming.js';
|
|
26
|
-
import { ruleQuickPickJoinEnumeration } from './rules/join/rule-quickpick-enumeration.js';
|
|
27
|
-
// Constraint rules removed - now handled in builders for correctness
|
|
28
|
-
import { ruleCteOptimization } from './rules/cache/rule-cte-optimization.js';
|
|
29
|
-
import { ruleMutatingSubqueryCache } from './rules/cache/rule-mutating-subquery-cache.js';
|
|
30
|
-
// Phase 3 rules
|
|
31
|
-
import { validatePhysicalTree } from './validation/plan-validator.js';
|
|
32
|
-
import { Database } from '../core/database.js';
|
|
33
|
-
import { performConstantFolding } from './analysis/const-pass.js';
|
|
34
|
-
import { createRuntimeExpressionEvaluator } from './analysis/const-evaluator.js';
|
|
35
|
-
|
|
36
|
-
const log = createLogger('optimizer');
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* The query optimizer transforms logical plan trees into physical plan trees
|
|
40
|
-
*/
|
|
41
|
-
export class Optimizer {
|
|
42
|
-
private readonly stats: StatsProvider;
|
|
43
|
-
private readonly passManager: PassManager;
|
|
44
|
-
private lastDiagnostics: OptimizerDiagnostics | null = null;
|
|
45
|
-
public tuning: OptimizerTuning;
|
|
46
|
-
|
|
47
|
-
constructor(
|
|
48
|
-
tuning: OptimizerTuning = DEFAULT_TUNING,
|
|
49
|
-
stats?: StatsProvider
|
|
50
|
-
) {
|
|
51
|
-
this.stats = stats ?? defaultStatsProvider;
|
|
52
|
-
this.passManager = new PassManager();
|
|
53
|
-
this.tuning = tuning;
|
|
54
|
-
|
|
55
|
-
// Register rules to their appropriate passes only (no legacy globals)
|
|
56
|
-
this.registerRulesToPasses();
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
updateTuning(tuning: OptimizerTuning): void {
|
|
60
|
-
this.tuning = tuning;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
private static globalRulesRegistered = false;
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Legacy method removed; keep empty to avoid duplicate registrations
|
|
67
|
-
*/
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Register rules with their appropriate passes
|
|
71
|
-
*/
|
|
72
|
-
private registerRulesToPasses(): void {
|
|
73
|
-
// Structural pass rules (top-down) - for operations that need parent context
|
|
74
|
-
// Register grow-retrieve for ALL relational node types
|
|
75
|
-
// The rule itself will determine if growth is possible
|
|
76
|
-
const relationalNodeTypes = [
|
|
77
|
-
PlanNodeType.Filter,
|
|
78
|
-
PlanNodeType.Project,
|
|
79
|
-
PlanNodeType.Sort,
|
|
80
|
-
PlanNodeType.LimitOffset,
|
|
81
|
-
PlanNodeType.Aggregate,
|
|
82
|
-
PlanNodeType.Distinct,
|
|
83
|
-
PlanNodeType.Join,
|
|
84
|
-
PlanNodeType.Window,
|
|
85
|
-
// Add any other relational node types as needed
|
|
86
|
-
];
|
|
87
|
-
|
|
88
|
-
for (const nodeType of relationalNodeTypes) {
|
|
89
|
-
this.passManager.addRuleToPass(PassId.Structural, {
|
|
90
|
-
id: `grow-retrieve-${nodeType}`,
|
|
91
|
-
nodeType,
|
|
92
|
-
phase: 'rewrite',
|
|
93
|
-
fn: ruleGrowRetrieve,
|
|
94
|
-
priority: 10
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// Join key inference (structural/characteristic)
|
|
99
|
-
this.passManager.addRuleToPass(PassId.Structural, {
|
|
100
|
-
id: 'join-key-inference',
|
|
101
|
-
nodeType: PlanNodeType.Join,
|
|
102
|
-
phase: 'rewrite',
|
|
103
|
-
fn: ruleJoinKeyInference,
|
|
104
|
-
priority: 15
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
// Greedy join commute: place smaller input on the left to improve nested-loop-like costs
|
|
108
|
-
this.passManager.addRuleToPass(PassId.Structural, {
|
|
109
|
-
id: 'join-greedy-commute',
|
|
110
|
-
nodeType: PlanNodeType.Join,
|
|
111
|
-
phase: 'rewrite',
|
|
112
|
-
fn: ruleJoinGreedyCommute,
|
|
113
|
-
priority: 16
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
this.passManager.addRuleToPass(PassId.Structural, {
|
|
117
|
-
id: 'predicate-pushdown',
|
|
118
|
-
nodeType: PlanNodeType.Filter,
|
|
119
|
-
phase: 'rewrite',
|
|
120
|
-
fn: rulePredicatePushdown,
|
|
121
|
-
priority: 20
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
// Physical pass rules (bottom-up) - for logical to physical transformations
|
|
125
|
-
this.passManager.addRuleToPass(PassId.Physical, {
|
|
126
|
-
id: 'select-access-path',
|
|
127
|
-
nodeType: PlanNodeType.Retrieve,
|
|
128
|
-
phase: 'impl',
|
|
129
|
-
fn: ruleSelectAccessPath,
|
|
130
|
-
priority: 10
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
// QuickPick join enumeration (optional via tuning)
|
|
134
|
-
this.passManager.addRuleToPass(PassId.Physical, {
|
|
135
|
-
id: 'quickpick-join-enumeration',
|
|
136
|
-
nodeType: PlanNodeType.Join,
|
|
137
|
-
phase: 'impl',
|
|
138
|
-
fn: ruleQuickPickJoinEnumeration,
|
|
139
|
-
priority: 5
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
this.passManager.addRuleToPass(PassId.Physical, {
|
|
143
|
-
id: 'aggregate-streaming',
|
|
144
|
-
nodeType: PlanNodeType.Aggregate,
|
|
145
|
-
phase: 'impl',
|
|
146
|
-
fn: ruleAggregateStreaming,
|
|
147
|
-
priority: 20
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
// Post-optimization pass rules (bottom-up) - for cleanup and caching
|
|
151
|
-
this.passManager.addRuleToPass(PassId.PostOptimization, {
|
|
152
|
-
id: 'mutating-subquery-cache',
|
|
153
|
-
nodeType: PlanNodeType.Join,
|
|
154
|
-
phase: 'rewrite',
|
|
155
|
-
fn: ruleMutatingSubqueryCache,
|
|
156
|
-
priority: 10
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
this.passManager.addRuleToPass(PassId.PostOptimization, {
|
|
160
|
-
id: 'cte-optimization',
|
|
161
|
-
nodeType: PlanNodeType.CTE,
|
|
162
|
-
phase: 'rewrite',
|
|
163
|
-
fn: ruleCteOptimization,
|
|
164
|
-
priority: 20
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
// Register materialization advisory for multiple node types
|
|
168
|
-
const nodeTypesForMaterialization = [
|
|
169
|
-
PlanNodeType.Block,
|
|
170
|
-
PlanNodeType.ScalarSubquery,
|
|
171
|
-
PlanNodeType.Exists,
|
|
172
|
-
PlanNodeType.In,
|
|
173
|
-
PlanNodeType.Insert,
|
|
174
|
-
PlanNodeType.Update,
|
|
175
|
-
PlanNodeType.Delete,
|
|
176
|
-
PlanNodeType.CTE,
|
|
177
|
-
PlanNodeType.RecursiveCTE,
|
|
178
|
-
PlanNodeType.Returning,
|
|
179
|
-
PlanNodeType.ScalarFunctionCall,
|
|
180
|
-
PlanNodeType.CaseExpr,
|
|
181
|
-
];
|
|
182
|
-
|
|
183
|
-
for (const nodeType of nodeTypesForMaterialization) {
|
|
184
|
-
this.passManager.addRuleToPass(PassId.PostOptimization, {
|
|
185
|
-
id: `materialization-advisory-${nodeType}`,
|
|
186
|
-
nodeType,
|
|
187
|
-
phase: 'rewrite',
|
|
188
|
-
fn: ruleMaterializationAdvisory,
|
|
189
|
-
priority: 30
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
log('Registered rules to optimization passes');
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Optimize a plan tree by applying transformation rules
|
|
198
|
-
*/
|
|
199
|
-
optimize(plan: PlanNode, db: Database): PlanNode {
|
|
200
|
-
log('Starting optimization of plan', plan.nodeType);
|
|
201
|
-
|
|
202
|
-
// Create optimization context
|
|
203
|
-
const context = createOptContext(this, this.stats, this.tuning, db);
|
|
204
|
-
|
|
205
|
-
tracePhaseStart('optimization');
|
|
206
|
-
try {
|
|
207
|
-
// Execute all optimization passes
|
|
208
|
-
const optimizedPlan = this.passManager.execute(plan, context);
|
|
209
|
-
|
|
210
|
-
// Capture diagnostics snapshot for external consumers
|
|
211
|
-
this.lastDiagnostics = { ...context.diagnostics };
|
|
212
|
-
|
|
213
|
-
// Final validation (if enabled)
|
|
214
|
-
if (this.tuning.debug.validatePlan) {
|
|
215
|
-
log('Running plan validation');
|
|
216
|
-
try {
|
|
217
|
-
validatePhysicalTree(optimizedPlan);
|
|
218
|
-
log('Plan validation passed');
|
|
219
|
-
} catch (error) {
|
|
220
|
-
log('Plan validation failed: %s', error);
|
|
221
|
-
throw error;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
return optimizedPlan;
|
|
226
|
-
} finally {
|
|
227
|
-
tracePhaseEnd('optimization');
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Run only non-physical passes to obtain a structurally rewritten logical plan
|
|
233
|
-
* suitable for pre-physical analysis (e.g., row-specific classification).
|
|
234
|
-
*/
|
|
235
|
-
optimizeForAnalysis(plan: PlanNode, db: Database): PlanNode {
|
|
236
|
-
log('Starting pre-physical analysis optimization of plan', plan.nodeType);
|
|
237
|
-
|
|
238
|
-
const context = createOptContext(this, this.stats, this.tuning, db);
|
|
239
|
-
tracePhaseStart('pre-physical-analysis');
|
|
240
|
-
try {
|
|
241
|
-
// Execute only structural pass(es) and constant folding
|
|
242
|
-
const folded = this.performConstantFolding(plan, context);
|
|
243
|
-
const structuralOnly = this.passManager.executeUpTo(folded, context, PassId.Structural);
|
|
244
|
-
this.lastDiagnostics = { ...context.diagnostics };
|
|
245
|
-
return structuralOnly;
|
|
246
|
-
} finally {
|
|
247
|
-
tracePhaseEnd('pre-physical-analysis');
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Perform single-pass constant folding over the entire plan tree
|
|
253
|
-
*/
|
|
254
|
-
private performConstantFolding(plan: PlanNode, context: OptContext): PlanNode {
|
|
255
|
-
// Create runtime expression evaluator
|
|
256
|
-
const evaluator = createRuntimeExpressionEvaluator(context.db);
|
|
257
|
-
|
|
258
|
-
// Perform single-pass constant folding
|
|
259
|
-
const result = performConstantFolding(plan, evaluator);
|
|
260
|
-
|
|
261
|
-
log('Constant folding completed');
|
|
262
|
-
return result;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
optimizeNode(node: PlanNode, context: OptContext): PlanNode {
|
|
266
|
-
traceNodeStart(node);
|
|
267
|
-
|
|
268
|
-
// Check if we've already optimized this exact node instance
|
|
269
|
-
const cached = context.optimizedNodes.get(node.id);
|
|
270
|
-
if (cached) {
|
|
271
|
-
log('Reusing optimized version of shared node %s (%s)', node.id, node.nodeType);
|
|
272
|
-
traceNodeEnd(node, cached);
|
|
273
|
-
return cached;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// Note: We removed the broken `if (node.physical)` check here
|
|
277
|
-
// The `physical` property is always truthy (it returns a PhysicalProperties object)
|
|
278
|
-
// Physical vs logical distinction should be handled by the rules themselves
|
|
279
|
-
|
|
280
|
-
// First optimize all children
|
|
281
|
-
const optimizedNode = this.optimizeChildren(node, context);
|
|
282
|
-
|
|
283
|
-
// Apply rules
|
|
284
|
-
const rulesApplied = applyRules(optimizedNode, context);
|
|
285
|
-
|
|
286
|
-
if (rulesApplied !== optimizedNode) {
|
|
287
|
-
// Rules transformed the node
|
|
288
|
-
log(`Rules applied to ${optimizedNode.nodeType}, transformed to ${rulesApplied.nodeType}`);
|
|
289
|
-
traceNodeEnd(node, rulesApplied);
|
|
290
|
-
|
|
291
|
-
// Cache the final result
|
|
292
|
-
context.optimizedNodes.set(node.id, rulesApplied);
|
|
293
|
-
return rulesApplied;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
// No rule applied - assume node is physical
|
|
297
|
-
traceNodeEnd(node, optimizedNode);
|
|
298
|
-
|
|
299
|
-
// Cache the result even if no rules applied
|
|
300
|
-
context.optimizedNodes.set(node.id, optimizedNode);
|
|
301
|
-
return optimizedNode;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
private optimizeChildren(node: PlanNode, context: OptContext): PlanNode {
|
|
305
|
-
// Generic tree walk using withChildren
|
|
306
|
-
const originalChildren = node.getChildren();
|
|
307
|
-
const optimizedChildren = originalChildren.map(child => this.optimizeNode(child, context));
|
|
308
|
-
|
|
309
|
-
// Check if any children changed
|
|
310
|
-
const childrenChanged = optimizedChildren.some((child, i) => child !== originalChildren[i]);
|
|
311
|
-
|
|
312
|
-
if (!childrenChanged) {
|
|
313
|
-
return node; // No changes
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
// Use withChildren to create new node with optimized children
|
|
317
|
-
// withChildren is a required contract - any errors should propagate
|
|
318
|
-
return node.withChildren(optimizedChildren);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Get the statistics provider
|
|
323
|
-
*/
|
|
324
|
-
getStats(): StatsProvider {
|
|
325
|
-
return this.stats;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/** Get diagnostics from the last optimization run */
|
|
329
|
-
getLastDiagnostics(): OptimizerDiagnostics | null {
|
|
330
|
-
return this.lastDiagnostics;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import type { SqlParameters } from '../common/types.js';
|
|
2
|
-
import type { Database } from '../core/database.js';
|
|
3
|
-
import type { SchemaManager } from '../schema/manager.js';
|
|
4
|
-
import type { Scope } from './scopes/scope.js';
|
|
5
|
-
import type { PlanNode, ScalarPlanNode } from './nodes/plan-node.js';
|
|
6
|
-
import type { CTEScopeNode } from './nodes/cte-node.js';
|
|
7
|
-
import type { CTEReferenceNode } from './nodes/cte-reference-node.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Debug options for query planning and execution.
|
|
11
|
-
*/
|
|
12
|
-
export interface DebugOptions {
|
|
13
|
-
/** Enable runtime instruction tracing (logs inputs/outputs) */
|
|
14
|
-
traceInstructions?: boolean;
|
|
15
|
-
/** Enable detailed plan tree output */
|
|
16
|
-
showPlan?: boolean;
|
|
17
|
-
/** Enable instruction program output */
|
|
18
|
-
showProgram?: boolean;
|
|
19
|
-
/** Custom debug context for additional logging */
|
|
20
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
-
debugContext?: Record<string, any>;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Represents a dependency on a schema object that was resolved during planning.
|
|
26
|
-
* Used for plan invalidation when schema changes.
|
|
27
|
-
*/
|
|
28
|
-
export interface SchemaDependency {
|
|
29
|
-
readonly type: 'table' | 'function' | 'vtab_module' | 'collation';
|
|
30
|
-
readonly schemaName?: string; // undefined for functions, collations, and vtab modules
|
|
31
|
-
readonly objectName: string;
|
|
32
|
-
readonly objectVersion?: number; // For future versioning support
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Tracks schema dependencies during planning and provides invalidation callbacks.
|
|
37
|
-
*/
|
|
38
|
-
export class BuildTimeDependencyTracker {
|
|
39
|
-
private dependencies = new Set<string>();
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
-
private resolvedObjects = new Map<string, WeakRef<any>>();
|
|
42
|
-
private invalidationCallbacks = new Set<() => void>();
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Records a dependency on a schema object and stores a weak reference to it.
|
|
46
|
-
*/
|
|
47
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
|
-
recordDependency(dep: SchemaDependency, object: any): void {
|
|
49
|
-
const key = this.dependencyKey(dep);
|
|
50
|
-
this.dependencies.add(key);
|
|
51
|
-
this.resolvedObjects.set(key, new WeakRef(object));
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Adds a callback to be invoked when schema dependencies become invalid.
|
|
56
|
-
*/
|
|
57
|
-
addInvalidationCallback(callback: () => void): () => void {
|
|
58
|
-
this.invalidationCallbacks.add(callback);
|
|
59
|
-
return () => this.invalidationCallbacks.delete(callback);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Checks if all dependencies are still valid by verifying weak references.
|
|
64
|
-
*/
|
|
65
|
-
checkIntegrity(): boolean {
|
|
66
|
-
for (const [_key, weakRef] of this.resolvedObjects.entries()) {
|
|
67
|
-
if (weakRef.deref() === undefined) {
|
|
68
|
-
// Object was garbage collected, dependency is invalid
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Gets all tracked dependencies.
|
|
77
|
-
*/
|
|
78
|
-
getDependencies(): SchemaDependency[] {
|
|
79
|
-
return Array.from(this.dependencies).map(key => this.parseDependencyKey(key));
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Checks if any dependencies are tracked.
|
|
84
|
-
*/
|
|
85
|
-
hasAnyDependencies(): boolean {
|
|
86
|
-
return this.dependencies.size > 0;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Notifies all invalidation callbacks.
|
|
91
|
-
*/
|
|
92
|
-
notifyInvalidation(): void {
|
|
93
|
-
for (const callback of this.invalidationCallbacks) {
|
|
94
|
-
try {
|
|
95
|
-
callback();
|
|
96
|
-
} catch (error) {
|
|
97
|
-
console.error('Error in schema invalidation callback:', error);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
private dependencyKey(dep: SchemaDependency): string {
|
|
103
|
-
const schema = dep.schemaName || '';
|
|
104
|
-
const version = dep.objectVersion || 0;
|
|
105
|
-
return `${dep.type}:${schema}:${dep.objectName}:${version}`;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
private parseDependencyKey(key: string): SchemaDependency {
|
|
109
|
-
const [type, schemaName, objectName, versionStr] = key.split(':');
|
|
110
|
-
return {
|
|
111
|
-
type: type as SchemaDependency['type'],
|
|
112
|
-
schemaName: schemaName || undefined,
|
|
113
|
-
objectName,
|
|
114
|
-
objectVersion: parseInt(versionStr) || undefined
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Provides contextual information necessary during the query planning phase.
|
|
121
|
-
* This object is passed to various planning functions to give them access to
|
|
122
|
-
* the database schema, current symbol resolution scope, and other relevant details.
|
|
123
|
-
*/
|
|
124
|
-
export interface PlanningContext {
|
|
125
|
-
/**
|
|
126
|
-
* The Database instance, providing access to the schema manager, function registry, etc.
|
|
127
|
-
*/
|
|
128
|
-
readonly db: Database;
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* The SchemaManager instance, for direct access if needed (also available via db.schemaManager).
|
|
132
|
-
*/
|
|
133
|
-
readonly schemaManager: SchemaManager; // Redundant if db is present, but can be convenient
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* The current Scope for symbol resolution (columns, parameters, CTEs).
|
|
137
|
-
* Planning functions for nested structures (like subqueries) will typically create a new Scope
|
|
138
|
-
* with the current scope as its parent and pass that down in a new PlanningContext.
|
|
139
|
-
*/
|
|
140
|
-
readonly scope: Scope;
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* The current parameters for the statement, as discovered by references.
|
|
144
|
-
*/
|
|
145
|
-
readonly parameters: SqlParameters;
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Debug options controlling tracing and diagnostics output.
|
|
149
|
-
*/
|
|
150
|
-
readonly debug?: DebugOptions;
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Aggregates from the SELECT list (used when building HAVING expressions).
|
|
154
|
-
* This allows buildExpression to recognize when an aggregate function in HAVING
|
|
155
|
-
* refers to an already-computed aggregate from SELECT.
|
|
156
|
-
*/
|
|
157
|
-
readonly aggregates?: Array<{
|
|
158
|
-
expression: ScalarPlanNode;
|
|
159
|
-
alias: string;
|
|
160
|
-
columnIndex: number;
|
|
161
|
-
attributeId: number;
|
|
162
|
-
}>;
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Active CTEs available in the current planning context.
|
|
166
|
-
* This map contains all CTEs from the current WITH clause and any parent WITH clauses,
|
|
167
|
-
* allowing subqueries in expressions to resolve CTE references correctly.
|
|
168
|
-
*/
|
|
169
|
-
readonly cteNodes?: Map<string, CTEScopeNode>;
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Schema dependency tracker for this planning session.
|
|
173
|
-
*/
|
|
174
|
-
readonly schemaDependencies: BuildTimeDependencyTracker;
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Schema object cache for resolved objects during planning.
|
|
178
|
-
*/
|
|
179
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
180
|
-
readonly schemaCache: Map<string, any>;
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Cache for CTE reference nodes to ensure consistent attribute IDs across multiple references
|
|
184
|
-
* to the same CTE with the same alias. Key format: "cteName:alias"
|
|
185
|
-
*/
|
|
186
|
-
cteReferenceCache?: Map<string, CTEReferenceNode>;
|
|
187
|
-
|
|
188
|
-
/** maps a RelationalPlanNode to its column scope during building */
|
|
189
|
-
readonly outputScopes: Map<PlanNode, Scope>;
|
|
190
|
-
}
|