@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,335 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Plan validator pass for the Titan optimizer
|
|
3
|
-
* Validates that a plan tree meets all invariants before emission
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { isRelationalNode, PlanNode, type RelationalPlanNode } from '../nodes/plan-node.js';
|
|
7
|
-
import { PlanNodeType } from '../nodes/plan-node-type.js';
|
|
8
|
-
import { QuereusError } from '../../common/errors.js';
|
|
9
|
-
import { StatusCode } from '../../common/types.js';
|
|
10
|
-
import { validateLog } from '../debug/logger-utils.js';
|
|
11
|
-
import type { ColumnReferenceNode } from '../nodes/reference.js';
|
|
12
|
-
|
|
13
|
-
const log = validateLog();
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Validation options
|
|
17
|
-
*/
|
|
18
|
-
export interface ValidationOptions {
|
|
19
|
-
/** Validate that all physical properties are set (default: true) */
|
|
20
|
-
requirePhysical?: boolean;
|
|
21
|
-
/** Validate attribute consistency (default: true) */
|
|
22
|
-
validateAttributes?: boolean;
|
|
23
|
-
/** Validate ordering properties (default: true) */
|
|
24
|
-
validateOrdering?: boolean;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Validate a physical plan tree before emission
|
|
29
|
-
* @param root The root node of the plan tree
|
|
30
|
-
* @param options Validation options
|
|
31
|
-
* @throws QuereusError if validation fails
|
|
32
|
-
*/
|
|
33
|
-
export function validatePhysicalTree(root: PlanNode, options: ValidationOptions = {}): void {
|
|
34
|
-
const opts = {
|
|
35
|
-
requirePhysical: true,
|
|
36
|
-
validateAttributes: true,
|
|
37
|
-
validateOrdering: true,
|
|
38
|
-
...options
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
log('Starting plan validation for tree rooted at %s', root.nodeType);
|
|
42
|
-
|
|
43
|
-
const context = new ValidationContext(opts);
|
|
44
|
-
validateNode(root, context, []);
|
|
45
|
-
|
|
46
|
-
log('Plan validation completed successfully');
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Validation context for tracking state during traversal
|
|
51
|
-
*/
|
|
52
|
-
class ValidationContext {
|
|
53
|
-
/** All attribute IDs seen so far */
|
|
54
|
-
private attributeIds = new Set<number>();
|
|
55
|
-
|
|
56
|
-
/** Map of attribute ID to node path for debugging */
|
|
57
|
-
private attributeLocations = new Map<number, string>();
|
|
58
|
-
|
|
59
|
-
constructor(public readonly options: ValidationOptions) {}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Register an attribute ID and check for duplicates
|
|
63
|
-
*/
|
|
64
|
-
registerAttribute(attrId: number, nodePath: string): void {
|
|
65
|
-
if (this.attributeIds.has(attrId)) {
|
|
66
|
-
const existingLocation = this.attributeLocations.get(attrId);
|
|
67
|
-
throw new QuereusError(
|
|
68
|
-
`Duplicate attribute ID ${attrId} found at ${nodePath} (previously seen at ${existingLocation})`,
|
|
69
|
-
StatusCode.INTERNAL
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
this.attributeIds.add(attrId);
|
|
74
|
-
this.attributeLocations.set(attrId, nodePath);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Check if an attribute ID exists
|
|
79
|
-
*/
|
|
80
|
-
hasAttribute(attrId: number): boolean {
|
|
81
|
-
return this.attributeIds.has(attrId);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Validate a single node and recursively validate its children
|
|
87
|
-
*/
|
|
88
|
-
function validateNode(node: PlanNode, context: ValidationContext, path: string[]): void {
|
|
89
|
-
const nodePath = path.concat(node.nodeType).join(' > ');
|
|
90
|
-
|
|
91
|
-
try {
|
|
92
|
-
log('Validating node %s at path: %s', node.nodeType, nodePath);
|
|
93
|
-
|
|
94
|
-
// 1. Validate physical properties are present
|
|
95
|
-
if (context.options.requirePhysical) {
|
|
96
|
-
validatePhysicalProperties(node, nodePath);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// 2. Validate that this is a physical (not logical-only) node type
|
|
100
|
-
validatePhysicalNodeType(node, nodePath);
|
|
101
|
-
|
|
102
|
-
// 3. Validate relational node specific properties
|
|
103
|
-
if (isRelationalNode(node)) {
|
|
104
|
-
validateRelationalNode(node as RelationalPlanNode, context, nodePath);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// 4. Validate column references point to valid attributes
|
|
108
|
-
if (node.nodeType === PlanNodeType.ColumnReference) {
|
|
109
|
-
validateColumnReference(node as ColumnReferenceNode, context, nodePath);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// 5. Recursively validate children
|
|
113
|
-
for (const child of node.getChildren()) {
|
|
114
|
-
validateNode(child, context, path.concat(node.nodeType));
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
} catch (error) {
|
|
118
|
-
if (error instanceof QuereusError) {
|
|
119
|
-
// Add context to the error
|
|
120
|
-
error.message = `Validation failed at ${nodePath}: ${error.message}`;
|
|
121
|
-
}
|
|
122
|
-
throw error;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Validate that physical properties are present
|
|
128
|
-
*/
|
|
129
|
-
function validatePhysicalProperties(node: PlanNode, nodePath: string): void {
|
|
130
|
-
if (!node.physical) {
|
|
131
|
-
throw new QuereusError(
|
|
132
|
-
`Node ${node.nodeType} at ${nodePath} lacks physical properties`,
|
|
133
|
-
StatusCode.INTERNAL
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Basic sanity checks on physical properties
|
|
138
|
-
const physical = node.physical;
|
|
139
|
-
|
|
140
|
-
if (typeof physical.deterministic !== 'boolean') {
|
|
141
|
-
throw new QuereusError(
|
|
142
|
-
`Node ${node.nodeType} has invalid deterministic flag: ${physical.deterministic}`,
|
|
143
|
-
StatusCode.INTERNAL
|
|
144
|
-
);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (typeof physical.readonly !== 'boolean') {
|
|
148
|
-
throw new QuereusError(
|
|
149
|
-
`Node ${node.nodeType} has invalid readonly flag: ${physical.readonly}`,
|
|
150
|
-
StatusCode.INTERNAL
|
|
151
|
-
);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
if (physical.idempotent !== undefined && typeof physical.idempotent !== 'boolean') {
|
|
155
|
-
throw new QuereusError(
|
|
156
|
-
`Node ${node.nodeType} has invalid idempotent flag: ${physical.idempotent}`,
|
|
157
|
-
StatusCode.INTERNAL
|
|
158
|
-
);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
if (physical.estimatedRows !== undefined && physical.estimatedRows < 0) {
|
|
162
|
-
throw new QuereusError(
|
|
163
|
-
`Node ${node.nodeType} has negative estimated rows: ${physical.estimatedRows}`,
|
|
164
|
-
StatusCode.INTERNAL
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// Validate side effect consistency for DML nodes
|
|
169
|
-
if (PlanNode.hasSideEffects(physical)) {
|
|
170
|
-
// Nodes with side effects should not be constant
|
|
171
|
-
if (physical.constant === true) {
|
|
172
|
-
throw new QuereusError(
|
|
173
|
-
`Node ${node.nodeType} has side effects but is marked as constant`,
|
|
174
|
-
StatusCode.INTERNAL
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Validate that the node type is physical (not logical-only)
|
|
182
|
-
*/
|
|
183
|
-
function validatePhysicalNodeType(node: PlanNode, nodePath: string): void {
|
|
184
|
-
// Node types that should NOT appear in a fully optimized physical tree
|
|
185
|
-
const logicalOnlyTypes = new Set([
|
|
186
|
-
PlanNodeType.Aggregate, // Should be StreamAggregate or HashAggregate
|
|
187
|
-
PlanNodeType.Retrieve, // Must be rewritten to a physical access node
|
|
188
|
-
// Add other logical-only types here as needed
|
|
189
|
-
]);
|
|
190
|
-
|
|
191
|
-
if (logicalOnlyTypes.has(node.nodeType)) {
|
|
192
|
-
throw new QuereusError(
|
|
193
|
-
`Logical-only node type ${node.nodeType} found in physical tree at ${nodePath}`,
|
|
194
|
-
StatusCode.INTERNAL
|
|
195
|
-
);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Validate relational node specific properties
|
|
201
|
-
*/
|
|
202
|
-
function validateRelationalNode(node: RelationalPlanNode, context: ValidationContext, nodePath: string): void {
|
|
203
|
-
if (!context.options.validateAttributes) {
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Get attributes for this node
|
|
208
|
-
const attributes = node.getAttributes();
|
|
209
|
-
|
|
210
|
-
// Validate that we have attributes if this is a real relational node
|
|
211
|
-
// (Some nodes like DDL operations might not have attributes)
|
|
212
|
-
const needsAttributes = !isDDLNode(node.nodeType);
|
|
213
|
-
if (needsAttributes && attributes.length === 0) {
|
|
214
|
-
log('Warning: Relational node %s has no attributes at %s', node.nodeType, nodePath);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// Register all attribute IDs and check for duplicates within this node
|
|
218
|
-
for (const attr of attributes) {
|
|
219
|
-
if (typeof attr.id !== 'number') {
|
|
220
|
-
throw new QuereusError(
|
|
221
|
-
`Invalid attribute ID ${attr.id} (must be number) at ${nodePath}`,
|
|
222
|
-
StatusCode.INTERNAL
|
|
223
|
-
);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
context.registerAttribute(attr.id, nodePath);
|
|
227
|
-
|
|
228
|
-
// Validate attribute properties
|
|
229
|
-
if (!attr.name || typeof attr.name !== 'string') {
|
|
230
|
-
throw new QuereusError(
|
|
231
|
-
`Attribute ${attr.id} has invalid name "${attr.name}" at ${nodePath}`,
|
|
232
|
-
StatusCode.INTERNAL
|
|
233
|
-
);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
if (!attr.sourceRelation || typeof attr.sourceRelation !== 'string') {
|
|
237
|
-
throw new QuereusError(
|
|
238
|
-
`Attribute ${attr.id} has invalid source relation "${attr.sourceRelation}" at ${nodePath}`,
|
|
239
|
-
StatusCode.INTERNAL
|
|
240
|
-
);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// Validate ordering properties if present
|
|
245
|
-
if (context.options.validateOrdering && node.physical?.ordering) {
|
|
246
|
-
validateOrdering(node.physical.ordering, attributes.length, nodePath);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Validate column references point to valid attributes
|
|
252
|
-
*/
|
|
253
|
-
function validateColumnReference(node: ColumnReferenceNode, context: ValidationContext, nodePath: string): void {
|
|
254
|
-
if (!context.options.validateAttributes) {
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
const attributeId = node.attributeId;
|
|
259
|
-
if (typeof attributeId !== 'number') {
|
|
260
|
-
throw new QuereusError(
|
|
261
|
-
`ColumnReference has invalid attribute ID ${attributeId} at ${nodePath}`,
|
|
262
|
-
StatusCode.INTERNAL
|
|
263
|
-
);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
if (!context.hasAttribute(attributeId)) {
|
|
267
|
-
throw new QuereusError(
|
|
268
|
-
`ColumnReference refers to unknown attribute ID ${attributeId} at ${nodePath}`,
|
|
269
|
-
StatusCode.INTERNAL
|
|
270
|
-
);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Validate ordering specification
|
|
276
|
-
*/
|
|
277
|
-
function validateOrdering(ordering: { column: number; desc: boolean }[], columnCount: number, nodePath: string): void {
|
|
278
|
-
for (let i = 0; i < ordering.length; i++) {
|
|
279
|
-
const orderSpec = ordering[i];
|
|
280
|
-
|
|
281
|
-
if (typeof orderSpec.column !== 'number') {
|
|
282
|
-
throw new QuereusError(
|
|
283
|
-
`Invalid ordering column index ${orderSpec.column} at ${nodePath}[${i}]`,
|
|
284
|
-
StatusCode.INTERNAL
|
|
285
|
-
);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
if (orderSpec.column < 0 || orderSpec.column >= columnCount) {
|
|
289
|
-
throw new QuereusError(
|
|
290
|
-
`Ordering column index ${orderSpec.column} out of range (0-${columnCount-1}) at ${nodePath}[${i}]`,
|
|
291
|
-
StatusCode.INTERNAL
|
|
292
|
-
);
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
if (typeof orderSpec.desc !== 'boolean') {
|
|
296
|
-
throw new QuereusError(
|
|
297
|
-
`Invalid ordering desc flag ${orderSpec.desc} at ${nodePath}[${i}]`,
|
|
298
|
-
StatusCode.INTERNAL
|
|
299
|
-
);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
* Check if a node type is a DDL node that doesn't produce attributes
|
|
306
|
-
*/
|
|
307
|
-
function isDDLNode(nodeType: PlanNodeType): boolean {
|
|
308
|
-
const ddlTypes = new Set([
|
|
309
|
-
PlanNodeType.CreateTable,
|
|
310
|
-
PlanNodeType.DropTable,
|
|
311
|
-
PlanNodeType.CreateIndex,
|
|
312
|
-
PlanNodeType.CreateView,
|
|
313
|
-
PlanNodeType.DropView,
|
|
314
|
-
PlanNodeType.Transaction,
|
|
315
|
-
PlanNodeType.Pragma,
|
|
316
|
-
PlanNodeType.AddConstraint,
|
|
317
|
-
]);
|
|
318
|
-
|
|
319
|
-
return ddlTypes.has(nodeType);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* Quick validation function for development/testing
|
|
324
|
-
* Validates plan with default options and logs results
|
|
325
|
-
*/
|
|
326
|
-
export function quickValidate(root: PlanNode): boolean {
|
|
327
|
-
try {
|
|
328
|
-
validatePhysicalTree(root);
|
|
329
|
-
log('✓ Plan validation passed');
|
|
330
|
-
return true;
|
|
331
|
-
} catch (error) {
|
|
332
|
-
log('✗ Plan validation failed: %s', error);
|
|
333
|
-
return false;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Async stream utilities for processing async iterables
|
|
3
|
-
* Used by CacheNode emitter, NestedLoopJoin inner side, and other streaming operations
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { MaybePromise, Row } from '../common/types.js';
|
|
7
|
-
import { createLogger } from '../common/logger.js';
|
|
8
|
-
import { getAsyncIterator } from './utils.js';
|
|
9
|
-
|
|
10
|
-
const log = createLogger('runtime:async-util');
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Transform rows using a mapping function
|
|
14
|
-
*/
|
|
15
|
-
export async function* mapRows<T extends Row, R>(
|
|
16
|
-
src: AsyncIterable<T>,
|
|
17
|
-
fn: (row: T) => R
|
|
18
|
-
): AsyncIterable<R> {
|
|
19
|
-
for await (const row of src) {
|
|
20
|
-
yield fn(row);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Filter rows using a predicate function
|
|
26
|
-
*/
|
|
27
|
-
export async function* filterRows<T>(
|
|
28
|
-
src: AsyncIterable<T>,
|
|
29
|
-
pred: (row: T) => MaybePromise<boolean>
|
|
30
|
-
): AsyncIterable<T> {
|
|
31
|
-
for await (const row of src) {
|
|
32
|
-
const include = await pred(row);
|
|
33
|
-
if (include) {
|
|
34
|
-
yield row;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Duplicate an async iterable into two independent streams
|
|
41
|
-
* This materializes chunks internally as needed
|
|
42
|
-
*/
|
|
43
|
-
export function tee<T>(src: AsyncIterable<T>): [AsyncIterable<T>, AsyncIterable<T>] {
|
|
44
|
-
const buffer: T[] = [];
|
|
45
|
-
let srcIterator: AsyncIterator<T> | null = null;
|
|
46
|
-
let srcDone = false;
|
|
47
|
-
let consumer1Index = 0;
|
|
48
|
-
let consumer2Index = 0;
|
|
49
|
-
|
|
50
|
-
async function fillBuffer(targetIndex: number): Promise<void> {
|
|
51
|
-
if (srcDone || buffer.length > targetIndex) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (!srcIterator) {
|
|
56
|
-
srcIterator = getAsyncIterator(src);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
while (buffer.length <= targetIndex && !srcDone) {
|
|
60
|
-
const result = await srcIterator.next();
|
|
61
|
-
if (result.done) {
|
|
62
|
-
srcDone = true;
|
|
63
|
-
} else {
|
|
64
|
-
buffer.push(result.value);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const stream1: AsyncIterable<T> = {
|
|
70
|
-
async *[Symbol.asyncIterator]() {
|
|
71
|
-
while (true) {
|
|
72
|
-
await fillBuffer(consumer1Index);
|
|
73
|
-
|
|
74
|
-
if (consumer1Index >= buffer.length) {
|
|
75
|
-
if (srcDone) break;
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
yield buffer[consumer1Index];
|
|
80
|
-
consumer1Index++;
|
|
81
|
-
|
|
82
|
-
// Clean up buffer when both consumers have passed this point
|
|
83
|
-
const minIndex = Math.min(consumer1Index, consumer2Index);
|
|
84
|
-
if (minIndex > 100) { // Keep some buffer for efficiency
|
|
85
|
-
buffer.splice(0, minIndex - 100);
|
|
86
|
-
consumer1Index -= (minIndex - 100);
|
|
87
|
-
consumer2Index -= (minIndex - 100);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const stream2: AsyncIterable<T> = {
|
|
94
|
-
async *[Symbol.asyncIterator]() {
|
|
95
|
-
while (true) {
|
|
96
|
-
await fillBuffer(consumer2Index);
|
|
97
|
-
|
|
98
|
-
if (consumer2Index >= buffer.length) {
|
|
99
|
-
if (srcDone) break;
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
yield buffer[consumer2Index];
|
|
104
|
-
consumer2Index++;
|
|
105
|
-
|
|
106
|
-
// Clean up buffer when both consumers have passed this point
|
|
107
|
-
const minIndex = Math.min(consumer1Index, consumer2Index);
|
|
108
|
-
if (minIndex > 100) { // Keep some buffer for efficiency
|
|
109
|
-
buffer.splice(0, minIndex - 100);
|
|
110
|
-
consumer1Index -= (minIndex - 100);
|
|
111
|
-
consumer2Index -= (minIndex - 100);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
return [stream1, stream2];
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Add buffering to an async iterable with back-pressure
|
|
122
|
-
*/
|
|
123
|
-
export async function* buffered<T>(
|
|
124
|
-
src: AsyncIterable<T>,
|
|
125
|
-
maxBuffer: number
|
|
126
|
-
): AsyncIterable<T> {
|
|
127
|
-
const buffer: T[] = [];
|
|
128
|
-
const srcIterator = getAsyncIterator(src);
|
|
129
|
-
let srcDone = false;
|
|
130
|
-
let fillPromise: Promise<void> | null = null;
|
|
131
|
-
|
|
132
|
-
// Fill buffer in background
|
|
133
|
-
async function fillBuffer(): Promise<void> {
|
|
134
|
-
while (buffer.length < maxBuffer && !srcDone) {
|
|
135
|
-
const result = await srcIterator.next();
|
|
136
|
-
if (result.done) {
|
|
137
|
-
srcDone = true;
|
|
138
|
-
} else {
|
|
139
|
-
buffer.push(result.value);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Start initial fill
|
|
145
|
-
fillPromise = fillBuffer();
|
|
146
|
-
|
|
147
|
-
while (true) {
|
|
148
|
-
// Wait for buffer to have items or source to be done
|
|
149
|
-
await fillPromise;
|
|
150
|
-
|
|
151
|
-
if (buffer.length === 0 && srcDone) {
|
|
152
|
-
break;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
if (buffer.length > 0) {
|
|
156
|
-
const item = buffer.shift()!;
|
|
157
|
-
yield item;
|
|
158
|
-
|
|
159
|
-
// Start refilling buffer if below threshold
|
|
160
|
-
if (buffer.length < maxBuffer / 2 && !srcDone) {
|
|
161
|
-
fillPromise = fillBuffer();
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Take only the first N items from an async iterable
|
|
169
|
-
*/
|
|
170
|
-
export async function* take<T>(src: AsyncIterable<T>, count: number): AsyncIterable<T> {
|
|
171
|
-
let taken = 0;
|
|
172
|
-
for await (const item of src) {
|
|
173
|
-
if (taken >= count) break;
|
|
174
|
-
yield item;
|
|
175
|
-
taken++;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Skip the first N items from an async iterable
|
|
181
|
-
*/
|
|
182
|
-
export async function* skip<T>(src: AsyncIterable<T>, count: number): AsyncIterable<T> {
|
|
183
|
-
let skipped = 0;
|
|
184
|
-
for await (const item of src) {
|
|
185
|
-
if (skipped < count) {
|
|
186
|
-
skipped++;
|
|
187
|
-
continue;
|
|
188
|
-
}
|
|
189
|
-
yield item;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Count the number of items in an async iterable (consumes the iterable)
|
|
195
|
-
*/
|
|
196
|
-
export async function count<T>(src: AsyncIterable<T>): Promise<number> {
|
|
197
|
-
let total = 0;
|
|
198
|
-
for await (const _ of src) {
|
|
199
|
-
total++;
|
|
200
|
-
}
|
|
201
|
-
return total;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Collect all items from an async iterable into an array
|
|
206
|
-
* Use with caution on large iterables
|
|
207
|
-
*/
|
|
208
|
-
export async function collect<T>(src: AsyncIterable<T>): Promise<T[]> {
|
|
209
|
-
const result: T[] = [];
|
|
210
|
-
for await (const item of src) {
|
|
211
|
-
result.push(item);
|
|
212
|
-
}
|
|
213
|
-
return result;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Merge multiple async iterables into a single stream
|
|
218
|
-
* Items are yielded as soon as they become available from any source
|
|
219
|
-
*/
|
|
220
|
-
export async function* merge<T>(...sources: AsyncIterable<T>[]): AsyncIterable<T> {
|
|
221
|
-
const iterators = sources.map(src => getAsyncIterator(src));
|
|
222
|
-
const pending = new Map<number, Promise<IteratorResult<T>>>();
|
|
223
|
-
|
|
224
|
-
// Start initial reads
|
|
225
|
-
for (let i = 0; i < iterators.length; i++) {
|
|
226
|
-
pending.set(i, iterators[i].next());
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
while (pending.size > 0) {
|
|
230
|
-
// Wait for the first iterator to produce a result
|
|
231
|
-
const entries = Array.from(pending.entries());
|
|
232
|
-
const promises = entries.map(([index, promise]) =>
|
|
233
|
-
promise.then(result => ({ index, result }))
|
|
234
|
-
);
|
|
235
|
-
|
|
236
|
-
const { index, result } = await Promise.race(promises);
|
|
237
|
-
pending.delete(index);
|
|
238
|
-
|
|
239
|
-
if (!result.done) {
|
|
240
|
-
yield result.value;
|
|
241
|
-
// Start next read from this iterator
|
|
242
|
-
pending.set(index, iterators[index].next());
|
|
243
|
-
}
|
|
244
|
-
// If iterator is done, it's removed from pending and won't be read again
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* Convert an array to an async iterable
|
|
250
|
-
*/
|
|
251
|
-
export async function* fromArray<T>(items: readonly T[]): AsyncIterable<T> {
|
|
252
|
-
for (const item of items) {
|
|
253
|
-
yield item;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Add logging to an async iterable for debugging
|
|
259
|
-
*/
|
|
260
|
-
export async function* traced<T>(
|
|
261
|
-
src: AsyncIterable<T>,
|
|
262
|
-
name: string,
|
|
263
|
-
itemLogger?: (item: T, index: number) => string
|
|
264
|
-
): AsyncIterable<T> {
|
|
265
|
-
log('Starting trace for %s', name);
|
|
266
|
-
let index = 0;
|
|
267
|
-
|
|
268
|
-
try {
|
|
269
|
-
for await (const item of src) {
|
|
270
|
-
if (itemLogger) {
|
|
271
|
-
log('%s[%d]: %s', name, index, itemLogger(item, index));
|
|
272
|
-
} else {
|
|
273
|
-
log('%s[%d]: %O', name, index, item);
|
|
274
|
-
}
|
|
275
|
-
yield item;
|
|
276
|
-
index++;
|
|
277
|
-
}
|
|
278
|
-
log('Completed trace for %s (%d items)', name, index);
|
|
279
|
-
} catch (error) {
|
|
280
|
-
log('Error in trace for %s after %d items: %s', name, index, error);
|
|
281
|
-
throw error;
|
|
282
|
-
}
|
|
283
|
-
}
|