@quereus/quereus 0.7.3 → 0.7.5
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/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +19 -18
- 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/planner/debug.ts
DELETED
|
@@ -1,480 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import type { PlanNode } from './nodes/plan-node.js';
|
|
3
|
-
import { safeJsonStringify } from '../util/serialization.js';
|
|
4
|
-
import { astToString } from '../util/ast-stringify.js';
|
|
5
|
-
import type { Instruction, InstructionTracer } from '../runtime/types.js';
|
|
6
|
-
import type * as AST from '../parser/ast.js';
|
|
7
|
-
import { quereusError } from '../common/errors.js';
|
|
8
|
-
import { StatusCode } from '../common/types.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Detailed information about a PlanNode for debugging purposes.
|
|
12
|
-
*/
|
|
13
|
-
export interface PlanNodeDebugInfo {
|
|
14
|
-
id: string;
|
|
15
|
-
nodeType: string;
|
|
16
|
-
type: any; // The result of getType()
|
|
17
|
-
estimatedCost: number;
|
|
18
|
-
estimatedRows?: number;
|
|
19
|
-
totalCost: number;
|
|
20
|
-
children: PlanNodeDebugInfo[];
|
|
21
|
-
relations: PlanNodeDebugInfo[];
|
|
22
|
-
properties: Record<string, any>; // Node-specific properties
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Information about an instruction in the execution program.
|
|
27
|
-
*/
|
|
28
|
-
export interface InstructionDebugInfo {
|
|
29
|
-
index: number;
|
|
30
|
-
note?: string;
|
|
31
|
-
paramCount: number;
|
|
32
|
-
paramIndices: number[];
|
|
33
|
-
destination: number | null;
|
|
34
|
-
subPrograms?: SubProgramDebugInfo[];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Information about a sub-program for debugging purposes.
|
|
39
|
-
*/
|
|
40
|
-
export interface SubProgramDebugInfo {
|
|
41
|
-
programIndex: number;
|
|
42
|
-
instructionCount: number;
|
|
43
|
-
rootNote?: string;
|
|
44
|
-
instructions: InstructionDebugInfo[];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Checks if a value is an AST node
|
|
49
|
-
*/
|
|
50
|
-
function isAstNode(value: any): value is AST.AstNode {
|
|
51
|
-
return value && typeof value === 'object' && 'type' in value && typeof value.type === 'string';
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Recursively processes a value, converting AST nodes to SQL strings
|
|
56
|
-
*/
|
|
57
|
-
function processValue(value: any): any {
|
|
58
|
-
if (value === null || value === undefined) {
|
|
59
|
-
return value;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// If it's an AST node, convert to SQL string
|
|
63
|
-
if (isAstNode(value)) {
|
|
64
|
-
try {
|
|
65
|
-
return astToString(value);
|
|
66
|
-
} catch {
|
|
67
|
-
return `[AST:${value.type}]`; // Fallback if stringify fails
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// If it's an array, process each element
|
|
72
|
-
if (Array.isArray(value)) {
|
|
73
|
-
return value.map(processValue);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// If it's an object, process each property
|
|
77
|
-
if (typeof value === 'object') {
|
|
78
|
-
// Skip circular references and complex objects
|
|
79
|
-
if (value.constructor !== Object && value.constructor !== Array) {
|
|
80
|
-
return '[COMPLEX_OBJECT]';
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const processed: Record<string, any> = {};
|
|
84
|
-
for (const [key, val] of Object.entries(value)) {
|
|
85
|
-
try {
|
|
86
|
-
processed[key] = processValue(val);
|
|
87
|
-
} catch {
|
|
88
|
-
processed[key] = '[UNPROCESSABLE]';
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return processed;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// For primitives, return as-is
|
|
95
|
-
return value;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Serializes a PlanNode tree to a detailed JSON representation using the existing visit pattern.
|
|
100
|
-
*/
|
|
101
|
-
export function serializePlanTree(rootNode: PlanNode): string {
|
|
102
|
-
const nodeMap = new Map<PlanNode, PlanNodeDebugInfo>();
|
|
103
|
-
|
|
104
|
-
// First pass: collect all nodes using the visit pattern
|
|
105
|
-
rootNode.visit((node) => {
|
|
106
|
-
if (!nodeMap.has(node)) {
|
|
107
|
-
// Get node-specific properties by examining the node object
|
|
108
|
-
const properties: Record<string, any> = {};
|
|
109
|
-
|
|
110
|
-
// Extract interesting properties from the node (excluding functions and circular refs)
|
|
111
|
-
for (const [key, value] of Object.entries(node)) {
|
|
112
|
-
if (key === 'scope' || key === 'id' || key === 'nodeType' || key === 'estimatedCost') {
|
|
113
|
-
continue; // Skip these as they're handled separately
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if (typeof value === 'function') {
|
|
117
|
-
continue; // Skip functions
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (value && typeof value === 'object' && 'nodeType' in value) {
|
|
121
|
-
// This is likely another PlanNode, skip to avoid duplication
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
try {
|
|
126
|
-
// Process the property value, converting AST nodes to SQL strings
|
|
127
|
-
properties[key] = processValue(value);
|
|
128
|
-
} catch {
|
|
129
|
-
properties[key] = '[UNSERIALIZABLE]';
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
nodeMap.set(node, {
|
|
134
|
-
id: node.id,
|
|
135
|
-
nodeType: node.nodeType,
|
|
136
|
-
type: node.getType(),
|
|
137
|
-
estimatedCost: node.estimatedCost,
|
|
138
|
-
estimatedRows: (node as any).estimatedRows,
|
|
139
|
-
totalCost: node.getTotalCost(),
|
|
140
|
-
children: [], // Will be filled in second pass
|
|
141
|
-
relations: [], // Will be filled in second pass
|
|
142
|
-
properties
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// Second pass: establish relationships
|
|
148
|
-
for (const [node, info] of nodeMap) {
|
|
149
|
-
info.children = node.getChildren()
|
|
150
|
-
.map(child => nodeMap.get(child))
|
|
151
|
-
.filter(Boolean) as PlanNodeDebugInfo[];
|
|
152
|
-
|
|
153
|
-
info.relations = node.getRelations()
|
|
154
|
-
.map(relation => nodeMap.get(relation))
|
|
155
|
-
.filter(Boolean) as PlanNodeDebugInfo[];
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
const rootInfo = nodeMap.get(rootNode);
|
|
159
|
-
if (!rootInfo) {
|
|
160
|
-
quereusError('Root node not found in serialization map', StatusCode.INTERNAL);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return safeJsonStringify(rootInfo, 2);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Generates a human-readable program listing of instructions.
|
|
168
|
-
*/
|
|
169
|
-
export function generateInstructionProgram(
|
|
170
|
-
instructions: readonly Instruction[],
|
|
171
|
-
destinations: readonly (number | null)[]
|
|
172
|
-
): string {
|
|
173
|
-
const lines: string[] = [];
|
|
174
|
-
lines.push('=== INSTRUCTION PROGRAM ===');
|
|
175
|
-
lines.push('');
|
|
176
|
-
|
|
177
|
-
const subProgramMap = new Map<number, { scheduler: any; parentIndex: number }>();
|
|
178
|
-
let nextSubProgramId = 0;
|
|
179
|
-
|
|
180
|
-
for (let i = 0; i < instructions.length; i++) {
|
|
181
|
-
const instruction = instructions[i];
|
|
182
|
-
const dest = destinations[i];
|
|
183
|
-
const note = instruction.note ? ` ; ${instruction.note}` : '';
|
|
184
|
-
const destStr = dest !== null ? ` -> [${dest}]` : ' -> [RESULT]';
|
|
185
|
-
|
|
186
|
-
let subProgramInfo = '';
|
|
187
|
-
if (instruction.programs && instruction.programs.length > 0) {
|
|
188
|
-
const programIds: number[] = [];
|
|
189
|
-
for (const program of instruction.programs) {
|
|
190
|
-
const programId = nextSubProgramId++;
|
|
191
|
-
subProgramMap.set(programId, { scheduler: program, parentIndex: i });
|
|
192
|
-
programIds.push(programId);
|
|
193
|
-
}
|
|
194
|
-
subProgramInfo = ` SUB-PROGRAMS: [${programIds.join(', ')}]`;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
lines.push(`[${i.toString().padStart(3)}] PARAMS: [${instruction.params.map((_, idx) =>
|
|
198
|
-
instructions.findIndex(inst => inst === instruction.params[idx])
|
|
199
|
-
).join(', ')}]${destStr}${note}${subProgramInfo}`);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// Add sub-program listings
|
|
203
|
-
if (subProgramMap.size > 0) {
|
|
204
|
-
lines.push('');
|
|
205
|
-
lines.push('=== SUB-PROGRAMS ===');
|
|
206
|
-
|
|
207
|
-
for (const [programId, { scheduler, parentIndex }] of subProgramMap) {
|
|
208
|
-
lines.push('');
|
|
209
|
-
lines.push(`--- SUB-PROGRAM ${programId} (called by instruction ${parentIndex}) ---`);
|
|
210
|
-
const subProgram = generateInstructionProgram(scheduler.instructions, scheduler.destinations);
|
|
211
|
-
// Remove the header and footer from sub-program and indent
|
|
212
|
-
const subLines = subProgram.split('\n').slice(2, -2);
|
|
213
|
-
for (const line of subLines) {
|
|
214
|
-
if (line.trim()) {
|
|
215
|
-
lines.push(` ${line}`);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
lines.push('');
|
|
222
|
-
lines.push('=== END PROGRAM ===');
|
|
223
|
-
return lines.join('\n');
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Extracts detailed information about the instruction program structure.
|
|
228
|
-
*/
|
|
229
|
-
export function getInstructionDebugInfo(
|
|
230
|
-
instructions: readonly Instruction[],
|
|
231
|
-
destinations: readonly (number | null)[]
|
|
232
|
-
): InstructionDebugInfo[] {
|
|
233
|
-
let nextSubProgramId = 0;
|
|
234
|
-
|
|
235
|
-
return instructions.map((instruction, index) => {
|
|
236
|
-
let subPrograms: SubProgramDebugInfo[] | undefined;
|
|
237
|
-
|
|
238
|
-
if (instruction.programs && instruction.programs.length > 0) {
|
|
239
|
-
subPrograms = instruction.programs.map(scheduler => {
|
|
240
|
-
const programId = nextSubProgramId++;
|
|
241
|
-
const subInstructions = getInstructionDebugInfo(scheduler.instructions, scheduler.destinations);
|
|
242
|
-
|
|
243
|
-
return {
|
|
244
|
-
programIndex: programId,
|
|
245
|
-
instructionCount: scheduler.instructions.length,
|
|
246
|
-
rootNote: scheduler.instructions[scheduler.instructions.length - 1]?.note,
|
|
247
|
-
instructions: subInstructions
|
|
248
|
-
};
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
return {
|
|
253
|
-
index,
|
|
254
|
-
note: instruction.note,
|
|
255
|
-
paramCount: instruction.params.length,
|
|
256
|
-
paramIndices: instruction.params.map(param =>
|
|
257
|
-
instructions.findIndex(inst => inst === param)
|
|
258
|
-
),
|
|
259
|
-
destination: destinations[index],
|
|
260
|
-
subPrograms
|
|
261
|
-
};
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Generates a comprehensive trace report that includes sub-program execution details.
|
|
267
|
-
*/
|
|
268
|
-
export function generateTraceReport(
|
|
269
|
-
tracer: InstructionTracer
|
|
270
|
-
): string {
|
|
271
|
-
const events = tracer.getTraceEvents?.() || [];
|
|
272
|
-
const subPrograms = tracer.getSubPrograms?.() || new Map();
|
|
273
|
-
|
|
274
|
-
const lines: string[] = [];
|
|
275
|
-
lines.push('=== EXECUTION TRACE ===');
|
|
276
|
-
lines.push('');
|
|
277
|
-
|
|
278
|
-
for (const event of events) {
|
|
279
|
-
const timestamp = new Date(event.timestamp).toISOString();
|
|
280
|
-
const typeStr = event.type.toUpperCase().padEnd(6);
|
|
281
|
-
const note = event.note ? ` (${event.note})` : '';
|
|
282
|
-
|
|
283
|
-
lines.push(`[${event.instructionIndex.toString().padStart(3)}] ${typeStr} ${timestamp}${note}`);
|
|
284
|
-
|
|
285
|
-
if (event.type === 'input' && event.subPrograms) {
|
|
286
|
-
for (const subProgram of event.subPrograms) {
|
|
287
|
-
lines.push(` └─ SUB-PROGRAM ${subProgram.programIndex}: ${subProgram.instructionCount} instructions${subProgram.rootNote ? ` (${subProgram.rootNote})` : ''}`);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
if (event.type === 'error') {
|
|
292
|
-
lines.push(` ERROR: ${event.error}`);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
if (subPrograms.size > 0) {
|
|
297
|
-
lines.push('');
|
|
298
|
-
lines.push('=== SUB-PROGRAM DETAILS ===');
|
|
299
|
-
|
|
300
|
-
for (const [programId, { scheduler, parentInstructionIndex }] of subPrograms) {
|
|
301
|
-
lines.push('');
|
|
302
|
-
lines.push(`--- SUB-PROGRAM ${programId} (parent instruction: ${parentInstructionIndex}) ---`);
|
|
303
|
-
const programListing = generateInstructionProgram(scheduler.instructions, scheduler.destinations);
|
|
304
|
-
// Remove header/footer and indent
|
|
305
|
-
const programLines = programListing.split('\n').slice(2, -2);
|
|
306
|
-
for (const line of programLines) {
|
|
307
|
-
if (line.trim()) {
|
|
308
|
-
lines.push(` ${line}`);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
lines.push('');
|
|
315
|
-
lines.push('=== END TRACE ===');
|
|
316
|
-
return lines.join('\n');
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
* Options for plan formatting
|
|
321
|
-
*/
|
|
322
|
-
export interface PlanDisplayOptions {
|
|
323
|
-
/** Show concise plan by default (true) or full details (false) */
|
|
324
|
-
concise?: boolean;
|
|
325
|
-
/** Node IDs to expand with full details (only applies when concise=true) */
|
|
326
|
-
expandNodes?: string[];
|
|
327
|
-
/** Maximum depth to display (default: no limit) */
|
|
328
|
-
maxDepth?: number;
|
|
329
|
-
/** Show physical properties if available */
|
|
330
|
-
showPhysical?: boolean;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* Creates a concise, tree-like representation of the plan
|
|
335
|
-
*/
|
|
336
|
-
export function formatPlanTree(rootNode: PlanNode, options: PlanDisplayOptions = {}): string {
|
|
337
|
-
const { concise = true, expandNodes = [], maxDepth, showPhysical = true } = options;
|
|
338
|
-
const lines: string[] = [];
|
|
339
|
-
const nodesSeen = new Set<PlanNode>();
|
|
340
|
-
|
|
341
|
-
function formatNode(node: PlanNode, depth: number, isLast: boolean, prefix: string): void {
|
|
342
|
-
if (maxDepth !== undefined && depth > maxDepth) {
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// Avoid infinite recursion for circular references
|
|
347
|
-
if (nodesSeen.has(node)) {
|
|
348
|
-
lines.push(`${prefix}├─ [CIRCULAR: ${node.nodeType}#${node.id}]`);
|
|
349
|
-
return;
|
|
350
|
-
}
|
|
351
|
-
nodesSeen.add(node);
|
|
352
|
-
|
|
353
|
-
// Determine if this node should be expanded
|
|
354
|
-
const shouldExpand = !concise || expandNodes.includes(node.id);
|
|
355
|
-
|
|
356
|
-
// Node header with connection lines
|
|
357
|
-
const connector = isLast ? '└─ ' : '├─ ';
|
|
358
|
-
const nodeType = node.nodeType;
|
|
359
|
-
const nodeId = `#${node.id}`;
|
|
360
|
-
const description = node.toString();
|
|
361
|
-
|
|
362
|
-
// Build the header line
|
|
363
|
-
let headerLine = `${prefix}${connector}${nodeType}${nodeId}`;
|
|
364
|
-
if (description && description !== nodeType) {
|
|
365
|
-
headerLine += `: ${description}`;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
// Add cost information if available
|
|
369
|
-
const cost = node.estimatedCost;
|
|
370
|
-
const totalCost = node.getTotalCost();
|
|
371
|
-
if (cost > 0 || totalCost > 0) {
|
|
372
|
-
headerLine += ` [cost: ${cost}, total: ${totalCost}]`;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
// Add physical properties if requested and available
|
|
376
|
-
if (showPhysical && (node as any).physical) {
|
|
377
|
-
const physical = (node as any).physical;
|
|
378
|
-
const physicalInfo = [];
|
|
379
|
-
if (physical.estimatedRows !== undefined) {
|
|
380
|
-
physicalInfo.push(`rows: ${physical.estimatedRows}`);
|
|
381
|
-
}
|
|
382
|
-
if (physical.ordering && physical.ordering.length > 0) {
|
|
383
|
-
physicalInfo.push(`ordered: ${physical.ordering.map((o: any) => `${o.attributeId}:${o.direction}`).join(',')}`);
|
|
384
|
-
}
|
|
385
|
-
if (physical.readonly !== undefined) {
|
|
386
|
-
physicalInfo.push(`readonly: ${physical.readonly}`);
|
|
387
|
-
}
|
|
388
|
-
if (physicalInfo.length > 0) {
|
|
389
|
-
headerLine += ` {${physicalInfo.join(', ')}}`;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
lines.push(headerLine);
|
|
394
|
-
|
|
395
|
-
// Add expanded details if requested
|
|
396
|
-
if (shouldExpand) {
|
|
397
|
-
const logical = node.getLogicalAttributes();
|
|
398
|
-
if (logical && Object.keys(logical).length > 0) {
|
|
399
|
-
const logicalLines = JSON.stringify(logical, null, 2).split('\n');
|
|
400
|
-
const extendedPrefix = prefix + (isLast ? ' ' : '│ ');
|
|
401
|
-
lines.push(`${extendedPrefix}┌─ Logical Attributes:`);
|
|
402
|
-
for (let i = 0; i < logicalLines.length; i++) {
|
|
403
|
-
const line = logicalLines[i];
|
|
404
|
-
const isLastLogicalLine = i === logicalLines.length - 1;
|
|
405
|
-
const logicalConnector = isLastLogicalLine ? '└─ ' : '│ ';
|
|
406
|
-
lines.push(`${extendedPrefix}${logicalConnector}${line}`);
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
// Process children
|
|
412
|
-
const children = node.getChildren();
|
|
413
|
-
const relations = node.getRelations();
|
|
414
|
-
const allChildren = [...children, ...relations];
|
|
415
|
-
|
|
416
|
-
// Filter out duplicates (in case a child is both a child and relation)
|
|
417
|
-
const uniqueChildren = Array.from(new Set(allChildren));
|
|
418
|
-
|
|
419
|
-
for (let i = 0; i < uniqueChildren.length; i++) {
|
|
420
|
-
const child = uniqueChildren[i];
|
|
421
|
-
const isLastChild = i === uniqueChildren.length - 1;
|
|
422
|
-
const childPrefix = prefix + (isLast ? ' ' : '│ ');
|
|
423
|
-
formatNode(child, depth + 1, isLastChild, childPrefix);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
nodesSeen.delete(node);
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
lines.push('Query Plan:');
|
|
430
|
-
formatNode(rootNode, 0, true, '');
|
|
431
|
-
|
|
432
|
-
// Add help text
|
|
433
|
-
if (concise && expandNodes.length === 0) {
|
|
434
|
-
lines.push('');
|
|
435
|
-
lines.push('Tip: Use --expand-nodes node1,node2,... to see detailed properties for specific nodes');
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
return lines.join('\n');
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
/**
|
|
442
|
-
* Generates a compact plan summary showing just the execution path
|
|
443
|
-
*/
|
|
444
|
-
export function formatPlanSummary(rootNode: PlanNode): string {
|
|
445
|
-
const path: string[] = [];
|
|
446
|
-
const visited = new Set<PlanNode>();
|
|
447
|
-
|
|
448
|
-
function collectPath(node: PlanNode): void {
|
|
449
|
-
if (visited.has(node)) return;
|
|
450
|
-
visited.add(node);
|
|
451
|
-
|
|
452
|
-
const description = node.toString();
|
|
453
|
-
const nodeInfo = description && description !== node.nodeType
|
|
454
|
-
? `${node.nodeType}(${description})`
|
|
455
|
-
: node.nodeType;
|
|
456
|
-
|
|
457
|
-
path.push(nodeInfo);
|
|
458
|
-
|
|
459
|
-
// Follow the main execution path (first child for most nodes)
|
|
460
|
-
const children = node.getChildren();
|
|
461
|
-
if (children.length > 0) {
|
|
462
|
-
collectPath(children[0]);
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
collectPath(rootNode);
|
|
467
|
-
return `Execution Path: ${path.join(' → ')}`;
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
/**
|
|
471
|
-
* Enhanced plan serialization with formatting options
|
|
472
|
-
*/
|
|
473
|
-
export function serializePlanTreeWithOptions(rootNode: PlanNode, options: PlanDisplayOptions = {}): string {
|
|
474
|
-
if (options.concise !== false) {
|
|
475
|
-
return formatPlanTree(rootNode, options);
|
|
476
|
-
} else {
|
|
477
|
-
// Use the existing detailed serialization
|
|
478
|
-
return serializePlanTree(rootNode);
|
|
479
|
-
}
|
|
480
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
# Titan Optimizer Framework (Phase 1)
|
|
2
|
-
|
|
3
|
-
This directory contains the core framework components for the Titan optimizer Phase 1 implementation.
|
|
4
|
-
|
|
5
|
-
## Components
|
|
6
|
-
|
|
7
|
-
### Registry (`registry.ts`)
|
|
8
|
-
- **RuleHandle**: Structured rule registration with ID, node type, phase, and priority
|
|
9
|
-
- **Loop Detection**: Prevents infinite rule application using visited rule tracking
|
|
10
|
-
- **Priority Ordering**: Rules execute in priority order (lower numbers first)
|
|
11
|
-
- **Comprehensive Tracing**: Detailed logging and trace hooks for debugging
|
|
12
|
-
|
|
13
|
-
### Trace Framework (`trace.ts`)
|
|
14
|
-
- **TraceHook Interface**: Extensible hooks for rule and node processing events
|
|
15
|
-
- **DebugTraceHook**: Logs all optimizer activity to debug channels
|
|
16
|
-
- **PerformanceTraceHook**: Measures and logs rule execution times
|
|
17
|
-
- **CompositeTraceHook**: Combines multiple trace hooks
|
|
18
|
-
- **Environment Integration**: Automatically enables tracing based on DEBUG environment
|
|
19
|
-
|
|
20
|
-
### Context (`context.ts`)
|
|
21
|
-
- **OptContext**: Unified interface combining optimizer, stats provider, and tuning
|
|
22
|
-
- **Depth Tracking**: Prevents infinite recursion in optimization rules
|
|
23
|
-
- **Phase Management**: Supports 'rewrite' (logical→logical) and 'impl' (logical→physical) phases
|
|
24
|
-
- **Context Data**: Key-value store for rule communication and state
|
|
25
|
-
|
|
26
|
-
### Physical Utilities (`physical-utils.ts`)
|
|
27
|
-
- **Property Inference**: Utilities for combining and propagating physical properties
|
|
28
|
-
- **Ordering Operations**: Functions for merging and inferring result orderings
|
|
29
|
-
- **Unique Key Handling**: Logic for combining unique keys across joins and projections
|
|
30
|
-
- **Cost Estimation**: Helpers for consistent cost model application
|
|
31
|
-
|
|
32
|
-
## Architecture Integration
|
|
33
|
-
|
|
34
|
-
### Rule Registration
|
|
35
|
-
```typescript
|
|
36
|
-
import { registerRule, createRule } from '../framework/registry.js';
|
|
37
|
-
|
|
38
|
-
registerRule(createRule(
|
|
39
|
-
'Aggregate→StreamAggregate',
|
|
40
|
-
PlanNodeType.Aggregate,
|
|
41
|
-
'impl',
|
|
42
|
-
ruleAggregateStreaming,
|
|
43
|
-
10 // priority
|
|
44
|
-
));
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### Rule Implementation
|
|
48
|
-
```typescript
|
|
49
|
-
import type { RuleFn } from '../framework/registry.js';
|
|
50
|
-
|
|
51
|
-
const ruleAggregateStreaming: RuleFn = (node, optimizer) => {
|
|
52
|
-
if (!(node instanceof AggregateNode)) return null;
|
|
53
|
-
|
|
54
|
-
const context = optimizer.getContext();
|
|
55
|
-
const stats = optimizer.getStats();
|
|
56
|
-
|
|
57
|
-
// Rule logic here...
|
|
58
|
-
return transformedNode;
|
|
59
|
-
};
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Tracing Integration
|
|
63
|
-
Tracing is automatically enabled based on environment variables:
|
|
64
|
-
- `DEBUG=quereus:optimizer*` - enables debug tracing
|
|
65
|
-
- `QUEREUS_OPTIMIZER_PERF=true` - enables performance tracing
|
|
66
|
-
|
|
67
|
-
### Statistics Provider
|
|
68
|
-
```typescript
|
|
69
|
-
// Use built-in providers
|
|
70
|
-
import { defaultStatsProvider, vtabStatsProvider } from '../stats/index.js';
|
|
71
|
-
|
|
72
|
-
// Or create custom provider
|
|
73
|
-
const customStats = createStatsProvider(
|
|
74
|
-
new Map([['users', 50000]]), // table row counts
|
|
75
|
-
new Map([['users:BinaryOp', 0.1]]) // predicate selectivity
|
|
76
|
-
);
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Phase 1 Status
|
|
80
|
-
|
|
81
|
-
✅ **Implemented Components:**
|
|
82
|
-
- Rule registration and management framework
|
|
83
|
-
- Comprehensive trace framework with multiple hook types
|
|
84
|
-
- Optimizer context with statistics provider integration
|
|
85
|
-
- Physical property utilities
|
|
86
|
-
- Golden plan test harness
|
|
87
|
-
- Environment-based configuration
|
|
88
|
-
|
|
89
|
-
✅ **Integration Complete:**
|
|
90
|
-
- Optimizer updated to use new framework
|
|
91
|
-
- Emitter metadata support added
|
|
92
|
-
- Trace hooks integrated into rule application
|
|
93
|
-
- Statistics provider abstraction ready
|
|
94
|
-
|
|
95
|
-
🔄 **Next Steps (Phase 2):**
|
|
96
|
-
- Advanced optimization rules implementation
|
|
97
|
-
- Seek/range scan access path selection
|
|
98
|
-
- Materialization advisory framework
|
|
99
|
-
- Plan validation pass
|
|
100
|
-
|
|
101
|
-
## Usage Examples
|
|
102
|
-
|
|
103
|
-
### Enabling Tracing
|
|
104
|
-
```bash
|
|
105
|
-
# Enable all optimizer tracing
|
|
106
|
-
DEBUG=quereus:optimizer* yarn test
|
|
107
|
-
|
|
108
|
-
# Enable performance measurement
|
|
109
|
-
QUEREUS_OPTIMIZER_PERF=true DEBUG=quereus:optimizer* yarn test
|
|
110
|
-
|
|
111
|
-
# Trace specific rule categories
|
|
112
|
-
DEBUG=quereus:optimizer:rule:* yarn test
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Running Golden Plan Tests
|
|
116
|
-
```bash
|
|
117
|
-
# Run all golden plan tests
|
|
118
|
-
yarn test:plans
|
|
119
|
-
|
|
120
|
-
# Update golden files when plans change
|
|
121
|
-
UPDATE_PLANS=true yarn test:plans
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### Custom Statistics Provider
|
|
125
|
-
```typescript
|
|
126
|
-
const optimizer = new Optimizer(
|
|
127
|
-
DEFAULT_TUNING,
|
|
128
|
-
new VTabStatsProvider() // Uses VTab module statistics when available
|
|
129
|
-
);
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
This framework provides the foundation for sophisticated query optimization while maintaining clear separation of concerns and comprehensive debugging capabilities.
|