@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,218 +0,0 @@
|
|
|
1
|
-
import type * as AST from '../../parser/ast.js';
|
|
2
|
-
import type { PlanningContext } from '../planning-context.js';
|
|
3
|
-
import { DeleteNode } from '../nodes/delete-node.js';
|
|
4
|
-
import { buildTableReference } from './table.js';
|
|
5
|
-
import { buildExpression } from './expression.js';
|
|
6
|
-
import { PlanNode, type RelationalPlanNode, type ScalarPlanNode, type Attribute, type RowDescriptor } from '../nodes/plan-node.js';
|
|
7
|
-
import { FilterNode } from '../nodes/filter.js';
|
|
8
|
-
import { QuereusError } from '../../common/errors.js';
|
|
9
|
-
import { StatusCode } from '../../common/types.js';
|
|
10
|
-
import { RegisteredScope } from '../scopes/registered.js';
|
|
11
|
-
import { ColumnReferenceNode } from '../nodes/reference.js';
|
|
12
|
-
import { SinkNode } from '../nodes/sink-node.js';
|
|
13
|
-
import { ConstraintCheckNode } from '../nodes/constraint-check-node.js';
|
|
14
|
-
import { RowOpFlag } from '../../schema/table.js';
|
|
15
|
-
import { ReturningNode } from '../nodes/returning-node.js';
|
|
16
|
-
import { buildOldNewRowDescriptors } from '../../util/row-descriptor.js';
|
|
17
|
-
import { DmlExecutorNode } from '../nodes/dml-executor-node.js';
|
|
18
|
-
import { buildConstraintChecks } from './constraint-builder.js';
|
|
19
|
-
|
|
20
|
-
export function buildDeleteStmt(
|
|
21
|
-
ctx: PlanningContext,
|
|
22
|
-
stmt: AST.DeleteStmt,
|
|
23
|
-
): PlanNode {
|
|
24
|
-
const tableRetrieve = buildTableReference({ type: 'table', table: stmt.table }, ctx);
|
|
25
|
-
const tableReference = tableRetrieve.tableRef; // Extract the actual TableReferenceNode
|
|
26
|
-
|
|
27
|
-
// Process mutation context assignments if present
|
|
28
|
-
const mutationContextValues = new Map<string, ScalarPlanNode>();
|
|
29
|
-
const contextAttributes: Attribute[] = [];
|
|
30
|
-
|
|
31
|
-
if (stmt.contextValues && tableReference.tableSchema.mutationContext) {
|
|
32
|
-
// Create context attributes
|
|
33
|
-
tableReference.tableSchema.mutationContext.forEach((contextVar) => {
|
|
34
|
-
contextAttributes.push({
|
|
35
|
-
id: PlanNode.nextAttrId(),
|
|
36
|
-
name: contextVar.name,
|
|
37
|
-
type: {
|
|
38
|
-
typeClass: 'scalar' as const,
|
|
39
|
-
logicalType: contextVar.logicalType,
|
|
40
|
-
nullable: !contextVar.notNull,
|
|
41
|
-
isReadOnly: true
|
|
42
|
-
},
|
|
43
|
-
sourceRelation: `context.${tableReference.tableSchema.name}`
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
// Build context value expressions (evaluated in the base scope, before table scope)
|
|
48
|
-
stmt.contextValues.forEach((assignment) => {
|
|
49
|
-
const valueExpr = buildExpression(ctx, assignment.value) as ScalarPlanNode;
|
|
50
|
-
mutationContextValues.set(assignment.name, valueExpr);
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Plan the source of rows to delete. This is typically the table itself, potentially filtered.
|
|
55
|
-
let sourceNode: RelationalPlanNode = tableRetrieve; // Use the RetrieveNode as source
|
|
56
|
-
|
|
57
|
-
// Create a new scope with the table columns registered for column resolution
|
|
58
|
-
const tableScope = new RegisteredScope(ctx.scope);
|
|
59
|
-
const sourceAttributes = sourceNode.getAttributes();
|
|
60
|
-
sourceNode.getType().columns.forEach((c, i) => {
|
|
61
|
-
const attr = sourceAttributes[i];
|
|
62
|
-
tableScope.registerSymbol(c.name.toLowerCase(), (exp, s) =>
|
|
63
|
-
new ColumnReferenceNode(s, exp as AST.ColumnExpr, c.type, attr.id, i));
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
// Create a new planning context with the updated scope for WHERE clause resolution
|
|
67
|
-
const deleteCtx = { ...ctx, scope: tableScope };
|
|
68
|
-
|
|
69
|
-
if (stmt.where) {
|
|
70
|
-
const filterExpression = buildExpression(deleteCtx, stmt.where);
|
|
71
|
-
sourceNode = new FilterNode(deleteCtx.scope, sourceNode, filterExpression);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Create OLD/NEW attributes for DELETE (OLD = actual values being deleted, NEW = all NULL)
|
|
75
|
-
const oldAttributes = tableReference.tableSchema.columns.map((col: any) => ({
|
|
76
|
-
id: PlanNode.nextAttrId(),
|
|
77
|
-
name: col.name,
|
|
78
|
-
type: {
|
|
79
|
-
typeClass: 'scalar' as const,
|
|
80
|
-
logicalType: col.logicalType,
|
|
81
|
-
nullable: !col.notNull,
|
|
82
|
-
isReadOnly: false
|
|
83
|
-
},
|
|
84
|
-
sourceRelation: `OLD.${tableReference.tableSchema.name}`
|
|
85
|
-
}));
|
|
86
|
-
|
|
87
|
-
const newAttributes = tableReference.tableSchema.columns.map((col: any) => ({
|
|
88
|
-
id: PlanNode.nextAttrId(),
|
|
89
|
-
name: col.name,
|
|
90
|
-
type: {
|
|
91
|
-
typeClass: 'scalar' as const,
|
|
92
|
-
logicalType: col.logicalType,
|
|
93
|
-
nullable: true, // NEW values are always NULL for DELETE
|
|
94
|
-
isReadOnly: false
|
|
95
|
-
},
|
|
96
|
-
sourceRelation: `NEW.${tableReference.tableSchema.name}`
|
|
97
|
-
}));
|
|
98
|
-
|
|
99
|
-
const { oldRowDescriptor, newRowDescriptor, flatRowDescriptor } = buildOldNewRowDescriptors(oldAttributes, newAttributes);
|
|
100
|
-
|
|
101
|
-
// Build context descriptor if we have context attributes
|
|
102
|
-
const contextDescriptor: RowDescriptor = contextAttributes.length > 0 ? [] : undefined as any;
|
|
103
|
-
if (contextDescriptor) {
|
|
104
|
-
contextAttributes.forEach((attr, index) => {
|
|
105
|
-
contextDescriptor[attr.id] = index;
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Build constraint checks at plan time
|
|
110
|
-
const constraintChecks = buildConstraintChecks(
|
|
111
|
-
deleteCtx,
|
|
112
|
-
tableReference.tableSchema,
|
|
113
|
-
RowOpFlag.DELETE,
|
|
114
|
-
oldAttributes,
|
|
115
|
-
newAttributes,
|
|
116
|
-
flatRowDescriptor,
|
|
117
|
-
contextAttributes
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
// Always inject ConstraintCheckNode for DELETE operations
|
|
121
|
-
const constraintCheckNode = new ConstraintCheckNode(
|
|
122
|
-
deleteCtx.scope,
|
|
123
|
-
sourceNode,
|
|
124
|
-
tableReference,
|
|
125
|
-
RowOpFlag.DELETE,
|
|
126
|
-
oldRowDescriptor,
|
|
127
|
-
newRowDescriptor,
|
|
128
|
-
flatRowDescriptor,
|
|
129
|
-
constraintChecks,
|
|
130
|
-
mutationContextValues.size > 0 ? mutationContextValues : undefined,
|
|
131
|
-
contextAttributes.length > 0 ? contextAttributes : undefined,
|
|
132
|
-
contextDescriptor
|
|
133
|
-
);
|
|
134
|
-
|
|
135
|
-
const deleteNode = new DeleteNode(
|
|
136
|
-
deleteCtx.scope,
|
|
137
|
-
tableReference,
|
|
138
|
-
constraintCheckNode,
|
|
139
|
-
oldRowDescriptor,
|
|
140
|
-
flatRowDescriptor,
|
|
141
|
-
mutationContextValues.size > 0 ? mutationContextValues : undefined,
|
|
142
|
-
contextAttributes.length > 0 ? contextAttributes : undefined,
|
|
143
|
-
contextDescriptor
|
|
144
|
-
);
|
|
145
|
-
|
|
146
|
-
// Add DML executor node to perform the actual database delete operations
|
|
147
|
-
const dmlExecutorNode = new DmlExecutorNode(
|
|
148
|
-
deleteCtx.scope,
|
|
149
|
-
deleteNode,
|
|
150
|
-
tableReference,
|
|
151
|
-
'delete',
|
|
152
|
-
undefined, // onConflict not used for DELETE
|
|
153
|
-
mutationContextValues.size > 0 ? mutationContextValues : undefined,
|
|
154
|
-
contextAttributes.length > 0 ? contextAttributes : undefined,
|
|
155
|
-
contextDescriptor
|
|
156
|
-
);
|
|
157
|
-
|
|
158
|
-
const resultNode: RelationalPlanNode = dmlExecutorNode;
|
|
159
|
-
|
|
160
|
-
if (stmt.returning && stmt.returning.length > 0) {
|
|
161
|
-
// Create returning scope with OLD/NEW attribute access
|
|
162
|
-
const returningScope = new RegisteredScope(deleteCtx.scope);
|
|
163
|
-
|
|
164
|
-
// Register OLD.* symbols (actual values being deleted)
|
|
165
|
-
oldAttributes.forEach((attr: any, columnIndex: any) => {
|
|
166
|
-
const tableColumn = tableReference.tableSchema.columns[columnIndex];
|
|
167
|
-
returningScope.registerSymbol(`old.${tableColumn.name.toLowerCase()}`, (exp, s) =>
|
|
168
|
-
new ColumnReferenceNode(s, exp as AST.ColumnExpr, attr.type, attr.id, columnIndex)
|
|
169
|
-
);
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
// Register NEW.* symbols (always NULL for DELETE) and unqualified column names (default to OLD for DELETE)
|
|
173
|
-
newAttributes.forEach((attr: any, columnIndex: any) => {
|
|
174
|
-
const tableColumn = tableReference.tableSchema.columns[columnIndex];
|
|
175
|
-
|
|
176
|
-
// NEW.column (always NULL for DELETE)
|
|
177
|
-
returningScope.registerSymbol(`new.${tableColumn.name.toLowerCase()}`, (exp, s) =>
|
|
178
|
-
new ColumnReferenceNode(s, exp as AST.ColumnExpr, attr.type, attr.id, columnIndex)
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
// Unqualified column (defaults to OLD for DELETE)
|
|
182
|
-
const oldAttr = oldAttributes[columnIndex];
|
|
183
|
-
returningScope.registerSymbol(tableColumn.name.toLowerCase(), (exp, s) =>
|
|
184
|
-
new ColumnReferenceNode(s, exp as AST.ColumnExpr, oldAttr.type, oldAttr.id, columnIndex)
|
|
185
|
-
);
|
|
186
|
-
|
|
187
|
-
// Table-qualified form (table.column -> OLD for DELETE)
|
|
188
|
-
const tblQualified = `${tableReference.tableSchema.name.toLowerCase()}.${tableColumn.name.toLowerCase()}`;
|
|
189
|
-
returningScope.registerSymbol(tblQualified, (exp, s) =>
|
|
190
|
-
new ColumnReferenceNode(s, exp as AST.ColumnExpr, oldAttr.type, oldAttr.id, columnIndex)
|
|
191
|
-
);
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
// Build RETURNING projections in the OLD/NEW context
|
|
195
|
-
const returningProjections = stmt.returning.map(rc => {
|
|
196
|
-
// TODO: Support RETURNING *
|
|
197
|
-
if (rc.type === 'all') throw new QuereusError('RETURNING * not yet supported', StatusCode.UNSUPPORTED);
|
|
198
|
-
|
|
199
|
-
// Infer alias from column name if not explicitly provided
|
|
200
|
-
let alias = rc.alias;
|
|
201
|
-
if (!alias && rc.expr.type === 'column') {
|
|
202
|
-
// For qualified column references like OLD.id, normalize to lowercase
|
|
203
|
-
alias = rc.expr.table
|
|
204
|
-
? `${rc.expr.table.toLowerCase()}.${rc.expr.name.toLowerCase()}`
|
|
205
|
-
: rc.expr.name.toLowerCase();
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
return {
|
|
209
|
-
node: buildExpression({ ...deleteCtx, scope: returningScope }, rc.expr) as ScalarPlanNode,
|
|
210
|
-
alias: alias
|
|
211
|
-
};
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
return new ReturningNode(deleteCtx.scope, dmlExecutorNode, returningProjections);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
return new SinkNode(deleteCtx.scope, resultNode, 'delete');
|
|
218
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { PlanningContext } from '../planning-context.js';
|
|
2
|
-
import type * as AST from '../../parser/ast.js';
|
|
3
|
-
import { DropAssertionNode } from '../nodes/drop-assertion-node.js';
|
|
4
|
-
|
|
5
|
-
export function buildDropAssertionStmt(ctx: PlanningContext, stmt: AST.DropStmt): DropAssertionNode {
|
|
6
|
-
if (stmt.objectType !== 'assertion') {
|
|
7
|
-
throw new Error('Expected DROP ASSERTION statement');
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
return new DropAssertionNode(ctx.scope, stmt.name.name, stmt.ifExists);
|
|
11
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type * as AST from '../../parser/ast.js';
|
|
2
|
-
import type { PlanningContext } from '../planning-context.js';
|
|
3
|
-
import { DropTableNode } from '../nodes/drop-table-node.js';
|
|
4
|
-
|
|
5
|
-
export function buildDropTableStmt(
|
|
6
|
-
ctx: PlanningContext,
|
|
7
|
-
stmt: AST.DropStmt,
|
|
8
|
-
): DropTableNode {
|
|
9
|
-
return new DropTableNode(
|
|
10
|
-
ctx.scope,
|
|
11
|
-
stmt,
|
|
12
|
-
);
|
|
13
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type * as AST from '../../parser/ast.js';
|
|
2
|
-
import type { PlanningContext } from '../planning-context.js';
|
|
3
|
-
import { DropViewNode } from '../nodes/drop-view-node.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Builds a plan node for DROP VIEW statements.
|
|
7
|
-
*/
|
|
8
|
-
export function buildDropViewStmt(ctx: PlanningContext, stmt: AST.DropStmt): DropViewNode {
|
|
9
|
-
// Extract schema and view name
|
|
10
|
-
const schemaName = stmt.name.schema || 'main';
|
|
11
|
-
const viewName = stmt.name.name;
|
|
12
|
-
|
|
13
|
-
return new DropViewNode(
|
|
14
|
-
ctx.scope,
|
|
15
|
-
viewName,
|
|
16
|
-
schemaName,
|
|
17
|
-
stmt.ifExists
|
|
18
|
-
);
|
|
19
|
-
}
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
import type * as AST from '../../parser/ast.js';
|
|
2
|
-
import type { PlanningContext } from '../planning-context.js';
|
|
3
|
-
import { LiteralNode, BinaryOpNode, UnaryOpNode, CaseExprNode, CastNode, CollateNode, BetweenNode } from '../nodes/scalar.js';
|
|
4
|
-
import { ScalarSubqueryNode, InNode, ExistsNode } from '../nodes/subquery.js';
|
|
5
|
-
import { WindowFunctionCallNode } from '../nodes/window-function.js';
|
|
6
|
-
import type { ScalarPlanNode, RelationalPlanNode } from '../nodes/plan-node.js';
|
|
7
|
-
import { QuereusError } from '../../common/errors.js';
|
|
8
|
-
import { StatusCode } from '../../common/types.js';
|
|
9
|
-
import type { RelationType } from '../../common/datatype.js';
|
|
10
|
-
import { resolveColumn, resolveParameter } from '../resolve.js';
|
|
11
|
-
import { Ambiguous } from '../scopes/scope.js';
|
|
12
|
-
import { buildSelectStmt } from './select.js';
|
|
13
|
-
import { resolveWindowFunction } from '../../schema/window-function.js';
|
|
14
|
-
import { buildFunctionCall } from './function-call.js';
|
|
15
|
-
import { createLogger } from '../../common/logger.js';
|
|
16
|
-
|
|
17
|
-
const logger = createLogger('planner:expression');
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Builds an expression plan node from an AST expression.
|
|
21
|
-
*/
|
|
22
|
-
export function buildExpression(ctx: PlanningContext, expr: AST.Expression, allowAggregates: boolean = false): ScalarPlanNode {
|
|
23
|
-
switch (expr.type) {
|
|
24
|
-
case 'literal':
|
|
25
|
-
return new LiteralNode(ctx.scope, expr);
|
|
26
|
-
|
|
27
|
-
case 'column': {
|
|
28
|
-
const colResolution = resolveColumn(ctx.scope, expr, ctx.db.schemaManager.getCurrentSchemaName());
|
|
29
|
-
|
|
30
|
-
if (!colResolution || colResolution === Ambiguous) {
|
|
31
|
-
throw new QuereusError(`Column not found: ${expr.name}`, StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
32
|
-
}
|
|
33
|
-
return colResolution as ScalarPlanNode;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
case 'parameter': {
|
|
37
|
-
const paramResolution = resolveParameter(ctx.scope, expr);
|
|
38
|
-
if (!paramResolution || paramResolution === Ambiguous) {
|
|
39
|
-
throw new QuereusError(`Parameter not found: ${expr.name ?? expr.index}`, StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
40
|
-
}
|
|
41
|
-
return paramResolution as ScalarPlanNode;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
case 'unary': {
|
|
45
|
-
// Optimization: fold unary minus over numeric literals into negative literals
|
|
46
|
-
if (expr.operator === '-' && expr.expr.type === 'literal') {
|
|
47
|
-
const literalExpr = expr.expr as AST.LiteralExpr;
|
|
48
|
-
if (typeof literalExpr.value === 'number' || typeof literalExpr.value === 'bigint') {
|
|
49
|
-
// Create a new literal expression with the negated value
|
|
50
|
-
const negatedLiteral: AST.LiteralExpr = {
|
|
51
|
-
type: 'literal',
|
|
52
|
-
value: typeof literalExpr.value === 'bigint' ? -literalExpr.value : -literalExpr.value,
|
|
53
|
-
lexeme: literalExpr.lexeme ? `-${literalExpr.lexeme}` : undefined,
|
|
54
|
-
loc: expr.loc // Use the location of the entire unary expression
|
|
55
|
-
};
|
|
56
|
-
return new LiteralNode(ctx.scope, negatedLiteral);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const operand = buildExpression(ctx, expr.expr, allowAggregates);
|
|
61
|
-
return new UnaryOpNode(ctx.scope, expr, operand);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
case 'binary': {
|
|
65
|
-
const left = buildExpression(ctx, expr.left, allowAggregates);
|
|
66
|
-
const right = buildExpression(ctx, expr.right, allowAggregates);
|
|
67
|
-
return new BinaryOpNode(ctx.scope, expr, left, right);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
case 'case': {
|
|
71
|
-
// Build base expression if present
|
|
72
|
-
const baseExpr = expr.baseExpr ? buildExpression(ctx, expr.baseExpr, allowAggregates) : undefined;
|
|
73
|
-
|
|
74
|
-
// Build WHEN/THEN clauses
|
|
75
|
-
const whenThenClauses = expr.whenThenClauses.map(clause => ({
|
|
76
|
-
when: buildExpression(ctx, clause.when, allowAggregates),
|
|
77
|
-
then: buildExpression(ctx, clause.then, allowAggregates)
|
|
78
|
-
}));
|
|
79
|
-
|
|
80
|
-
// Build ELSE expression if present
|
|
81
|
-
const elseExpr = expr.elseExpr ? buildExpression(ctx, expr.elseExpr, allowAggregates) : undefined;
|
|
82
|
-
|
|
83
|
-
return new CaseExprNode(ctx.scope, expr, baseExpr, whenThenClauses, elseExpr);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
case 'cast': {
|
|
87
|
-
const castOperand = buildExpression(ctx, expr.expr, allowAggregates);
|
|
88
|
-
return new CastNode(ctx.scope, expr, castOperand);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
case 'collate': {
|
|
92
|
-
const collateOperand = buildExpression(ctx, expr.expr, allowAggregates);
|
|
93
|
-
return new CollateNode(ctx.scope, expr, collateOperand);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
case 'function': return buildFunctionCall(ctx, expr, allowAggregates);
|
|
97
|
-
|
|
98
|
-
case 'subquery': {
|
|
99
|
-
// For scalar subqueries, create a context that allows correlation
|
|
100
|
-
// The buildSelectStmt will create the proper scope chain with subquery tables taking precedence
|
|
101
|
-
// CRITICAL: Share the cteReferenceCache to ensure consistent attribute IDs across contexts
|
|
102
|
-
logger(`Building scalar subquery - ctx.cteReferenceCache size: ${ctx.cteReferenceCache?.size ?? 'undefined'}`);
|
|
103
|
-
const subqueryContext = {
|
|
104
|
-
...ctx,
|
|
105
|
-
cteReferenceCache: ctx.cteReferenceCache || new Map()
|
|
106
|
-
};
|
|
107
|
-
// Preserve input columns in scalar subqueries to ensure correlated predicates
|
|
108
|
-
// have access to all underlying attributes.
|
|
109
|
-
const subqueryPlan = buildSelectStmt(subqueryContext, expr.query, ctx.cteNodes, true);
|
|
110
|
-
logger(`Building scalar subquery with preserveInputColumns=true`);
|
|
111
|
-
if (subqueryPlan.getType().typeClass !== 'relation') {
|
|
112
|
-
throw new QuereusError('Subquery must produce a relation', StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
113
|
-
}
|
|
114
|
-
// Validate that scalar subquery returns exactly one column
|
|
115
|
-
const scalarSubqueryType = subqueryPlan.getType();
|
|
116
|
-
if (scalarSubqueryType.typeClass === 'relation' && (scalarSubqueryType as RelationType).columns.length !== 1) {
|
|
117
|
-
throw new QuereusError('Scalar subquery must return exactly one column', StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
118
|
-
}
|
|
119
|
-
return new ScalarSubqueryNode(ctx.scope, expr, subqueryPlan as RelationalPlanNode);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
case 'windowFunction': {
|
|
123
|
-
// Window functions are handled by creating a WindowFunctionCallNode
|
|
124
|
-
// First validate that this is a registered window function
|
|
125
|
-
const windowSchema = resolveWindowFunction(expr.function.name);
|
|
126
|
-
if (!windowSchema) {
|
|
127
|
-
throw new QuereusError(`Unknown window function: ${expr.function.name}`, StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Validate argument count (special case for COUNT(*))
|
|
131
|
-
const isCountStar = expr.function.name.toLowerCase() === 'count' && expr.function.args.length === 0;
|
|
132
|
-
if (windowSchema.argCount !== 'variadic' && expr.function.args.length !== windowSchema.argCount && !isCountStar) {
|
|
133
|
-
throw new QuereusError(`Window function ${expr.function.name} expects ${windowSchema.argCount} arguments, got ${expr.function.args.length}`, StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Validate ORDER BY requirement
|
|
137
|
-
if (windowSchema.requiresOrderBy && (!expr.window?.orderBy || expr.window.orderBy.length === 0)) {
|
|
138
|
-
throw new QuereusError(`Window function ${expr.function.name} requires ORDER BY clause`, StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return new WindowFunctionCallNode(
|
|
142
|
-
ctx.scope,
|
|
143
|
-
expr,
|
|
144
|
-
expr.function.name,
|
|
145
|
-
expr.function.distinct ?? false
|
|
146
|
-
);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
case 'in': {
|
|
150
|
-
// Build the left expression
|
|
151
|
-
const leftExpr = buildExpression(ctx, expr.expr, allowAggregates);
|
|
152
|
-
|
|
153
|
-
if (expr.subquery) {
|
|
154
|
-
// IN subquery: expr IN (SELECT ...)
|
|
155
|
-
const inSubqueryContext = {
|
|
156
|
-
...ctx,
|
|
157
|
-
cteReferenceCache: ctx.cteReferenceCache || new Map()
|
|
158
|
-
};
|
|
159
|
-
const inSubqueryPlan = buildSelectStmt(inSubqueryContext, expr.subquery, ctx.cteNodes, true);
|
|
160
|
-
if (inSubqueryPlan.getType().typeClass !== 'relation') {
|
|
161
|
-
throw new QuereusError('IN subquery must produce a relation', StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
162
|
-
}
|
|
163
|
-
// Validate that subquery returns exactly one column
|
|
164
|
-
const subqueryType = inSubqueryPlan.getType();
|
|
165
|
-
if (subqueryType.typeClass === 'relation' && (subqueryType as RelationType).columns.length !== 1) {
|
|
166
|
-
throw new QuereusError('IN subquery must return exactly one column', StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
167
|
-
}
|
|
168
|
-
return new InNode(ctx.scope, expr, leftExpr, inSubqueryPlan as RelationalPlanNode);
|
|
169
|
-
} else if (expr.values) {
|
|
170
|
-
// IN value list: expr IN (value1, value2, ...)
|
|
171
|
-
const valueExprs = expr.values.map(val => buildExpression(ctx, val, allowAggregates));
|
|
172
|
-
// Create a special IN node for value lists
|
|
173
|
-
// Import the InNode from subquery module
|
|
174
|
-
return new InNode(ctx.scope, expr, leftExpr, undefined, valueExprs);
|
|
175
|
-
} else {
|
|
176
|
-
throw new QuereusError('IN expression must have either values or subquery', StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
case 'exists': {
|
|
181
|
-
// Build the EXISTS subquery
|
|
182
|
-
const existsSubqueryContext = {
|
|
183
|
-
...ctx,
|
|
184
|
-
cteReferenceCache: ctx.cteReferenceCache || new Map()
|
|
185
|
-
};
|
|
186
|
-
const existsSubqueryPlan = buildSelectStmt(existsSubqueryContext, expr.subquery, ctx.cteNodes, true);
|
|
187
|
-
if (existsSubqueryPlan.getType().typeClass !== 'relation') {
|
|
188
|
-
throw new QuereusError('EXISTS subquery must produce a relation', StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
189
|
-
}
|
|
190
|
-
return new ExistsNode(ctx.scope, expr, existsSubqueryPlan as RelationalPlanNode);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
case 'between': {
|
|
194
|
-
// Build the BETWEEN expression: expr BETWEEN lower AND upper
|
|
195
|
-
const exprNode = buildExpression(ctx, expr.expr, allowAggregates);
|
|
196
|
-
const lowerNode = buildExpression(ctx, expr.lower, allowAggregates);
|
|
197
|
-
const upperNode = buildExpression(ctx, expr.upper, allowAggregates);
|
|
198
|
-
return new BetweenNode(ctx.scope, expr, exprNode, lowerNode, upperNode);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
default:
|
|
202
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
203
|
-
throw new QuereusError(`Expression type '${(expr as any).type}' not yet supported in buildExpression.`, StatusCode.UNSUPPORTED, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { type PlanningContext } from "../planning-context.js";
|
|
2
|
-
import { AggregateFunctionCallNode } from "../nodes/aggregate-function.js";
|
|
3
|
-
import { ColumnReferenceNode } from "../nodes/reference.js";
|
|
4
|
-
import { QuereusError } from "../../common/errors.js";
|
|
5
|
-
import { StatusCode } from "../../common/types.js";
|
|
6
|
-
import * as AST from "../../parser/ast.js";
|
|
7
|
-
import { ScalarPlanNode } from "../nodes/plan-node.js";
|
|
8
|
-
import { isAggregateFunctionSchema, isScalarFunctionSchema } from '../../schema/function.js';
|
|
9
|
-
import { buildExpression } from "./expression.js";
|
|
10
|
-
import { ScalarFunctionCallNode } from "../nodes/function.js";
|
|
11
|
-
import { resolveFunctionSchema } from "./schema-resolution.js";
|
|
12
|
-
import { CapabilityDetectors } from '../framework/characteristics.js';
|
|
13
|
-
import type { ScalarType } from "../../common/datatype.js";
|
|
14
|
-
|
|
15
|
-
export function buildFunctionCall(ctx: PlanningContext, expr: AST.FunctionExpr, allowAggregates: boolean): ScalarPlanNode {
|
|
16
|
-
// In HAVING context, check if this function matches an existing aggregate
|
|
17
|
-
if (ctx.aggregates && ctx.aggregates.length > 0) {
|
|
18
|
-
// Try to find a matching aggregate
|
|
19
|
-
for (const agg of ctx.aggregates) {
|
|
20
|
-
if (CapabilityDetectors.isAggregateFunction(agg.expression)) {
|
|
21
|
-
const aggFuncNode = agg.expression as AggregateFunctionCallNode;
|
|
22
|
-
// Check if function name matches and argument count matches
|
|
23
|
-
if (aggFuncNode.functionName.toLowerCase() === expr.name.toLowerCase() &&
|
|
24
|
-
aggFuncNode.args.length === expr.args.length) {
|
|
25
|
-
// Check if arguments match
|
|
26
|
-
let argsMatch = true;
|
|
27
|
-
for (let i = 0; i < expr.args.length; i++) {
|
|
28
|
-
const exprArg = expr.args[i];
|
|
29
|
-
const aggArg = aggFuncNode.args[i];
|
|
30
|
-
// Simple check: if both are column references, check names match
|
|
31
|
-
if (exprArg.type === 'column' && aggArg.expression?.type === 'column') {
|
|
32
|
-
if (exprArg.name.toLowerCase() !== aggArg.expression.name.toLowerCase()) {
|
|
33
|
-
argsMatch = false;
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
} else if (exprArg.type === 'literal' && aggArg.expression?.type === 'literal') {
|
|
37
|
-
if (exprArg.value !== aggArg.expression.value) {
|
|
38
|
-
argsMatch = false;
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
// For other cases, we'd need more sophisticated comparison
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (argsMatch) {
|
|
46
|
-
// Found matching aggregate - return a column reference to it
|
|
47
|
-
const columnExpr: AST.ColumnExpr = {
|
|
48
|
-
type: 'column',
|
|
49
|
-
name: agg.alias
|
|
50
|
-
};
|
|
51
|
-
return new ColumnReferenceNode(
|
|
52
|
-
ctx.scope,
|
|
53
|
-
columnExpr,
|
|
54
|
-
agg.expression.getType(),
|
|
55
|
-
agg.attributeId,
|
|
56
|
-
agg.columnIndex
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Resolve function schema at build time
|
|
65
|
-
const functionSchema = resolveFunctionSchema(ctx, expr.name, expr.args.length);
|
|
66
|
-
if (functionSchema && isAggregateFunctionSchema(functionSchema)) {
|
|
67
|
-
if (!allowAggregates) {
|
|
68
|
-
throw new QuereusError(`Aggregate function ${expr.name} not allowed in this context`, StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Build arguments for aggregate function
|
|
72
|
-
const args = expr.args.map(arg => buildExpression(ctx, arg, false)); // Aggregates can't contain other aggregates
|
|
73
|
-
|
|
74
|
-
// Perform type inference if available
|
|
75
|
-
let inferredType: ScalarType | undefined;
|
|
76
|
-
if (functionSchema.inferReturnType) {
|
|
77
|
-
const argTypes = args.map(arg => arg.getType().logicalType);
|
|
78
|
-
|
|
79
|
-
// Validate argument types if validator is provided
|
|
80
|
-
if (functionSchema.validateArgTypes && !functionSchema.validateArgTypes(argTypes)) {
|
|
81
|
-
throw new QuereusError(
|
|
82
|
-
`Invalid argument types for aggregate function ${expr.name}`,
|
|
83
|
-
StatusCode.MISMATCH,
|
|
84
|
-
undefined,
|
|
85
|
-
expr.loc?.start.line,
|
|
86
|
-
expr.loc?.start.column
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
inferredType = functionSchema.inferReturnType(argTypes);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return new AggregateFunctionCallNode(
|
|
94
|
-
ctx.scope,
|
|
95
|
-
expr,
|
|
96
|
-
expr.name,
|
|
97
|
-
functionSchema,
|
|
98
|
-
args,
|
|
99
|
-
expr.distinct ?? false, // Use the distinct field from the AST
|
|
100
|
-
undefined, // orderBy - TODO: parse from expr
|
|
101
|
-
undefined, // filter - TODO: parse from expr
|
|
102
|
-
inferredType
|
|
103
|
-
);
|
|
104
|
-
} else {
|
|
105
|
-
// Regular scalar function
|
|
106
|
-
const args = expr.args.map(arg => buildExpression(ctx, arg, allowAggregates));
|
|
107
|
-
|
|
108
|
-
// Perform type inference if available
|
|
109
|
-
let inferredType: ScalarType | undefined;
|
|
110
|
-
if (isScalarFunctionSchema(functionSchema) && functionSchema.inferReturnType) {
|
|
111
|
-
const argTypes = args.map(arg => arg.getType().logicalType);
|
|
112
|
-
|
|
113
|
-
// Validate argument types if validator is provided
|
|
114
|
-
if (functionSchema.validateArgTypes && !functionSchema.validateArgTypes(argTypes)) {
|
|
115
|
-
throw new QuereusError(
|
|
116
|
-
`Invalid argument types for function ${expr.name}`,
|
|
117
|
-
StatusCode.MISMATCH,
|
|
118
|
-
undefined,
|
|
119
|
-
expr.loc?.start.line,
|
|
120
|
-
expr.loc?.start.column
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
inferredType = functionSchema.inferReturnType(argTypes);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return new ScalarFunctionCallNode(ctx.scope, expr, functionSchema, args, inferredType);
|
|
128
|
-
}
|
|
129
|
-
}
|