@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,244 +0,0 @@
|
|
|
1
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
2
|
-
import type { Scope } from '../scopes/scope.js';
|
|
3
|
-
import { PlanNode, type ScalarPlanNode, type ZeroAryRelationalNode, type Attribute } from './plan-node.js';
|
|
4
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
5
|
-
import { Cached } from '../../util/cached.js';
|
|
6
|
-
import { formatScalarType } from '../../util/plan-formatter.js';
|
|
7
|
-
import { Row } from '../../common/types.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Represents a VALUES clause, producing a relation from literal rows.
|
|
11
|
-
*/
|
|
12
|
-
export class ValuesNode extends PlanNode implements ZeroAryRelationalNode {
|
|
13
|
-
override readonly nodeType = PlanNodeType.Values;
|
|
14
|
-
|
|
15
|
-
private outputTypeCache: Cached<RelationType>;
|
|
16
|
-
private attributesCache: Cached<Attribute[]>;
|
|
17
|
-
|
|
18
|
-
constructor(
|
|
19
|
-
scope: Scope,
|
|
20
|
-
// Each inner array is a row, consisting of ScalarPlanNodes for each cell.
|
|
21
|
-
public readonly rows: ReadonlyArray<ReadonlyArray<ScalarPlanNode>>,
|
|
22
|
-
// Optional column names - if not provided, defaults to column_0, column_1, etc.
|
|
23
|
-
public readonly columnNames?: ReadonlyArray<string>,
|
|
24
|
-
estimatedCostOverride?: number,
|
|
25
|
-
/** Optional predefined attributes for preserving IDs during optimization */
|
|
26
|
-
predefinedAttributes?: Attribute[]
|
|
27
|
-
) {
|
|
28
|
-
super(scope, estimatedCostOverride ?? rows.length * 0.01); // Small cost per row
|
|
29
|
-
|
|
30
|
-
this.outputTypeCache = new Cached(() => this.buildOutputType());
|
|
31
|
-
this.attributesCache = new Cached(() => {
|
|
32
|
-
// If predefined attributes are provided, use them (for optimization)
|
|
33
|
-
if (predefinedAttributes) {
|
|
34
|
-
return predefinedAttributes.slice(); // Return a copy
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return this.buildAttributes();
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
private buildOutputType(): RelationType {
|
|
42
|
-
if (this.rows.length === 0) {
|
|
43
|
-
return {
|
|
44
|
-
typeClass: 'relation',
|
|
45
|
-
isReadOnly: true,
|
|
46
|
-
isSet: true,
|
|
47
|
-
columns: [],
|
|
48
|
-
keys: [],
|
|
49
|
-
rowConstraints: [],
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Infer column types from the first row
|
|
54
|
-
const firstRow = this.rows[0];
|
|
55
|
-
const columns = firstRow.map((expr, index) => ({
|
|
56
|
-
name: this.columnNames?.[index] ?? `column_${index}`,
|
|
57
|
-
type: expr.getType(),
|
|
58
|
-
generated: false,
|
|
59
|
-
}));
|
|
60
|
-
|
|
61
|
-
return {
|
|
62
|
-
typeClass: 'relation',
|
|
63
|
-
isReadOnly: true,
|
|
64
|
-
isSet: false, // VALUES can have duplicate rows
|
|
65
|
-
columns,
|
|
66
|
-
keys: [], // VALUES doesn't have inherent keys
|
|
67
|
-
rowConstraints: [],
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
private buildAttributes(): Attribute[] {
|
|
72
|
-
if (this.rows.length === 0) {
|
|
73
|
-
return [];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Create attributes for each column
|
|
77
|
-
const firstRow = this.rows[0];
|
|
78
|
-
return firstRow.map((expr, index) => ({
|
|
79
|
-
id: PlanNode.nextAttrId(),
|
|
80
|
-
name: this.columnNames?.[index] ?? `column_${index}`,
|
|
81
|
-
type: expr.getType(),
|
|
82
|
-
sourceRelation: `${this.nodeType}:${this.id}`
|
|
83
|
-
}));
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
getType(): RelationType {
|
|
87
|
-
return this.outputTypeCache.value;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
getAttributes(): Attribute[] {
|
|
91
|
-
return this.attributesCache.value;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
getChildren(): readonly ScalarPlanNode[] {
|
|
95
|
-
// All expressions in all rows are children in terms of planning dependencies
|
|
96
|
-
return this.rows.flat();
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
getRelations(): readonly [] {
|
|
100
|
-
return [];
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
104
|
-
const expectedLength = this.rows.flat().length;
|
|
105
|
-
if (newChildren.length !== expectedLength) {
|
|
106
|
-
throw new Error(`ValuesNode expects ${expectedLength} children, got ${newChildren.length}`);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Type check
|
|
110
|
-
for (const child of newChildren) {
|
|
111
|
-
if (!('expression' in child)) {
|
|
112
|
-
throw new Error('ValuesNode: all children must be ScalarPlanNodes');
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// Check if anything changed
|
|
117
|
-
const flatChildren = this.rows.flat();
|
|
118
|
-
const childrenChanged = newChildren.some((child, i) => child !== flatChildren[i]);
|
|
119
|
-
if (!childrenChanged) {
|
|
120
|
-
return this;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Rebuild the rows structure
|
|
124
|
-
const newRows: ScalarPlanNode[][] = [];
|
|
125
|
-
let childIndex = 0;
|
|
126
|
-
for (let rowIndex = 0; rowIndex < this.rows.length; rowIndex++) {
|
|
127
|
-
const rowLength = this.rows[rowIndex].length;
|
|
128
|
-
const newRow = newChildren.slice(childIndex, childIndex + rowLength) as ScalarPlanNode[];
|
|
129
|
-
newRows.push(newRow);
|
|
130
|
-
childIndex += rowLength;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Preserve original attribute IDs to maintain column reference stability
|
|
134
|
-
const originalAttributes = this.getAttributes();
|
|
135
|
-
|
|
136
|
-
// Create new instance with preserved attributes
|
|
137
|
-
return new ValuesNode(
|
|
138
|
-
this.scope,
|
|
139
|
-
newRows,
|
|
140
|
-
this.columnNames,
|
|
141
|
-
undefined, // estimatedCostOverride
|
|
142
|
-
originalAttributes // Preserve original attribute IDs
|
|
143
|
-
);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
get estimatedRows(): number {
|
|
147
|
-
return this.rows.length;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
override toString(): string {
|
|
151
|
-
return `VALUES (${this.rows.length} rows)`;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
155
|
-
if (this.rows.length === 0) {
|
|
156
|
-
return {
|
|
157
|
-
rows: [],
|
|
158
|
-
numRows: 0
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
const firstRow = this.rows[0];
|
|
163
|
-
return {
|
|
164
|
-
numRows: this.rows.length,
|
|
165
|
-
numColumns: firstRow.length,
|
|
166
|
-
columnTypes: firstRow.map(expr => formatScalarType(expr.getType())),
|
|
167
|
-
rows: this.rows.map(row =>
|
|
168
|
-
row.map(expr => expr.toString())
|
|
169
|
-
)
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Represents a table literal (collapsed const), producing a relation from literal rows.
|
|
176
|
-
*/
|
|
177
|
-
export class TableLiteralNode extends PlanNode implements ZeroAryRelationalNode {
|
|
178
|
-
override readonly nodeType = PlanNodeType.TableLiteral;
|
|
179
|
-
|
|
180
|
-
private attributesCache: Cached<Attribute[]>;
|
|
181
|
-
|
|
182
|
-
constructor(
|
|
183
|
-
scope: Scope,
|
|
184
|
-
// Each inner array is a row, consisting of literal values for each cell.
|
|
185
|
-
public readonly rows: ReadonlyArray<Row> | AsyncIterable<Row>,
|
|
186
|
-
// The number of rows in the literal.
|
|
187
|
-
public readonly rowCount: number | undefined,
|
|
188
|
-
// The relation type defining the structure and column types
|
|
189
|
-
public readonly type: RelationType,
|
|
190
|
-
) {
|
|
191
|
-
super(scope, 0.001); // Minimal cost
|
|
192
|
-
|
|
193
|
-
this.attributesCache = new Cached(() => this.buildAttributes());
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
private buildAttributes(): Attribute[] {
|
|
197
|
-
return this.type.columns.map(column => ({
|
|
198
|
-
id: PlanNode.nextAttrId(),
|
|
199
|
-
name: column.name,
|
|
200
|
-
type: column.type,
|
|
201
|
-
sourceRelation: `${this.nodeType}:${this.id}`
|
|
202
|
-
}));
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
getType(): RelationType {
|
|
206
|
-
return this.type;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
getAttributes(): Attribute[] {
|
|
210
|
-
return this.attributesCache.value;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
getChildren(): readonly ScalarPlanNode[] {
|
|
214
|
-
return [];
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
getRelations(): readonly [] {
|
|
218
|
-
return [];
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
222
|
-
if (newChildren.length > 0) {
|
|
223
|
-
throw new Error('TableLiteralNode does not accept children');
|
|
224
|
-
}
|
|
225
|
-
return this;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
get estimatedRows(): number {
|
|
229
|
-
return this.rowCount ?? 10;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
override toString(): string {
|
|
233
|
-
return `TABLE LITERAL (${this.rowCount} rows)`;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
237
|
-
const reltype = this.getType();
|
|
238
|
-
return {
|
|
239
|
-
numRows: this.rowCount,
|
|
240
|
-
numColumns: reltype.columns.length,
|
|
241
|
-
columnTypes: reltype.columns.map(col => formatScalarType(col.type)),
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { PlanNode, type ZeroAryRelationalNode, type Attribute } from './plan-node.js';
|
|
2
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
3
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
4
|
-
import type { Scope } from '../scopes/scope.js';
|
|
5
|
-
import type { ViewSchema } from '../../schema/view.js';
|
|
6
|
-
import { Cached } from '../../util/cached.js';
|
|
7
|
-
import { TEXT_TYPE } from '../../types/builtin-types.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Plan node for referencing a view in a FROM clause.
|
|
11
|
-
* This expands to the view's underlying SELECT statement.
|
|
12
|
-
*/
|
|
13
|
-
export class ViewReferenceNode extends PlanNode implements ZeroAryRelationalNode {
|
|
14
|
-
readonly nodeType = PlanNodeType.TableReference;
|
|
15
|
-
|
|
16
|
-
private attributesCache: Cached<Attribute[]>;
|
|
17
|
-
private typeCache: Cached<RelationType>;
|
|
18
|
-
|
|
19
|
-
constructor(
|
|
20
|
-
scope: Scope,
|
|
21
|
-
public readonly viewSchema: ViewSchema,
|
|
22
|
-
public readonly alias?: string
|
|
23
|
-
) {
|
|
24
|
-
super(scope, 10); // Low cost since views are just query substitution
|
|
25
|
-
this.attributesCache = new Cached(() => this.buildAttributes());
|
|
26
|
-
this.typeCache = new Cached(() => this.buildType());
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
private buildAttributes(): Attribute[] {
|
|
30
|
-
// For now, we'll create attributes based on the view's SELECT statement
|
|
31
|
-
// In a full implementation, this should be derived from the planned SELECT
|
|
32
|
-
// For simplicity, we'll assume the view has been planned elsewhere and use column names
|
|
33
|
-
const viewColumns = this.viewSchema.columns || [];
|
|
34
|
-
return viewColumns.map((columnName: string) => ({
|
|
35
|
-
id: PlanNode.nextAttrId(),
|
|
36
|
-
name: columnName,
|
|
37
|
-
type: {
|
|
38
|
-
typeClass: 'scalar' as const,
|
|
39
|
-
logicalType: TEXT_TYPE,
|
|
40
|
-
nullable: true,
|
|
41
|
-
isReadOnly: false
|
|
42
|
-
}, // Default type, should be inferred
|
|
43
|
-
sourceRelation: `view:${this.viewSchema.name}`
|
|
44
|
-
}));
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
private buildType(): RelationType {
|
|
48
|
-
return {
|
|
49
|
-
typeClass: 'relation',
|
|
50
|
-
isReadOnly: false,
|
|
51
|
-
isSet: false, // Views can contain duplicates unless they have DISTINCT
|
|
52
|
-
columns: this.getAttributes().map((attr) => ({
|
|
53
|
-
name: attr.name,
|
|
54
|
-
type: attr.type
|
|
55
|
-
})),
|
|
56
|
-
keys: [], // Views don't have inherent keys
|
|
57
|
-
rowConstraints: []
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
getAttributes(): Attribute[] {
|
|
62
|
-
return this.attributesCache.value;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
getType(): RelationType {
|
|
66
|
-
return this.typeCache.value;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
getChildren(): readonly [] {
|
|
70
|
-
return [];
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
getRelations(): readonly [] {
|
|
74
|
-
return [];
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
78
|
-
if (newChildren.length !== 0) {
|
|
79
|
-
throw new Error(`ViewReferenceNode expects 0 children, got ${newChildren.length}`);
|
|
80
|
-
}
|
|
81
|
-
return this; // No children, so no change
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
override toString(): string {
|
|
85
|
-
const aliasText = this.alias ? ` AS ${this.alias}` : '';
|
|
86
|
-
return `VIEW ${this.viewSchema.schemaName}.${this.viewSchema.name}${aliasText}`;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
90
|
-
return {
|
|
91
|
-
viewName: this.viewSchema.name,
|
|
92
|
-
schemaName: this.viewSchema.schemaName,
|
|
93
|
-
alias: this.alias,
|
|
94
|
-
columns: this.viewSchema.columns
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import { PlanNode, type ZeroAryScalarNode } from './plan-node.js';
|
|
3
|
-
import type { ScalarType } from '../../common/datatype.js';
|
|
4
|
-
import type { Scope } from '../scopes/scope.js';
|
|
5
|
-
import type { WindowFunctionExpr } from '../../parser/ast.js';
|
|
6
|
-
import { Cached } from '../../util/cached.js';
|
|
7
|
-
import { formatScalarType } from '../../util/plan-formatter.js';
|
|
8
|
-
import { INTEGER_TYPE, REAL_TYPE } from '../../types/builtin-types.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Represents a window function call in the query plan.
|
|
12
|
-
* Window functions are computed during window operation execution.
|
|
13
|
-
*/
|
|
14
|
-
export class WindowFunctionCallNode extends PlanNode implements ZeroAryScalarNode {
|
|
15
|
-
override readonly nodeType = PlanNodeType.WindowFunctionCall;
|
|
16
|
-
|
|
17
|
-
private outputTypeCache: Cached<ScalarType>;
|
|
18
|
-
|
|
19
|
-
constructor(
|
|
20
|
-
scope: Scope,
|
|
21
|
-
public readonly expression: WindowFunctionExpr,
|
|
22
|
-
public readonly functionName: string,
|
|
23
|
-
public readonly isDistinct: boolean = false,
|
|
24
|
-
public readonly alias?: string,
|
|
25
|
-
estimatedCostOverride?: number
|
|
26
|
-
) {
|
|
27
|
-
super(scope, estimatedCostOverride);
|
|
28
|
-
|
|
29
|
-
this.outputTypeCache = new Cached(() => {
|
|
30
|
-
// Most window functions return numeric types
|
|
31
|
-
// row_number() specifically returns an integer
|
|
32
|
-
if (this.functionName === 'row_number') {
|
|
33
|
-
return { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false } satisfies ScalarType;
|
|
34
|
-
}
|
|
35
|
-
// Other window functions would have their own type inference
|
|
36
|
-
return { typeClass: 'scalar', logicalType: REAL_TYPE, nullable: false } satisfies ScalarType;
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
getType(): ScalarType {
|
|
41
|
-
return this.outputTypeCache.value;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
getChildren(): readonly [] {
|
|
45
|
-
return [];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
getRelations(): readonly [] {
|
|
49
|
-
return [];
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
53
|
-
if (newChildren.length !== 0) {
|
|
54
|
-
throw new Error(`WindowFunctionCallNode expects 0 children, got ${newChildren.length}`);
|
|
55
|
-
}
|
|
56
|
-
return this; // No children, so no change
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
override toString(): string {
|
|
60
|
-
const distinctStr = this.isDistinct ? 'DISTINCT ' : '';
|
|
61
|
-
const aliasStr = this.alias ? ` AS ${this.alias}` : '';
|
|
62
|
-
return `${this.functionName}(${distinctStr})${aliasStr}`;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
66
|
-
return {
|
|
67
|
-
function: this.functionName,
|
|
68
|
-
isDistinct: this.isDistinct,
|
|
69
|
-
alias: this.alias,
|
|
70
|
-
resultType: formatScalarType(this.getType())
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import { PlanNode, type Attribute, type RelationalPlanNode, type UnaryRelationalNode, type ScalarPlanNode } from './plan-node.js';
|
|
3
|
-
import type { WindowFunctionCallNode } from './window-function.js';
|
|
4
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
5
|
-
import type { Scope } from '../scopes/scope.js';
|
|
6
|
-
import { Cached } from '../../util/cached.js';
|
|
7
|
-
import type * as AST from '../../parser/ast.js';
|
|
8
|
-
|
|
9
|
-
export interface WindowSpec {
|
|
10
|
-
partitionBy: AST.Expression[];
|
|
11
|
-
orderBy: AST.OrderByClause[];
|
|
12
|
-
frame?: AST.WindowFrame;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Represents a window operation that computes window functions over partitions of rows.
|
|
17
|
-
* This node groups window functions that share the same window specification for efficiency.
|
|
18
|
-
*/
|
|
19
|
-
export class WindowNode extends PlanNode implements UnaryRelationalNode {
|
|
20
|
-
override readonly nodeType = PlanNodeType.Window;
|
|
21
|
-
|
|
22
|
-
private outputTypeCache: Cached<RelationType>;
|
|
23
|
-
private attributesCache: Cached<Attribute[]>;
|
|
24
|
-
|
|
25
|
-
constructor(
|
|
26
|
-
scope: Scope,
|
|
27
|
-
public readonly source: RelationalPlanNode,
|
|
28
|
-
public readonly windowSpec: WindowSpec,
|
|
29
|
-
public readonly functions: WindowFunctionCallNode[],
|
|
30
|
-
public readonly partitionExpressions: ScalarPlanNode[],
|
|
31
|
-
public readonly orderByExpressions: ScalarPlanNode[],
|
|
32
|
-
public readonly functionArguments: (ScalarPlanNode | null)[],
|
|
33
|
-
estimatedCostOverride?: number,
|
|
34
|
-
/** Optional predefined attributes for preserving IDs during optimization */
|
|
35
|
-
public readonly predefinedAttributes?: Attribute[]
|
|
36
|
-
) {
|
|
37
|
-
super(scope, estimatedCostOverride);
|
|
38
|
-
|
|
39
|
-
this.outputTypeCache = new Cached(() => {
|
|
40
|
-
const sourceType = this.source.getType();
|
|
41
|
-
|
|
42
|
-
// Add window function columns to the source columns
|
|
43
|
-
const windowColumns = this.functions.map(func => ({
|
|
44
|
-
name: func.alias || func.functionName.toLowerCase(),
|
|
45
|
-
type: func.getType(),
|
|
46
|
-
generated: true
|
|
47
|
-
}));
|
|
48
|
-
|
|
49
|
-
return {
|
|
50
|
-
typeClass: 'relation',
|
|
51
|
-
isReadOnly: sourceType.isReadOnly,
|
|
52
|
-
isSet: sourceType.isSet, // Window functions preserve set/bag semantics
|
|
53
|
-
columns: [...sourceType.columns, ...windowColumns],
|
|
54
|
-
keys: sourceType.keys, // Window functions don't change key structure
|
|
55
|
-
rowConstraints: sourceType.rowConstraints,
|
|
56
|
-
} satisfies RelationType;
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
this.attributesCache = new Cached(() => {
|
|
60
|
-
// If predefined attributes are provided, use them (for optimization)
|
|
61
|
-
if (this.predefinedAttributes) {
|
|
62
|
-
return this.predefinedAttributes.slice(); // Return a copy
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Preserve source attributes and add window function attributes
|
|
66
|
-
const sourceAttrs = this.source.getAttributes();
|
|
67
|
-
const windowAttrs = this.functions.map((func) => ({
|
|
68
|
-
id: PlanNode.nextAttrId(),
|
|
69
|
-
name: func.alias || func.functionName.toLowerCase(),
|
|
70
|
-
type: func.getType(),
|
|
71
|
-
sourceRelation: `${this.nodeType}:${this.id}`
|
|
72
|
-
}));
|
|
73
|
-
|
|
74
|
-
return [...sourceAttrs, ...windowAttrs];
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
getType(): RelationType {
|
|
79
|
-
return this.outputTypeCache.value;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
getAttributes(): Attribute[] {
|
|
83
|
-
return this.attributesCache.value;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
getChildren(): readonly PlanNode[] {
|
|
87
|
-
return [
|
|
88
|
-
// Include *both* the relational source and all scalar expression children so
|
|
89
|
-
// that generic optimizer passes (e.g. access-path selection) can traverse
|
|
90
|
-
// into the relational subtree.
|
|
91
|
-
this.source,
|
|
92
|
-
|
|
93
|
-
// Scalar expressions: partition expressions, order-by expressions, and
|
|
94
|
-
// any non-null function arguments
|
|
95
|
-
...this.partitionExpressions,
|
|
96
|
-
...this.orderByExpressions,
|
|
97
|
-
...this.functionArguments.filter(arg => arg !== null) as ScalarPlanNode[]
|
|
98
|
-
];
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
102
|
-
const expectedLength = 1 + // relational source
|
|
103
|
-
this.partitionExpressions.length +
|
|
104
|
-
this.orderByExpressions.length +
|
|
105
|
-
this.functionArguments.filter(arg => arg !== null).length;
|
|
106
|
-
|
|
107
|
-
if (newChildren.length !== expectedLength) {
|
|
108
|
-
throw new Error(`WindowNode expects ${expectedLength} children, got ${newChildren.length}`);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// First child is the relational *source*.
|
|
112
|
-
const newSource = newChildren[0] as RelationalPlanNode;
|
|
113
|
-
let childIndex = 1;
|
|
114
|
-
|
|
115
|
-
// Remaining children are scalar expressions.
|
|
116
|
-
const newPartitionExpressions = newChildren.slice(childIndex, childIndex + this.partitionExpressions.length) as ScalarPlanNode[];
|
|
117
|
-
childIndex += this.partitionExpressions.length;
|
|
118
|
-
|
|
119
|
-
const newOrderByExpressions = newChildren.slice(childIndex, childIndex + this.orderByExpressions.length) as ScalarPlanNode[];
|
|
120
|
-
childIndex += this.orderByExpressions.length;
|
|
121
|
-
|
|
122
|
-
const newNonNullFunctionArgs = newChildren.slice(childIndex) as ScalarPlanNode[];
|
|
123
|
-
|
|
124
|
-
// Rebuild function arguments array preserving null positions
|
|
125
|
-
const newFunctionArguments: (ScalarPlanNode | null)[] = [];
|
|
126
|
-
let nonNullIndex = 0;
|
|
127
|
-
for (const arg of this.functionArguments) {
|
|
128
|
-
if (arg === null) {
|
|
129
|
-
newFunctionArguments.push(null);
|
|
130
|
-
} else {
|
|
131
|
-
newFunctionArguments.push(newNonNullFunctionArgs[nonNullIndex++]);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Detect changes
|
|
136
|
-
const sourceChanged = newSource !== this.source;
|
|
137
|
-
const partitionChanged = newPartitionExpressions.some((expr, i) => expr !== this.partitionExpressions[i]);
|
|
138
|
-
const orderByChanged = newOrderByExpressions.some((expr, i) => expr !== this.orderByExpressions[i]);
|
|
139
|
-
const functionArgsChanged = newFunctionArguments.some((arg, i) => arg !== this.functionArguments[i]);
|
|
140
|
-
|
|
141
|
-
if (!sourceChanged && !partitionChanged && !orderByChanged && !functionArgsChanged) {
|
|
142
|
-
return this;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// **CRITICAL**: Preserve original attribute IDs to maintain column reference stability
|
|
146
|
-
const originalAttributes = this.getAttributes();
|
|
147
|
-
|
|
148
|
-
return new WindowNode(
|
|
149
|
-
this.scope,
|
|
150
|
-
newSource,
|
|
151
|
-
this.windowSpec,
|
|
152
|
-
this.functions,
|
|
153
|
-
newPartitionExpressions,
|
|
154
|
-
newOrderByExpressions,
|
|
155
|
-
newFunctionArguments,
|
|
156
|
-
undefined,
|
|
157
|
-
// Preserve attributes only when the source is unchanged so that column IDs
|
|
158
|
-
// stay consistent. If the source relation changed, let the WindowNode rebuild
|
|
159
|
-
// its attribute list so that descriptors match the new underlying schema.
|
|
160
|
-
sourceChanged ? undefined : originalAttributes
|
|
161
|
-
);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
getRelations(): readonly [RelationalPlanNode] {
|
|
165
|
-
return [this.source];
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
get estimatedRows(): number | undefined {
|
|
169
|
-
return this.source.estimatedRows; // Window functions don't change row count
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
override toString(): string {
|
|
173
|
-
const partitionClause = this.windowSpec.partitionBy.length > 0
|
|
174
|
-
? `PARTITION BY ${this.windowSpec.partitionBy.map(_e => '...').join(', ')}`
|
|
175
|
-
: '';
|
|
176
|
-
const orderClause = this.windowSpec.orderBy.length > 0
|
|
177
|
-
? `ORDER BY ${this.windowSpec.orderBy.map(_o => '...').join(', ')}`
|
|
178
|
-
: '';
|
|
179
|
-
const clauses = [partitionClause, orderClause].filter(c => c).join(' ');
|
|
180
|
-
const funcNames = this.functions.map(f => f.functionName).join(', ');
|
|
181
|
-
|
|
182
|
-
return `WINDOW ${funcNames} OVER (${clauses})`;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
186
|
-
return {
|
|
187
|
-
windowSpec: {
|
|
188
|
-
partitionBy: this.windowSpec.partitionBy.length,
|
|
189
|
-
orderBy: this.windowSpec.orderBy.length,
|
|
190
|
-
frame: this.windowSpec.frame ? 'custom' : 'default'
|
|
191
|
-
},
|
|
192
|
-
functions: this.functions.map(f => ({
|
|
193
|
-
name: f.functionName,
|
|
194
|
-
alias: f.alias,
|
|
195
|
-
distinct: f.isDistinct
|
|
196
|
-
}))
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
}
|