@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,102 +0,0 @@
|
|
|
1
|
-
import type { Scope } from '../scopes/scope.js';
|
|
2
|
-
import { PlanNode, type RelationalPlanNode, type ScalarPlanNode, type Attribute, type RowDescriptor, type PhysicalProperties, isRelationalNode } from './plan-node.js';
|
|
3
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
4
|
-
import type { TableReferenceNode } from './reference.js';
|
|
5
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
6
|
-
import { buildAttributesFromFlatDescriptor } from '../../util/row-descriptor.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Represents a DELETE statement in the logical query plan.
|
|
10
|
-
*/
|
|
11
|
-
export class DeleteNode extends PlanNode implements RelationalPlanNode {
|
|
12
|
-
override readonly nodeType = PlanNodeType.Delete;
|
|
13
|
-
|
|
14
|
-
constructor(
|
|
15
|
-
scope: Scope,
|
|
16
|
-
public readonly table: TableReferenceNode,
|
|
17
|
-
public readonly source: RelationalPlanNode, // Typically a FilterNode wrapping a TableReferenceNode
|
|
18
|
-
public readonly oldRowDescriptor?: RowDescriptor, // For constraint checking
|
|
19
|
-
public readonly flatRowDescriptor?: RowDescriptor,
|
|
20
|
-
public readonly mutationContextValues?: Map<string, ScalarPlanNode>, // Mutation context value expressions
|
|
21
|
-
public readonly contextAttributes?: Attribute[], // Mutation context attributes
|
|
22
|
-
public readonly contextDescriptor?: RowDescriptor, // Mutation context row descriptor
|
|
23
|
-
) {
|
|
24
|
-
super(scope);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
getType(): RelationType {
|
|
28
|
-
return this.source.getType();
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
getAttributes(): readonly Attribute[] {
|
|
32
|
-
if (this.flatRowDescriptor && Object.keys(this.flatRowDescriptor).length > 0) {
|
|
33
|
-
return buildAttributesFromFlatDescriptor(this.flatRowDescriptor);
|
|
34
|
-
}
|
|
35
|
-
// Fallback to source attributes for backward compatibility
|
|
36
|
-
return this.source.getAttributes();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
getRelations(): readonly [RelationalPlanNode, TableReferenceNode] {
|
|
40
|
-
// The source provides keys to be deleted, table is the target of deletions.
|
|
41
|
-
return [this.source, this.table];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
getChildren(): readonly PlanNode[] {
|
|
45
|
-
// Return the source relation as a child so optimizer can traverse it
|
|
46
|
-
return [this.source];
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
50
|
-
if (newChildren.length !== 1) {
|
|
51
|
-
throw new Error(`DeleteNode expects 1 child (source), got ${newChildren.length}`);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const newSource = newChildren[0] as RelationalPlanNode;
|
|
55
|
-
if (!isRelationalNode(newSource)) {
|
|
56
|
-
throw new Error('DeleteNode: child must be a RelationalPlanNode');
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (newSource === this.source) {
|
|
60
|
-
return this;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return new DeleteNode(
|
|
64
|
-
this.scope,
|
|
65
|
-
this.table,
|
|
66
|
-
newSource,
|
|
67
|
-
this.oldRowDescriptor,
|
|
68
|
-
this.flatRowDescriptor,
|
|
69
|
-
this.mutationContextValues,
|
|
70
|
-
this.contextAttributes,
|
|
71
|
-
this.contextDescriptor
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
computePhysical(): Partial<PhysicalProperties> {
|
|
76
|
-
return {
|
|
77
|
-
readonly: false, // DELETE has side effects
|
|
78
|
-
estimatedRows: this.source.estimatedRows
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
get estimatedRows(): number | undefined {
|
|
83
|
-
return this.source.estimatedRows;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
override toString(): string {
|
|
87
|
-
return `DELETE FROM ${this.table.tableSchema.name}`;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
91
|
-
const props: Record<string, unknown> = {
|
|
92
|
-
table: this.table.tableSchema.name,
|
|
93
|
-
schema: this.table.tableSchema.schemaName
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
if (this.flatRowDescriptor) {
|
|
97
|
-
props.hasFlatRowDescriptor = true;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return props;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import { PlanNode, type RelationalPlanNode, type UnaryRelationalNode, type Attribute, isRelationalNode, type PhysicalProperties } from './plan-node.js';
|
|
3
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
4
|
-
import type { Scope } from '../scopes/scope.js';
|
|
5
|
-
import { quereusError } from '../../common/errors.js';
|
|
6
|
-
import { StatusCode } from '../../common/types.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Represents a DISTINCT operation that eliminates duplicate rows.
|
|
10
|
-
* It takes an input relation and outputs unique rows.
|
|
11
|
-
*/
|
|
12
|
-
export class DistinctNode extends PlanNode implements UnaryRelationalNode {
|
|
13
|
-
override readonly nodeType = PlanNodeType.Distinct;
|
|
14
|
-
|
|
15
|
-
constructor(
|
|
16
|
-
scope: Scope,
|
|
17
|
-
public readonly source: RelationalPlanNode,
|
|
18
|
-
estimatedCostOverride?: number
|
|
19
|
-
) {
|
|
20
|
-
// Cost: cost of source + cost of deduplication (roughly O(n log n) for sorting approach)
|
|
21
|
-
const sourceCost = source.getTotalCost();
|
|
22
|
-
const sourceRows = source.estimatedRows ?? 1;
|
|
23
|
-
const deduplicationCost = sourceRows * Math.log2(Math.max(1, sourceRows));
|
|
24
|
-
super(scope, estimatedCostOverride ?? (sourceCost + deduplicationCost));
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
getType(): RelationType {
|
|
28
|
-
// DISTINCT always produces a set (no duplicates)
|
|
29
|
-
const sourceType = this.source.getType();
|
|
30
|
-
return {
|
|
31
|
-
...sourceType,
|
|
32
|
-
isSet: true
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
getAttributes(): readonly Attribute[] {
|
|
37
|
-
// DISTINCT preserves the same attributes as its source
|
|
38
|
-
return this.source.getAttributes();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
getChildren(): readonly [RelationalPlanNode] {
|
|
42
|
-
return [this.source];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
getRelations(): readonly [RelationalPlanNode] {
|
|
46
|
-
return [this.source];
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
get estimatedRows(): number | undefined {
|
|
50
|
-
// DISTINCT reduces the number of rows by eliminating duplicates
|
|
51
|
-
// This is a rough estimate - in reality it depends on data distribution
|
|
52
|
-
const sourceRows = this.source.estimatedRows;
|
|
53
|
-
if (sourceRows === undefined) return undefined;
|
|
54
|
-
if (sourceRows <= 1) return sourceRows;
|
|
55
|
-
|
|
56
|
-
// Rough heuristic: assume some duplicates exist
|
|
57
|
-
// More sophisticated planners would use column statistics
|
|
58
|
-
return Math.max(1, Math.floor(sourceRows * 0.7));
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
override toString(): string {
|
|
62
|
-
return 'DISTINCT';
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
66
|
-
const colCount = this.source.getAttributes().length;
|
|
67
|
-
const allColsKey = [Array.from({ length: colCount }, (_, i) => i)];
|
|
68
|
-
return {
|
|
69
|
-
uniqueKeys: allColsKey
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
computePhysical(childrenPhysical: PhysicalProperties[]): Partial<PhysicalProperties> {
|
|
74
|
-
const sourcePhysical = childrenPhysical[0];
|
|
75
|
-
const colCount = this.source.getAttributes().length;
|
|
76
|
-
const allColsKey = [Array.from({ length: colCount }, (_, i) => i)];
|
|
77
|
-
return {
|
|
78
|
-
uniqueKeys: allColsKey,
|
|
79
|
-
estimatedRows: this.estimatedRows,
|
|
80
|
-
ordering: sourcePhysical?.ordering,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
85
|
-
if (newChildren.length !== 1) {
|
|
86
|
-
quereusError(`DistinctNode expects 1 child, got ${newChildren.length}`, StatusCode.INTERNAL);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const [newSource] = newChildren;
|
|
90
|
-
|
|
91
|
-
// Type check
|
|
92
|
-
if (!isRelationalNode(newSource)) {
|
|
93
|
-
quereusError('DistinctNode: child must be a RelationalPlanNode', StatusCode.INTERNAL);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Return same instance if nothing changed
|
|
97
|
-
if (newSource === this.source) {
|
|
98
|
-
return this;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// Create new instance preserving attributes (distinct preserves source attributes)
|
|
102
|
-
return new DistinctNode(
|
|
103
|
-
this.scope,
|
|
104
|
-
newSource as RelationalPlanNode
|
|
105
|
-
);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import type { Scope } from '../scopes/scope.js';
|
|
2
|
-
import { PlanNode, type RelationalPlanNode, type Attribute, type PhysicalProperties, type ScalarPlanNode, type RowDescriptor, isRelationalNode } from './plan-node.js';
|
|
3
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
4
|
-
import type { TableReferenceNode } from './reference.js';
|
|
5
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
6
|
-
import type { ConflictResolution } from '../../common/constants.js';
|
|
7
|
-
import { RowOp } from '../../common/types.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Executes actual database insert/update/delete operations after constraint validation.
|
|
11
|
-
* This node performs the actual vtab.update operations and yields the affected rows.
|
|
12
|
-
* All data transformations (defaults, conversions, etc.) happen before this node.
|
|
13
|
-
*/
|
|
14
|
-
export class DmlExecutorNode extends PlanNode implements RelationalPlanNode {
|
|
15
|
-
override readonly nodeType = PlanNodeType.UpdateExecutor;
|
|
16
|
-
|
|
17
|
-
constructor(
|
|
18
|
-
scope: Scope,
|
|
19
|
-
public readonly source: RelationalPlanNode,
|
|
20
|
-
public readonly table: TableReferenceNode,
|
|
21
|
-
public readonly operation: RowOp,
|
|
22
|
-
public readonly onConflict?: ConflictResolution, // Used for INSERT operations
|
|
23
|
-
public readonly mutationContextValues?: Map<string, ScalarPlanNode>, // Mutation context value expressions
|
|
24
|
-
public readonly contextAttributes?: Attribute[], // Mutation context attributes
|
|
25
|
-
public readonly contextDescriptor?: RowDescriptor, // Mutation context row descriptor
|
|
26
|
-
) {
|
|
27
|
-
super(scope);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
getType(): RelationType {
|
|
31
|
-
return this.source.getType();
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
getAttributes(): readonly Attribute[] {
|
|
35
|
-
return this.source.getAttributes();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
getRelations(): readonly [RelationalPlanNode, TableReferenceNode] {
|
|
39
|
-
return [this.source, this.table];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
getChildren(): readonly PlanNode[] {
|
|
43
|
-
return [this.source];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
47
|
-
if (newChildren.length !== 1) {
|
|
48
|
-
throw new Error(`UpdateExecutorNode expects 1 child, got ${newChildren.length}`);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const [newSource] = newChildren;
|
|
52
|
-
|
|
53
|
-
// Type check
|
|
54
|
-
if (!isRelationalNode(newSource)) {
|
|
55
|
-
throw new Error('UpdateExecutorNode: child must be a RelationalPlanNode');
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Return same instance if nothing changed
|
|
59
|
-
if (newSource === this.source) {
|
|
60
|
-
return this;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Create new instance
|
|
64
|
-
return new DmlExecutorNode(
|
|
65
|
-
this.scope,
|
|
66
|
-
newSource as RelationalPlanNode,
|
|
67
|
-
this.table,
|
|
68
|
-
this.operation,
|
|
69
|
-
this.onConflict,
|
|
70
|
-
this.mutationContextValues,
|
|
71
|
-
this.contextAttributes,
|
|
72
|
-
this.contextDescriptor
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
get estimatedRows(): number | undefined {
|
|
77
|
-
return this.source.estimatedRows;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
override toString(): string {
|
|
81
|
-
return `EXECUTE ${this.operation} ${this.table.tableSchema.name}`;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
85
|
-
const props: Record<string, unknown> = {
|
|
86
|
-
operation: this.operation,
|
|
87
|
-
table: this.table.tableSchema.name,
|
|
88
|
-
schema: this.table.tableSchema.schemaName,
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
if (this.onConflict) {
|
|
92
|
-
props.onConflict = this.onConflict;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return props;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
computePhysical(): Partial<PhysicalProperties> {
|
|
99
|
-
return {
|
|
100
|
-
readonly: false, // DML executor has side effects
|
|
101
|
-
idempotent: false, // DML operations are generally not idempotent
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { Scope } from '../scopes/scope.js';
|
|
2
|
-
import { PlanNode, type VoidNode, type PhysicalProperties } from './plan-node.js';
|
|
3
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
4
|
-
import type { VoidType } from '../../common/datatype.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Represents dropping a global integrity assertion.
|
|
8
|
-
* This is a DDL operation that removes an assertion from the schema.
|
|
9
|
-
*/
|
|
10
|
-
export class DropAssertionNode extends PlanNode implements VoidNode {
|
|
11
|
-
override readonly nodeType = PlanNodeType.DropAssertion;
|
|
12
|
-
|
|
13
|
-
constructor(
|
|
14
|
-
scope: Scope,
|
|
15
|
-
public readonly name: string,
|
|
16
|
-
public readonly ifExists: boolean,
|
|
17
|
-
) {
|
|
18
|
-
super(scope);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
getType(): VoidType {
|
|
22
|
-
return { typeClass: 'void' };
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
getChildren(): readonly PlanNode[] {
|
|
26
|
-
return [];
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
30
|
-
if (newChildren.length !== 0) {
|
|
31
|
-
throw new Error(`DropAssertionNode expects 0 children, got ${newChildren.length}`);
|
|
32
|
-
}
|
|
33
|
-
return this; // No children, so no change
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
override toString(): string {
|
|
37
|
-
return `DROP ASSERTION ${this.name}`;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
41
|
-
return {
|
|
42
|
-
name: this.name,
|
|
43
|
-
ifExists: this.ifExists,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
override computePhysical(_children: readonly PhysicalProperties[]): Partial<PhysicalProperties> {
|
|
48
|
-
return { readonly: false };
|
|
49
|
-
}
|
|
50
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { Scope } from '../scopes/scope.js';
|
|
2
|
-
import { PhysicalProperties, VoidNode } from './plan-node.js';
|
|
3
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
4
|
-
import type * as AST from '../../parser/ast.js';
|
|
5
|
-
import { expressionToString } from '../../util/ast-stringify.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Represents a DROP TABLE statement in the logical query plan.
|
|
9
|
-
*/
|
|
10
|
-
export class DropTableNode extends VoidNode {
|
|
11
|
-
override readonly nodeType = PlanNodeType.DropTable;
|
|
12
|
-
|
|
13
|
-
constructor(
|
|
14
|
-
scope: Scope,
|
|
15
|
-
public readonly statementAst: AST.DropStmt,
|
|
16
|
-
) {
|
|
17
|
-
super(scope);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
override toString(): string {
|
|
21
|
-
return `DROP TABLE ${this.statementAst.name.name}`;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
25
|
-
return {
|
|
26
|
-
table: this.statementAst.name.name,
|
|
27
|
-
schema: this.statementAst.name.schema,
|
|
28
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
29
|
-
statement: expressionToString(this.statementAst as any)
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
override computePhysical(_children: readonly PhysicalProperties[]): Partial<PhysicalProperties> {
|
|
34
|
-
return { readonly: false };
|
|
35
|
-
}
|
|
36
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { PhysicalProperties, VoidNode } from './plan-node.js';
|
|
2
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
3
|
-
import type { Scope } from '../scopes/scope.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Plan node for DROP VIEW statements.
|
|
7
|
-
* Removes a view definition from the schema.
|
|
8
|
-
*/
|
|
9
|
-
export class DropViewNode extends VoidNode {
|
|
10
|
-
readonly nodeType = PlanNodeType.DropView;
|
|
11
|
-
|
|
12
|
-
constructor(
|
|
13
|
-
scope: Scope,
|
|
14
|
-
public readonly viewName: string,
|
|
15
|
-
public readonly schemaName: string,
|
|
16
|
-
public readonly ifExists: boolean
|
|
17
|
-
) {
|
|
18
|
-
super(scope, 1); // Low cost for DDL operations
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
override toString(): string {
|
|
22
|
-
const ifExistsClause = this.ifExists ? 'IF EXISTS ' : '';
|
|
23
|
-
return `DROP VIEW ${ifExistsClause}${this.schemaName}.${this.viewName}`;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
27
|
-
return {
|
|
28
|
-
viewName: this.viewName,
|
|
29
|
-
schemaName: this.schemaName,
|
|
30
|
-
ifExists: this.ifExists
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
override computePhysical(_children: readonly PhysicalProperties[]): Partial<PhysicalProperties> {
|
|
35
|
-
return { readonly: false };
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import { PlanNode, type RelationalPlanNode, type ScalarPlanNode, type UnaryRelationalNode, type Attribute, isRelationalNode, isScalarNode, type PhysicalProperties } from './plan-node.js';
|
|
3
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
4
|
-
import type { Scope } from '../scopes/scope.js';
|
|
5
|
-
import { formatExpression } from '../../util/plan-formatter.js';
|
|
6
|
-
import { quereusError } from '../../common/errors.js';
|
|
7
|
-
import { StatusCode } from '../../common/types.js';
|
|
8
|
-
import { PredicateCapable, type PredicateSourceCapable } from '../framework/characteristics.js';
|
|
9
|
-
import { createTableInfoFromNode, extractConstraints } from '../analysis/constraint-extractor.js';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Represents a filter operation (WHERE clause).
|
|
13
|
-
* It takes an input relation and a predicate expression,
|
|
14
|
-
* and outputs rows for which the predicate is true.
|
|
15
|
-
*/
|
|
16
|
-
export class FilterNode extends PlanNode implements UnaryRelationalNode, PredicateCapable, PredicateSourceCapable {
|
|
17
|
-
override readonly nodeType = PlanNodeType.Filter;
|
|
18
|
-
|
|
19
|
-
constructor(
|
|
20
|
-
scope: Scope,
|
|
21
|
-
public readonly source: RelationalPlanNode,
|
|
22
|
-
public readonly predicate: ScalarPlanNode,
|
|
23
|
-
estimatedCostOverride?: number
|
|
24
|
-
) {
|
|
25
|
-
// Cost: cost of source + cost of evaluating predicate for each source row
|
|
26
|
-
super(scope, estimatedCostOverride ?? (source.getTotalCost() + (source.estimatedRows ?? 1) * predicate.getTotalCost()));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
getType(): RelationType {
|
|
30
|
-
// Filter preserves the type of the source relation
|
|
31
|
-
return this.source.getType();
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
getAttributes(): readonly Attribute[] {
|
|
35
|
-
// Filter preserves the same attributes as its source
|
|
36
|
-
return this.source.getAttributes();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
getChildren(): readonly [RelationalPlanNode, ScalarPlanNode] {
|
|
40
|
-
return [this.source, this.predicate];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
getRelations(): readonly [RelationalPlanNode] {
|
|
44
|
-
return [this.source];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
get estimatedRows(): number | undefined {
|
|
48
|
-
// This is a rough estimate. A more sophisticated planner would use selectivity estimates.
|
|
49
|
-
// For now, assume a selectivity of 0.5 if source has rows, otherwise 0.
|
|
50
|
-
// TODO: Use selectivity estimates
|
|
51
|
-
const sourceRows = this.source.estimatedRows;
|
|
52
|
-
if (sourceRows === undefined) return undefined;
|
|
53
|
-
return sourceRows > 0 ? Math.max(1, Math.floor(sourceRows * 0.5)) : 0;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
computePhysical(childrenPhysical: PhysicalProperties[]): Partial<PhysicalProperties> {
|
|
57
|
-
const sourcePhysical = childrenPhysical[0];
|
|
58
|
-
const srcRows = sourcePhysical?.estimatedRows;
|
|
59
|
-
const est = this.estimatedRows;
|
|
60
|
-
let rows = (typeof srcRows === 'number' && typeof est === 'number')
|
|
61
|
-
? Math.min(srcRows, est)
|
|
62
|
-
: (srcRows ?? est);
|
|
63
|
-
|
|
64
|
-
// Attempt logical covered-key detection to infer at-most-one row
|
|
65
|
-
let uniqueKeys = sourcePhysical?.uniqueKeys;
|
|
66
|
-
const tableInfo = createTableInfoFromNode(this.source);
|
|
67
|
-
if (tableInfo.uniqueKeys && tableInfo.uniqueKeys.length > 0) {
|
|
68
|
-
const result = extractConstraints(this.predicate, [tableInfo]);
|
|
69
|
-
const covered = result.coveredKeysByTable?.get(tableInfo.relationKey) || [];
|
|
70
|
-
if (covered.length > 0) {
|
|
71
|
-
// Equality covers a unique key → at most one row
|
|
72
|
-
uniqueKeys = [[]];
|
|
73
|
-
rows = 1;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return {
|
|
78
|
-
estimatedRows: rows,
|
|
79
|
-
ordering: sourcePhysical?.ordering,
|
|
80
|
-
uniqueKeys,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
override toString(): string {
|
|
85
|
-
return `WHERE ${formatExpression(this.predicate)}`;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
89
|
-
return {
|
|
90
|
-
predicate: formatExpression(this.predicate)
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
95
|
-
if (newChildren.length !== 2) {
|
|
96
|
-
quereusError(`FilterNode expects 2 children, got ${newChildren.length}`, StatusCode.INTERNAL);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const [newSource, newPredicate] = newChildren;
|
|
100
|
-
|
|
101
|
-
// Type check
|
|
102
|
-
if (!isRelationalNode(newSource)) {
|
|
103
|
-
quereusError('FilterNode: first child must be a RelationalPlanNode', StatusCode.INTERNAL);
|
|
104
|
-
}
|
|
105
|
-
if (!isScalarNode(newPredicate)) {
|
|
106
|
-
quereusError('FilterNode: second child must be a ScalarPlanNode', StatusCode.INTERNAL);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Return same instance if nothing changed
|
|
110
|
-
if (newSource === this.source && newPredicate === this.predicate) {
|
|
111
|
-
return this;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Create new instance preserving attributes (filter preserves source attributes)
|
|
115
|
-
return new FilterNode(
|
|
116
|
-
this.scope,
|
|
117
|
-
newSource as RelationalPlanNode,
|
|
118
|
-
newPredicate as ScalarPlanNode
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// PredicateCapable interface implementation
|
|
123
|
-
getPredicate(): ScalarPlanNode | null {
|
|
124
|
-
return this.predicate;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
withPredicate(newPredicate: ScalarPlanNode | null): PlanNode {
|
|
128
|
-
if (newPredicate === null) {
|
|
129
|
-
// If predicate is null, return the source directly (no filter needed)
|
|
130
|
-
return this.source;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if (newPredicate === this.predicate) {
|
|
134
|
-
return this;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return new FilterNode(this.scope, this.source, newPredicate);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// PredicateSourceCapable interface implementation
|
|
141
|
-
getPredicates(): readonly ScalarPlanNode[] {
|
|
142
|
-
return [this.predicate];
|
|
143
|
-
}
|
|
144
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import type { ScalarType } from '../../common/datatype.js';
|
|
2
|
-
import type * as AST from '../../parser/ast.js';
|
|
3
|
-
import type { Scope } from '../scopes/scope.js';
|
|
4
|
-
import { PlanNode, type NaryScalarNode, type ScalarPlanNode, type PhysicalProperties } from './plan-node.js';
|
|
5
|
-
import { PlanNodeType } from './plan-node-type.js';
|
|
6
|
-
import { formatExpressionList, formatScalarType } from '../../util/plan-formatter.js';
|
|
7
|
-
import type { FunctionSchema } from '../../schema/function.js';
|
|
8
|
-
import { FunctionFlags } from '../../common/constants.js';
|
|
9
|
-
|
|
10
|
-
export class ScalarFunctionCallNode extends PlanNode implements NaryScalarNode {
|
|
11
|
-
override readonly nodeType = PlanNodeType.ScalarFunctionCall;
|
|
12
|
-
private readonly _inferredType?: ScalarType;
|
|
13
|
-
|
|
14
|
-
constructor(
|
|
15
|
-
scope: Scope,
|
|
16
|
-
public readonly expression: AST.FunctionExpr,
|
|
17
|
-
public readonly functionSchema: FunctionSchema,
|
|
18
|
-
public readonly operands: ScalarPlanNode[],
|
|
19
|
-
inferredType?: ScalarType
|
|
20
|
-
) {
|
|
21
|
-
super(scope);
|
|
22
|
-
this._inferredType = inferredType;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
getType(): ScalarType {
|
|
26
|
-
// Use inferred type if available, otherwise use schema's return type
|
|
27
|
-
return this._inferredType ?? (this.functionSchema.returnType as ScalarType);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
getChildren(): readonly ScalarPlanNode[] {
|
|
31
|
-
return this.operands;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
getRelations(): readonly [] {
|
|
35
|
-
return [];
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode {
|
|
39
|
-
if (newChildren.length !== this.operands.length) {
|
|
40
|
-
throw new Error(`ScalarFunctionCallNode expects ${this.operands.length} children, got ${newChildren.length}`);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Type check
|
|
44
|
-
for (const child of newChildren) {
|
|
45
|
-
if (!('expression' in child)) {
|
|
46
|
-
throw new Error('ScalarFunctionCallNode: all children must be ScalarPlanNodes');
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Check if anything changed
|
|
51
|
-
const childrenChanged = newChildren.some((child, i) => child !== this.operands[i]);
|
|
52
|
-
if (!childrenChanged) {
|
|
53
|
-
return this;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Create new instance
|
|
57
|
-
return new ScalarFunctionCallNode(
|
|
58
|
-
this.scope,
|
|
59
|
-
this.expression,
|
|
60
|
-
this.functionSchema,
|
|
61
|
-
newChildren as ScalarPlanNode[],
|
|
62
|
-
this._inferredType
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
override toString(): string {
|
|
67
|
-
return `${this.expression.name}(${formatExpressionList(this.operands)})`;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
override computePhysical(_childrenPhysical: PhysicalProperties[]): Partial<PhysicalProperties> {
|
|
71
|
-
// Function calls derive properties from their arguments and the function itself
|
|
72
|
-
const result: Partial<PhysicalProperties> = {};
|
|
73
|
-
|
|
74
|
-
// Use function schema to determine deterministic and readonly properties
|
|
75
|
-
const functionIsDeterministic = (this.functionSchema.flags & FunctionFlags.DETERMINISTIC) !== 0;
|
|
76
|
-
const functionIsReadonly = (this.functionSchema.returnType as ScalarType).isReadOnly ?? true;
|
|
77
|
-
|
|
78
|
-
// Function is deterministic only if both function and all arguments are deterministic
|
|
79
|
-
if (!functionIsDeterministic) {
|
|
80
|
-
result.deterministic = false;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Function is readonly only if both function and all arguments are readonly
|
|
84
|
-
if (!functionIsReadonly) {
|
|
85
|
-
result.readonly = false;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return result;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
override getLogicalAttributes(): Record<string, unknown> {
|
|
92
|
-
return {
|
|
93
|
-
function: this.expression.name,
|
|
94
|
-
arguments: this.operands.map(op => op.toString()),
|
|
95
|
-
resultType: formatScalarType(this.functionSchema.returnType as ScalarType)
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
}
|