@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,210 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Physical property utilities for the Titan optimizer
|
|
3
|
-
* Provides helpers for handling ordering, unique keys, and property propagation
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { PlanNodeType } from '../nodes/plan-node-type.js';
|
|
7
|
-
import type { ScalarPlanNode } from '../nodes/plan-node.js';
|
|
8
|
-
import type { ColumnReferenceNode } from '../nodes/reference.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Ordering specification for a column
|
|
12
|
-
*/
|
|
13
|
-
export interface Ordering {
|
|
14
|
-
/** Column index */
|
|
15
|
-
column: number;
|
|
16
|
-
/** True for descending order */
|
|
17
|
-
desc: boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Extract ordering from sort keys if they are trivial column references
|
|
22
|
-
* Returns undefined if any sort key is not a simple column reference
|
|
23
|
-
*/
|
|
24
|
-
export function extractOrderingFromSortKeys(
|
|
25
|
-
sortKeys: readonly { expression: ScalarPlanNode; direction: 'asc' | 'desc' }[],
|
|
26
|
-
sourceAttributes: readonly { id: number }[]
|
|
27
|
-
): Ordering[] | undefined {
|
|
28
|
-
const ordering: Ordering[] = [];
|
|
29
|
-
|
|
30
|
-
for (const sortKey of sortKeys) {
|
|
31
|
-
// Check if this is a trivial column reference
|
|
32
|
-
if (sortKey.expression.nodeType !== PlanNodeType.ColumnReference) {
|
|
33
|
-
return undefined; // Non-trivial expression, cannot determine ordering
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const columnRef = sortKey.expression as unknown as ColumnReferenceNode;
|
|
37
|
-
|
|
38
|
-
// Find the column index in the source attributes
|
|
39
|
-
const columnIndex = sourceAttributes.findIndex(attr => attr.id === columnRef.attributeId);
|
|
40
|
-
if (columnIndex === -1) {
|
|
41
|
-
return undefined; // Column not found in source
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
ordering.push({
|
|
45
|
-
column: columnIndex,
|
|
46
|
-
desc: sortKey.direction === 'desc'
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return ordering;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Check if a scalar expression is a trivial column reference
|
|
55
|
-
*/
|
|
56
|
-
export function isTrivialColumnReference(expr: ScalarPlanNode): boolean {
|
|
57
|
-
return expr.nodeType === PlanNodeType.ColumnReference;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Extract column index from a column reference if it exists in the given attributes
|
|
62
|
-
*/
|
|
63
|
-
export function getColumnIndex(
|
|
64
|
-
columnRef: ColumnReferenceNode,
|
|
65
|
-
attributes: Array<{ id: number }>
|
|
66
|
-
): number | undefined {
|
|
67
|
-
const index = attributes.findIndex(attr => attr.id === columnRef.attributeId);
|
|
68
|
-
return index >= 0 ? index : undefined;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Merge ordering requirements between parent and child
|
|
73
|
-
* Returns undefined if orderings are incompatible
|
|
74
|
-
*/
|
|
75
|
-
export function mergeOrderings(
|
|
76
|
-
parent: Ordering[] | undefined,
|
|
77
|
-
child: Ordering[] | undefined
|
|
78
|
-
): Ordering[] | undefined {
|
|
79
|
-
// If parent has no ordering requirements, use child's ordering
|
|
80
|
-
if (!parent || parent.length === 0) {
|
|
81
|
-
return child;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// If child provides no ordering, parent requirements cannot be satisfied
|
|
85
|
-
if (!child || child.length === 0) {
|
|
86
|
-
return undefined;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Check if child ordering satisfies parent requirements
|
|
90
|
-
if (parent.length > child.length) {
|
|
91
|
-
return undefined; // Child provides fewer columns than parent needs
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Verify each parent requirement is satisfied by child
|
|
95
|
-
for (let i = 0; i < parent.length; i++) {
|
|
96
|
-
const parentOrder = parent[i];
|
|
97
|
-
const childOrder = child[i];
|
|
98
|
-
|
|
99
|
-
if (parentOrder.column !== childOrder.column ||
|
|
100
|
-
parentOrder.desc !== childOrder.desc) {
|
|
101
|
-
return undefined; // Ordering mismatch
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Parent requirements are satisfied, return child's full ordering
|
|
106
|
-
return child;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Check if two orderings are compatible (one satisfies the other)
|
|
111
|
-
*/
|
|
112
|
-
export function orderingsCompatible(
|
|
113
|
-
required: Ordering[] | undefined,
|
|
114
|
-
provided: Ordering[] | undefined
|
|
115
|
-
): boolean {
|
|
116
|
-
if (!required || required.length === 0) {
|
|
117
|
-
return true; // No requirements
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (!provided || provided.length === 0) {
|
|
121
|
-
return false; // Requirements exist but nothing provided
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
if (required.length > provided.length) {
|
|
125
|
-
return false; // Not enough columns provided
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Check prefix compatibility
|
|
129
|
-
for (let i = 0; i < required.length; i++) {
|
|
130
|
-
const req = required[i];
|
|
131
|
-
const prov = provided[i];
|
|
132
|
-
|
|
133
|
-
if (req.column !== prov.column || req.desc !== prov.desc) {
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return true;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Check if orderings are exactly equal
|
|
143
|
-
*/
|
|
144
|
-
export function orderingsEqual(
|
|
145
|
-
a: Ordering[] | undefined,
|
|
146
|
-
b: Ordering[] | undefined
|
|
147
|
-
): boolean {
|
|
148
|
-
if (a === b) return true;
|
|
149
|
-
if (!a || !b) return false;
|
|
150
|
-
if (a.length !== b.length) return false;
|
|
151
|
-
|
|
152
|
-
for (let i = 0; i < a.length; i++) {
|
|
153
|
-
if (a[i].column !== b[i].column || a[i].desc !== b[i].desc) {
|
|
154
|
-
return false;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return true;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Reverse an ordering (flip ASC/DESC)
|
|
163
|
-
*/
|
|
164
|
-
export function reverseOrdering(ordering: Ordering[]): Ordering[] {
|
|
165
|
-
return ordering.map(ord => ({ ...ord, desc: !ord.desc }));
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Check if unique keys guarantee distinctness for given columns
|
|
170
|
-
*/
|
|
171
|
-
export function uniqueKeysImplyDistinct(
|
|
172
|
-
uniqueKeys: number[][],
|
|
173
|
-
projectedColumns: number[]
|
|
174
|
-
): boolean {
|
|
175
|
-
// Check if any unique key is a subset of projected columns
|
|
176
|
-
return uniqueKeys.some(key =>
|
|
177
|
-
key.every(col => projectedColumns.includes(col))
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Project unique keys through a projection
|
|
183
|
-
* Returns keys that are still unique after projection
|
|
184
|
-
*/
|
|
185
|
-
export function projectUniqueKeys(
|
|
186
|
-
uniqueKeys: number[][],
|
|
187
|
-
columnMapping: Map<number, number> // oldColumn -> newColumn
|
|
188
|
-
): number[][] {
|
|
189
|
-
const result: number[][] = [];
|
|
190
|
-
|
|
191
|
-
for (const key of uniqueKeys) {
|
|
192
|
-
const projectedKey: number[] = [];
|
|
193
|
-
let keyIsValid = true;
|
|
194
|
-
|
|
195
|
-
for (const col of key) {
|
|
196
|
-
const newCol = columnMapping.get(col);
|
|
197
|
-
if (newCol === undefined) {
|
|
198
|
-
keyIsValid = false;
|
|
199
|
-
break; // Key column not in projection
|
|
200
|
-
}
|
|
201
|
-
projectedKey.push(newCol);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if (keyIsValid) {
|
|
205
|
-
result.push(projectedKey);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
return result;
|
|
210
|
-
}
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Rule registration and management framework for the Titan optimizer
|
|
3
|
-
* Provides centralized rule registry with tracing and loop detection
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { createLogger } from '../../common/logger.js';
|
|
7
|
-
import type { PlanNode } from '../nodes/plan-node.js';
|
|
8
|
-
import { PlanNodeType } from '../nodes/plan-node-type.js';
|
|
9
|
-
import type { OptContext } from './context.js';
|
|
10
|
-
import { traceRuleStart, traceRuleEnd } from './trace.js';
|
|
11
|
-
import { StatusCode } from '../../common/types.js';
|
|
12
|
-
import { quereusError } from '../../common/errors.js';
|
|
13
|
-
|
|
14
|
-
const log = createLogger('optimizer:framework:registry');
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Rule function signature for optimization transformations
|
|
18
|
-
*/
|
|
19
|
-
export type RuleFn = (node: PlanNode, context: OptContext) => PlanNode | null;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Rule phases for categorizing optimization rules
|
|
23
|
-
*/
|
|
24
|
-
export type RulePhase = 'rewrite' | 'impl';
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Handle for registered optimization rules
|
|
28
|
-
*/
|
|
29
|
-
export interface RuleHandle {
|
|
30
|
-
/** Unique identifier for this rule */
|
|
31
|
-
id: string;
|
|
32
|
-
/** Node type this rule applies to */
|
|
33
|
-
nodeType: PlanNodeType;
|
|
34
|
-
/** Phase classification */
|
|
35
|
-
phase: RulePhase;
|
|
36
|
-
/** Rule implementation function */
|
|
37
|
-
fn: RuleFn;
|
|
38
|
-
/** Optional priority (lower numbers run first) */
|
|
39
|
-
priority?: number;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Global rule registry
|
|
44
|
-
*/
|
|
45
|
-
class RuleRegistry {
|
|
46
|
-
private rules = new Map<PlanNodeType, RuleHandle[]>();
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Register a new optimization rule
|
|
50
|
-
*/
|
|
51
|
-
registerRule(handle: RuleHandle): void {
|
|
52
|
-
if (!this.rules.has(handle.nodeType)) {
|
|
53
|
-
this.rules.set(handle.nodeType, []);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const nodeRules = this.rules.get(handle.nodeType)!;
|
|
57
|
-
|
|
58
|
-
// Check for duplicate rule IDs
|
|
59
|
-
if (nodeRules.some(r => r.id === handle.id)) {
|
|
60
|
-
quereusError(`Optimization rule '${handle.id}' already registered for node type ${handle.nodeType}`, StatusCode.INTERNAL);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Insert rule maintaining priority order (lower priority first)
|
|
64
|
-
const priority = handle.priority ?? 100;
|
|
65
|
-
const insertIndex = nodeRules.findIndex(r => (r.priority ?? 100) > priority);
|
|
66
|
-
if (insertIndex === -1) {
|
|
67
|
-
nodeRules.push(handle);
|
|
68
|
-
} else {
|
|
69
|
-
nodeRules.splice(insertIndex, 0, handle);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
log('Registered rule %s for %s (phase: %s, priority: %d)',
|
|
73
|
-
handle.id, handle.nodeType, handle.phase, priority);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Get all rules for a specific node type
|
|
78
|
-
*/
|
|
79
|
-
rulesFor(nodeType: PlanNodeType): readonly RuleHandle[] {
|
|
80
|
-
return this.rules.get(nodeType) ?? [];
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Check if a rule has already been applied to a node
|
|
85
|
-
*/
|
|
86
|
-
hasRuleBeenApplied(nodeId: string, ruleId: string, context: OptContext): boolean {
|
|
87
|
-
const nodeVisited = context.visitedRules.get(nodeId);
|
|
88
|
-
return nodeVisited?.has(ruleId) ?? false;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Mark a rule as applied to a node
|
|
93
|
-
*/
|
|
94
|
-
markRuleApplied(nodeId: string, ruleId: string, context: OptContext): void {
|
|
95
|
-
if (!context.visitedRules.has(nodeId)) {
|
|
96
|
-
context.visitedRules.set(nodeId, new Set());
|
|
97
|
-
}
|
|
98
|
-
context.visitedRules.get(nodeId)!.add(ruleId);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Get all registered rules (for debugging)
|
|
103
|
-
*/
|
|
104
|
-
getAllRules(): Map<PlanNodeType, readonly RuleHandle[]> {
|
|
105
|
-
const result = new Map<PlanNodeType, readonly RuleHandle[]>();
|
|
106
|
-
for (const [nodeType, rules] of this.rules) {
|
|
107
|
-
result.set(nodeType, [...rules]);
|
|
108
|
-
}
|
|
109
|
-
return result;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Get statistics about rule application
|
|
114
|
-
*/
|
|
115
|
-
getStats(context?: OptContext): { totalRules: number; nodesWithRules: number; appliedRules: number } {
|
|
116
|
-
let totalRules = 0;
|
|
117
|
-
for (const rules of this.rules.values()) {
|
|
118
|
-
totalRules += rules.length;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
let appliedRules = 0;
|
|
122
|
-
if (context) {
|
|
123
|
-
for (const ruleSet of context.visitedRules.values()) {
|
|
124
|
-
appliedRules += ruleSet.size;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
return {
|
|
129
|
-
totalRules,
|
|
130
|
-
nodesWithRules: context?.visitedRules.size ?? 0,
|
|
131
|
-
appliedRules
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Global registry instance
|
|
138
|
-
*/
|
|
139
|
-
const globalRegistry = new RuleRegistry();
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Register an optimization rule
|
|
143
|
-
*/
|
|
144
|
-
export function registerRule(handle: RuleHandle): void {
|
|
145
|
-
globalRegistry.registerRule(handle);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Get rules for a specific node type
|
|
150
|
-
*/
|
|
151
|
-
export function rulesFor(nodeType: PlanNodeType): readonly RuleHandle[] {
|
|
152
|
-
return globalRegistry.rulesFor(nodeType);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Check if a rule has been applied to a node
|
|
157
|
-
*/
|
|
158
|
-
export function hasRuleBeenApplied(nodeId: string, ruleId: string, context: OptContext): boolean {
|
|
159
|
-
return globalRegistry.hasRuleBeenApplied(nodeId, ruleId, context);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Mark a rule as applied to a node
|
|
164
|
-
*/
|
|
165
|
-
export function markRuleApplied(nodeId: string, ruleId: string, context: OptContext): void {
|
|
166
|
-
globalRegistry.markRuleApplied(nodeId, ruleId, context);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Get registry statistics
|
|
171
|
-
*/
|
|
172
|
-
export function getRegistryStats(context?: OptContext): { totalRules: number; nodesWithRules: number; appliedRules: number } {
|
|
173
|
-
return globalRegistry.getStats(context);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Get all registered rules (for debugging/tooling)
|
|
178
|
-
*/
|
|
179
|
-
export function getAllRules(): Map<PlanNodeType, readonly RuleHandle[]> {
|
|
180
|
-
return globalRegistry.getAllRules();
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Apply rules to a node with tracing and loop detection
|
|
185
|
-
*/
|
|
186
|
-
export function applyRules(node: PlanNode, context: OptContext): PlanNode {
|
|
187
|
-
const applicableRules = rulesFor(node.nodeType);
|
|
188
|
-
|
|
189
|
-
if (applicableRules.length === 0) {
|
|
190
|
-
return node;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
let currentNode = node;
|
|
194
|
-
let appliedAnyRule = false;
|
|
195
|
-
|
|
196
|
-
for (const rule of applicableRules) {
|
|
197
|
-
// Skip if rule already applied to this node
|
|
198
|
-
if (hasRuleBeenApplied(currentNode.id, rule.id, context)) {
|
|
199
|
-
log('Skipping rule %s for node %s (already applied)', rule.id, currentNode.id);
|
|
200
|
-
continue;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
try {
|
|
204
|
-
const ruleLog = createLogger(`optimizer:rule:${rule.id}`);
|
|
205
|
-
|
|
206
|
-
// Trace rule start
|
|
207
|
-
traceRuleStart(rule, currentNode);
|
|
208
|
-
ruleLog('Applying rule to node %s', currentNode.id);
|
|
209
|
-
|
|
210
|
-
const result = rule.fn(currentNode, context);
|
|
211
|
-
|
|
212
|
-
if (result && result !== currentNode) {
|
|
213
|
-
ruleLog('Rule transformed %s to %s', currentNode.nodeType, result.nodeType);
|
|
214
|
-
markRuleApplied(currentNode.id, rule.id, context);
|
|
215
|
-
|
|
216
|
-
// Trace successful transformation
|
|
217
|
-
traceRuleEnd(rule, currentNode, result);
|
|
218
|
-
|
|
219
|
-
currentNode = result;
|
|
220
|
-
appliedAnyRule = true;
|
|
221
|
-
} else {
|
|
222
|
-
ruleLog('Rule not applicable to node %s', currentNode.id);
|
|
223
|
-
|
|
224
|
-
// Trace rule not applicable
|
|
225
|
-
traceRuleEnd(rule, currentNode, null);
|
|
226
|
-
}
|
|
227
|
-
} catch (error) {
|
|
228
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
229
|
-
log('Rule %s failed on node %s: %s', rule.id, currentNode.id, errorMsg);
|
|
230
|
-
// Continue with other rules rather than failing entire optimization
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (appliedAnyRule) {
|
|
235
|
-
log('Applied rules to node %s, result: %s', node.id, currentNode.nodeType);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
return currentNode;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* Convenience function to register multiple rules at once
|
|
243
|
-
*/
|
|
244
|
-
export function registerRules(rules: RuleHandle[]): void {
|
|
245
|
-
for (const rule of rules) {
|
|
246
|
-
registerRule(rule);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Helper to create rule handles with common patterns
|
|
252
|
-
*/
|
|
253
|
-
export function createRule(
|
|
254
|
-
id: string,
|
|
255
|
-
nodeType: PlanNodeType,
|
|
256
|
-
phase: RulePhase,
|
|
257
|
-
fn: RuleFn,
|
|
258
|
-
priority?: number
|
|
259
|
-
): RuleHandle {
|
|
260
|
-
return { id, nodeType, phase, fn, priority };
|
|
261
|
-
}
|