@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,16 +0,0 @@
|
|
|
1
|
-
import type { PlanNode } from '../nodes/plan-node.js';
|
|
2
|
-
import * as AST from '../../parser/ast.js';
|
|
3
|
-
|
|
4
|
-
// Create a javascript symbol that represents an ambiguous symbol.
|
|
5
|
-
export const Ambiguous = Symbol();
|
|
6
|
-
|
|
7
|
-
export type ReferenceCallback = (expression: AST.Expression, currentScope: Scope) => PlanNode;
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* The Scope object provides context for symbol resolution during query planning.
|
|
11
|
-
* It encapsulates the logic for looking up columns, parameters, functions, and CTEs
|
|
12
|
-
* based on the current position in the PlanNode tree.
|
|
13
|
-
*/
|
|
14
|
-
export interface Scope {
|
|
15
|
-
resolveSymbol(symbolKey: string, expression: AST.Expression): PlanNode | typeof Ambiguous | undefined;
|
|
16
|
-
}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Basic row and cost estimation utilities for plan nodes
|
|
3
|
-
* Used when more sophisticated statistics are not available
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { RelationalPlanNode } from '../nodes/plan-node.js';
|
|
7
|
-
import type { OptimizerTuning } from '../optimizer-tuning.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Basic row estimation heuristics
|
|
11
|
-
*/
|
|
12
|
-
export class BasicRowEstimator {
|
|
13
|
-
constructor(private readonly tuning: OptimizerTuning) {}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Estimate rows for a filter operation
|
|
17
|
-
* Default assumes 30% selectivity for most predicates
|
|
18
|
-
*/
|
|
19
|
-
estimateFilter(sourceRows: number): number {
|
|
20
|
-
return Math.max(1, Math.floor(sourceRows * 0.3));
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Estimate rows for a join operation
|
|
25
|
-
*/
|
|
26
|
-
estimateJoin(leftRows: number, rightRows: number, joinType: string): number {
|
|
27
|
-
switch (joinType.toLowerCase()) {
|
|
28
|
-
case 'inner':
|
|
29
|
-
// Inner join: assume moderate correlation
|
|
30
|
-
return Math.max(1, Math.floor(leftRows * rightRows * 0.1));
|
|
31
|
-
case 'left':
|
|
32
|
-
case 'left outer':
|
|
33
|
-
// Left join: at least as many as left side
|
|
34
|
-
return Math.max(leftRows, Math.floor(leftRows * rightRows * 0.1));
|
|
35
|
-
case 'right':
|
|
36
|
-
case 'right outer':
|
|
37
|
-
// Right join: at least as many as right side
|
|
38
|
-
return Math.max(rightRows, Math.floor(leftRows * rightRows * 0.1));
|
|
39
|
-
case 'full':
|
|
40
|
-
case 'full outer':
|
|
41
|
-
// Full outer join: sum minus overlap
|
|
42
|
-
return leftRows + rightRows - Math.floor(leftRows * rightRows * 0.1);
|
|
43
|
-
case 'cross':
|
|
44
|
-
// Cross join: cartesian product
|
|
45
|
-
return leftRows * rightRows;
|
|
46
|
-
default:
|
|
47
|
-
return Math.max(leftRows, rightRows);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Estimate rows for aggregation
|
|
53
|
-
*/
|
|
54
|
-
estimateAggregate(sourceRows: number, groupByCount: number): number {
|
|
55
|
-
if (groupByCount === 0) {
|
|
56
|
-
return 1; // Single aggregate row
|
|
57
|
-
}
|
|
58
|
-
// Assume reasonable grouping factor
|
|
59
|
-
const groupingFactor = Math.min(0.8, Math.max(0.1, groupByCount * 0.2));
|
|
60
|
-
return Math.max(1, Math.floor(sourceRows * groupingFactor));
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Estimate rows for distinct operation
|
|
65
|
-
*/
|
|
66
|
-
estimateDistinct(sourceRows: number): number {
|
|
67
|
-
// Assume moderate duplication - 70% unique rows
|
|
68
|
-
return Math.max(1, Math.floor(sourceRows * 0.7));
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Estimate rows for limit operation
|
|
73
|
-
*/
|
|
74
|
-
estimateLimit(sourceRows: number, limit: number, offset: number = 0): number {
|
|
75
|
-
return Math.min(sourceRows, Math.max(0, limit - offset));
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Get default row estimate when no information is available
|
|
80
|
-
*/
|
|
81
|
-
getDefaultEstimate(): number {
|
|
82
|
-
return this.tuning.defaultRowEstimate;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Helper to safely get row estimate from a relational node
|
|
88
|
-
*/
|
|
89
|
-
export function getRowEstimate(node: RelationalPlanNode, tuning: OptimizerTuning): number {
|
|
90
|
-
return node.estimatedRows ?? tuning.defaultRowEstimate;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Helper to set row estimate on a node if not already set
|
|
95
|
-
*/
|
|
96
|
-
export function ensureRowEstimate(node: RelationalPlanNode, estimate: number): void {
|
|
97
|
-
if (node.estimatedRows === undefined) {
|
|
98
|
-
// Use Object.defineProperty to set a non-enumerable property
|
|
99
|
-
// This maintains the immutability principle while adding metadata
|
|
100
|
-
Object.defineProperty(node, 'estimatedRows', {
|
|
101
|
-
value: estimate,
|
|
102
|
-
writable: false,
|
|
103
|
-
enumerable: true,
|
|
104
|
-
configurable: false
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
}
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Statistics provider abstraction for the Quereus optimizer
|
|
3
|
-
* Provides cardinality estimates and selectivity information for cost-based optimization
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { ScalarPlanNode } from '../nodes/plan-node.js';
|
|
7
|
-
import type { TableSchema } from '../../schema/table.js';
|
|
8
|
-
import { createLogger } from '../../common/logger.js';
|
|
9
|
-
|
|
10
|
-
const log = createLogger('optimizer:stats');
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Statistics provider interface for optimizer
|
|
14
|
-
*/
|
|
15
|
-
export interface StatsProvider {
|
|
16
|
-
/**
|
|
17
|
-
* Get estimated row count for a base table
|
|
18
|
-
* @param table Table schema
|
|
19
|
-
* @returns Estimated row count, or undefined if unknown
|
|
20
|
-
*/
|
|
21
|
-
tableRows(table: TableSchema): number | undefined;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Get selectivity estimate for a predicate on a table
|
|
25
|
-
* @param table Table schema
|
|
26
|
-
* @param predicate Predicate expression
|
|
27
|
-
* @returns Selectivity factor (0.0 to 1.0), or undefined if unknown
|
|
28
|
-
*/
|
|
29
|
-
selectivity(table: TableSchema, predicate: ScalarPlanNode): number | undefined;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Get join selectivity estimate
|
|
33
|
-
* @param leftTable Left table schema
|
|
34
|
-
* @param rightTable Right table schema
|
|
35
|
-
* @param joinCondition Join condition
|
|
36
|
-
* @returns Join selectivity factor, or undefined if unknown
|
|
37
|
-
*/
|
|
38
|
-
joinSelectivity?(leftTable: TableSchema, rightTable: TableSchema, joinCondition: ScalarPlanNode): number | undefined;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Get number of distinct values for a column
|
|
42
|
-
* @param table Table schema
|
|
43
|
-
* @param columnName Column name
|
|
44
|
-
* @returns Estimated distinct values, or undefined if unknown
|
|
45
|
-
*/
|
|
46
|
-
distinctValues?(table: TableSchema, columnName: string): number | undefined;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Get index selectivity information
|
|
50
|
-
* @param table Table schema
|
|
51
|
-
* @param indexName Index name (if applicable)
|
|
52
|
-
* @param predicate Predicate expression
|
|
53
|
-
* @returns Index selectivity factor, or undefined if unknown
|
|
54
|
-
*/
|
|
55
|
-
indexSelectivity?(table: TableSchema, indexName: string, predicate: ScalarPlanNode): number | undefined;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Naive statistics provider using simple heuristics
|
|
60
|
-
* Used as fallback when no better statistics are available
|
|
61
|
-
*/
|
|
62
|
-
export class NaiveStatsProvider implements StatsProvider {
|
|
63
|
-
constructor(
|
|
64
|
-
private readonly defaultTableRows: number = 1000,
|
|
65
|
-
private readonly defaultSelectivity: number = 0.3
|
|
66
|
-
) {
|
|
67
|
-
log('Created naive stats provider (defaultRows: %d, defaultSelectivity: %f)',
|
|
68
|
-
defaultTableRows, defaultSelectivity);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
tableRows(table: TableSchema): number | undefined {
|
|
72
|
-
// Use table's estimated rows if available, otherwise use default
|
|
73
|
-
const estimate = table.estimatedRows ?? this.defaultTableRows;
|
|
74
|
-
log('Table %s estimated rows: %d (source: %s)',
|
|
75
|
-
table.name, estimate, table.estimatedRows ? 'schema' : 'default');
|
|
76
|
-
return estimate;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
selectivity(table: TableSchema, predicate: ScalarPlanNode): number | undefined {
|
|
80
|
-
// Simple heuristics based on predicate type
|
|
81
|
-
const selectivity = this.estimatePredicateSelectivity(predicate);
|
|
82
|
-
log('Predicate selectivity for %s: %f', predicate.nodeType, selectivity);
|
|
83
|
-
return selectivity;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
joinSelectivity(leftTable: TableSchema, rightTable: TableSchema, _joinCondition: ScalarPlanNode): number | undefined {
|
|
87
|
-
// Default join selectivity based on table sizes
|
|
88
|
-
const leftRows = this.tableRows(leftTable) ?? this.defaultTableRows;
|
|
89
|
-
const rightRows = this.tableRows(rightTable) ?? this.defaultTableRows;
|
|
90
|
-
|
|
91
|
-
// Simple heuristic: smaller table determines selectivity
|
|
92
|
-
const selectivity = 1.0 / Math.max(leftRows, rightRows, 10);
|
|
93
|
-
log('Join selectivity between %s and %s: %f', leftTable.name, rightTable.name, selectivity);
|
|
94
|
-
return Math.min(0.5, selectivity);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
distinctValues(table: TableSchema, columnName: string): number | undefined {
|
|
98
|
-
const totalRows = this.tableRows(table);
|
|
99
|
-
if (!totalRows) return undefined;
|
|
100
|
-
|
|
101
|
-
// Heuristic: assume moderate cardinality (50% distinct values)
|
|
102
|
-
const distinct = Math.max(1, Math.floor(totalRows * 0.5));
|
|
103
|
-
log('Distinct values for %s.%s: %d', table.name, columnName, distinct);
|
|
104
|
-
return distinct;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
indexSelectivity(table: TableSchema, indexName: string, predicate: ScalarPlanNode): number | undefined {
|
|
108
|
-
// Index selectivity is generally better than table scan
|
|
109
|
-
const baseSelecivity = this.selectivity(table, predicate) ?? this.defaultSelectivity;
|
|
110
|
-
const indexSelectivity = baseSelecivity * 0.8; // 20% improvement with index
|
|
111
|
-
log('Index %s selectivity: %f (base: %f)', indexName, indexSelectivity, baseSelecivity);
|
|
112
|
-
return indexSelectivity;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
private estimatePredicateSelectivity(predicate: ScalarPlanNode): number {
|
|
116
|
-
// Simple heuristics based on node type
|
|
117
|
-
switch (predicate.nodeType) {
|
|
118
|
-
case 'BinaryOp':
|
|
119
|
-
// More selective for equality, less for ranges
|
|
120
|
-
return 0.1; // Equality-like operations
|
|
121
|
-
case 'In':
|
|
122
|
-
return 0.2; // IN clauses
|
|
123
|
-
case 'Between':
|
|
124
|
-
return 0.25; // Range queries
|
|
125
|
-
case 'Like':
|
|
126
|
-
return 0.3; // Pattern matching
|
|
127
|
-
case 'IsNull':
|
|
128
|
-
case 'IsNotNull':
|
|
129
|
-
return 0.1; // NULL checks are usually selective
|
|
130
|
-
default:
|
|
131
|
-
return this.defaultSelectivity;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Default statistics provider instance
|
|
138
|
-
*/
|
|
139
|
-
export const defaultStatsProvider = new NaiveStatsProvider();
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Create a custom statistics provider
|
|
143
|
-
*/
|
|
144
|
-
export function createStatsProvider(
|
|
145
|
-
tableRowsMap?: Map<string, number>,
|
|
146
|
-
selectivityMap?: Map<string, number>
|
|
147
|
-
): StatsProvider {
|
|
148
|
-
return new class implements StatsProvider {
|
|
149
|
-
tableRows(table: TableSchema): number | undefined {
|
|
150
|
-
return tableRowsMap?.get(table.name) ?? defaultStatsProvider.tableRows(table);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
selectivity(table: TableSchema, predicate: ScalarPlanNode): number | undefined {
|
|
154
|
-
const key = `${table.name}:${predicate.nodeType}`;
|
|
155
|
-
return selectivityMap?.get(key) ?? defaultStatsProvider.selectivity(table, predicate);
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import type { TableSchema } from '../schema/table.js';
|
|
2
|
-
import type { ColumnSchema } from '../schema/column.js';
|
|
3
|
-
import type { RelationType, ColumnDef, ScalarType, ColRef } from '../common/datatype.js';
|
|
4
|
-
import { SqlDataType, StatusCode, type DeepReadonly, type SqlValue } from '../common/types.js'; // Import SqlValue and ensure SqlDataType is not type-only
|
|
5
|
-
import type { AstNode } from '../parser/ast.js';
|
|
6
|
-
import { QuereusError } from '../common/errors.js';
|
|
7
|
-
import { inferLogicalTypeFromValue } from '../common/type-inference.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Converts a TableSchema (from src/schema/table.ts) to a RelationType (from src/common/datatype.ts).
|
|
11
|
-
* This is used by PlanNodes that source data directly from a base table.
|
|
12
|
-
*/
|
|
13
|
-
export function relationTypeFromTableSchema(tableSchema: TableSchema): RelationType {
|
|
14
|
-
const columnDefs: ColumnDef[] = tableSchema.columns.map((col: ColumnSchema) => {
|
|
15
|
-
return {
|
|
16
|
-
name: col.name,
|
|
17
|
-
type: {
|
|
18
|
-
typeClass: 'scalar',
|
|
19
|
-
logicalType: col.logicalType,
|
|
20
|
-
collationName: col.collation,
|
|
21
|
-
nullable: !col.notNull,
|
|
22
|
-
isReadOnly: false,
|
|
23
|
-
},
|
|
24
|
-
generated: col.generated,
|
|
25
|
-
};
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
// Populate keys from primaryKeyDefinition
|
|
29
|
-
const keys: ColRef[][] = [];
|
|
30
|
-
if (tableSchema.primaryKeyDefinition && tableSchema.primaryKeyDefinition.length > 0) {
|
|
31
|
-
const primaryKey: ColRef[] = tableSchema.primaryKeyDefinition.map(pkCol => ({
|
|
32
|
-
index: pkCol.index,
|
|
33
|
-
desc: pkCol.desc,
|
|
34
|
-
}));
|
|
35
|
-
keys.push(primaryKey);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return {
|
|
39
|
-
typeClass: 'relation',
|
|
40
|
-
isReadOnly: !!(tableSchema.isView || tableSchema.isTemporary),
|
|
41
|
-
isSet: true, // Base tables are sets by definition (enforced by primary keys)
|
|
42
|
-
columns: columnDefs,
|
|
43
|
-
keys: keys,
|
|
44
|
-
// TODO: Populate rowConstraints from tableSchema if/when RelationType supports them
|
|
45
|
-
rowConstraints: [], // Placeholder
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Creates a ScalarType for a given SqlValue, typically for parameters.
|
|
51
|
-
* @param value The SqlValue to determine the type for.
|
|
52
|
-
* @returns A ScalarType representing the inferred type of the value.
|
|
53
|
-
*/
|
|
54
|
-
export function getParameterScalarType(value: SqlValue): ScalarType {
|
|
55
|
-
const logicalType = inferLogicalTypeFromValue(value);
|
|
56
|
-
|
|
57
|
-
return {
|
|
58
|
-
typeClass: 'scalar',
|
|
59
|
-
logicalType,
|
|
60
|
-
nullable: true, // No guarantees about the value, so it's nullable
|
|
61
|
-
isReadOnly: true, // Parameters are read-only within the query execution context
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function checkColumnsAssignable(source: DeepReadonly<ColumnDef[]>, target: DeepReadonly<ColumnDef[]>, astNode?: AstNode): void {
|
|
66
|
-
if (source.length !== target.length) {
|
|
67
|
-
throw new QuereusError(`Column count mismatch ${(astNode ? astNode.type + ' clause' : '')}.`, StatusCode.ERROR, undefined, astNode?.loc?.start.line, astNode?.loc?.start.column);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export function checkRelationsAssignable(source: RelationType, target: RelationType, astNode?: AstNode): void {
|
|
72
|
-
return checkColumnsAssignable(source.columns, target.columns, astNode);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export function columnSchemaToDef(colName: string, colDef: ColumnSchema): ColumnDef {
|
|
76
|
-
return {
|
|
77
|
-
name: colName,
|
|
78
|
-
type: {
|
|
79
|
-
typeClass: 'scalar',
|
|
80
|
-
logicalType: colDef.logicalType,
|
|
81
|
-
collationName: colDef.collation,
|
|
82
|
-
nullable: !colDef.notNull,
|
|
83
|
-
isReadOnly: false,
|
|
84
|
-
},
|
|
85
|
-
generated: colDef.generated,
|
|
86
|
-
};
|
|
87
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import type { ColRef } from '../../common/datatype.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Project unique keys through a projection mapping.
|
|
5
|
-
* - sourceKeys: keys defined on the source relation (arrays of column refs by source column index)
|
|
6
|
-
* - projectionMap: mapping from source column index -> projected column index
|
|
7
|
-
* Returns keys that survive projection (all columns present), with indices remapped to output.
|
|
8
|
-
*/
|
|
9
|
-
export function projectKeys(sourceKeys: ReadonlyArray<ReadonlyArray<ColRef>>, projectionMap: ReadonlyMap<number, number>): ColRef[][] {
|
|
10
|
-
const result: ColRef[][] = [];
|
|
11
|
-
for (const key of sourceKeys) {
|
|
12
|
-
const projected: ColRef[] = [];
|
|
13
|
-
let missing = false;
|
|
14
|
-
for (const col of key) {
|
|
15
|
-
const projectedIndex = projectionMap.get(col.index);
|
|
16
|
-
if (projectedIndex === undefined) {
|
|
17
|
-
missing = true;
|
|
18
|
-
break;
|
|
19
|
-
}
|
|
20
|
-
projected.push({ index: projectedIndex, desc: col.desc });
|
|
21
|
-
}
|
|
22
|
-
if (!missing) {
|
|
23
|
-
result.push(projected);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return result;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Combine unique keys across a join.
|
|
31
|
-
* - For inner/cross joins: keys from left and right are preserved; right indices are shifted by left column count.
|
|
32
|
-
* - For outer joins: return [] conservatively (null padding may break uniqueness).
|
|
33
|
-
*/
|
|
34
|
-
export function combineJoinKeys(leftKeys: ReadonlyArray<ReadonlyArray<ColRef>>, rightKeys: ReadonlyArray<ReadonlyArray<ColRef>>, joinType: 'inner' | 'left' | 'right' | 'full' | 'cross', leftColumnCount: number): ColRef[][] {
|
|
35
|
-
if (joinType !== 'inner' && joinType !== 'cross') return [];
|
|
36
|
-
const result: ColRef[][] = [];
|
|
37
|
-
for (const key of leftKeys) {
|
|
38
|
-
result.push(key.map(c => ({ index: c.index, desc: c.desc })));
|
|
39
|
-
}
|
|
40
|
-
for (const key of rightKeys) {
|
|
41
|
-
result.push(key.map(c => ({ index: c.index + leftColumnCount, desc: c.desc })));
|
|
42
|
-
}
|
|
43
|
-
return result;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { QuereusError } from '../../common/errors.js';
|
|
2
|
-
import { StatusCode } from '../../common/types.js';
|
|
3
|
-
import type { ScalarPlanNode } from '../nodes/plan-node.js';
|
|
4
|
-
import { createLogger } from '../../common/logger.js';
|
|
5
|
-
|
|
6
|
-
const log = createLogger('planner:validation:determinism');
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Result of determinism validation. If valid, `error` is undefined.
|
|
10
|
-
* If invalid, contains the information needed to construct an error message.
|
|
11
|
-
*/
|
|
12
|
-
export interface DeterminismValidationResult {
|
|
13
|
-
/** True if the expression is deterministic */
|
|
14
|
-
valid: boolean;
|
|
15
|
-
/** String representation of the offending expression (if invalid) */
|
|
16
|
-
expression?: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Checks if an expression is deterministic (suitable for constraints and defaults).
|
|
21
|
-
* Returns a result object instead of throwing, allowing the caller to decide how to handle.
|
|
22
|
-
*
|
|
23
|
-
* @param expr The expression plan node to check
|
|
24
|
-
* @returns Validation result indicating if deterministic
|
|
25
|
-
*/
|
|
26
|
-
export function checkDeterministic(expr: ScalarPlanNode): DeterminismValidationResult {
|
|
27
|
-
const physical = expr.physical;
|
|
28
|
-
|
|
29
|
-
if (physical.deterministic === false) {
|
|
30
|
-
log('Non-deterministic expression detected: %s', expr.toString());
|
|
31
|
-
return {
|
|
32
|
-
valid: false,
|
|
33
|
-
expression: expr.toString()
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return { valid: true };
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Validates that an expression is deterministic (suitable for constraints and defaults).
|
|
42
|
-
* Non-deterministic expressions must be passed via mutation context instead.
|
|
43
|
-
*
|
|
44
|
-
* @param expr The expression plan node to validate
|
|
45
|
-
* @param context Description of where the expression is used (e.g., "DEFAULT for column 'created_at'")
|
|
46
|
-
* @throws QuereusError if the expression is non-deterministic
|
|
47
|
-
*/
|
|
48
|
-
export function validateDeterministicExpression(
|
|
49
|
-
expr: ScalarPlanNode,
|
|
50
|
-
context: string
|
|
51
|
-
): void {
|
|
52
|
-
log('Validating determinism for: %s', context);
|
|
53
|
-
|
|
54
|
-
const result = checkDeterministic(expr);
|
|
55
|
-
|
|
56
|
-
if (!result.valid) {
|
|
57
|
-
throw new QuereusError(
|
|
58
|
-
`Non-deterministic expression not allowed in ${context}. ` +
|
|
59
|
-
`Expression: ${result.expression}. ` +
|
|
60
|
-
`Use mutation context to pass non-deterministic values (e.g., WITH CONTEXT (timestamp = datetime('now'))).`,
|
|
61
|
-
StatusCode.ERROR
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
log('Expression is deterministic: %s', expr.toString());
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Validates that a CHECK constraint expression is deterministic.
|
|
70
|
-
*
|
|
71
|
-
* @param expr The constraint expression plan node
|
|
72
|
-
* @param constraintName The name of the constraint (for error messages)
|
|
73
|
-
* @param tableName The name of the table (for error messages)
|
|
74
|
-
* @throws QuereusError if the expression is non-deterministic
|
|
75
|
-
*/
|
|
76
|
-
export function validateDeterministicConstraint(
|
|
77
|
-
expr: ScalarPlanNode,
|
|
78
|
-
constraintName: string,
|
|
79
|
-
tableName: string
|
|
80
|
-
): void {
|
|
81
|
-
validateDeterministicExpression(
|
|
82
|
-
expr,
|
|
83
|
-
`CHECK constraint '${constraintName}' on table '${tableName}'`
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Validates that a DEFAULT expression is deterministic.
|
|
89
|
-
*
|
|
90
|
-
* @param expr The default value expression plan node
|
|
91
|
-
* @param columnName The name of the column (for error messages)
|
|
92
|
-
* @param tableName The name of the table (for error messages)
|
|
93
|
-
* @throws QuereusError if the expression is non-deterministic
|
|
94
|
-
*/
|
|
95
|
-
export function validateDeterministicDefault(
|
|
96
|
-
expr: ScalarPlanNode,
|
|
97
|
-
columnName: string,
|
|
98
|
-
tableName: string
|
|
99
|
-
): void {
|
|
100
|
-
validateDeterministicExpression(
|
|
101
|
-
expr,
|
|
102
|
-
`DEFAULT for column '${columnName}' in table '${tableName}'`
|
|
103
|
-
);
|
|
104
|
-
}
|