@quereus/quereus 0.7.2 → 0.7.4
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/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,239 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Optimizer context that wraps Optimizer with StatsProvider and other utilities
|
|
3
|
-
* Provides unified interface for optimization rules
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { Optimizer } from '../optimizer.js';
|
|
7
|
-
import type { StatsProvider } from '../stats/index.js';
|
|
8
|
-
import type { OptimizerTuning } from '../optimizer-tuning.js';
|
|
9
|
-
import { createLogger } from '../../common/logger.js';
|
|
10
|
-
import { StatusCode } from '../../common/types.js';
|
|
11
|
-
import { quereusError } from '../../common/errors.js';
|
|
12
|
-
import { Database } from '../../core/database.js';
|
|
13
|
-
import type { PlanNode } from '../nodes/plan-node.js';
|
|
14
|
-
|
|
15
|
-
const log = createLogger('optimizer:framework:context');
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Context object passed to optimization rules
|
|
19
|
-
* Contains all the utilities and data sources rules need
|
|
20
|
-
*/
|
|
21
|
-
export interface OptContext {
|
|
22
|
-
/** The optimizer instance */
|
|
23
|
-
readonly optimizer: Optimizer;
|
|
24
|
-
|
|
25
|
-
/** Statistics provider for cardinality and selectivity estimates */
|
|
26
|
-
readonly stats: StatsProvider;
|
|
27
|
-
|
|
28
|
-
/** Optimizer tuning parameters */
|
|
29
|
-
readonly tuning: OptimizerTuning;
|
|
30
|
-
|
|
31
|
-
/** Current optimization phase */
|
|
32
|
-
readonly phase: 'rewrite' | 'impl';
|
|
33
|
-
|
|
34
|
-
/** Rule application depth (for detecting infinite recursion) */
|
|
35
|
-
readonly depth: number;
|
|
36
|
-
|
|
37
|
-
/** Additional context data that rules can use */
|
|
38
|
-
readonly context: Map<string, unknown>;
|
|
39
|
-
|
|
40
|
-
/** Diagnostics bag that rules can populate (emitted after optimization) */
|
|
41
|
-
readonly diagnostics: OptimizerDiagnostics;
|
|
42
|
-
|
|
43
|
-
/** Database instance */
|
|
44
|
-
readonly db: Database;
|
|
45
|
-
|
|
46
|
-
/** Context-scoped visited rules tracking (nodeId → ruleIds) */
|
|
47
|
-
readonly visitedRules: Map<string, Set<string>>;
|
|
48
|
-
|
|
49
|
-
/** Cache of already-optimized nodes within this context (nodeId → optimized result) */
|
|
50
|
-
readonly optimizedNodes: Map<string, PlanNode>;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/** Optimizer diagnostics structure */
|
|
54
|
-
export interface OptimizerDiagnostics {
|
|
55
|
-
// QuickPick join enumeration
|
|
56
|
-
quickpick?: {
|
|
57
|
-
tours?: number;
|
|
58
|
-
bestCost?: number;
|
|
59
|
-
};
|
|
60
|
-
// Extensible for future diagnostics
|
|
61
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
62
|
-
[key: string]: any;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Implementation of optimization context
|
|
67
|
-
*/
|
|
68
|
-
export class OptimizationContext implements OptContext {
|
|
69
|
-
readonly context = new Map<string, unknown>();
|
|
70
|
-
readonly visitedRules = new Map<string, Set<string>>();
|
|
71
|
-
readonly optimizedNodes = new Map<string, PlanNode>();
|
|
72
|
-
readonly diagnostics = {} as OptimizerDiagnostics;
|
|
73
|
-
|
|
74
|
-
constructor(
|
|
75
|
-
public readonly optimizer: Optimizer,
|
|
76
|
-
public readonly stats: StatsProvider,
|
|
77
|
-
public readonly tuning: OptimizerTuning,
|
|
78
|
-
public readonly phase: 'rewrite' | 'impl' = 'rewrite',
|
|
79
|
-
public readonly db: Database,
|
|
80
|
-
public readonly depth: number = 0,
|
|
81
|
-
) {
|
|
82
|
-
log('Created optimization context (phase: %s, depth: %d)', phase, depth);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Create a new context for a different phase
|
|
87
|
-
*/
|
|
88
|
-
withPhase(phase: 'rewrite' | 'impl'): OptimizationContext {
|
|
89
|
-
const newContext = new OptimizationContext(
|
|
90
|
-
this.optimizer,
|
|
91
|
-
this.stats,
|
|
92
|
-
this.tuning,
|
|
93
|
-
phase,
|
|
94
|
-
this.db,
|
|
95
|
-
this.depth,
|
|
96
|
-
);
|
|
97
|
-
|
|
98
|
-
// Copy visited tracking state
|
|
99
|
-
this.copyTrackingState(newContext);
|
|
100
|
-
return newContext;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Create a new context with incremented depth
|
|
105
|
-
*/
|
|
106
|
-
withIncrementedDepth(): OptimizationContext {
|
|
107
|
-
if (this.depth >= this.tuning.maxOptimizationDepth) {
|
|
108
|
-
quereusError(`Maximum optimization depth exceeded: ${this.depth}`, StatusCode.ERROR);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const newContext = new OptimizationContext(
|
|
112
|
-
this.optimizer,
|
|
113
|
-
this.stats,
|
|
114
|
-
this.tuning,
|
|
115
|
-
this.phase,
|
|
116
|
-
this.db,
|
|
117
|
-
this.depth + 1,
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
// Copy visited tracking state
|
|
121
|
-
this.copyTrackingState(newContext);
|
|
122
|
-
return newContext;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Create a new context with additional context data
|
|
127
|
-
*/
|
|
128
|
-
withContext(key: string, value: unknown): OptimizationContext {
|
|
129
|
-
const newContext = new OptimizationContext(
|
|
130
|
-
this.optimizer,
|
|
131
|
-
this.stats,
|
|
132
|
-
this.tuning,
|
|
133
|
-
this.phase,
|
|
134
|
-
this.db,
|
|
135
|
-
this.depth,
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
// Copy existing context
|
|
139
|
-
for (const [k, v] of this.context) {
|
|
140
|
-
newContext.context.set(k, v);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Add new context
|
|
144
|
-
newContext.context.set(key, value);
|
|
145
|
-
|
|
146
|
-
// Copy visited tracking state
|
|
147
|
-
this.copyTrackingState(newContext);
|
|
148
|
-
return newContext;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Copy visited tracking state to another context
|
|
153
|
-
*/
|
|
154
|
-
private copyTrackingState(target: OptimizationContext): void {
|
|
155
|
-
// Copy visitedRules
|
|
156
|
-
for (const [nodeId, ruleIds] of this.visitedRules) {
|
|
157
|
-
target.visitedRules.set(nodeId, new Set(ruleIds));
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Copy optimizedNodes
|
|
161
|
-
for (const [nodeId, node] of this.optimizedNodes) {
|
|
162
|
-
target.optimizedNodes.set(nodeId, node);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Get context value
|
|
168
|
-
*/
|
|
169
|
-
getContext<T>(key: string): T | undefined {
|
|
170
|
-
return this.context.get(key) as T | undefined;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Check if context has a key
|
|
175
|
-
*/
|
|
176
|
-
hasContext(key: string): boolean {
|
|
177
|
-
return this.context.has(key);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Set context value (mutates current context)
|
|
182
|
-
*/
|
|
183
|
-
setContext(key: string, value: unknown): void {
|
|
184
|
-
this.context.set(key, value);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Remove context value (mutates current context)
|
|
189
|
-
*/
|
|
190
|
-
deleteContext(key: string): boolean {
|
|
191
|
-
return this.context.delete(key);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Clear all context data (mutates current context)
|
|
196
|
-
*/
|
|
197
|
-
clearContext(): void {
|
|
198
|
-
this.context.clear();
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Get a snapshot of all context data
|
|
203
|
-
*/
|
|
204
|
-
getContextSnapshot(): Record<string, unknown> {
|
|
205
|
-
const snapshot: Record<string, unknown> = {};
|
|
206
|
-
for (const [key, value] of this.context) {
|
|
207
|
-
snapshot[key] = value;
|
|
208
|
-
}
|
|
209
|
-
return snapshot;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Factory function to create optimization context
|
|
215
|
-
*/
|
|
216
|
-
export function createOptContext(
|
|
217
|
-
optimizer: Optimizer,
|
|
218
|
-
stats: StatsProvider,
|
|
219
|
-
tuning: OptimizerTuning,
|
|
220
|
-
db: Database,
|
|
221
|
-
phase: 'rewrite' | 'impl' = 'rewrite',
|
|
222
|
-
): OptContext {
|
|
223
|
-
return new OptimizationContext(optimizer, stats, tuning, phase, db);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Type guard to check if an object is an OptContext
|
|
228
|
-
*/
|
|
229
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
230
|
-
export function isOptContext(obj: any): obj is OptContext {
|
|
231
|
-
return obj &&
|
|
232
|
-
typeof obj === 'object' &&
|
|
233
|
-
'optimizer' in obj &&
|
|
234
|
-
'stats' in obj &&
|
|
235
|
-
'tuning' in obj &&
|
|
236
|
-
'phase' in obj &&
|
|
237
|
-
'depth' in obj &&
|
|
238
|
-
'context' in obj;
|
|
239
|
-
}
|
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Optimization pass framework for multi-pass query optimization
|
|
3
|
-
*
|
|
4
|
-
* This framework enables rules to run in separate tree traversals,
|
|
5
|
-
* allowing for proper sequencing of transformations that require
|
|
6
|
-
* different traversal orders or multiple passes over the tree.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { PlanNode } from '../nodes/plan-node.js';
|
|
10
|
-
import type { OptContext } from './context.js';
|
|
11
|
-
import type { RuleHandle } from './registry.js';
|
|
12
|
-
import { createLogger } from '../../common/logger.js';
|
|
13
|
-
import { performConstantFolding } from '../analysis/const-pass.js';
|
|
14
|
-
import { createRuntimeExpressionEvaluator } from '../analysis/const-evaluator.js';
|
|
15
|
-
|
|
16
|
-
const log = createLogger('optimizer:framework:pass');
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Traversal order for optimization passes
|
|
20
|
-
*/
|
|
21
|
-
export enum TraversalOrder {
|
|
22
|
-
/** Process children before parents */
|
|
23
|
-
BottomUp = 'bottom-up',
|
|
24
|
-
/** Process parents before children */
|
|
25
|
-
TopDown = 'top-down',
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Definition of an optimization pass
|
|
30
|
-
*/
|
|
31
|
-
export interface OptimizationPass {
|
|
32
|
-
/** Unique identifier for this pass */
|
|
33
|
-
id: string;
|
|
34
|
-
|
|
35
|
-
/** Human-readable name for logging */
|
|
36
|
-
name: string;
|
|
37
|
-
|
|
38
|
-
/** Description of what this pass does */
|
|
39
|
-
description: string;
|
|
40
|
-
|
|
41
|
-
/** Traversal order for this pass */
|
|
42
|
-
traversalOrder: TraversalOrder;
|
|
43
|
-
|
|
44
|
-
/** Rules that belong to this pass (will be populated by registration) */
|
|
45
|
-
rules: RuleHandle[];
|
|
46
|
-
|
|
47
|
-
/** Optional custom execution logic (default uses standard rule application) */
|
|
48
|
-
execute?: (plan: PlanNode, context: OptContext) => PlanNode;
|
|
49
|
-
|
|
50
|
-
/** Whether this pass is enabled (default: true) */
|
|
51
|
-
enabled?: boolean;
|
|
52
|
-
|
|
53
|
-
/** Order in which passes execute (lower numbers first) */
|
|
54
|
-
order: number;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Standard optimization passes
|
|
59
|
-
*/
|
|
60
|
-
export enum PassId {
|
|
61
|
-
/** Pre-optimization constant folding */
|
|
62
|
-
ConstantFolding = 'constant-folding',
|
|
63
|
-
|
|
64
|
-
/** Structural transformations (pushdown, pullup, boundary sliding) */
|
|
65
|
-
Structural = 'structural',
|
|
66
|
-
|
|
67
|
-
/** Physical operator selection and implementation */
|
|
68
|
-
Physical = 'physical',
|
|
69
|
-
|
|
70
|
-
/** Post-optimization cleanup and caching */
|
|
71
|
-
PostOptimization = 'post-opt',
|
|
72
|
-
|
|
73
|
-
/** Final validation */
|
|
74
|
-
Validation = 'validation',
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Create a standard optimization pass
|
|
79
|
-
*/
|
|
80
|
-
export function createPass(
|
|
81
|
-
id: string,
|
|
82
|
-
name: string,
|
|
83
|
-
description: string,
|
|
84
|
-
order: number,
|
|
85
|
-
traversalOrder: TraversalOrder = TraversalOrder.BottomUp
|
|
86
|
-
): OptimizationPass {
|
|
87
|
-
return {
|
|
88
|
-
id,
|
|
89
|
-
name,
|
|
90
|
-
description,
|
|
91
|
-
traversalOrder,
|
|
92
|
-
rules: [],
|
|
93
|
-
enabled: true,
|
|
94
|
-
order
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Create constant folding pass with custom execution
|
|
100
|
-
*/
|
|
101
|
-
function createConstantFoldingPass(): OptimizationPass {
|
|
102
|
-
return {
|
|
103
|
-
id: PassId.ConstantFolding,
|
|
104
|
-
name: 'Constant Folding',
|
|
105
|
-
description: 'Pre-evaluate constant expressions and fold them into the plan',
|
|
106
|
-
traversalOrder: TraversalOrder.BottomUp,
|
|
107
|
-
rules: [],
|
|
108
|
-
enabled: true,
|
|
109
|
-
order: 0,
|
|
110
|
-
execute: (plan: PlanNode, context: OptContext) => {
|
|
111
|
-
// Custom execution for constant folding
|
|
112
|
-
const evaluator = createRuntimeExpressionEvaluator(context.db);
|
|
113
|
-
const result = performConstantFolding(plan, evaluator);
|
|
114
|
-
log('Constant folding completed');
|
|
115
|
-
return result;
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Standard pass definitions
|
|
122
|
-
*/
|
|
123
|
-
export const STANDARD_PASSES: OptimizationPass[] = [
|
|
124
|
-
createConstantFoldingPass(),
|
|
125
|
-
|
|
126
|
-
createPass(
|
|
127
|
-
PassId.Structural,
|
|
128
|
-
'Structural Transformations',
|
|
129
|
-
'Restructure the plan tree for optimal execution boundaries',
|
|
130
|
-
10,
|
|
131
|
-
TraversalOrder.TopDown
|
|
132
|
-
),
|
|
133
|
-
|
|
134
|
-
createPass(
|
|
135
|
-
PassId.Physical,
|
|
136
|
-
'Physical Selection',
|
|
137
|
-
'Convert logical operators to physical implementations',
|
|
138
|
-
20,
|
|
139
|
-
TraversalOrder.BottomUp
|
|
140
|
-
),
|
|
141
|
-
|
|
142
|
-
createPass(
|
|
143
|
-
PassId.PostOptimization,
|
|
144
|
-
'Post-Optimization',
|
|
145
|
-
'Final cleanup, materialization decisions, and caching',
|
|
146
|
-
30,
|
|
147
|
-
TraversalOrder.BottomUp
|
|
148
|
-
),
|
|
149
|
-
|
|
150
|
-
createPass(
|
|
151
|
-
PassId.Validation,
|
|
152
|
-
'Validation',
|
|
153
|
-
'Validate the correctness of the optimized plan',
|
|
154
|
-
40,
|
|
155
|
-
TraversalOrder.BottomUp
|
|
156
|
-
),
|
|
157
|
-
];
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Pass manager for coordinating multi-pass optimization
|
|
161
|
-
*/
|
|
162
|
-
export class PassManager {
|
|
163
|
-
private passes: Map<string, OptimizationPass> = new Map();
|
|
164
|
-
private sortedPasses: OptimizationPass[] = [];
|
|
165
|
-
|
|
166
|
-
constructor() {
|
|
167
|
-
// Register standard passes
|
|
168
|
-
for (const pass of STANDARD_PASSES) {
|
|
169
|
-
this.registerPass(pass);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Register an optimization pass
|
|
175
|
-
*/
|
|
176
|
-
registerPass(pass: OptimizationPass): void {
|
|
177
|
-
if (this.passes.has(pass.id)) {
|
|
178
|
-
log('Warning: Overwriting existing pass %s', pass.id);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
this.passes.set(pass.id, pass);
|
|
182
|
-
this.updateSortedPasses();
|
|
183
|
-
|
|
184
|
-
log('Registered pass %s (order: %d, traversal: %s)',
|
|
185
|
-
pass.id, pass.order, pass.traversalOrder);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Get a pass by ID
|
|
190
|
-
*/
|
|
191
|
-
getPass(id: string): OptimizationPass | undefined {
|
|
192
|
-
return this.passes.get(id);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* Add a rule to a specific pass
|
|
197
|
-
*/
|
|
198
|
-
addRuleToPass(passId: string, rule: RuleHandle): void {
|
|
199
|
-
const pass = this.passes.get(passId);
|
|
200
|
-
if (!pass) {
|
|
201
|
-
throw new Error(`Unknown pass: ${passId}`);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Avoid duplicate registrations by rule ID within a pass
|
|
205
|
-
if (pass.rules.some(r => r.id === rule.id)) {
|
|
206
|
-
log('Skipping duplicate rule %s for pass %s', rule.id, passId);
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
pass.rules.push(rule);
|
|
211
|
-
log('Added rule %s to pass %s', rule.id, passId);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Get all passes in execution order
|
|
216
|
-
*/
|
|
217
|
-
getPasses(): readonly OptimizationPass[] {
|
|
218
|
-
return this.sortedPasses;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Update sorted pass list after changes
|
|
223
|
-
*/
|
|
224
|
-
private updateSortedPasses(): void {
|
|
225
|
-
this.sortedPasses = Array.from(this.passes.values())
|
|
226
|
-
.filter(pass => pass.enabled !== false)
|
|
227
|
-
.sort((a, b) => a.order - b.order);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Execute all passes on a plan
|
|
232
|
-
*/
|
|
233
|
-
execute(plan: PlanNode, context: OptContext): PlanNode {
|
|
234
|
-
return this.executeUpTo(plan, context);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Execute passes up to and including the specified pass id
|
|
239
|
-
*/
|
|
240
|
-
executeUpTo(plan: PlanNode, context: OptContext, upToPassId?: string): PlanNode {
|
|
241
|
-
let currentPlan = plan;
|
|
242
|
-
for (const pass of this.sortedPasses) {
|
|
243
|
-
log('Starting pass: %s', pass.name);
|
|
244
|
-
|
|
245
|
-
if (pass.execute) {
|
|
246
|
-
// Custom execution logic
|
|
247
|
-
currentPlan = pass.execute(currentPlan, context);
|
|
248
|
-
} else {
|
|
249
|
-
// Standard rule-based execution
|
|
250
|
-
currentPlan = this.executeStandardPass(currentPlan, context, pass);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
log('Completed pass: %s', pass.name);
|
|
254
|
-
if (upToPassId && pass.id === upToPassId) break;
|
|
255
|
-
}
|
|
256
|
-
return currentPlan;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* Execute a standard rule-based pass
|
|
261
|
-
*/
|
|
262
|
-
private executeStandardPass(
|
|
263
|
-
plan: PlanNode,
|
|
264
|
-
context: OptContext,
|
|
265
|
-
pass: OptimizationPass
|
|
266
|
-
): PlanNode {
|
|
267
|
-
// This will be implemented to traverse the tree in the specified order
|
|
268
|
-
// and apply the pass's rules at each node
|
|
269
|
-
|
|
270
|
-
if (pass.traversalOrder === TraversalOrder.TopDown) {
|
|
271
|
-
return this.traverseTopDown(plan, context, pass);
|
|
272
|
-
} else {
|
|
273
|
-
return this.traverseBottomUp(plan, context, pass);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Top-down traversal with rule application
|
|
279
|
-
*/
|
|
280
|
-
private traverseTopDown(
|
|
281
|
-
node: PlanNode,
|
|
282
|
-
context: OptContext,
|
|
283
|
-
pass: OptimizationPass
|
|
284
|
-
): PlanNode {
|
|
285
|
-
// Apply rules to this node first
|
|
286
|
-
let currentNode = this.applyPassRules(node, context, pass);
|
|
287
|
-
|
|
288
|
-
// Then traverse children
|
|
289
|
-
const children = currentNode.getChildren();
|
|
290
|
-
if (children.length > 0) {
|
|
291
|
-
const newChildren = children.map(child =>
|
|
292
|
-
this.traverseTopDown(child, context, pass)
|
|
293
|
-
);
|
|
294
|
-
|
|
295
|
-
// Only create new node if children changed
|
|
296
|
-
const childrenChanged = children.some((child, i) => child !== newChildren[i]);
|
|
297
|
-
if (childrenChanged) {
|
|
298
|
-
currentNode = currentNode.withChildren(newChildren);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
return currentNode;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
/**
|
|
306
|
-
* Bottom-up traversal with rule application
|
|
307
|
-
*/
|
|
308
|
-
private traverseBottomUp(
|
|
309
|
-
node: PlanNode,
|
|
310
|
-
context: OptContext,
|
|
311
|
-
pass: OptimizationPass
|
|
312
|
-
): PlanNode {
|
|
313
|
-
// Traverse children first
|
|
314
|
-
const children = node.getChildren();
|
|
315
|
-
let currentNode = node;
|
|
316
|
-
|
|
317
|
-
if (children.length > 0) {
|
|
318
|
-
const newChildren = children.map(child =>
|
|
319
|
-
this.traverseBottomUp(child, context, pass)
|
|
320
|
-
);
|
|
321
|
-
|
|
322
|
-
// Only create new node if children changed
|
|
323
|
-
const childrenChanged = children.some((child, i) => child !== newChildren[i]);
|
|
324
|
-
if (childrenChanged) {
|
|
325
|
-
currentNode = currentNode.withChildren(newChildren);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
// Then apply rules to this node
|
|
330
|
-
return this.applyPassRules(currentNode, context, pass);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* Apply all rules in a pass to a node
|
|
335
|
-
*/
|
|
336
|
-
private applyPassRules(
|
|
337
|
-
node: PlanNode,
|
|
338
|
-
context: OptContext,
|
|
339
|
-
pass: OptimizationPass
|
|
340
|
-
): PlanNode {
|
|
341
|
-
let currentNode = node;
|
|
342
|
-
// Apply rules against the current node type only
|
|
343
|
-
for (const rule of pass.rules) {
|
|
344
|
-
if (rule.nodeType !== currentNode.nodeType) continue;
|
|
345
|
-
const result = rule.fn(currentNode, context);
|
|
346
|
-
if (result && result !== currentNode) {
|
|
347
|
-
log('Rule %s transformed node in pass %s', rule.id, pass.id);
|
|
348
|
-
currentNode = result;
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
return currentNode;
|
|
353
|
-
}
|
|
354
|
-
}
|