@quereus/quereus 0.7.3 → 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
package/src/core/param.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { ScalarType } from '../common/datatype.js';
|
|
2
|
-
import { type SqlParameters, type SqlValue } from '../common/types.js';
|
|
3
|
-
import { inferLogicalTypeFromValue } from '../common/type-inference.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Generate type hints for parameters based on their JavaScript values.
|
|
7
|
-
* This is used during planning to assign strong types to parameters.
|
|
8
|
-
*
|
|
9
|
-
* Type inference rules:
|
|
10
|
-
* - null → NULL
|
|
11
|
-
* - number (integer) → INTEGER
|
|
12
|
-
* - number (float) → REAL
|
|
13
|
-
* - bigint → INTEGER
|
|
14
|
-
* - boolean → BOOLEAN
|
|
15
|
-
* - string → TEXT
|
|
16
|
-
* - Uint8Array → BLOB
|
|
17
|
-
*
|
|
18
|
-
* @param params The parameter values (positional array or named object)
|
|
19
|
-
* @returns Map of parameter keys to their inferred ScalarTypes
|
|
20
|
-
*/
|
|
21
|
-
export function getParameterTypes(params: SqlParameters | undefined): Map<string | number, ScalarType> | undefined {
|
|
22
|
-
let results: Map<string | number, ScalarType> | undefined;
|
|
23
|
-
if (params) {
|
|
24
|
-
results = new Map<string | number, ScalarType>();
|
|
25
|
-
if (Array.isArray(params)) {
|
|
26
|
-
params.forEach((paramValue, index) => {
|
|
27
|
-
// ParameterScope resolves '?' to 1-based indices internally when it sees the AST node.
|
|
28
|
-
// The hints should be keyed by these 1-based indices for anonymous params.
|
|
29
|
-
results!.set(index + 1, getParameterScalarType(paramValue));
|
|
30
|
-
});
|
|
31
|
-
} else {
|
|
32
|
-
Object.entries(params).forEach(([key, value]) => {
|
|
33
|
-
// For named params like ':name', ParameterScope expects 'name' as key for hints.
|
|
34
|
-
results!.set(key.startsWith(':') ? key.substring(1) : key, getParameterScalarType(value));
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return results;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Infer the ScalarType for a parameter value based on its JavaScript type.
|
|
43
|
-
*
|
|
44
|
-
* @param value The parameter value
|
|
45
|
-
* @returns The inferred ScalarType
|
|
46
|
-
*/
|
|
47
|
-
function getParameterScalarType(value: SqlValue): ScalarType {
|
|
48
|
-
const logicalType = inferLogicalTypeFromValue(value);
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
typeClass: 'scalar',
|
|
52
|
-
logicalType,
|
|
53
|
-
nullable: value === null,
|
|
54
|
-
isReadOnly: true,
|
|
55
|
-
};
|
|
56
|
-
}
|
package/src/core/statement.ts
DELETED
|
@@ -1,528 +0,0 @@
|
|
|
1
|
-
import { createLogger } from '../common/logger.js';
|
|
2
|
-
import { type SqlValue, StatusCode, type Row, type SqlParameters, type DeepReadonly } from '../common/types.js';
|
|
3
|
-
import { MisuseError, QuereusError } from '../common/errors.js';
|
|
4
|
-
import type { Database } from './database.js';
|
|
5
|
-
import { isRelationType, type ColumnDef, type ScalarType } from '../common/datatype.js';
|
|
6
|
-
import { Parser, ParseError } from '../parser/parser.js';
|
|
7
|
-
import type { Statement as ASTStatement } from '../parser/ast.js';
|
|
8
|
-
import type { BlockNode } from '../planner/nodes/block.js';
|
|
9
|
-
import { emitPlanNode } from '../runtime/emitters.js';
|
|
10
|
-
import { Scheduler } from '../runtime/scheduler.js';
|
|
11
|
-
import type { RuntimeContext } from '../runtime/types.js';
|
|
12
|
-
import { Cached } from '../util/cached.js';
|
|
13
|
-
import { isAsyncIterable } from '../runtime/utils.js';
|
|
14
|
-
import { generateInstructionProgram, serializePlanTree } from '../planner/debug.js';
|
|
15
|
-
import { EmissionContext } from '../runtime/emission-context.js';
|
|
16
|
-
import type { SchemaDependency } from '../planner/planning-context.js';
|
|
17
|
-
import { getParameterTypes } from './param.js';
|
|
18
|
-
import { getPhysicalType, physicalTypeName } from '../types/logical-type.js';
|
|
19
|
-
|
|
20
|
-
const log = createLogger('core:statement');
|
|
21
|
-
const errorLog = log.extend('error');
|
|
22
|
-
const warnLog = log.extend('warn');
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Represents a prepared SQL statement.
|
|
26
|
-
*/
|
|
27
|
-
export class Statement {
|
|
28
|
-
public readonly db: Database;
|
|
29
|
-
public readonly originalSql: string;
|
|
30
|
-
public readonly astBatch: ASTStatement[];
|
|
31
|
-
private astBatchIndex: number = -1;
|
|
32
|
-
private finalized = false;
|
|
33
|
-
private busy = false;
|
|
34
|
-
private boundArgs: Record<number | string, SqlValue> = {};
|
|
35
|
-
private plan: BlockNode | null = null;
|
|
36
|
-
private emissionContext: EmissionContext | null = null;
|
|
37
|
-
private needsCompile = true;
|
|
38
|
-
private columnDefCache = new Cached<DeepReadonly<ColumnDef>[]>(() => this.getColumnDefs());
|
|
39
|
-
private schemaChangeUnsubscriber: (() => void) | null = null;
|
|
40
|
-
/** Parameter types established at prepare time (either explicit or inferred from initial values) */
|
|
41
|
-
private parameterTypes: Map<string | number, ScalarType> | undefined = undefined;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* @internal - Use db.prepare().
|
|
45
|
-
* The `sqlOrAstBatch` can be a single SQL string (parsed internally) or a pre-parsed batch.
|
|
46
|
-
* `initialAstIndex` is for internal use when db.prepare might create one Statement per AST in a batch.
|
|
47
|
-
* `paramsOrTypes` can be initial parameter values (to infer types) or explicit types.
|
|
48
|
-
*/
|
|
49
|
-
constructor(
|
|
50
|
-
db: Database,
|
|
51
|
-
sqlOrAstBatch: string | ASTStatement[],
|
|
52
|
-
initialAstIndex: number = 0,
|
|
53
|
-
paramsOrTypes?: SqlParameters | SqlValue[] | Map<string | number, ScalarType>
|
|
54
|
-
) {
|
|
55
|
-
this.db = db;
|
|
56
|
-
if (typeof sqlOrAstBatch === 'string') {
|
|
57
|
-
this.originalSql = sqlOrAstBatch;
|
|
58
|
-
const parser = new Parser();
|
|
59
|
-
try {
|
|
60
|
-
this.astBatch = parser.parseAll(this.originalSql);
|
|
61
|
-
} catch (e) {
|
|
62
|
-
if (e instanceof ParseError) throw new QuereusError(`Parse error: ${e.message}`, StatusCode.ERROR, e);
|
|
63
|
-
throw e;
|
|
64
|
-
}
|
|
65
|
-
} else {
|
|
66
|
-
this.astBatch = sqlOrAstBatch;
|
|
67
|
-
// Try to reconstruct originalSql if possible, or set a generic name
|
|
68
|
-
this.originalSql = this.astBatch.map(s => s.toString()).join('; '); // TODO: replace with better AST stringification
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Handle explicit parameter types or initial values
|
|
72
|
-
if (paramsOrTypes instanceof Map) {
|
|
73
|
-
// Explicit parameter types provided
|
|
74
|
-
this.parameterTypes = paramsOrTypes;
|
|
75
|
-
} else if (paramsOrTypes !== undefined) {
|
|
76
|
-
// Initial parameter values - infer types and bind them
|
|
77
|
-
this.parameterTypes = getParameterTypes(paramsOrTypes);
|
|
78
|
-
// Also bind the initial values
|
|
79
|
-
if (Array.isArray(paramsOrTypes)) {
|
|
80
|
-
paramsOrTypes.forEach((value, index) => {
|
|
81
|
-
this.boundArgs[index + 1] = value;
|
|
82
|
-
});
|
|
83
|
-
} else {
|
|
84
|
-
Object.assign(this.boundArgs, paramsOrTypes);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (this.astBatch.length === 0 && initialAstIndex === 0) {
|
|
89
|
-
// No statements to run, effectively. nextStatement will return false.
|
|
90
|
-
this.astBatchIndex = -1;
|
|
91
|
-
this.needsCompile = false;
|
|
92
|
-
} else if (initialAstIndex >= 0 && initialAstIndex < this.astBatch.length) {
|
|
93
|
-
this.astBatchIndex = initialAstIndex;
|
|
94
|
-
this.needsCompile = true; // Start by needing to compile the first indicated statement
|
|
95
|
-
} else {
|
|
96
|
-
throw new MisuseError("Initial AST index out of bounds for provided batch.");
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/** Advances to the next statement in the batch. Returns false if no more statements. */
|
|
101
|
-
public nextStatement(): boolean {
|
|
102
|
-
this.validateStatement("advance from");
|
|
103
|
-
if (this.busy) throw new MisuseError("Statement busy, reset or complete current iteration first.");
|
|
104
|
-
if (this.astBatchIndex < this.astBatch.length - 1) {
|
|
105
|
-
this.astBatchIndex++;
|
|
106
|
-
this.plan = null;
|
|
107
|
-
this.emissionContext = null;
|
|
108
|
-
this.needsCompile = true;
|
|
109
|
-
this.columnDefCache.clear();
|
|
110
|
-
this.parameterTypes = undefined;
|
|
111
|
-
return true;
|
|
112
|
-
} else {
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/** Returns the SQL fragment for the current statement, if available. */
|
|
118
|
-
public getBlockSql(): string {
|
|
119
|
-
if (this.astBatchIndex < 0 || this.astBatchIndex >= this.astBatch.length) {
|
|
120
|
-
return "";
|
|
121
|
-
}
|
|
122
|
-
return this.getAstStatement().toString(); // TODO: replace with better AST stringification
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/** @internal Plans the current AST statement */
|
|
126
|
-
public compile(): BlockNode {
|
|
127
|
-
if (this.plan && !this.needsCompile) return this.plan;
|
|
128
|
-
|
|
129
|
-
this.validateStatement("compile/plan");
|
|
130
|
-
this.columnDefCache.clear();
|
|
131
|
-
|
|
132
|
-
log("Planning current statement (new runtime): %s", this.getBlockSql().substring(0, 100));
|
|
133
|
-
let plan: BlockNode | undefined;
|
|
134
|
-
try {
|
|
135
|
-
const currentAst = this.getAstStatement();
|
|
136
|
-
|
|
137
|
-
// On first compilation, establish the parameter types
|
|
138
|
-
// Use explicit types if provided, otherwise infer from bound args
|
|
139
|
-
if (this.parameterTypes === undefined) {
|
|
140
|
-
// Infer types from current bound args
|
|
141
|
-
this.parameterTypes = getParameterTypes(this.boundArgs);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Pass parameter types directly to planning
|
|
145
|
-
const planResult = this.db._buildPlan([currentAst], this.parameterTypes);
|
|
146
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
147
|
-
const dependencies = (planResult as any).schemaDependencies; // Extract dependencies from planning context
|
|
148
|
-
plan = this.db.optimizer.optimize(planResult, this.db) as BlockNode;
|
|
149
|
-
|
|
150
|
-
// Set up schema change invalidation if we have dependencies
|
|
151
|
-
if (dependencies && dependencies.hasAnyDependencies()) {
|
|
152
|
-
// Remove any existing listener
|
|
153
|
-
if (this.schemaChangeUnsubscriber) {
|
|
154
|
-
this.schemaChangeUnsubscriber();
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Add new listener for schema changes that affect our dependencies
|
|
158
|
-
this.schemaChangeUnsubscriber = this.db.schemaManager.getChangeNotifier().addListener(event => {
|
|
159
|
-
// Map event type to dependency type
|
|
160
|
-
let dependencyType: string;
|
|
161
|
-
if (event.type.startsWith('table_')) {
|
|
162
|
-
dependencyType = 'table';
|
|
163
|
-
} else if (event.type.startsWith('function_')) {
|
|
164
|
-
dependencyType = 'function';
|
|
165
|
-
} else if (event.type.startsWith('module_')) {
|
|
166
|
-
dependencyType = 'vtab_module';
|
|
167
|
-
} else if (event.type.startsWith('collation_')) {
|
|
168
|
-
dependencyType = 'collation';
|
|
169
|
-
} else {
|
|
170
|
-
return; // Unknown event type
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Check if this change affects any of our dependencies
|
|
174
|
-
const planDependencies = dependencies.getDependencies();
|
|
175
|
-
const affectedDependency = planDependencies.find((dep: SchemaDependency) =>
|
|
176
|
-
dep.type === dependencyType &&
|
|
177
|
-
dep.objectName === event.objectName &&
|
|
178
|
-
(!dep.schemaName || dep.schemaName === event.schemaName)
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
if (affectedDependency) {
|
|
182
|
-
log('Schema change invalidated plan for statement: %s %s', event.type, event.objectName);
|
|
183
|
-
this.needsCompile = true;
|
|
184
|
-
this.plan = null;
|
|
185
|
-
this.emissionContext = null;
|
|
186
|
-
this.columnDefCache.clear();
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
this.needsCompile = false;
|
|
192
|
-
log("Planning complete for current statement.");
|
|
193
|
-
} catch (e) {
|
|
194
|
-
errorLog("Planning failed for current statement: %O", e);
|
|
195
|
-
if (e instanceof QuereusError) throw e;
|
|
196
|
-
if (e instanceof Error) throw new QuereusError(`Planning error: ${e.message}`, StatusCode.INTERNAL, e);
|
|
197
|
-
throw new QuereusError("Unknown planning error", StatusCode.INTERNAL);
|
|
198
|
-
}
|
|
199
|
-
if (!plan) throw new QuereusError("Planning resulted in no plan for current statement", StatusCode.INTERNAL);
|
|
200
|
-
this.plan = plan;
|
|
201
|
-
return plan;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/** @internal Gets or creates the emission context for this statement */
|
|
205
|
-
private getEmissionContext(): EmissionContext {
|
|
206
|
-
if (!this.emissionContext) {
|
|
207
|
-
this.emissionContext = new EmissionContext(this.db);
|
|
208
|
-
}
|
|
209
|
-
return this.emissionContext;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Binds a user-provided argument value to a declared parameter name/index for the current statement.
|
|
214
|
-
*/
|
|
215
|
-
bind(key: number | string, value: SqlValue): this {
|
|
216
|
-
this.validateStatement("bind argument for");
|
|
217
|
-
if (this.busy) throw new MisuseError("Statement busy, reset first");
|
|
218
|
-
if (typeof key === 'number') {
|
|
219
|
-
if (key < 1) throw new RangeError(`Argument index ${key} out of range (must be >= 1)`);
|
|
220
|
-
this.boundArgs[key] = value;
|
|
221
|
-
} else if (typeof key === 'string') {
|
|
222
|
-
this.boundArgs[key] = value;
|
|
223
|
-
} else {
|
|
224
|
-
throw new MisuseError("Invalid argument key type");
|
|
225
|
-
}
|
|
226
|
-
return this;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Binds all user-provided argument values for the current statement.
|
|
231
|
-
*/
|
|
232
|
-
bindAll(args: SqlParameters | SqlValue[]): this {
|
|
233
|
-
this.validateStatement("bind all parameters for");
|
|
234
|
-
if (this.busy) throw new MisuseError("Statement busy, reset first");
|
|
235
|
-
this.boundArgs = {};
|
|
236
|
-
if (Array.isArray(args)) {
|
|
237
|
-
// Convert array to object with 1-based keys to match parameter indexing
|
|
238
|
-
const convertedArgs: Record<string, SqlValue> = {};
|
|
239
|
-
args.forEach((value, index) => {
|
|
240
|
-
convertedArgs[String(index + 1)] = value; // 1-based indexing
|
|
241
|
-
});
|
|
242
|
-
Object.assign(this.boundArgs, convertedArgs);
|
|
243
|
-
} else if (typeof args === 'object' && args !== null) {
|
|
244
|
-
Object.assign(this.boundArgs, args);
|
|
245
|
-
} else {
|
|
246
|
-
throw new MisuseError("Invalid parameters type for bindAll. Use array or object.");
|
|
247
|
-
}
|
|
248
|
-
return this;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/** Checks if the current statement, when executed, is expected to produce rows. */
|
|
252
|
-
public isQuery(): boolean {
|
|
253
|
-
this.validateStatement("check if query");
|
|
254
|
-
const blockPlan = this.compile();
|
|
255
|
-
if (!blockPlan || blockPlan.statements.length === 0) return false;
|
|
256
|
-
const lastStatementInBlock = blockPlan.statements[blockPlan.statements.length - 1];
|
|
257
|
-
const relationType = lastStatementInBlock.getType();
|
|
258
|
-
return isRelationType(relationType);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
async *iterateRows(params?: SqlParameters | SqlValue[]): AsyncIterable<Row> {
|
|
262
|
-
this.validateStatement("iterate rows for");
|
|
263
|
-
if (this.busy) throw new MisuseError("Statement busy, another iteration may be in progress or reset needed.");
|
|
264
|
-
|
|
265
|
-
if (params) this.bindAll(params);
|
|
266
|
-
|
|
267
|
-
// Validate parameter types before execution
|
|
268
|
-
this.validateParameterTypes();
|
|
269
|
-
|
|
270
|
-
this.busy = true;
|
|
271
|
-
try {
|
|
272
|
-
const blockPlanNode = this.compile();
|
|
273
|
-
if (!blockPlanNode.statements.length) return;
|
|
274
|
-
|
|
275
|
-
const emissionContext = this.getEmissionContext();
|
|
276
|
-
const rootInstruction = emitPlanNode(blockPlanNode, emissionContext);
|
|
277
|
-
const scheduler = new Scheduler(rootInstruction);
|
|
278
|
-
const runtimeCtx: RuntimeContext = {
|
|
279
|
-
db: this.db,
|
|
280
|
-
stmt: this,
|
|
281
|
-
params: this.boundArgs,
|
|
282
|
-
context: new Map(),
|
|
283
|
-
tableContexts: new Map(),
|
|
284
|
-
tracer: this.db.getInstructionTracer(),
|
|
285
|
-
enableMetrics: Boolean(this.db.getOption('runtime_metrics')),
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
const results = await scheduler.run(runtimeCtx);
|
|
289
|
-
if (results) {
|
|
290
|
-
if (Array.isArray(results) && results.length) {
|
|
291
|
-
const lastStatementOutput = results[results.length - 1];
|
|
292
|
-
if (isAsyncIterable(lastStatementOutput)) {
|
|
293
|
-
yield* lastStatementOutput as AsyncIterable<Row>;
|
|
294
|
-
}
|
|
295
|
-
} else if (isAsyncIterable(results)) {
|
|
296
|
-
yield* results as AsyncIterable<Row>;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
300
|
-
} catch (e: any) {
|
|
301
|
-
errorLog('Runtime execution failed in iterateRows for current statement: %O', e);
|
|
302
|
-
if (e instanceof QuereusError) throw e;
|
|
303
|
-
throw new QuereusError(`Execution error: ${e.message}`, StatusCode.ERROR, e);
|
|
304
|
-
} finally {
|
|
305
|
-
this.busy = false;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
getColumnNames(): string[] {
|
|
310
|
-
this.validateStatement("get column names for");
|
|
311
|
-
return this.columnDefCache.value.map(col => col.name);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/**
|
|
315
|
-
* Resets the prepared statement to its initial state, ready to be re-executed.
|
|
316
|
-
*/
|
|
317
|
-
async reset(): Promise<void> {
|
|
318
|
-
this.validateStatement("reset");
|
|
319
|
-
if (this.busy) {
|
|
320
|
-
warnLog("Statement reset while busy. Iteration may not have completed.");
|
|
321
|
-
}
|
|
322
|
-
this.busy = false;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Clears all bound parameter values.
|
|
327
|
-
* Note: This does NOT trigger recompilation - parameter types are preserved.
|
|
328
|
-
*/
|
|
329
|
-
clearBindings(): this {
|
|
330
|
-
this.validateStatement("clear bindings for");
|
|
331
|
-
if (this.busy) throw new MisuseError("Statement busy, reset first");
|
|
332
|
-
this.boundArgs = {};
|
|
333
|
-
// Don't set needsCompile - parameter types are preserved
|
|
334
|
-
return this;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* Finalizes the statement, releasing associated resources.
|
|
339
|
-
*/
|
|
340
|
-
async finalize(): Promise<void> {
|
|
341
|
-
if (this.finalized) return;
|
|
342
|
-
this.finalized = true;
|
|
343
|
-
this.busy = false;
|
|
344
|
-
this.boundArgs = {};
|
|
345
|
-
this.plan = null;
|
|
346
|
-
this.emissionContext = null;
|
|
347
|
-
this.columnDefCache.clear();
|
|
348
|
-
this.astBatchIndex = -1;
|
|
349
|
-
|
|
350
|
-
// Clean up schema change listener
|
|
351
|
-
if (this.schemaChangeUnsubscriber) {
|
|
352
|
-
this.schemaChangeUnsubscriber();
|
|
353
|
-
this.schemaChangeUnsubscriber = null;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
this.db._statementFinalized(this);
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* Executes the prepared statement with the given parameters until completion.
|
|
361
|
-
*/
|
|
362
|
-
async run(params?: SqlParameters | SqlValue[]): Promise<void> {
|
|
363
|
-
this.validateStatement("run");
|
|
364
|
-
for await (const _ of this.iterateRows(params)) { /* Consume */ }
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
/**
|
|
368
|
-
* Executes the prepared statement, binds parameters, and retrieves the first result row.
|
|
369
|
-
*/
|
|
370
|
-
async get(params?: SqlParameters | SqlValue[]): Promise<Record<string, SqlValue> | undefined> {
|
|
371
|
-
this.validateStatement("get first row for");
|
|
372
|
-
const names = this.getColumnNames();
|
|
373
|
-
for await (const rowArray of this.iterateRows(params)) {
|
|
374
|
-
const rowObject = rowArray.reduce((obj, val, idx) => {
|
|
375
|
-
obj[names[idx] || `col_${idx}`] = val;
|
|
376
|
-
return obj;
|
|
377
|
-
}, {} as Record<string, SqlValue>);
|
|
378
|
-
return rowObject;
|
|
379
|
-
}
|
|
380
|
-
return undefined;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* Executes the prepared statement, binds parameters, and retrieves all result rows.
|
|
385
|
-
*/
|
|
386
|
-
async *all(params?: SqlParameters | SqlValue[]): AsyncIterable<Record<string, SqlValue>> {
|
|
387
|
-
this.validateStatement("get all rows for");
|
|
388
|
-
const names = this.getColumnNames();
|
|
389
|
-
for await (const rowArray of this.iterateRows(params)) {
|
|
390
|
-
const rowObject = rowArray.reduce((obj, val, idx) => {
|
|
391
|
-
obj[names[idx] || `col_${idx}`] = val;
|
|
392
|
-
return obj;
|
|
393
|
-
}, {} as Record<string, SqlValue>);
|
|
394
|
-
yield rowObject;
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
/**
|
|
399
|
-
* Gets the parameters required by the current statement.
|
|
400
|
-
*/
|
|
401
|
-
getParameters(): SqlParameters {
|
|
402
|
-
this.validateStatement("get parameters for");
|
|
403
|
-
const blockPlan = this.compile();
|
|
404
|
-
return { ...blockPlan.parameters };
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Gets the data type of a column in the current row.
|
|
409
|
-
*/
|
|
410
|
-
getColumnType(index: number): Readonly<ScalarType> {
|
|
411
|
-
this.validateStatement("get column type for");
|
|
412
|
-
const columnDefs = this.columnDefCache.value;
|
|
413
|
-
if (index < 0 || index >= columnDefs.length) {
|
|
414
|
-
throw new RangeError(`Column index ${index} out of range.`);
|
|
415
|
-
}
|
|
416
|
-
return columnDefs[index].type;
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
/**
|
|
420
|
-
* Gets the name of a column by its index.
|
|
421
|
-
*/
|
|
422
|
-
getColumnName(index: number): string {
|
|
423
|
-
this.validateStatement("get column name for");
|
|
424
|
-
const names = this.getColumnNames();
|
|
425
|
-
if (index < 0 || index >= names.length) {
|
|
426
|
-
throw new RangeError(`Column index ${index} out of range (0-${names.length - 1})`);
|
|
427
|
-
}
|
|
428
|
-
return names[index];
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
getColumnDefs(): DeepReadonly<ColumnDef>[] {
|
|
432
|
-
if (!this.plan) {
|
|
433
|
-
if (this.astBatchIndex >= 0 && this.astBatchIndex < this.astBatch.length && this.needsCompile) {
|
|
434
|
-
try { this.compile(); } catch { /*ignore compile error for _getColumnDefs, return empty */ }
|
|
435
|
-
}
|
|
436
|
-
if (!this.plan) return [];
|
|
437
|
-
}
|
|
438
|
-
const lastStatementPlanInBlock = this.plan.statements[this.plan.statements.length - 1];
|
|
439
|
-
if (lastStatementPlanInBlock) {
|
|
440
|
-
const relationType = lastStatementPlanInBlock.getType();
|
|
441
|
-
if (isRelationType(relationType) && relationType.columns) {
|
|
442
|
-
return [...relationType.columns];
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
return [];
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
private validateStatement(operation: string): void {
|
|
449
|
-
if (this.finalized) throw new MisuseError("Statement finalized");
|
|
450
|
-
if (this.astBatchIndex < 0 || this.astBatchIndex >= this.astBatch.length) {
|
|
451
|
-
throw new MisuseError(`No current statement selected to ${operation}. Call nextStatement() first or ensure SQL was not empty.`);
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
private getAstStatement(): ASTStatement {
|
|
456
|
-
this.validateStatement("get AST for");
|
|
457
|
-
return this.astBatch[this.astBatchIndex];
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
/**
|
|
461
|
-
* Validates that bound parameters match the expected types from compilation.
|
|
462
|
-
* Validates that the JavaScript value is compatible with the physical type of the declared logical type.
|
|
463
|
-
* @throws QuereusError if parameter types don't match
|
|
464
|
-
*/
|
|
465
|
-
private validateParameterTypes(): void {
|
|
466
|
-
if (!this.parameterTypes) return; // No parameter types established yet
|
|
467
|
-
|
|
468
|
-
for (const [key, expectedType] of this.parameterTypes.entries()) {
|
|
469
|
-
const value = this.boundArgs[key];
|
|
470
|
-
|
|
471
|
-
// Allow undefined/missing parameters (they'll be caught at runtime if required)
|
|
472
|
-
if (value === undefined) continue;
|
|
473
|
-
|
|
474
|
-
// NULL is compatible with any nullable type
|
|
475
|
-
if (value === null) {
|
|
476
|
-
if (!expectedType.nullable) {
|
|
477
|
-
throw new QuereusError(
|
|
478
|
-
`Parameter type mismatch for ${typeof key === 'number' ? `?${key}` : `:${key}`}: ` +
|
|
479
|
-
`expected non-nullable ${expectedType.logicalType.name}, got NULL`,
|
|
480
|
-
StatusCode.MISMATCH
|
|
481
|
-
);
|
|
482
|
-
}
|
|
483
|
-
continue;
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
// Get the physical type of the declared logical type
|
|
487
|
-
const expectedPhysicalType = expectedType.logicalType.physicalType;
|
|
488
|
-
|
|
489
|
-
// Get the physical type directly from the JavaScript value
|
|
490
|
-
const actualPhysicalType = getPhysicalType(value);
|
|
491
|
-
|
|
492
|
-
// Check if physical types are compatible
|
|
493
|
-
if (actualPhysicalType !== expectedPhysicalType) {
|
|
494
|
-
throw new QuereusError(
|
|
495
|
-
`Parameter type mismatch for ${typeof key === 'number' ? `?${key}` : `:${key}`}: ` +
|
|
496
|
-
`expected ${expectedType.logicalType.name} (physical: ${physicalTypeName(expectedPhysicalType)}), ` +
|
|
497
|
-
`got value with physical type ${physicalTypeName(actualPhysicalType)}`,
|
|
498
|
-
StatusCode.MISMATCH
|
|
499
|
-
);
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
/**
|
|
505
|
-
* Gets a detailed JSON representation of the query plan for debugging.
|
|
506
|
-
* @returns JSON string containing the detailed plan tree.
|
|
507
|
-
*/
|
|
508
|
-
getDebugPlan(): string {
|
|
509
|
-
this.validateStatement("get debug plan for");
|
|
510
|
-
const plan = this.compile();
|
|
511
|
-
return serializePlanTree(plan);
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
/**
|
|
515
|
-
* Gets a human-readable instruction program for debugging.
|
|
516
|
-
* @returns String representation of the instruction program.
|
|
517
|
-
*/
|
|
518
|
-
getDebugProgram(): string {
|
|
519
|
-
this.validateStatement("get debug program for");
|
|
520
|
-
const plan = this.compile();
|
|
521
|
-
const emissionContext = this.getEmissionContext();
|
|
522
|
-
const rootInstruction = emitPlanNode(plan, emissionContext);
|
|
523
|
-
const scheduler = new Scheduler(rootInstruction);
|
|
524
|
-
|
|
525
|
-
return generateInstructionProgram(scheduler.instructions, scheduler.destinations);
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
|