@quereus/quereus 0.7.3 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +19 -18
- package/package.json +3 -3
- package/dist/src/common/constants.js.map +0 -1
- package/dist/src/common/datatype.js.map +0 -1
- package/dist/src/common/errors.js.map +0 -1
- package/dist/src/common/json-types.js.map +0 -1
- package/dist/src/common/logger.js.map +0 -1
- package/dist/src/common/type-inference.js.map +0 -1
- package/dist/src/common/types.js.map +0 -1
- package/dist/src/core/database-options.js.map +0 -1
- package/dist/src/core/database.js.map +0 -1
- package/dist/src/core/param.js.map +0 -1
- package/dist/src/core/statement.js.map +0 -1
- package/dist/src/func/builtins/aggregate.js.map +0 -1
- package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
- package/dist/src/func/builtins/conversion.js.map +0 -1
- package/dist/src/func/builtins/datetime.js.map +0 -1
- package/dist/src/func/builtins/explain.js.map +0 -1
- package/dist/src/func/builtins/generation.js.map +0 -1
- package/dist/src/func/builtins/index.js.map +0 -1
- package/dist/src/func/builtins/json-helpers.js.map +0 -1
- package/dist/src/func/builtins/json-tvf.js.map +0 -1
- package/dist/src/func/builtins/json.js.map +0 -1
- package/dist/src/func/builtins/scalar.js.map +0 -1
- package/dist/src/func/builtins/schema.js.map +0 -1
- package/dist/src/func/builtins/string.js.map +0 -1
- package/dist/src/func/builtins/timespan.js.map +0 -1
- package/dist/src/func/context.js.map +0 -1
- package/dist/src/func/registration.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/parser/ast.js.map +0 -1
- package/dist/src/parser/index.js.map +0 -1
- package/dist/src/parser/lexer.js.map +0 -1
- package/dist/src/parser/parser.js.map +0 -1
- package/dist/src/parser/utils.js.map +0 -1
- package/dist/src/parser/visitor.js.map +0 -1
- package/dist/src/planner/analysis/binding-collector.js.map +0 -1
- package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
- package/dist/src/planner/analysis/const-pass.js.map +0 -1
- package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
- package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
- package/dist/src/planner/building/alter-table.js.map +0 -1
- package/dist/src/planner/building/block.js.map +0 -1
- package/dist/src/planner/building/constraint-builder.js.map +0 -1
- package/dist/src/planner/building/create-assertion.js.map +0 -1
- package/dist/src/planner/building/create-view.js.map +0 -1
- package/dist/src/planner/building/ddl.js.map +0 -1
- package/dist/src/planner/building/declare-schema.js.map +0 -1
- package/dist/src/planner/building/delete.js.map +0 -1
- package/dist/src/planner/building/drop-assertion.js.map +0 -1
- package/dist/src/planner/building/drop-table.js.map +0 -1
- package/dist/src/planner/building/drop-view.js.map +0 -1
- package/dist/src/planner/building/expression.js.map +0 -1
- package/dist/src/planner/building/function-call.js.map +0 -1
- package/dist/src/planner/building/insert.js.map +0 -1
- package/dist/src/planner/building/pragma.js.map +0 -1
- package/dist/src/planner/building/schema-resolution.js.map +0 -1
- package/dist/src/planner/building/select-aggregates.js.map +0 -1
- package/dist/src/planner/building/select-compound.js.map +0 -1
- package/dist/src/planner/building/select-context.js.map +0 -1
- package/dist/src/planner/building/select-modifiers.js.map +0 -1
- package/dist/src/planner/building/select-projections.js.map +0 -1
- package/dist/src/planner/building/select-window.js.map +0 -1
- package/dist/src/planner/building/select.js.map +0 -1
- package/dist/src/planner/building/table-function.js.map +0 -1
- package/dist/src/planner/building/table.js.map +0 -1
- package/dist/src/planner/building/transaction.js.map +0 -1
- package/dist/src/planner/building/update.js.map +0 -1
- package/dist/src/planner/building/with.js.map +0 -1
- package/dist/src/planner/cache/correlation-detector.js.map +0 -1
- package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
- package/dist/src/planner/cache/reference-graph.js.map +0 -1
- package/dist/src/planner/cost/index.js.map +0 -1
- package/dist/src/planner/debug/logger-utils.js.map +0 -1
- package/dist/src/planner/debug.js.map +0 -1
- package/dist/src/planner/framework/characteristics.js.map +0 -1
- package/dist/src/planner/framework/context.js.map +0 -1
- package/dist/src/planner/framework/pass.js.map +0 -1
- package/dist/src/planner/framework/physical-utils.js.map +0 -1
- package/dist/src/planner/framework/registry.js.map +0 -1
- package/dist/src/planner/framework/trace.js.map +0 -1
- package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
- package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
- package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
- package/dist/src/planner/nodes/array-index-node.js.map +0 -1
- package/dist/src/planner/nodes/block.js.map +0 -1
- package/dist/src/planner/nodes/cache-node.js.map +0 -1
- package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
- package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
- package/dist/src/planner/nodes/create-index-node.js.map +0 -1
- package/dist/src/planner/nodes/create-table-node.js.map +0 -1
- package/dist/src/planner/nodes/create-view-node.js.map +0 -1
- package/dist/src/planner/nodes/cte-node.js.map +0 -1
- package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
- package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
- package/dist/src/planner/nodes/delete-node.js.map +0 -1
- package/dist/src/planner/nodes/distinct-node.js.map +0 -1
- package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
- package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
- package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
- package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
- package/dist/src/planner/nodes/filter.js.map +0 -1
- package/dist/src/planner/nodes/function.js.map +0 -1
- package/dist/src/planner/nodes/insert-node.js.map +0 -1
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
- package/dist/src/planner/nodes/join-node.js.map +0 -1
- package/dist/src/planner/nodes/limit-offset.js.map +0 -1
- package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
- package/dist/src/planner/nodes/plan-node.js.map +0 -1
- package/dist/src/planner/nodes/pragma.js.map +0 -1
- package/dist/src/planner/nodes/project-node.js.map +0 -1
- package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
- package/dist/src/planner/nodes/reference.js.map +0 -1
- package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
- package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
- package/dist/src/planner/nodes/returning-node.js.map +0 -1
- package/dist/src/planner/nodes/scalar.js.map +0 -1
- package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
- package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
- package/dist/src/planner/nodes/single-row.js.map +0 -1
- package/dist/src/planner/nodes/sink-node.js.map +0 -1
- package/dist/src/planner/nodes/sort.js.map +0 -1
- package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
- package/dist/src/planner/nodes/subquery.js.map +0 -1
- package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
- package/dist/src/planner/nodes/table-function-call.js.map +0 -1
- package/dist/src/planner/nodes/transaction-node.js.map +0 -1
- package/dist/src/planner/nodes/update-node.js.map +0 -1
- package/dist/src/planner/nodes/values-node.js.map +0 -1
- package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
- package/dist/src/planner/nodes/window-function.js.map +0 -1
- package/dist/src/planner/nodes/window-node.js.map +0 -1
- package/dist/src/planner/optimizer-tuning.js.map +0 -1
- package/dist/src/planner/optimizer.js.map +0 -1
- package/dist/src/planner/planning-context.js.map +0 -1
- package/dist/src/planner/resolve.js.map +0 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
- package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
- package/dist/src/planner/scopes/aliased.js.map +0 -1
- package/dist/src/planner/scopes/base.js.map +0 -1
- package/dist/src/planner/scopes/empty.js.map +0 -1
- package/dist/src/planner/scopes/global.js.map +0 -1
- package/dist/src/planner/scopes/multi.js.map +0 -1
- package/dist/src/planner/scopes/param.js.map +0 -1
- package/dist/src/planner/scopes/registered.js.map +0 -1
- package/dist/src/planner/scopes/scope.js.map +0 -1
- package/dist/src/planner/stats/basic-estimates.js.map +0 -1
- package/dist/src/planner/stats/index.js.map +0 -1
- package/dist/src/planner/type-utils.js.map +0 -1
- package/dist/src/planner/util/key-utils.js.map +0 -1
- package/dist/src/planner/validation/determinism-validator.js.map +0 -1
- package/dist/src/planner/validation/plan-validator.js.map +0 -1
- package/dist/src/runtime/async-util.js.map +0 -1
- package/dist/src/runtime/cache/shared-cache.js.map +0 -1
- package/dist/src/runtime/context-helpers.js.map +0 -1
- package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
- package/dist/src/runtime/emission-context.js.map +0 -1
- package/dist/src/runtime/emit/add-constraint.js.map +0 -1
- package/dist/src/runtime/emit/aggregate.js.map +0 -1
- package/dist/src/runtime/emit/array-index.js.map +0 -1
- package/dist/src/runtime/emit/between.js.map +0 -1
- package/dist/src/runtime/emit/binary.js.map +0 -1
- package/dist/src/runtime/emit/block.js.map +0 -1
- package/dist/src/runtime/emit/cache.js.map +0 -1
- package/dist/src/runtime/emit/case.js.map +0 -1
- package/dist/src/runtime/emit/cast.js.map +0 -1
- package/dist/src/runtime/emit/collate.js.map +0 -1
- package/dist/src/runtime/emit/column-reference.js.map +0 -1
- package/dist/src/runtime/emit/constraint-check.js.map +0 -1
- package/dist/src/runtime/emit/create-assertion.js.map +0 -1
- package/dist/src/runtime/emit/create-index.js.map +0 -1
- package/dist/src/runtime/emit/create-table.js.map +0 -1
- package/dist/src/runtime/emit/create-view.js.map +0 -1
- package/dist/src/runtime/emit/cte-reference.js.map +0 -1
- package/dist/src/runtime/emit/cte.js.map +0 -1
- package/dist/src/runtime/emit/delete.js.map +0 -1
- package/dist/src/runtime/emit/distinct.js.map +0 -1
- package/dist/src/runtime/emit/dml-executor.js.map +0 -1
- package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
- package/dist/src/runtime/emit/drop-table.js.map +0 -1
- package/dist/src/runtime/emit/drop-view.js.map +0 -1
- package/dist/src/runtime/emit/filter.js.map +0 -1
- package/dist/src/runtime/emit/insert.js.map +0 -1
- package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
- package/dist/src/runtime/emit/join.js.map +0 -1
- package/dist/src/runtime/emit/limit-offset.js.map +0 -1
- package/dist/src/runtime/emit/literal.js.map +0 -1
- package/dist/src/runtime/emit/parameter.js.map +0 -1
- package/dist/src/runtime/emit/pragma.js.map +0 -1
- package/dist/src/runtime/emit/project.js.map +0 -1
- package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
- package/dist/src/runtime/emit/remote-query.js.map +0 -1
- package/dist/src/runtime/emit/retrieve.js.map +0 -1
- package/dist/src/runtime/emit/returning.js.map +0 -1
- package/dist/src/runtime/emit/scalar-function.js.map +0 -1
- package/dist/src/runtime/emit/scan.js.map +0 -1
- package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
- package/dist/src/runtime/emit/sequencing.js.map +0 -1
- package/dist/src/runtime/emit/set-operation.js.map +0 -1
- package/dist/src/runtime/emit/sink.js.map +0 -1
- package/dist/src/runtime/emit/sort.js.map +0 -1
- package/dist/src/runtime/emit/subquery.js.map +0 -1
- package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
- package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
- package/dist/src/runtime/emit/transaction.js.map +0 -1
- package/dist/src/runtime/emit/unary.js.map +0 -1
- package/dist/src/runtime/emit/update.js.map +0 -1
- package/dist/src/runtime/emit/values.js.map +0 -1
- package/dist/src/runtime/emit/window-function.js.map +0 -1
- package/dist/src/runtime/emit/window.js.map +0 -1
- package/dist/src/runtime/emitters.js.map +0 -1
- package/dist/src/runtime/register.js.map +0 -1
- package/dist/src/runtime/scheduler.js.map +0 -1
- package/dist/src/runtime/types.js.map +0 -1
- package/dist/src/runtime/utils.js.map +0 -1
- package/dist/src/schema/assertion.js.map +0 -1
- package/dist/src/schema/catalog.js.map +0 -1
- package/dist/src/schema/change-events.js.map +0 -1
- package/dist/src/schema/column.js.map +0 -1
- package/dist/src/schema/declared-schema-manager.js.map +0 -1
- package/dist/src/schema/function.js.map +0 -1
- package/dist/src/schema/manager.js.map +0 -1
- package/dist/src/schema/schema-differ.js.map +0 -1
- package/dist/src/schema/schema-hasher.js.map +0 -1
- package/dist/src/schema/schema.js.map +0 -1
- package/dist/src/schema/table.js.map +0 -1
- package/dist/src/schema/view.js.map +0 -1
- package/dist/src/schema/window-function.js.map +0 -1
- package/dist/src/types/builtin-types.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/json-type.js.map +0 -1
- package/dist/src/types/logical-type.js.map +0 -1
- package/dist/src/types/plugin-interface.js.map +0 -1
- package/dist/src/types/registry.js.map +0 -1
- package/dist/src/types/temporal-types.js.map +0 -1
- package/dist/src/types/validation.js.map +0 -1
- package/dist/src/util/affinity.js.map +0 -1
- package/dist/src/util/ast-stringify.js.map +0 -1
- package/dist/src/util/cached.js.map +0 -1
- package/dist/src/util/coercion.js.map +0 -1
- package/dist/src/util/comparison.js.map +0 -1
- package/dist/src/util/environment.js.map +0 -1
- package/dist/src/util/hash.js.map +0 -1
- package/dist/src/util/latches.js.map +0 -1
- package/dist/src/util/mutation-statement.js.map +0 -1
- package/dist/src/util/patterns.js.map +0 -1
- package/dist/src/util/plan-formatter.js.map +0 -1
- package/dist/src/util/plugin-helper.js.map +0 -1
- package/dist/src/util/row-descriptor.js.map +0 -1
- package/dist/src/util/serialization.js.map +0 -1
- package/dist/src/util/sql-literal.js.map +0 -1
- package/dist/src/util/working-table-iterable.js.map +0 -1
- package/dist/src/vtab/best-access-plan.js.map +0 -1
- package/dist/src/vtab/connection.js.map +0 -1
- package/dist/src/vtab/filter-info.js.map +0 -1
- package/dist/src/vtab/index-info.js.map +0 -1
- package/dist/src/vtab/manifest.js.map +0 -1
- package/dist/src/vtab/memory/connection.js.map +0 -1
- package/dist/src/vtab/memory/index.js.map +0 -1
- package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
- package/dist/src/vtab/memory/layer/base.js.map +0 -1
- package/dist/src/vtab/memory/layer/connection.js.map +0 -1
- package/dist/src/vtab/memory/layer/interface.js.map +0 -1
- package/dist/src/vtab/memory/layer/manager.js.map +0 -1
- package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
- package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
- package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
- package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
- package/dist/src/vtab/memory/module.js.map +0 -1
- package/dist/src/vtab/memory/table.js.map +0 -1
- package/dist/src/vtab/memory/types.js.map +0 -1
- package/dist/src/vtab/memory/utils/logging.js.map +0 -1
- package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
- package/dist/src/vtab/module.js.map +0 -1
- package/dist/src/vtab/table.js.map +0 -1
- package/src/common/constants.ts +0 -60
- package/src/common/datatype.ts +0 -85
- package/src/common/errors.ts +0 -189
- package/src/common/json-types.ts +0 -16
- package/src/common/logger.ts +0 -97
- package/src/common/type-inference.ts +0 -39
- package/src/common/types.ts +0 -151
- package/src/core/database-options.ts +0 -258
- package/src/core/database.ts +0 -1461
- package/src/core/param.ts +0 -56
- package/src/core/statement.ts +0 -528
- package/src/func/builtins/aggregate.ts +0 -269
- package/src/func/builtins/builtin-window-functions.ts +0 -166
- package/src/func/builtins/conversion.ts +0 -226
- package/src/func/builtins/datetime.ts +0 -500
- package/src/func/builtins/explain.ts +0 -779
- package/src/func/builtins/generation.ts +0 -43
- package/src/func/builtins/index.ts +0 -167
- package/src/func/builtins/json-helpers.ts +0 -237
- package/src/func/builtins/json-tvf.ts +0 -224
- package/src/func/builtins/json.ts +0 -588
- package/src/func/builtins/scalar.ts +0 -423
- package/src/func/builtins/schema.ts +0 -213
- package/src/func/builtins/string.ts +0 -306
- package/src/func/builtins/timespan.ts +0 -179
- package/src/func/context.ts +0 -258
- package/src/func/registration.ts +0 -201
- package/src/index.ts +0 -172
- package/src/parser/ast.ts +0 -581
- package/src/parser/index.ts +0 -65
- package/src/parser/lexer.ts +0 -806
- package/src/parser/parser.ts +0 -3352
- package/src/parser/utils.ts +0 -10
- package/src/parser/visitor.ts +0 -188
- package/src/planner/analysis/README.md +0 -93
- package/src/planner/analysis/binding-collector.ts +0 -83
- package/src/planner/analysis/const-evaluator.ts +0 -63
- package/src/planner/analysis/const-pass.ts +0 -282
- package/src/planner/analysis/constraint-extractor.ts +0 -764
- package/src/planner/analysis/predicate-normalizer.ts +0 -237
- package/src/planner/building/alter-table.ts +0 -49
- package/src/planner/building/block.ts +0 -93
- package/src/planner/building/constraint-builder.ts +0 -178
- package/src/planner/building/create-assertion.ts +0 -7
- package/src/planner/building/create-view.ts +0 -29
- package/src/planner/building/ddl.ts +0 -24
- package/src/planner/building/declare-schema.ts +0 -22
- package/src/planner/building/delete.ts +0 -218
- package/src/planner/building/drop-assertion.ts +0 -11
- package/src/planner/building/drop-table.ts +0 -13
- package/src/planner/building/drop-view.ts +0 -19
- package/src/planner/building/expression.ts +0 -205
- package/src/planner/building/function-call.ts +0 -129
- package/src/planner/building/insert.ts +0 -435
- package/src/planner/building/pragma.ts +0 -34
- package/src/planner/building/schema-resolution.ts +0 -176
- package/src/planner/building/select-aggregates.ts +0 -318
- package/src/planner/building/select-compound.ts +0 -119
- package/src/planner/building/select-context.ts +0 -85
- package/src/planner/building/select-modifiers.ts +0 -236
- package/src/planner/building/select-projections.ts +0 -177
- package/src/planner/building/select-window.ts +0 -259
- package/src/planner/building/select.ts +0 -567
- package/src/planner/building/table-function.ts +0 -49
- package/src/planner/building/table.ts +0 -40
- package/src/planner/building/transaction.ts +0 -23
- package/src/planner/building/update.ts +0 -331
- package/src/planner/building/with.ts +0 -180
- package/src/planner/cache/correlation-detector.ts +0 -83
- package/src/planner/cache/materialization-advisory.ts +0 -265
- package/src/planner/cache/reference-graph.ts +0 -196
- package/src/planner/cost/index.ts +0 -169
- package/src/planner/debug/logger-utils.ts +0 -68
- package/src/planner/debug.ts +0 -480
- package/src/planner/framework/README.md +0 -132
- package/src/planner/framework/characteristics.ts +0 -503
- package/src/planner/framework/context.ts +0 -239
- package/src/planner/framework/pass.ts +0 -354
- package/src/planner/framework/physical-utils.ts +0 -210
- package/src/planner/framework/registry.ts +0 -261
- package/src/planner/framework/trace.ts +0 -259
- package/src/planner/nodes/add-constraint-node.ts +0 -62
- package/src/planner/nodes/aggregate-function.ts +0 -155
- package/src/planner/nodes/aggregate-node.ts +0 -267
- package/src/planner/nodes/array-index-node.ts +0 -50
- package/src/planner/nodes/block.ts +0 -80
- package/src/planner/nodes/cache-node.ts +0 -103
- package/src/planner/nodes/constraint-check-node.ts +0 -138
- package/src/planner/nodes/create-assertion-node.ts +0 -51
- package/src/planner/nodes/create-index-node.ts +0 -41
- package/src/planner/nodes/create-table-node.ts +0 -35
- package/src/planner/nodes/create-view-node.ts +0 -44
- package/src/planner/nodes/cte-node.ts +0 -168
- package/src/planner/nodes/cte-reference-node.ts +0 -125
- package/src/planner/nodes/declarative-schema.ts +0 -221
- package/src/planner/nodes/delete-node.ts +0 -102
- package/src/planner/nodes/distinct-node.ts +0 -107
- package/src/planner/nodes/dml-executor-node.ts +0 -104
- package/src/planner/nodes/drop-assertion-node.ts +0 -50
- package/src/planner/nodes/drop-table-node.ts +0 -36
- package/src/planner/nodes/drop-view-node.ts +0 -37
- package/src/planner/nodes/filter.ts +0 -144
- package/src/planner/nodes/function.ts +0 -98
- package/src/planner/nodes/insert-node.ts +0 -126
- package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
- package/src/planner/nodes/join-node.ts +0 -336
- package/src/planner/nodes/limit-offset.ts +0 -144
- package/src/planner/nodes/plan-node-type.ts +0 -95
- package/src/planner/nodes/plan-node.ts +0 -503
- package/src/planner/nodes/pragma.ts +0 -98
- package/src/planner/nodes/project-node.ts +0 -337
- package/src/planner/nodes/recursive-cte-node.ts +0 -158
- package/src/planner/nodes/reference.ts +0 -334
- package/src/planner/nodes/remote-query-node.ts +0 -73
- package/src/planner/nodes/retrieve-node.ts +0 -86
- package/src/planner/nodes/returning-node.ts +0 -269
- package/src/planner/nodes/scalar.ts +0 -772
- package/src/planner/nodes/sequencing-node.ts +0 -113
- package/src/planner/nodes/set-operation-node.ts +0 -87
- package/src/planner/nodes/single-row.ts +0 -85
- package/src/planner/nodes/sink-node.ts +0 -61
- package/src/planner/nodes/sort.ts +0 -166
- package/src/planner/nodes/stream-aggregate.ts +0 -293
- package/src/planner/nodes/subquery.ts +0 -268
- package/src/planner/nodes/table-access-nodes.ts +0 -323
- package/src/planner/nodes/table-function-call.ts +0 -134
- package/src/planner/nodes/transaction-node.ts +0 -55
- package/src/planner/nodes/update-node.ts +0 -138
- package/src/planner/nodes/values-node.ts +0 -244
- package/src/planner/nodes/view-reference-node.ts +0 -97
- package/src/planner/nodes/window-function.ts +0 -73
- package/src/planner/nodes/window-node.ts +0 -199
- package/src/planner/optimizer-tuning.ts +0 -105
- package/src/planner/optimizer.ts +0 -332
- package/src/planner/planning-context.ts +0 -190
- package/src/planner/resolve.ts +0 -101
- package/src/planner/rules/README.md +0 -96
- package/src/planner/rules/access/rule-select-access-path.ts +0 -399
- package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
- package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
- package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
- package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
- package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
- package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
- package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
- package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
- package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
- package/src/planner/scopes/aliased.ts +0 -50
- package/src/planner/scopes/base.ts +0 -10
- package/src/planner/scopes/empty.ts +0 -12
- package/src/planner/scopes/global.ts +0 -73
- package/src/planner/scopes/multi.ts +0 -40
- package/src/planner/scopes/param.ts +0 -95
- package/src/planner/scopes/registered.ts +0 -67
- package/src/planner/scopes/scope.ts +0 -16
- package/src/planner/stats/basic-estimates.ts +0 -107
- package/src/planner/stats/index.ts +0 -158
- package/src/planner/type-utils.ts +0 -87
- package/src/planner/util/key-utils.ts +0 -46
- package/src/planner/validation/determinism-validator.ts +0 -104
- package/src/planner/validation/plan-validator.ts +0 -335
- package/src/runtime/async-util.ts +0 -283
- package/src/runtime/cache/shared-cache.ts +0 -169
- package/src/runtime/context-helpers.ts +0 -191
- package/src/runtime/deferred-constraint-queue.ts +0 -196
- package/src/runtime/emission-context.ts +0 -319
- package/src/runtime/emit/add-constraint.ts +0 -78
- package/src/runtime/emit/aggregate.ts +0 -581
- package/src/runtime/emit/array-index.ts +0 -25
- package/src/runtime/emit/between.ts +0 -51
- package/src/runtime/emit/binary.ts +0 -357
- package/src/runtime/emit/block.ts +0 -23
- package/src/runtime/emit/cache.ts +0 -64
- package/src/runtime/emit/case.ts +0 -87
- package/src/runtime/emit/cast.ts +0 -151
- package/src/runtime/emit/collate.ts +0 -9
- package/src/runtime/emit/column-reference.ts +0 -17
- package/src/runtime/emit/constraint-check.ts +0 -290
- package/src/runtime/emit/create-assertion.ts +0 -82
- package/src/runtime/emit/create-index.ts +0 -15
- package/src/runtime/emit/create-table.ts +0 -15
- package/src/runtime/emit/create-view.ts +0 -52
- package/src/runtime/emit/cte-reference.ts +0 -38
- package/src/runtime/emit/cte.ts +0 -39
- package/src/runtime/emit/delete.ts +0 -24
- package/src/runtime/emit/distinct.ts +0 -40
- package/src/runtime/emit/dml-executor.ts +0 -198
- package/src/runtime/emit/drop-assertion.ts +0 -45
- package/src/runtime/emit/drop-table.ts +0 -27
- package/src/runtime/emit/drop-view.ts +0 -49
- package/src/runtime/emit/filter.ts +0 -30
- package/src/runtime/emit/insert.ts +0 -42
- package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
- package/src/runtime/emit/join.ts +0 -148
- package/src/runtime/emit/limit-offset.ts +0 -73
- package/src/runtime/emit/literal.ts +0 -17
- package/src/runtime/emit/parameter.ts +0 -59
- package/src/runtime/emit/pragma.ts +0 -56
- package/src/runtime/emit/project.ts +0 -46
- package/src/runtime/emit/recursive-cte.ts +0 -111
- package/src/runtime/emit/remote-query.ts +0 -47
- package/src/runtime/emit/retrieve.ts +0 -15
- package/src/runtime/emit/returning.ts +0 -41
- package/src/runtime/emit/scalar-function.ts +0 -69
- package/src/runtime/emit/scan.ts +0 -106
- package/src/runtime/emit/schema-declarative.ts +0 -215
- package/src/runtime/emit/sequencing.ts +0 -24
- package/src/runtime/emit/set-operation.ts +0 -141
- package/src/runtime/emit/sink.ts +0 -27
- package/src/runtime/emit/sort.ts +0 -75
- package/src/runtime/emit/subquery.ts +0 -203
- package/src/runtime/emit/table-valued-function.ts +0 -106
- package/src/runtime/emit/temporal-arithmetic.ts +0 -302
- package/src/runtime/emit/transaction.ts +0 -205
- package/src/runtime/emit/unary.ts +0 -101
- package/src/runtime/emit/update.ts +0 -66
- package/src/runtime/emit/values.ts +0 -66
- package/src/runtime/emit/window-function.ts +0 -42
- package/src/runtime/emit/window.ts +0 -458
- package/src/runtime/emitters.ts +0 -183
- package/src/runtime/register.ts +0 -150
- package/src/runtime/scheduler.ts +0 -488
- package/src/runtime/types.ts +0 -242
- package/src/runtime/utils.ts +0 -177
- package/src/schema/assertion.ts +0 -21
- package/src/schema/catalog.ts +0 -269
- package/src/schema/change-events.ts +0 -80
- package/src/schema/column.ts +0 -51
- package/src/schema/declared-schema-manager.ts +0 -82
- package/src/schema/function.ts +0 -188
- package/src/schema/manager.ts +0 -1034
- package/src/schema/schema-differ.ts +0 -214
- package/src/schema/schema-hasher.ts +0 -26
- package/src/schema/schema.ts +0 -222
- package/src/schema/table.ts +0 -409
- package/src/schema/view.ts +0 -19
- package/src/schema/window-function.ts +0 -56
- package/src/types/builtin-types.ts +0 -350
- package/src/types/index.ts +0 -17
- package/src/types/json-type.ts +0 -152
- package/src/types/logical-type.ts +0 -91
- package/src/types/plugin-interface.ts +0 -10
- package/src/types/registry.ts +0 -204
- package/src/types/temporal-types.ts +0 -290
- package/src/types/validation.ts +0 -120
- package/src/util/affinity.ts +0 -151
- package/src/util/ast-stringify.ts +0 -887
- package/src/util/cached.ts +0 -25
- package/src/util/coercion.ts +0 -113
- package/src/util/comparison.ts +0 -510
- package/src/util/environment.ts +0 -52
- package/src/util/hash.ts +0 -90
- package/src/util/latches.ts +0 -47
- package/src/util/mutation-statement.ts +0 -135
- package/src/util/patterns.ts +0 -56
- package/src/util/plan-formatter.ts +0 -48
- package/src/util/plugin-helper.ts +0 -110
- package/src/util/row-descriptor.ts +0 -105
- package/src/util/serialization.ts +0 -47
- package/src/util/sql-literal.ts +0 -22
- package/src/util/working-table-iterable.ts +0 -38
- package/src/vtab/best-access-plan.ts +0 -244
- package/src/vtab/connection.ts +0 -36
- package/src/vtab/filter-info.ts +0 -23
- package/src/vtab/index-info.ts +0 -84
- package/src/vtab/manifest.ts +0 -86
- package/src/vtab/memory/connection.ts +0 -73
- package/src/vtab/memory/index.ts +0 -191
- package/src/vtab/memory/layer/base-cursor.ts +0 -124
- package/src/vtab/memory/layer/base.ts +0 -275
- package/src/vtab/memory/layer/connection.ts +0 -203
- package/src/vtab/memory/layer/interface.ts +0 -47
- package/src/vtab/memory/layer/manager.ts +0 -909
- package/src/vtab/memory/layer/safe-iterate.ts +0 -49
- package/src/vtab/memory/layer/scan-plan.ts +0 -84
- package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
- package/src/vtab/memory/layer/transaction.ts +0 -229
- package/src/vtab/memory/module.ts +0 -667
- package/src/vtab/memory/table.ts +0 -251
- package/src/vtab/memory/types.ts +0 -23
- package/src/vtab/memory/utils/logging.ts +0 -36
- package/src/vtab/memory/utils/primary-key.ts +0 -163
- package/src/vtab/module.ts +0 -162
- package/src/vtab/table.ts +0 -177
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import { isRelationalNode, PlanNode, type Attribute, type RelationalPlanNode, type UnaryRelationalNode } from './plan-node.js';
|
|
3
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
4
|
-
import type { Scope } from '../scopes/scope.js';
|
|
5
|
-
import { Cached } from '../../util/cached.js';
|
|
6
|
-
import { INTEGER_TYPE } from '../../types/builtin-types.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Represents a sequencing operation that adds a row number column to convert bags to sets.
|
|
10
|
-
* This ensures uniqueness for operations that require set semantics.
|
|
11
|
-
* The added column is typically projected away after use and not visible to the user.
|
|
12
|
-
*/
|
|
13
|
-
export class SequencingNode extends PlanNode implements UnaryRelationalNode {
|
|
14
|
-
override readonly nodeType = PlanNodeType.Sequencing;
|
|
15
|
-
|
|
16
|
-
private outputTypeCache: Cached<RelationType>;
|
|
17
|
-
|
|
18
|
-
constructor(
|
|
19
|
-
scope: Scope,
|
|
20
|
-
public readonly source: RelationalPlanNode,
|
|
21
|
-
public readonly sequenceColumnName: string = '__row_seq',
|
|
22
|
-
estimatedCostOverride?: number
|
|
23
|
-
) {
|
|
24
|
-
super(scope, estimatedCostOverride);
|
|
25
|
-
|
|
26
|
-
this.outputTypeCache = new Cached(() => {
|
|
27
|
-
const sourceType = this.source.getType();
|
|
28
|
-
|
|
29
|
-
// Add a sequence column to make this a set
|
|
30
|
-
const sequenceColumn = {
|
|
31
|
-
name: this.sequenceColumnName,
|
|
32
|
-
type: {
|
|
33
|
-
typeClass: 'scalar' as const,
|
|
34
|
-
logicalType: INTEGER_TYPE,
|
|
35
|
-
nullable: false,
|
|
36
|
-
isReadOnly: true
|
|
37
|
-
},
|
|
38
|
-
generated: true
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
// Create a unique key based on all columns including the sequence
|
|
42
|
-
// This guarantees the result is a set
|
|
43
|
-
const allColumnsKey = sourceType.columns.map((_, index) => ({ index }))
|
|
44
|
-
.concat([{ index: sourceType.columns.length }]); // Include sequence column
|
|
45
|
-
|
|
46
|
-
return {
|
|
47
|
-
typeClass: 'relation',
|
|
48
|
-
isReadOnly: sourceType.isReadOnly,
|
|
49
|
-
isSet: true, // This operation guarantees set semantics
|
|
50
|
-
columns: [...sourceType.columns, sequenceColumn],
|
|
51
|
-
keys: [allColumnsKey], // All columns including sequence form a unique key
|
|
52
|
-
rowConstraints: sourceType.rowConstraints,
|
|
53
|
-
} satisfies RelationType;
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
getType(): RelationType {
|
|
58
|
-
return this.outputTypeCache.value;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
getAttributes(): readonly Attribute[] {
|
|
62
|
-
// Sort preserves the same attributes as its source
|
|
63
|
-
return this.source.getAttributes();
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
getChildren(): readonly [RelationalPlanNode] {
|
|
67
|
-
return [this.source];
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
getRelations(): readonly [RelationalPlanNode] {
|
|
71
|
-
return [this.source];
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
75
|
-
if (newChildren.length !== 1) {
|
|
76
|
-
throw new Error(`SequencingNode expects 1 child, got ${newChildren.length}`);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const [newSource] = newChildren;
|
|
80
|
-
|
|
81
|
-
// Type check
|
|
82
|
-
if (!isRelationalNode(newSource)) {
|
|
83
|
-
throw new Error('SequencingNode: child must be a RelationalPlanNode');
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Return same instance if nothing changed
|
|
87
|
-
if (newSource === this.source) {
|
|
88
|
-
return this;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Create new instance preserving attributes (sequencing preserves source attributes)
|
|
92
|
-
return new SequencingNode(
|
|
93
|
-
this.scope,
|
|
94
|
-
newSource as RelationalPlanNode,
|
|
95
|
-
this.sequenceColumnName
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
get estimatedRows(): number | undefined {
|
|
100
|
-
return this.source.estimatedRows; // Sequencing doesn't change row count
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
override toString(): string {
|
|
104
|
-
return `SEQUENCE ADD ${this.sequenceColumnName}`;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
108
|
-
return {
|
|
109
|
-
sequenceColumn: this.sequenceColumnName,
|
|
110
|
-
purpose: 'Convert bag to set by adding unique row sequence'
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { isRelationalNode, PlanNode } from './plan-node.js';
|
|
2
|
-
import type { RelationalPlanNode, Attribute, BinaryRelationalNode } from './plan-node.js';
|
|
3
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
4
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
5
|
-
import type { Scope } from '../scopes/scope.js';
|
|
6
|
-
import { Cached } from '../../util/cached.js';
|
|
7
|
-
import { quereusError, QuereusError } from '../../common/errors.js';
|
|
8
|
-
import { StatusCode } from '../../common/types.js';
|
|
9
|
-
|
|
10
|
-
export class SetOperationNode extends PlanNode implements BinaryRelationalNode {
|
|
11
|
-
readonly nodeType = PlanNodeType.SetOperation;
|
|
12
|
-
private attributesCache: Cached<readonly Attribute[]>;
|
|
13
|
-
|
|
14
|
-
constructor(
|
|
15
|
-
scope: Scope,
|
|
16
|
-
public readonly left: RelationalPlanNode,
|
|
17
|
-
public readonly right: RelationalPlanNode,
|
|
18
|
-
public readonly op: 'union' | 'unionAll' | 'intersect' | 'except'
|
|
19
|
-
) {
|
|
20
|
-
super(scope, left.getTotalCost() + right.getTotalCost());
|
|
21
|
-
// Validate column counts
|
|
22
|
-
const leftCols = left.getType().columns;
|
|
23
|
-
const rightCols = right.getType().columns;
|
|
24
|
-
if (leftCols.length !== rightCols.length) {
|
|
25
|
-
throw new QuereusError(`SET operation column count mismatch: left has ${leftCols.length}, right has ${rightCols.length}`, StatusCode.ERROR);
|
|
26
|
-
}
|
|
27
|
-
// TODO: optionally check type compatibility (affinity)
|
|
28
|
-
this.attributesCache = new Cached(() => this.buildAttributes());
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
private buildAttributes(): readonly Attribute[] {
|
|
32
|
-
const leftAttrs = this.left.getAttributes();
|
|
33
|
-
// Preserve left child's attributes directly to avoid any mapping issues
|
|
34
|
-
// This ensures ORDER BY expressions can resolve to the same attribute IDs
|
|
35
|
-
return leftAttrs;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
getAttributes(): readonly Attribute[] {
|
|
39
|
-
return this.attributesCache.value;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
getType(): RelationType {
|
|
43
|
-
const leftType = this.left.getType();
|
|
44
|
-
return { ...leftType, isSet: true } as RelationType;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
getChildren(): readonly PlanNode[] {
|
|
48
|
-
return [this.left, this.right];
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
getRelations(): readonly [RelationalPlanNode, RelationalPlanNode] {
|
|
52
|
-
return [this.left, this.right];
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
56
|
-
if (newChildren.length !== 2) {
|
|
57
|
-
quereusError(`SetOperationNode expects 2 children, got ${newChildren.length}`, StatusCode.INTERNAL);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const [newLeft, newRight] = newChildren;
|
|
61
|
-
|
|
62
|
-
// Type check
|
|
63
|
-
if (!isRelationalNode(newLeft)) {
|
|
64
|
-
quereusError('SetOperationNode: first child must be a RelationalPlanNode', StatusCode.INTERNAL);
|
|
65
|
-
}
|
|
66
|
-
if (!isRelationalNode(newRight)) {
|
|
67
|
-
quereusError('SetOperationNode: second child must be a RelationalPlanNode', StatusCode.INTERNAL);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Return same instance if nothing changed
|
|
71
|
-
if (newLeft === this.left && newRight === this.right) {
|
|
72
|
-
return this;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Create new instance preserving attributes (set operation preserves left child's attributes)
|
|
76
|
-
return new SetOperationNode(
|
|
77
|
-
this.scope,
|
|
78
|
-
newLeft as RelationalPlanNode,
|
|
79
|
-
newRight as RelationalPlanNode,
|
|
80
|
-
this.op
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
override toString(): string {
|
|
85
|
-
return `${this.op.toUpperCase()}(${this.left.id}, ${this.right.id})`;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import { PlanNode, type ZeroAryRelationalNode, type Attribute, PhysicalProperties, type ConstantNode } from './plan-node.js';
|
|
3
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
4
|
-
import { EmptyScope } from '../scopes/empty.js';
|
|
5
|
-
import type { Scope } from '../scopes/scope.js';
|
|
6
|
-
import type { Row } from '../../common/types.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* A dummy relational node that produces a single row with no columns.
|
|
10
|
-
* Used as a source for SELECT statements without a FROM clause.
|
|
11
|
-
*/
|
|
12
|
-
export class SingleRowNode extends PlanNode implements ZeroAryRelationalNode, ConstantNode {
|
|
13
|
-
override readonly nodeType = PlanNodeType.SingleRow;
|
|
14
|
-
|
|
15
|
-
private static readonly singleInstance = new SingleRowNode(EmptyScope.instance); // HACK: null scope for singleton
|
|
16
|
-
|
|
17
|
-
private readonly outputType: RelationType = {
|
|
18
|
-
typeClass: 'relation',
|
|
19
|
-
isReadOnly: true,
|
|
20
|
-
isSet: true, // Single row is always a set
|
|
21
|
-
columns: [],
|
|
22
|
-
keys: [[]], // Represents a relation that can have at most one row
|
|
23
|
-
rowConstraints: [],
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
private constructor(scope: Scope) { // Private constructor for singleton
|
|
27
|
-
super(scope, 0.01); // Low cost - no IO
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public static get instance(): SingleRowNode {
|
|
31
|
-
return SingleRowNode.singleInstance;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
getType(): RelationType {
|
|
35
|
-
return this.outputType;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
getAttributes(): Attribute[] {
|
|
39
|
-
// Single row node has no columns, so no attributes
|
|
40
|
-
return [];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
getChildren(): readonly [] {
|
|
44
|
-
return [];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
getRelations(): readonly [] {
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
52
|
-
if (newChildren.length !== 0) {
|
|
53
|
-
throw new Error(`SingleRowNode expects 0 children, got ${newChildren.length}`);
|
|
54
|
-
}
|
|
55
|
-
return this; // No children, so no change
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
get estimatedRows(): number {
|
|
59
|
-
return 1;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
override toString(): string {
|
|
63
|
-
return `dual`;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
67
|
-
return {
|
|
68
|
-
description: 'Single row with no columns (dual table)',
|
|
69
|
-
numRows: 1,
|
|
70
|
-
numColumns: 0,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
override computePhysical(): Partial<PhysicalProperties> {
|
|
75
|
-
return {
|
|
76
|
-
estimatedRows: 1,
|
|
77
|
-
uniqueKeys: [[]],
|
|
78
|
-
constant: true,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async *getValue(): AsyncIterable<Row> {
|
|
83
|
-
yield [];
|
|
84
|
-
}
|
|
85
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import { PlanNode, type RelationalPlanNode } from './plan-node.js';
|
|
3
|
-
import type { ScalarType } from '../../common/datatype.js';
|
|
4
|
-
import type { Scope } from '../scopes/scope.js';
|
|
5
|
-
import { INTEGER_TYPE } from '../../types/builtin-types.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* A sink node that consumes an async iterable for side effects.
|
|
9
|
-
* Returns the number of rows affected.
|
|
10
|
-
*/
|
|
11
|
-
export class SinkNode extends PlanNode {
|
|
12
|
-
override readonly nodeType = PlanNodeType.Sink;
|
|
13
|
-
|
|
14
|
-
constructor(
|
|
15
|
-
scope: Scope,
|
|
16
|
-
public readonly source: RelationalPlanNode,
|
|
17
|
-
/** Describes the operation for information purposes */
|
|
18
|
-
public readonly operation: string,
|
|
19
|
-
) {
|
|
20
|
-
super(scope, source.getTotalCost() + 0.1); // Minimal cost for consuming
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
getType(): ScalarType {
|
|
24
|
-
// Return a single-column relation with the row count
|
|
25
|
-
return {
|
|
26
|
-
typeClass: 'scalar',
|
|
27
|
-
isReadOnly: true,
|
|
28
|
-
logicalType: INTEGER_TYPE,
|
|
29
|
-
nullable: false
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
getChildren(): readonly [RelationalPlanNode] {
|
|
34
|
-
return [this.source];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
38
|
-
if (newChildren.length !== 1) {
|
|
39
|
-
throw new Error(`SinkNode expects 1 child, got ${newChildren.length}`);
|
|
40
|
-
}
|
|
41
|
-
return new SinkNode(this.scope, newChildren[0] as RelationalPlanNode, this.operation);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
getRelations(): readonly [RelationalPlanNode] {
|
|
45
|
-
return [this.source];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
get estimatedRows(): number {
|
|
49
|
-
return 1;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
override toString(): string {
|
|
53
|
-
return `SINK (${this.operation})`;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
57
|
-
return {
|
|
58
|
-
sourceType: this.source.nodeType
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import { PlanNode, type RelationalPlanNode, type ScalarPlanNode, type UnaryRelationalNode, type PhysicalProperties, type Attribute, isRelationalNode } from './plan-node.js';
|
|
3
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
4
|
-
import type { Scope } from '../scopes/scope.js';
|
|
5
|
-
import { formatSortKey } from '../../util/plan-formatter.js';
|
|
6
|
-
import { quereusError } from '../../common/errors.js';
|
|
7
|
-
import { StatusCode } from '../../common/types.js';
|
|
8
|
-
import { extractOrderingFromSortKeys } from '../framework/physical-utils.js';
|
|
9
|
-
import { SortCapable } from '../framework/characteristics.js';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Represents a sort key for ordering results
|
|
13
|
-
*/
|
|
14
|
-
export interface SortKey {
|
|
15
|
-
/** The expression to sort by */
|
|
16
|
-
expression: ScalarPlanNode;
|
|
17
|
-
/** Sort direction */
|
|
18
|
-
direction: 'asc' | 'desc';
|
|
19
|
-
/** How to handle nulls */
|
|
20
|
-
nulls?: 'first' | 'last';
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Represents a sort operation (ORDER BY clause).
|
|
25
|
-
* It takes an input relation and sort keys,
|
|
26
|
-
* and outputs rows sorted according to the keys.
|
|
27
|
-
* This is a physical operation that materializes and sorts rows.
|
|
28
|
-
*/
|
|
29
|
-
export class SortNode extends PlanNode implements UnaryRelationalNode, SortCapable {
|
|
30
|
-
override readonly nodeType = PlanNodeType.Sort;
|
|
31
|
-
|
|
32
|
-
constructor(
|
|
33
|
-
scope: Scope,
|
|
34
|
-
public readonly source: RelationalPlanNode,
|
|
35
|
-
public readonly sortKeys: readonly SortKey[],
|
|
36
|
-
estimatedCostOverride?: number
|
|
37
|
-
) {
|
|
38
|
-
// Cost: cost of source + cost of sorting (O(n log n) * cost of evaluating sort expressions)
|
|
39
|
-
// This is a simplified cost model - a more sophisticated one would consider the actual data size
|
|
40
|
-
const sourceRows = source.estimatedRows ?? 1000;
|
|
41
|
-
const sortCost = sourceRows * Math.log2(sourceRows + 1);
|
|
42
|
-
const keyCost = sortKeys.reduce((sum, key) => sum + key.expression.getTotalCost(), 0);
|
|
43
|
-
|
|
44
|
-
super(scope, estimatedCostOverride ?? (source.getTotalCost() + sortCost * keyCost));
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
getType(): RelationType {
|
|
48
|
-
// Sort preserves the type of the source relation
|
|
49
|
-
return this.source.getType();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
getAttributes(): readonly Attribute[] {
|
|
53
|
-
// Sort preserves the same attributes as its source
|
|
54
|
-
return this.source.getAttributes();
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
getChildren(): readonly PlanNode[] {
|
|
58
|
-
// Return source first, then all sort key expressions
|
|
59
|
-
return [this.source, ...this.sortKeys.map(key => key.expression)];
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
getRelations(): readonly [RelationalPlanNode] {
|
|
63
|
-
return [this.source];
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
get estimatedRows(): number | undefined {
|
|
67
|
-
// Sort doesn't change the number of rows
|
|
68
|
-
return this.source.estimatedRows;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
computePhysical(childrenPhysical: PhysicalProperties[]): Partial<PhysicalProperties> {
|
|
72
|
-
const sourcePhysical = childrenPhysical[0]; // Source is first relation
|
|
73
|
-
const sourceAttributes = this.source.getAttributes();
|
|
74
|
-
|
|
75
|
-
// Extract ordering from sort keys if they are trivial column references
|
|
76
|
-
const ordering = extractOrderingFromSortKeys(this.sortKeys, sourceAttributes);
|
|
77
|
-
|
|
78
|
-
return {
|
|
79
|
-
estimatedRows: this.estimatedRows,
|
|
80
|
-
ordering,
|
|
81
|
-
uniqueKeys: sourcePhysical?.uniqueKeys,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
override toString(): string {
|
|
86
|
-
const keyDescriptions = this.sortKeys.map(key =>
|
|
87
|
-
formatSortKey(key.expression, key.direction, key.nulls)
|
|
88
|
-
).join(', ');
|
|
89
|
-
return `ORDER BY ${keyDescriptions}`;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
93
|
-
return {
|
|
94
|
-
sortKeys: this.sortKeys.map(key => ({
|
|
95
|
-
expression: key.expression.toString(),
|
|
96
|
-
direction: key.direction,
|
|
97
|
-
nulls: key.nulls
|
|
98
|
-
}))
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
103
|
-
if (newChildren.length !== 1 + this.sortKeys.length) {
|
|
104
|
-
quereusError(`SortNode expects ${1 + this.sortKeys.length} children, got ${newChildren.length}`, StatusCode.INTERNAL);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const [newSource, ...newSortExpressions] = newChildren;
|
|
108
|
-
|
|
109
|
-
// Type check
|
|
110
|
-
if (!isRelationalNode(newSource)) {
|
|
111
|
-
quereusError('SortNode: first child must be a RelationalPlanNode', StatusCode.INTERNAL);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Check if anything changed
|
|
115
|
-
const sourceChanged = newSource !== this.source;
|
|
116
|
-
const sortExpressionsChanged = newSortExpressions.some((expr, i) => expr !== this.sortKeys[i].expression);
|
|
117
|
-
|
|
118
|
-
if (!sourceChanged && !sortExpressionsChanged) {
|
|
119
|
-
return this;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Build new sort keys array
|
|
123
|
-
const newSortKeys = newSortExpressions.map((expr, i) => ({
|
|
124
|
-
expression: expr as ScalarPlanNode,
|
|
125
|
-
direction: this.sortKeys[i].direction,
|
|
126
|
-
nulls: this.sortKeys[i].nulls
|
|
127
|
-
}));
|
|
128
|
-
|
|
129
|
-
// Create new instance preserving attributes (sort preserves source attributes)
|
|
130
|
-
return new SortNode(
|
|
131
|
-
this.scope,
|
|
132
|
-
newSource as RelationalPlanNode,
|
|
133
|
-
newSortKeys
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// SortCapable interface implementation
|
|
138
|
-
getSortKeys(): readonly { expression: ScalarPlanNode; direction: 'asc' | 'desc' }[] {
|
|
139
|
-
return this.sortKeys.map(key => ({
|
|
140
|
-
expression: key.expression,
|
|
141
|
-
direction: key.direction
|
|
142
|
-
}));
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
withSortKeys(keys: readonly { expression: ScalarPlanNode; direction: 'asc' | 'desc' }[]): PlanNode {
|
|
146
|
-
// Convert to internal SortKey format with nulls handling
|
|
147
|
-
const newSortKeys = keys.map(key => ({
|
|
148
|
-
expression: key.expression,
|
|
149
|
-
direction: key.direction,
|
|
150
|
-
nulls: undefined as 'first' | 'last' | undefined
|
|
151
|
-
}));
|
|
152
|
-
|
|
153
|
-
// Check if anything changed
|
|
154
|
-
const changed = newSortKeys.length !== this.sortKeys.length ||
|
|
155
|
-
newSortKeys.some((key, i) =>
|
|
156
|
-
key.expression !== this.sortKeys[i].expression ||
|
|
157
|
-
key.direction !== this.sortKeys[i].direction
|
|
158
|
-
);
|
|
159
|
-
|
|
160
|
-
if (!changed) {
|
|
161
|
-
return this;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return new SortNode(this.scope, this.source, newSortKeys);
|
|
165
|
-
}
|
|
166
|
-
}
|