@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,503 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
/**
|
|
3
|
-
* Characteristics-based plan node analysis
|
|
4
|
-
*
|
|
5
|
-
* This module provides utilities for analyzing plan nodes based on their capabilities
|
|
6
|
-
* and characteristics rather than their specific types, enabling robust and extensible
|
|
7
|
-
* optimization rules.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { PlanNode, RelationalPlanNode, ScalarPlanNode, ConstantNode, TableDescriptor } from '../nodes/plan-node.js';
|
|
11
|
-
import { isRelationalNode } from '../nodes/plan-node.js';
|
|
12
|
-
import type * as AST from '../../parser/ast.js';
|
|
13
|
-
import type { TableSchema } from '../../schema/table.js';
|
|
14
|
-
|
|
15
|
-
// Default row estimate when not available
|
|
16
|
-
const DEFAULT_ROW_ESTIMATE = 1000;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Core physical property-based characteristics
|
|
20
|
-
*/
|
|
21
|
-
export class PlanNodeCharacteristics {
|
|
22
|
-
// Physical property shortcuts
|
|
23
|
-
static hasSideEffects(node: PlanNode): boolean {
|
|
24
|
-
return node.physical.readonly === false;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
static isReadOnly(node: PlanNode): boolean {
|
|
28
|
-
return node.physical.readonly !== false;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
static isDeterministic(node: PlanNode): boolean {
|
|
32
|
-
return node.physical.deterministic !== false;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
static isIdempotent(node: PlanNode): boolean {
|
|
36
|
-
return node.physical.idempotent !== false;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
static isConstant(node: PlanNode): node is ConstantNode {
|
|
40
|
-
return node.physical.constant === true && 'getValue' in node;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
static isFunctional(node: PlanNode): boolean {
|
|
44
|
-
return this.isDeterministic(node) && this.isReadOnly(node);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Ordering capabilities
|
|
48
|
-
static hasOrderedOutput(node: PlanNode): boolean {
|
|
49
|
-
return node.physical.ordering !== undefined && node.physical.ordering.length > 0;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
static preservesOrdering(node: PlanNode): boolean {
|
|
53
|
-
// Check if node preserves input ordering (single child with ordered output)
|
|
54
|
-
const children = node.getChildren();
|
|
55
|
-
return children.length === 1 && this.hasOrderedOutput(children[0]);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
static getOrdering(node: PlanNode): { column: number; desc: boolean }[] | undefined {
|
|
59
|
-
return node.physical.ordering;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Cardinality analysis
|
|
63
|
-
static estimatesRows(node: PlanNode): number {
|
|
64
|
-
return node.physical.estimatedRows ?? DEFAULT_ROW_ESTIMATE;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
static guaranteesUniqueRows(node: PlanNode): boolean {
|
|
68
|
-
return node.physical.uniqueKeys?.some(key => key.length === 0) === true;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
static hasUniqueKeys(node: PlanNode): boolean {
|
|
72
|
-
return node.physical.uniqueKeys !== undefined && node.physical.uniqueKeys.length > 0;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
static getUniqueKeys(node: PlanNode): number[][] | undefined {
|
|
76
|
-
return node.physical.uniqueKeys;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Relational capabilities
|
|
80
|
-
static isRelational(node: PlanNode): node is RelationalPlanNode {
|
|
81
|
-
return isRelationalNode(node);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
static producesRows(node: PlanNode): node is RelationalPlanNode {
|
|
85
|
-
return isRelationalNode(node);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
static isScalar(node: PlanNode): boolean {
|
|
89
|
-
return node.getType().typeClass === 'scalar';
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
static isVoid(node: PlanNode): boolean {
|
|
93
|
-
return node.getType().typeClass === 'void';
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Performance characteristics
|
|
97
|
-
static isExpensive(node: PlanNode): boolean {
|
|
98
|
-
const estimatedRows = this.estimatesRows(node);
|
|
99
|
-
return estimatedRows > 10000; // Tunable threshold
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
static isLikelyRepeated(node: PlanNode): boolean {
|
|
103
|
-
// Heuristic: nodes with side effects are likely to be repeated in joins
|
|
104
|
-
return this.hasSideEffects(node);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Interface for nodes that can provide predicates (WHERE clauses, join conditions)
|
|
110
|
-
*/
|
|
111
|
-
export interface PredicateCapable extends PlanNode {
|
|
112
|
-
getPredicate(): ScalarPlanNode | null;
|
|
113
|
-
withPredicate(newPredicate: ScalarPlanNode | null): PlanNode;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Interface for nodes that can expose one or more local predicates (e.g., WHERE, ON)
|
|
118
|
-
*/
|
|
119
|
-
export interface PredicateSourceCapable extends PlanNode {
|
|
120
|
-
getPredicates(): readonly ScalarPlanNode[];
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Interface for nodes that can combine predicates (for pushdown optimization)
|
|
125
|
-
*/
|
|
126
|
-
export interface PredicateCombinable extends PredicateCapable {
|
|
127
|
-
canCombinePredicates(): boolean;
|
|
128
|
-
combineWith(other: ScalarPlanNode): ScalarPlanNode;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Interface for table access nodes
|
|
133
|
-
*/
|
|
134
|
-
export interface TableAccessCapable extends RelationalPlanNode {
|
|
135
|
-
readonly tableSchema: TableSchema;
|
|
136
|
-
getAccessMethod(): 'sequential' | 'index-scan' | 'index-seek' | 'virtual';
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Interface for aggregation operations
|
|
141
|
-
*/
|
|
142
|
-
export interface AggregationCapable extends RelationalPlanNode {
|
|
143
|
-
getGroupingKeys(): readonly ScalarPlanNode[];
|
|
144
|
-
getAggregateExpressions(): readonly { expr: ScalarPlanNode; alias: string; attributeId: number }[];
|
|
145
|
-
requiresOrdering(): boolean;
|
|
146
|
-
canStreamAggregate(): boolean;
|
|
147
|
-
getSource(): RelationalPlanNode;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Interface for sorting operations
|
|
152
|
-
*/
|
|
153
|
-
export interface SortCapable extends PlanNode {
|
|
154
|
-
getSortKeys(): readonly { expression: ScalarPlanNode; direction: 'asc' | 'desc' }[];
|
|
155
|
-
withSortKeys(keys: readonly { expression: ScalarPlanNode; direction: 'asc' | 'desc' }[]): PlanNode;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Interface for limit/offset capability
|
|
160
|
-
*/
|
|
161
|
-
export interface LimitCapable extends PlanNode {
|
|
162
|
-
getLimitExpression(): ScalarPlanNode | undefined;
|
|
163
|
-
getOffsetExpression(): ScalarPlanNode | undefined;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Interface for nodes that can provide stable attribute→column bindings for constraint mapping
|
|
168
|
-
*/
|
|
169
|
-
export interface ColumnBindingProvider extends PlanNode {
|
|
170
|
-
/** Relation name used for mapping/presentation (e.g., schema.table or alias) */
|
|
171
|
-
getBindingRelationName(): string;
|
|
172
|
-
/** Attributes (id/name) visible at this binding boundary */
|
|
173
|
-
getBindingAttributes(): ReadonlyArray<{ id: number; name: string }>;
|
|
174
|
-
/** Column index in the output row for a given attribute id */
|
|
175
|
-
getColumnIndexForAttribute(attributeId: number): number | undefined;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Interface for projection operations
|
|
180
|
-
*/
|
|
181
|
-
export interface ProjectionCapable extends RelationalPlanNode {
|
|
182
|
-
getProjections(): readonly { node: ScalarPlanNode; alias: string; attributeId: number }[];
|
|
183
|
-
withProjections(projections: readonly { node: ScalarPlanNode; alias: string; attributeId: number }[]): PlanNode;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Interface for join operations
|
|
188
|
-
*/
|
|
189
|
-
export interface JoinCapable extends RelationalPlanNode {
|
|
190
|
-
getJoinType(): 'inner' | 'left' | 'right' | 'full' | 'cross';
|
|
191
|
-
getJoinCondition(): ScalarPlanNode | undefined;
|
|
192
|
-
getLeftSource(): RelationalPlanNode;
|
|
193
|
-
getRightSource(): RelationalPlanNode;
|
|
194
|
-
getUsingColumns(): readonly string[] | undefined;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Interface for cached operations
|
|
199
|
-
*/
|
|
200
|
-
export interface CacheCapable extends PlanNode {
|
|
201
|
-
getCacheStrategy(): string | null;
|
|
202
|
-
isCached(): boolean;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Interface for Common Table Expression operations
|
|
207
|
-
*/
|
|
208
|
-
export interface CTECapable extends RelationalPlanNode {
|
|
209
|
-
readonly cteName: string;
|
|
210
|
-
readonly columns: string[] | undefined;
|
|
211
|
-
readonly materializationHint: 'materialized' | 'not_materialized' | undefined;
|
|
212
|
-
readonly isRecursive: boolean;
|
|
213
|
-
getCTESource(): RelationalPlanNode;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Interface for column reference nodes
|
|
218
|
-
*/
|
|
219
|
-
export interface ColumnReferenceCapable extends ScalarPlanNode {
|
|
220
|
-
readonly attributeId: number;
|
|
221
|
-
readonly columnIndex: number;
|
|
222
|
-
readonly expression: AST.ColumnExpr;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Interface for window function call nodes
|
|
227
|
-
*/
|
|
228
|
-
export interface WindowFunctionCapable extends ScalarPlanNode {
|
|
229
|
-
readonly functionName: string;
|
|
230
|
-
readonly isDistinct: boolean;
|
|
231
|
-
readonly alias?: string;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Interface for aggregate function call nodes
|
|
236
|
-
*/
|
|
237
|
-
export interface AggregateFunctionCapable extends ScalarPlanNode {
|
|
238
|
-
readonly functionName: string;
|
|
239
|
-
readonly isDistinct: boolean;
|
|
240
|
-
readonly args: ReadonlyArray<ScalarPlanNode>;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* Interface for internal recursive CTE reference nodes
|
|
245
|
-
*/
|
|
246
|
-
export interface RecursiveCTERefCapable extends RelationalPlanNode {
|
|
247
|
-
readonly cteName: string;
|
|
248
|
-
readonly workingTableDescriptor: TableDescriptor;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Type guards for capability detection
|
|
253
|
-
*/
|
|
254
|
-
export class CapabilityDetectors {
|
|
255
|
-
static canPushDownPredicate(node: PlanNode): node is PredicateCapable {
|
|
256
|
-
return 'getPredicate' in node &&
|
|
257
|
-
typeof (node as any).getPredicate === 'function' &&
|
|
258
|
-
'withPredicate' in node &&
|
|
259
|
-
typeof (node as any).withPredicate === 'function';
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
static canCombinePredicates(node: PlanNode): node is PredicateCombinable {
|
|
263
|
-
return this.canPushDownPredicate(node) &&
|
|
264
|
-
'canCombinePredicates' in node &&
|
|
265
|
-
typeof (node as any).canCombinePredicates === 'function';
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
static isPredicateSource(node: PlanNode): node is PredicateSourceCapable {
|
|
269
|
-
return 'getPredicates' in node && typeof (node as any).getPredicates === 'function';
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
static isTableAccess(node: PlanNode): node is TableAccessCapable {
|
|
273
|
-
return PlanNodeCharacteristics.isRelational(node) &&
|
|
274
|
-
'tableSchema' in node &&
|
|
275
|
-
'getAccessMethod' in node &&
|
|
276
|
-
typeof (node as any).getAccessMethod === 'function';
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
static isAggregating(node: PlanNode): node is AggregationCapable {
|
|
280
|
-
return PlanNodeCharacteristics.isRelational(node) &&
|
|
281
|
-
'getGroupingKeys' in node &&
|
|
282
|
-
typeof (node as any).getGroupingKeys === 'function' &&
|
|
283
|
-
'getAggregateExpressions' in node &&
|
|
284
|
-
typeof (node as any).getAggregateExpressions === 'function';
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
static isSortable(node: PlanNode): node is SortCapable {
|
|
288
|
-
return 'getSortKeys' in node &&
|
|
289
|
-
typeof (node as any).getSortKeys === 'function' &&
|
|
290
|
-
'withSortKeys' in node &&
|
|
291
|
-
typeof (node as any).withSortKeys === 'function';
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
static isLimit(node: PlanNode): node is LimitCapable {
|
|
295
|
-
return 'getLimitExpression' in node &&
|
|
296
|
-
typeof (node as any).getLimitExpression === 'function' &&
|
|
297
|
-
'getOffsetExpression' in node &&
|
|
298
|
-
typeof (node as any).getOffsetExpression === 'function';
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
static isColumnBindingProvider(node: PlanNode): node is ColumnBindingProvider {
|
|
302
|
-
return 'getBindingRelationName' in node &&
|
|
303
|
-
typeof (node as any).getBindingRelationName === 'string' || typeof (node as any).getBindingRelationName === 'function';
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
static canProject(node: PlanNode): node is ProjectionCapable {
|
|
307
|
-
return PlanNodeCharacteristics.isRelational(node) &&
|
|
308
|
-
'getProjections' in node &&
|
|
309
|
-
typeof (node as any).getProjections === 'function';
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
static isJoin(node: PlanNode): node is JoinCapable {
|
|
313
|
-
return PlanNodeCharacteristics.isRelational(node) &&
|
|
314
|
-
'getJoinType' in node &&
|
|
315
|
-
typeof (node as any).getJoinType === 'function' &&
|
|
316
|
-
'getLeftSource' in node &&
|
|
317
|
-
'getRightSource' in node;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
static isCached(node: PlanNode): node is CacheCapable {
|
|
321
|
-
return 'getCacheStrategy' in node &&
|
|
322
|
-
typeof (node as any).getCacheStrategy === 'function';
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
static isCTE(node: PlanNode): node is CTECapable {
|
|
326
|
-
return PlanNodeCharacteristics.isRelational(node) &&
|
|
327
|
-
'cteName' in node &&
|
|
328
|
-
typeof (node as any).cteName === 'string' &&
|
|
329
|
-
'getCTESource' in node &&
|
|
330
|
-
typeof (node as any).getCTESource === 'function';
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
static isColumnReference(node: PlanNode): node is ColumnReferenceCapable {
|
|
334
|
-
if (!node) return false;
|
|
335
|
-
return PlanNodeCharacteristics.isScalar(node) &&
|
|
336
|
-
'attributeId' in node &&
|
|
337
|
-
typeof (node as any).attributeId === 'number' &&
|
|
338
|
-
'columnIndex' in node &&
|
|
339
|
-
typeof (node as any).columnIndex === 'number' &&
|
|
340
|
-
'expression' in node;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
static isWindowFunction(node: PlanNode): node is WindowFunctionCapable {
|
|
344
|
-
if (!node) return false;
|
|
345
|
-
// Check nodeType specifically to distinguish from AggregateFunctionCallNode
|
|
346
|
-
return node.nodeType === 'WindowFunctionCall' &&
|
|
347
|
-
PlanNodeCharacteristics.isScalar(node) &&
|
|
348
|
-
'functionName' in node &&
|
|
349
|
-
typeof (node as any).functionName === 'string' &&
|
|
350
|
-
'isDistinct' in node &&
|
|
351
|
-
typeof (node as any).isDistinct === 'boolean';
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
static isAggregateFunction(node: PlanNode): node is AggregateFunctionCapable {
|
|
355
|
-
if (!node) return false;
|
|
356
|
-
// Check for AggregateFunctionCallNode - it uses ScalarFunctionCall nodeType but has args property
|
|
357
|
-
return PlanNodeCharacteristics.isScalar(node) &&
|
|
358
|
-
'functionName' in node &&
|
|
359
|
-
typeof (node as any).functionName === 'string' &&
|
|
360
|
-
'isDistinct' in node &&
|
|
361
|
-
typeof (node as any).isDistinct === 'boolean' &&
|
|
362
|
-
'args' in node &&
|
|
363
|
-
Array.isArray((node as any).args) &&
|
|
364
|
-
'functionSchema' in node;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
static isRecursiveCTERef(node: PlanNode): node is RecursiveCTERefCapable {
|
|
368
|
-
if (!node) return false;
|
|
369
|
-
return PlanNodeCharacteristics.isRelational(node) &&
|
|
370
|
-
'cteName' in node &&
|
|
371
|
-
typeof (node as any).cteName === 'string' &&
|
|
372
|
-
'workingTableDescriptor' in node;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
/**
|
|
377
|
-
* Extensible capability registry for custom characteristics
|
|
378
|
-
*/
|
|
379
|
-
export class CapabilityRegistry {
|
|
380
|
-
private static readonly detectors = new Map<string, (node: PlanNode) => boolean>();
|
|
381
|
-
|
|
382
|
-
static register(
|
|
383
|
-
capability: string,
|
|
384
|
-
detector: (node: PlanNode) => boolean
|
|
385
|
-
): void {
|
|
386
|
-
this.detectors.set(capability, detector);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
static hasCapability(node: PlanNode, capability: string): boolean {
|
|
390
|
-
const detector = this.detectors.get(capability);
|
|
391
|
-
return detector ? detector(node) : false;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
static getCapable(
|
|
395
|
-
nodes: readonly PlanNode[],
|
|
396
|
-
capability: string
|
|
397
|
-
): PlanNode[] {
|
|
398
|
-
const detector = this.detectors.get(capability);
|
|
399
|
-
if (!detector) return [];
|
|
400
|
-
return nodes.filter(detector);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
static getAllCapabilities(): string[] {
|
|
404
|
-
return Array.from(this.detectors.keys());
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
static unregister(capability: string): boolean {
|
|
408
|
-
return this.detectors.delete(capability);
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
/**
|
|
413
|
-
* Caching analysis utilities
|
|
414
|
-
*/
|
|
415
|
-
export class CachingAnalysis {
|
|
416
|
-
static isCacheable(node: PlanNode): boolean {
|
|
417
|
-
// Must be relational to cache results
|
|
418
|
-
if (!PlanNodeCharacteristics.isRelational(node)) {
|
|
419
|
-
return false;
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
// Already cached nodes don't need re-caching
|
|
423
|
-
if (CapabilityDetectors.isCached(node) && (node as any).isCached()) {
|
|
424
|
-
return false;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
// Check physical properties for side effects
|
|
428
|
-
if (PlanNodeCharacteristics.hasSideEffects(node)) {
|
|
429
|
-
// Only cache if execution would be expensive and repeated
|
|
430
|
-
return this.isExpensiveRepeatedOperation(node);
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
return true;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
static shouldCache(node: PlanNode): boolean {
|
|
437
|
-
if (!this.isCacheable(node)) {
|
|
438
|
-
return false;
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
// Cache expensive operations
|
|
442
|
-
if (PlanNodeCharacteristics.isExpensive(node)) {
|
|
443
|
-
return true;
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
// Cache likely repeated operations
|
|
447
|
-
if (PlanNodeCharacteristics.isLikelyRepeated(node)) {
|
|
448
|
-
return true;
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
return false;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
private static isExpensiveRepeatedOperation(node: PlanNode): boolean {
|
|
455
|
-
return PlanNodeCharacteristics.isExpensive(node) &&
|
|
456
|
-
PlanNodeCharacteristics.isLikelyRepeated(node);
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
static getCacheThreshold(node: PlanNode): number {
|
|
460
|
-
const estimatedRows = PlanNodeCharacteristics.estimatesRows(node);
|
|
461
|
-
return Math.min(Math.max(estimatedRows * 0.1, 1000), 100000);
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
/**
|
|
466
|
-
* Predicate analysis utilities
|
|
467
|
-
*/
|
|
468
|
-
export class PredicateAnalysis {
|
|
469
|
-
static canPushDown(predicate: ScalarPlanNode, targetNode: PlanNode): boolean {
|
|
470
|
-
if (!CapabilityDetectors.canPushDownPredicate(targetNode)) {
|
|
471
|
-
return false;
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
// Check if predicate only references columns from target
|
|
475
|
-
return this.predicateReferencesOnly(predicate, targetNode);
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
static canCombine(pred1: ScalarPlanNode, pred2: ScalarPlanNode): boolean {
|
|
479
|
-
// Basic heuristic: both must be deterministic
|
|
480
|
-
return PlanNodeCharacteristics.isDeterministic(pred1) &&
|
|
481
|
-
PlanNodeCharacteristics.isDeterministic(pred2);
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
private static predicateReferencesOnly(_predicate: ScalarPlanNode, _targetNode: PlanNode): boolean {
|
|
485
|
-
// TODO: Implement column reference analysis
|
|
486
|
-
// For now, conservatively return true
|
|
487
|
-
return true;
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
// Register built-in capabilities
|
|
492
|
-
CapabilityRegistry.register('predicate-pushdown', CapabilityDetectors.canPushDownPredicate);
|
|
493
|
-
CapabilityRegistry.register('table-access', CapabilityDetectors.isTableAccess);
|
|
494
|
-
CapabilityRegistry.register('aggregation', CapabilityDetectors.isAggregating);
|
|
495
|
-
CapabilityRegistry.register('sort', CapabilityDetectors.isSortable);
|
|
496
|
-
CapabilityRegistry.register('projection', CapabilityDetectors.canProject);
|
|
497
|
-
CapabilityRegistry.register('join', CapabilityDetectors.isJoin);
|
|
498
|
-
CapabilityRegistry.register('cache', CapabilityDetectors.isCached);
|
|
499
|
-
CapabilityRegistry.register('cte', CapabilityDetectors.isCTE);
|
|
500
|
-
CapabilityRegistry.register('column-reference', CapabilityDetectors.isColumnReference);
|
|
501
|
-
CapabilityRegistry.register('window-function', CapabilityDetectors.isWindowFunction);
|
|
502
|
-
CapabilityRegistry.register('aggregate-function', CapabilityDetectors.isAggregateFunction);
|
|
503
|
-
CapabilityRegistry.register('recursive-cte-ref', CapabilityDetectors.isRecursiveCTERef);
|