@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,95 +0,0 @@
|
|
|
1
|
-
export enum PlanNodeType {
|
|
2
|
-
// Logical Nodes (from builder)
|
|
3
|
-
Block = 'Block',
|
|
4
|
-
TableReference = 'TableReference',
|
|
5
|
-
Retrieve = 'Retrieve',
|
|
6
|
-
CTEReference = 'CTEReference',
|
|
7
|
-
TableSeek = 'TableSeek',
|
|
8
|
-
Filter = 'Filter',
|
|
9
|
-
Project = 'Project',
|
|
10
|
-
Distinct = 'Distinct',
|
|
11
|
-
Aggregate = 'Aggregate',
|
|
12
|
-
Window = 'Window',
|
|
13
|
-
Sort = 'Sort',
|
|
14
|
-
LimitOffset = 'LimitOffset',
|
|
15
|
-
Join = 'Join',
|
|
16
|
-
SetOperation = 'SetOperation',
|
|
17
|
-
CTE = 'CTE',
|
|
18
|
-
RecursiveCTE = 'RecursiveCTE',
|
|
19
|
-
InternalRecursiveCTERef = 'InternalRecursiveCTERef',
|
|
20
|
-
In = 'In',
|
|
21
|
-
Exists = 'Exists',
|
|
22
|
-
Sequencing = 'Sequencing',
|
|
23
|
-
|
|
24
|
-
// DML/DDL Nodes
|
|
25
|
-
Insert = 'Insert',
|
|
26
|
-
Update = 'Update',
|
|
27
|
-
UpdateExecutor = 'UpdateExecutor',
|
|
28
|
-
Delete = 'Delete',
|
|
29
|
-
ConstraintCheck = 'ConstraintCheck',
|
|
30
|
-
CreateTable = 'CreateTable',
|
|
31
|
-
DropTable = 'DropTable',
|
|
32
|
-
CreateIndex = 'CreateIndex',
|
|
33
|
-
DropIndex = 'DropIndex',
|
|
34
|
-
CreateView = 'CreateView',
|
|
35
|
-
DropView = 'DropView',
|
|
36
|
-
CreateAssertion = 'CreateAssertion',
|
|
37
|
-
DropAssertion = 'DropAssertion',
|
|
38
|
-
AlterTable = 'AlterTable',
|
|
39
|
-
AddConstraint = 'AddConstraint',
|
|
40
|
-
|
|
41
|
-
// Physical Nodes (from optimizer)
|
|
42
|
-
SeqScan = 'SeqScan', // Physical sequential scan
|
|
43
|
-
IndexScan = 'IndexScan', // Physical index scan
|
|
44
|
-
IndexSeek = 'IndexSeek', // Physical index seek
|
|
45
|
-
RemoteQuery = 'RemoteQuery', // Physical remote query execution
|
|
46
|
-
StreamAggregate = 'StreamAggregate', // Physical ordered aggregate
|
|
47
|
-
HashAggregate = 'HashAggregate', // Physical hash aggregate
|
|
48
|
-
NestedLoopJoin = 'NestedLoopJoin',
|
|
49
|
-
HashJoin = 'HashJoin',
|
|
50
|
-
MergeJoin = 'MergeJoin',
|
|
51
|
-
Materialize = 'Materialize', // Materialize intermediate results
|
|
52
|
-
|
|
53
|
-
// Scalar expression nodes
|
|
54
|
-
Literal = 'Literal',
|
|
55
|
-
ColumnReference = 'ColumnReference',
|
|
56
|
-
ParameterReference = 'ParameterReference',
|
|
57
|
-
ArrayIndex = 'ArrayIndex',
|
|
58
|
-
UnaryOp = 'UnaryOp',
|
|
59
|
-
BinaryOp = 'BinaryOp',
|
|
60
|
-
CaseExpr = 'CaseExpr',
|
|
61
|
-
Cast = 'Cast',
|
|
62
|
-
Collate = 'Collate',
|
|
63
|
-
ScalarFunctionCall = 'ScalarFunctionCall',
|
|
64
|
-
WindowFunctionCall = 'WindowFunctionCall',
|
|
65
|
-
Between = 'Between',
|
|
66
|
-
IsNull = 'IsNull',
|
|
67
|
-
IsNotNull = 'IsNotNull',
|
|
68
|
-
Like = 'Like',
|
|
69
|
-
ScalarSubquery = 'ScalarSubquery',
|
|
70
|
-
TableFunctionReference = 'TableFunctionReference',
|
|
71
|
-
|
|
72
|
-
// Special relational nodes
|
|
73
|
-
Values = 'Values',
|
|
74
|
-
TableLiteral = "TableLiteral",
|
|
75
|
-
SingleRow = 'SingleRow', // For SELECT without FROM
|
|
76
|
-
TableFunctionCall = 'TableFunctionCall',
|
|
77
|
-
|
|
78
|
-
// Transaction control
|
|
79
|
-
Transaction = 'Transaction',
|
|
80
|
-
Savepoint = 'Savepoint',
|
|
81
|
-
|
|
82
|
-
// Utility
|
|
83
|
-
Pragma = 'Pragma',
|
|
84
|
-
DeclareSchema = 'DeclareSchema',
|
|
85
|
-
DiffSchema = 'DiffSchema',
|
|
86
|
-
ApplySchema = 'ApplySchema',
|
|
87
|
-
ExplainSchema = 'ExplainSchema',
|
|
88
|
-
|
|
89
|
-
// Query execution
|
|
90
|
-
Cache = 'Cache',
|
|
91
|
-
Sink = 'Sink',
|
|
92
|
-
|
|
93
|
-
// RETURNING support
|
|
94
|
-
Returning = 'Returning',
|
|
95
|
-
}
|
|
@@ -1,503 +0,0 @@
|
|
|
1
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import type { Scope } from '../scopes/scope.js';
|
|
3
|
-
import type { BaseType, RelationType, ScalarType } from '../../common/datatype.js';
|
|
4
|
-
import type { Expression } from '../../parser/ast.js';
|
|
5
|
-
import type { OutputValue, Row } from '../../common/types.js';
|
|
6
|
-
import { quereusError } from '../../common/errors.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Physical properties that execution nodes can provide or require
|
|
10
|
-
*/
|
|
11
|
-
export interface PhysicalProperties {
|
|
12
|
-
/** Ordering of rows. Each element is a column index, negative for DESC */
|
|
13
|
-
ordering?: { column: number; desc: boolean }[];
|
|
14
|
-
|
|
15
|
-
/** Estimated number of rows this node will produce */
|
|
16
|
-
estimatedRows?: number;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Column sets that are guaranteed unique in the output.
|
|
20
|
-
* Unlike logical keys which are schema-defined, these are derived from
|
|
21
|
-
* the operation (e.g., DISTINCT creates a unique key on all columns)
|
|
22
|
-
*/
|
|
23
|
-
uniqueKeys?: number[][];
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Whether this node is read-only (does not mutate external state).
|
|
27
|
-
* false = has side effects, true = pure/read-only
|
|
28
|
-
*/
|
|
29
|
-
readonly?: boolean;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Whether this node is deterministic - same inputs always produce same outputs.
|
|
33
|
-
* Non-deterministic examples: random(), now(), sequence generators
|
|
34
|
-
*/
|
|
35
|
-
deterministic?: boolean;
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Whether this node is idempotent - calling twice in same transaction
|
|
39
|
-
* leaves state as if called once. Only meaningful for non-readonly nodes.
|
|
40
|
-
* Examples: INSERT with IGNORE, UPDATE with same values
|
|
41
|
-
*/
|
|
42
|
-
idempotent?: boolean;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Whether this node directly produces a constant result (deterministic, readonly, and no dependencies).
|
|
46
|
-
* If this is true, the node should implement getValue() to return the constant value.
|
|
47
|
-
*/
|
|
48
|
-
constant?: boolean;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Derived properties (computed, not stored):
|
|
52
|
-
// functional = deterministic && readonly (safe for constant folding)
|
|
53
|
-
// sideEffects = !readonly (mutates external state)
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Default physical properties for plan nodes
|
|
57
|
-
*/
|
|
58
|
-
export const DEFAULT_PHYSICAL: PhysicalProperties = {
|
|
59
|
-
deterministic: true,
|
|
60
|
-
readonly: true,
|
|
61
|
-
idempotent: true, // Default true for readonly nodes
|
|
62
|
-
constant: false,
|
|
63
|
-
} as const;
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Represents a column with a unique identifier that persists across plan transformations
|
|
67
|
-
*/
|
|
68
|
-
export interface Attribute {
|
|
69
|
-
/** Globally unique identifier for this column */
|
|
70
|
-
id: number;
|
|
71
|
-
/** Human-readable name (may not be unique) */
|
|
72
|
-
name: string;
|
|
73
|
-
/** Data type information */
|
|
74
|
-
type: ScalarType;
|
|
75
|
-
/** Source relation that originally produced this column */
|
|
76
|
-
sourceRelation?: string;
|
|
77
|
-
/** Relation name for qualified access (e.g. table name or alias) */
|
|
78
|
-
relationName?: string;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Row descriptor that maps attribute IDs to column indices in a row array
|
|
83
|
-
*/
|
|
84
|
-
export type RowDescriptor = number[]; // attributeId → columnIndex
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Function that returns a row when called
|
|
88
|
-
*/
|
|
89
|
-
export type RowGetter = () => Row;
|
|
90
|
-
|
|
91
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
92
|
-
export type TableDescriptor = {
|
|
93
|
-
// Just using the object's identity for now
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
export type TableGetter = () => AsyncIterable<Row>;
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Base class for all nodes in the logical query plan.
|
|
100
|
-
* PlanNodes are immutable once constructed.
|
|
101
|
-
*/
|
|
102
|
-
export abstract class PlanNode {
|
|
103
|
-
private static nextId = 0;
|
|
104
|
-
private static nextAttributeId = 0;
|
|
105
|
-
|
|
106
|
-
readonly id: string;
|
|
107
|
-
abstract readonly nodeType: PlanNodeType;
|
|
108
|
-
|
|
109
|
-
/** Present if the node is a physical plan node */
|
|
110
|
-
private _physical?: PhysicalProperties;
|
|
111
|
-
|
|
112
|
-
constructor(
|
|
113
|
-
/** The scope in which this node is planned. */
|
|
114
|
-
public readonly scope: Scope,
|
|
115
|
-
/** Estimated cost to execute this node itself (excluding its children). */
|
|
116
|
-
public readonly estimatedCost = 0.01
|
|
117
|
-
|
|
118
|
-
) {
|
|
119
|
-
this.id = `${PlanNode.nextId++}`;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
abstract getType(): BaseType;
|
|
123
|
-
abstract getChildren(): readonly PlanNode[];
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Default implementation of getRelations() that filters getChildren()
|
|
127
|
-
* Can be overridden for performance if needed
|
|
128
|
-
*/
|
|
129
|
-
getRelations(): readonly RelationalPlanNode[] {
|
|
130
|
-
return this.getChildren()
|
|
131
|
-
.filter(isRelationalNode);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Return this node with its children replaced by newChildren.
|
|
136
|
-
* MUST keep attribute IDs stable unless the concrete node deliberately produces new columns.
|
|
137
|
-
*
|
|
138
|
-
* Implementations must:
|
|
139
|
-
* 1. Verify arity (throw if length mismatch)
|
|
140
|
-
* 2. Return `this` if nothing changed
|
|
141
|
-
* 3. Otherwise construct a new instance copying all immutable properties
|
|
142
|
-
*/
|
|
143
|
-
abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Compute physical property overrides for this node
|
|
147
|
-
* Called by the optimizer when converting logical to physical nodes.
|
|
148
|
-
* @param children Physical properties of optimized children
|
|
149
|
-
*/
|
|
150
|
-
computePhysical?(children: readonly PhysicalProperties[]): Partial<PhysicalProperties>;
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Get the attributes (columns) produced by this relational node
|
|
154
|
-
*/
|
|
155
|
-
getAttributes?(): readonly Attribute[];
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Get map of attribute ID to producing scalar expression (for constant folding)
|
|
159
|
-
* Only relational nodes that synthesize columns from expressions need implement this
|
|
160
|
-
*/
|
|
161
|
-
getProducingExprs?(): Map<number, ScalarPlanNode>;
|
|
162
|
-
|
|
163
|
-
getTotalCost(): number {
|
|
164
|
-
return (this.estimatedCost + this.getChildren().reduce((acc, child) => acc + child.getTotalCost(), 0))
|
|
165
|
-
* (this.getRelations().reduce((acc, relation) => acc + relation.getTotalCost(), 0) || 1);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
visit(visitor: PlanNodeVisitor): void {
|
|
169
|
-
visitor(this);
|
|
170
|
-
this.getChildren().forEach(child => child.visit(visitor));
|
|
171
|
-
this.getRelations().forEach(relation => relation.visit(visitor));
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
toString(): string {
|
|
175
|
-
return `${this.nodeType} [${this.id}]`;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Get logical properties for this node.
|
|
180
|
-
* Override to provide node-specific logical information.
|
|
181
|
-
*/
|
|
182
|
-
getLogicalAttributes(): Record<string, unknown> {
|
|
183
|
-
return {};
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/** Infer and cache the physical properties of this node */
|
|
187
|
-
get physical(): PhysicalProperties {
|
|
188
|
-
if (!this._physical) {
|
|
189
|
-
const childrenPhysical = this.getChildren().map(child => child.physical);
|
|
190
|
-
|
|
191
|
-
// Get the node-specific overrides
|
|
192
|
-
const propsOverride = this.computePhysical?.(childrenPhysical);
|
|
193
|
-
|
|
194
|
-
// Derive defaults from children if there are any, else leaf defaults
|
|
195
|
-
const defaults = childrenPhysical.length
|
|
196
|
-
? {
|
|
197
|
-
deterministic: childrenPhysical.every(child => child.deterministic),
|
|
198
|
-
idempotent: childrenPhysical.every(child => child.idempotent),
|
|
199
|
-
readonly: childrenPhysical.every(child => child.readonly),
|
|
200
|
-
// constant: DON'T INHERIT - only ValueNodes can be directly constant
|
|
201
|
-
}
|
|
202
|
-
: DEFAULT_PHYSICAL;
|
|
203
|
-
|
|
204
|
-
this._physical = { ...defaults, ...propsOverride };
|
|
205
|
-
}
|
|
206
|
-
return this._physical;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/** Helper to generate unique attribute IDs */
|
|
210
|
-
public static nextAttrId(): number {
|
|
211
|
-
return PlanNode.nextAttributeId++;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Check if a node is functional (pure and deterministic), safe for constant folding
|
|
216
|
-
*/
|
|
217
|
-
public static isFunctional(physical: PhysicalProperties): boolean {
|
|
218
|
-
return (physical.deterministic !== false) && (physical.readonly !== false);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Check if a node has side effects (mutates external state)
|
|
223
|
-
*/
|
|
224
|
-
public static hasSideEffects(physical: PhysicalProperties): boolean {
|
|
225
|
-
return physical.readonly === false;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
export type PlanNodeVisitor = (node: PlanNode) => void;
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Base class for PlanNodes that do not produce a relational or scalar output,
|
|
233
|
-
* typically used for DDL or other side-effecting operations.
|
|
234
|
-
*/
|
|
235
|
-
export abstract class VoidNode extends PlanNode {
|
|
236
|
-
getType(): BaseType {
|
|
237
|
-
// Indicates a non-relational, non-scalar result, e.g., status object or no output.
|
|
238
|
-
return { typeClass: 'void' };
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
getChildren(): readonly PlanNode[] {
|
|
242
|
-
return []; // No direct child plan nodes in the execution sense
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
246
|
-
if (newChildren.length !== 0) {
|
|
247
|
-
quereusError(`${this.nodeType} expects 0 children, got ${newChildren.length}`);
|
|
248
|
-
}
|
|
249
|
-
return this; // No children, so no change
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
getRelations(): readonly RelationalPlanNode[] {
|
|
253
|
-
return []; // Does not operate on input relations
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Base interface for PlanNodes that produce a relation (a set of rows).
|
|
259
|
-
* Note: this is an interface that concrete RelationalNode classes will implement.
|
|
260
|
-
*/
|
|
261
|
-
export interface RelationalPlanNode extends PlanNode {
|
|
262
|
-
/** Estimated number of rows this node will output. */
|
|
263
|
-
readonly estimatedRows?: number;
|
|
264
|
-
|
|
265
|
-
getType(): RelationType;
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* Get the attributes (columns) produced by this relational node
|
|
269
|
-
* Each attribute has a unique ID that persists across plan transformations
|
|
270
|
-
*/
|
|
271
|
-
getAttributes(): readonly Attribute[];
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Characteristically check if a node is relational (can be cached)
|
|
276
|
-
*/
|
|
277
|
-
export function isRelationalNode(node: PlanNode): node is RelationalPlanNode {
|
|
278
|
-
return node.getType().typeClass === 'relation';
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
/**
|
|
282
|
-
* Base interface for PlanNodes that produce a scalar value (Expression Nodes).
|
|
283
|
-
* Note: this is an interface that concrete ScalarNode classes will implement.
|
|
284
|
-
*/
|
|
285
|
-
export interface ScalarPlanNode extends PlanNode {
|
|
286
|
-
readonly expression: Expression;
|
|
287
|
-
getType(): ScalarType;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
/**
|
|
291
|
-
* Characteristically check if a node is a scalar node
|
|
292
|
-
*/
|
|
293
|
-
export function isScalarNode(node: PlanNode): node is ScalarPlanNode {
|
|
294
|
-
return node.getType().typeClass === 'scalar';
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
// --- Arity-based Base Abstractions (Interfaces, to be implemented by concrete node classes) ---
|
|
298
|
-
|
|
299
|
-
/** A relational plan node that has no relational inputs (a leaf in the relational algebra tree).
|
|
300
|
-
* Will not have scalar inputs either - this is either TableDee or TableDum, projection can be used to compute columns
|
|
301
|
-
*/
|
|
302
|
-
export interface ZeroAryRelationalNode extends RelationalPlanNode {
|
|
303
|
-
// No specific 'inputs' property at this base level, concrete nodes will define sources.
|
|
304
|
-
getRelations(): readonly [];
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
/** A relational plan node that operates on a single relational input. */
|
|
308
|
-
export interface UnaryRelationalNode extends RelationalPlanNode {
|
|
309
|
-
readonly source: RelationalPlanNode;
|
|
310
|
-
getRelations(): readonly [RelationalPlanNode];
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/** A relational plan node that operates on two relational inputs. */
|
|
314
|
-
export interface BinaryRelationalNode extends RelationalPlanNode {
|
|
315
|
-
readonly left: RelationalPlanNode;
|
|
316
|
-
readonly right: RelationalPlanNode;
|
|
317
|
-
getRelations(): readonly [RelationalPlanNode, RelationalPlanNode];
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/** A scalar plan node that has no scalar inputs (a leaf in an expression tree).
|
|
321
|
-
* May have relational input(s) e.g. EXISTS, IN, etc.
|
|
322
|
-
*/
|
|
323
|
-
export interface ZeroAryScalarNode extends ScalarPlanNode {
|
|
324
|
-
// No specific 'operands' property at this base level.
|
|
325
|
-
getChildren(): readonly [];
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/** A scalar plan node that operates on a single scalar input. */
|
|
329
|
-
export interface UnaryScalarNode extends ScalarPlanNode {
|
|
330
|
-
readonly operand: ScalarPlanNode;
|
|
331
|
-
getChildren(): readonly [ScalarPlanNode];
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
/** A scalar plan node that operates on two scalar inputs. */
|
|
335
|
-
export interface BinaryScalarNode extends ScalarPlanNode {
|
|
336
|
-
readonly left: ScalarPlanNode;
|
|
337
|
-
readonly right: ScalarPlanNode;
|
|
338
|
-
getChildren(): readonly [ScalarPlanNode, ScalarPlanNode];
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
/** A scalar plan node that operates on three scalar inputs. */
|
|
342
|
-
export interface TernaryScalarNode extends ScalarPlanNode {
|
|
343
|
-
getChildren(): readonly [ScalarPlanNode, ScalarPlanNode, ScalarPlanNode];
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
/** A scalar plan node that operates on N scalar inputs. */
|
|
347
|
-
export interface NaryScalarNode extends ScalarPlanNode {
|
|
348
|
-
readonly operands: ReadonlyArray<ScalarPlanNode>;
|
|
349
|
-
getChildren(): readonly ScalarPlanNode[];
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
// --- Concrete Arity-Based Base Classes ---
|
|
353
|
-
|
|
354
|
-
/**
|
|
355
|
-
* Base class for relational nodes with no relational inputs (leaf nodes)
|
|
356
|
-
*/
|
|
357
|
-
export abstract class ZeroAryRelationalBase extends PlanNode implements ZeroAryRelationalNode {
|
|
358
|
-
abstract getType(): RelationType;
|
|
359
|
-
abstract getAttributes(): readonly Attribute[];
|
|
360
|
-
|
|
361
|
-
getChildren(): readonly PlanNode[] {
|
|
362
|
-
return [];
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
getRelations(): readonly [] {
|
|
366
|
-
return [];
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
370
|
-
if (newChildren.length !== 0) {
|
|
371
|
-
quereusError(`${this.nodeType} expects 0 children, got ${newChildren.length}`);
|
|
372
|
-
}
|
|
373
|
-
return this;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
/**
|
|
378
|
-
* Base class for relational nodes with one relational input
|
|
379
|
-
*/
|
|
380
|
-
export abstract class UnaryRelationalBase extends PlanNode implements UnaryRelationalNode {
|
|
381
|
-
abstract readonly source: RelationalPlanNode;
|
|
382
|
-
abstract getType(): RelationType;
|
|
383
|
-
abstract getAttributes(): readonly Attribute[];
|
|
384
|
-
|
|
385
|
-
getChildren(): readonly PlanNode[] {
|
|
386
|
-
return [this.source];
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
getRelations(): readonly [RelationalPlanNode] {
|
|
390
|
-
return [this.source];
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
/**
|
|
397
|
-
* Base class for relational nodes with two relational inputs
|
|
398
|
-
*/
|
|
399
|
-
export abstract class BinaryRelationalBase extends PlanNode implements BinaryRelationalNode {
|
|
400
|
-
abstract readonly left: RelationalPlanNode;
|
|
401
|
-
abstract readonly right: RelationalPlanNode;
|
|
402
|
-
abstract getType(): RelationType;
|
|
403
|
-
abstract getAttributes(): readonly Attribute[];
|
|
404
|
-
|
|
405
|
-
getChildren(): readonly PlanNode[] {
|
|
406
|
-
return [this.left, this.right];
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
getRelations(): readonly [RelationalPlanNode, RelationalPlanNode] {
|
|
410
|
-
return [this.left, this.right];
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* Base class for scalar nodes with no scalar inputs (leaf expressions)
|
|
418
|
-
*/
|
|
419
|
-
export abstract class ZeroAryScalarBase extends PlanNode implements ZeroAryScalarNode {
|
|
420
|
-
abstract readonly expression: Expression;
|
|
421
|
-
abstract getType(): ScalarType;
|
|
422
|
-
|
|
423
|
-
getChildren(): readonly [] {
|
|
424
|
-
return [];
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
428
|
-
if (newChildren.length !== 0) {
|
|
429
|
-
quereusError(`${this.nodeType} expects 0 children, got ${newChildren.length}`);
|
|
430
|
-
}
|
|
431
|
-
return this;
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
/**
|
|
436
|
-
* Base class for scalar nodes with one scalar input
|
|
437
|
-
*/
|
|
438
|
-
export abstract class UnaryScalarBase extends PlanNode implements UnaryScalarNode {
|
|
439
|
-
abstract readonly operand: ScalarPlanNode;
|
|
440
|
-
abstract readonly expression: Expression;
|
|
441
|
-
abstract getType(): ScalarType;
|
|
442
|
-
|
|
443
|
-
getChildren(): readonly [ScalarPlanNode] {
|
|
444
|
-
return [this.operand];
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
/**
|
|
451
|
-
* Base class for scalar nodes with two scalar inputs
|
|
452
|
-
*/
|
|
453
|
-
export abstract class BinaryScalarBase extends PlanNode implements BinaryScalarNode {
|
|
454
|
-
abstract readonly left: ScalarPlanNode;
|
|
455
|
-
abstract readonly right: ScalarPlanNode;
|
|
456
|
-
abstract readonly expression: Expression;
|
|
457
|
-
abstract getType(): ScalarType;
|
|
458
|
-
|
|
459
|
-
getChildren(): readonly [ScalarPlanNode, ScalarPlanNode] {
|
|
460
|
-
return [this.left, this.right];
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
/**
|
|
467
|
-
* Base class for scalar nodes with three scalar inputs
|
|
468
|
-
*/
|
|
469
|
-
export abstract class TernaryScalarBase extends PlanNode implements TernaryScalarNode {
|
|
470
|
-
abstract readonly expression: Expression;
|
|
471
|
-
abstract getType(): ScalarType;
|
|
472
|
-
abstract getChildren(): readonly [ScalarPlanNode, ScalarPlanNode, ScalarPlanNode];
|
|
473
|
-
|
|
474
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
475
|
-
if (newChildren.length !== 3) {
|
|
476
|
-
quereusError(`${this.nodeType} expects 3 children, got ${newChildren.length}`);
|
|
477
|
-
}
|
|
478
|
-
return this;
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
/**
|
|
483
|
-
* Base class for scalar nodes with N scalar inputs
|
|
484
|
-
*/
|
|
485
|
-
export abstract class NaryScalarBase extends PlanNode implements NaryScalarNode {
|
|
486
|
-
abstract readonly operands: ReadonlyArray<ScalarPlanNode>;
|
|
487
|
-
abstract readonly expression: Expression;
|
|
488
|
-
abstract getType(): ScalarType;
|
|
489
|
-
|
|
490
|
-
getChildren(): readonly ScalarPlanNode[] {
|
|
491
|
-
return this.operands;
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
/**
|
|
498
|
-
* A node that directly produces a constant result (deterministic, readonly, and no dependencies).
|
|
499
|
-
* If the node is constant (literal value), it should implement getValue() to return the constant value.
|
|
500
|
-
*/
|
|
501
|
-
export interface ConstantNode extends PlanNode {
|
|
502
|
-
getValue(): OutputValue;
|
|
503
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import type { SqlValue } from '../../common/types.js';
|
|
2
|
-
import * as AST from '../../parser/ast.js';
|
|
3
|
-
import { Attribute, type RelationalPlanNode } from './plan-node.js';
|
|
4
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
5
|
-
import { expressionToString } from '../../util/ast-stringify.js';
|
|
6
|
-
import { PlanNode } from './plan-node.js';
|
|
7
|
-
import { RelationType } from '../../common/datatype.js';
|
|
8
|
-
import { Scope } from '../scopes/scope.js';
|
|
9
|
-
import { TEXT_TYPE } from '../../types/builtin-types.js';
|
|
10
|
-
|
|
11
|
-
export class PragmaPlanNode extends PlanNode implements RelationalPlanNode {
|
|
12
|
-
override readonly nodeType = PlanNodeType.Pragma;
|
|
13
|
-
|
|
14
|
-
constructor(
|
|
15
|
-
scope: Scope,
|
|
16
|
-
public readonly pragmaName: string,
|
|
17
|
-
public readonly statementAst: AST.PragmaStmt,
|
|
18
|
-
public readonly value?: SqlValue
|
|
19
|
-
) {
|
|
20
|
-
super(scope, 1); // PRAGMA operations have low cost
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
getType(): RelationType {
|
|
24
|
-
return {
|
|
25
|
-
typeClass: 'relation',
|
|
26
|
-
isReadOnly: true,
|
|
27
|
-
isSet: true,
|
|
28
|
-
columns: [
|
|
29
|
-
{
|
|
30
|
-
name: "name",
|
|
31
|
-
type: {
|
|
32
|
-
typeClass: 'scalar',
|
|
33
|
-
logicalType: TEXT_TYPE,
|
|
34
|
-
nullable: false,
|
|
35
|
-
isReadOnly: true,
|
|
36
|
-
},
|
|
37
|
-
generated: true,
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
name: "value",
|
|
41
|
-
type: {
|
|
42
|
-
typeClass: 'scalar',
|
|
43
|
-
logicalType: TEXT_TYPE,
|
|
44
|
-
nullable: false,
|
|
45
|
-
},
|
|
46
|
-
generated: true,
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
keys: [[]],
|
|
50
|
-
rowConstraints: [],
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
get estimatedRows(): number | undefined {
|
|
55
|
-
return 1;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
getAttributes(): Attribute[] {
|
|
59
|
-
return this.getType().columns.map((column) => (
|
|
60
|
-
{
|
|
61
|
-
id: PlanNode.nextAttrId(),
|
|
62
|
-
name: column.name, // Use the deduplicated name
|
|
63
|
-
type: column.type,
|
|
64
|
-
sourceRelation: `${this.nodeType}:${this.id}`
|
|
65
|
-
} satisfies Attribute
|
|
66
|
-
));
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
getChildren(): PlanNode[] {
|
|
70
|
-
return [];
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
withChildren(_newChildren: readonly PlanNode[]): PlanNode {
|
|
74
|
-
return new PragmaPlanNode(this.scope, this.pragmaName, this.statementAst, this.value);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
override toString(): string {
|
|
78
|
-
if (this.value !== undefined) {
|
|
79
|
-
return `PRAGMA ${this.pragmaName} = ${this.value}`;
|
|
80
|
-
}
|
|
81
|
-
return `PRAGMA ${this.pragmaName}`;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
85
|
-
const props: Record<string, unknown> = {
|
|
86
|
-
type: 'pragma',
|
|
87
|
-
name: this.statementAst.name,
|
|
88
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
89
|
-
statement: expressionToString(this.statementAst as any)
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
if (this.value !== undefined) {
|
|
93
|
-
props.value = this.value;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return props;
|
|
97
|
-
}
|
|
98
|
-
}
|