@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/parser/utils.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { quereusError } from '../common/errors.js';
|
|
2
|
-
import { SqlValue } from '../common/types.js';
|
|
3
|
-
import type { LiteralExpr } from './ast.js';
|
|
4
|
-
|
|
5
|
-
export function getSyncLiteral(literal: LiteralExpr): SqlValue {
|
|
6
|
-
if (literal.value instanceof Promise) {
|
|
7
|
-
quereusError('Literal value is a promise');
|
|
8
|
-
}
|
|
9
|
-
return literal.value;
|
|
10
|
-
}
|
package/src/parser/visitor.ts
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { createLogger } from '../common/logger.js';
|
|
2
|
-
import type * as AST from './ast.js';
|
|
3
|
-
|
|
4
|
-
const log = createLogger('parser:visitor'); // Create logger instance
|
|
5
|
-
const warnLog = log.extend('warn');
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Defines the callbacks for the AST visitor.
|
|
10
|
-
* Functions can return false to stop traversal down that branch.
|
|
11
|
-
*/
|
|
12
|
-
export interface AstVisitorCallbacks {
|
|
13
|
-
enterNode?: (node: AST.AstNode) => void | boolean;
|
|
14
|
-
exitNode?: (node: AST.AstNode) => void;
|
|
15
|
-
// Specific node type visitors (optional)
|
|
16
|
-
visitSelect?: (node: AST.SelectStmt) => void | boolean;
|
|
17
|
-
visitInsert?: (node: AST.InsertStmt) => void | boolean;
|
|
18
|
-
visitUpdate?: (node: AST.UpdateStmt) => void | boolean;
|
|
19
|
-
visitDelete?: (node: AST.DeleteStmt) => void | boolean;
|
|
20
|
-
visitValues?: (node: AST.ValuesStmt) => void | boolean;
|
|
21
|
-
visitTableSource?: (node: AST.TableSource) => void | boolean;
|
|
22
|
-
visitJoin?: (node: AST.JoinClause) => void | boolean;
|
|
23
|
-
visitFunctionSource?: (node: AST.FunctionSource) => void | boolean;
|
|
24
|
-
visitSubquerySource?: (node: AST.SubquerySource) => void | boolean;
|
|
25
|
-
visitBinaryExpr?: (node: AST.BinaryExpr) => void | boolean;
|
|
26
|
-
visitUnaryExpr?: (node: AST.UnaryExpr) => void | boolean;
|
|
27
|
-
visitCastExpr?: (node: AST.CastExpr) => void | boolean;
|
|
28
|
-
visitCollateExpr?: (node: AST.CollateExpr) => void | boolean;
|
|
29
|
-
visitFunctionExpr?: (node: AST.FunctionExpr) => void | boolean;
|
|
30
|
-
visitSubqueryExpr?: (node: AST.SubqueryExpr) => void | boolean;
|
|
31
|
-
visitWindowFunctionExpr?: (node: AST.WindowFunctionExpr) => void | boolean;
|
|
32
|
-
visitWindowDefinition?: (node: AST.WindowDefinition) => void | boolean;
|
|
33
|
-
visitLiteral?: (node: AST.LiteralExpr) => void;
|
|
34
|
-
visitIdentifier?: (node: AST.IdentifierExpr) => void;
|
|
35
|
-
visitColumn?: (node: AST.ColumnExpr) => void;
|
|
36
|
-
visitParameter?: (node: AST.ParameterExpr) => void;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Performs a depth-first traversal of the AST.
|
|
40
|
-
*
|
|
41
|
-
* @param node The starting AST node.
|
|
42
|
-
* @param callbacks An object containing visitor functions for different node types.
|
|
43
|
-
*/
|
|
44
|
-
export function traverseAst(node: AST.AstNode | undefined, callbacks: AstVisitorCallbacks): void {
|
|
45
|
-
if (!node) return;
|
|
46
|
-
|
|
47
|
-
if (callbacks.enterNode) {
|
|
48
|
-
const result = callbacks.enterNode(node);
|
|
49
|
-
if (result !== false) return; // Stop if enterNode returns false
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Call specific visitor if defined
|
|
53
|
-
const specificVisitorKey = `visit${node.type.charAt(0).toUpperCase() + node.type.slice(1)}` as keyof AstVisitorCallbacks;
|
|
54
|
-
if (callbacks[specificVisitorKey]) {
|
|
55
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
-
const specificVisitor = callbacks[specificVisitorKey] as (n: any) => void | boolean;
|
|
57
|
-
const result = specificVisitor(node);
|
|
58
|
-
if (result !== false) return; // Stop if specific visitor returns false
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Recursively traverse children based on node type
|
|
62
|
-
switch (node.type) {
|
|
63
|
-
case 'select': {
|
|
64
|
-
const stmt = node as AST.SelectStmt;
|
|
65
|
-
(stmt.columns ?? []).forEach(c => c.type === 'column' && traverseAst(c.expr, callbacks));
|
|
66
|
-
(stmt.from ?? []).forEach(f => traverseAst(f, callbacks));
|
|
67
|
-
traverseAst(stmt.where, callbacks);
|
|
68
|
-
(stmt.groupBy ?? []).forEach(g => traverseAst(g, callbacks));
|
|
69
|
-
traverseAst(stmt.having, callbacks);
|
|
70
|
-
(stmt.orderBy ?? []).forEach(o => traverseAst(o.expr, callbacks));
|
|
71
|
-
traverseAst(stmt.limit, callbacks);
|
|
72
|
-
traverseAst(stmt.offset, callbacks);
|
|
73
|
-
traverseAst(stmt.union, callbacks);
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
case 'insert': {
|
|
77
|
-
const stmt = node as AST.InsertStmt;
|
|
78
|
-
traverseAst(stmt.table, callbacks);
|
|
79
|
-
(stmt.values ?? []).forEach(row => row.forEach(v => traverseAst(v, callbacks)));
|
|
80
|
-
traverseAst(stmt.select, callbacks);
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
case 'update': {
|
|
84
|
-
const stmt = node as AST.UpdateStmt;
|
|
85
|
-
traverseAst(stmt.table, callbacks);
|
|
86
|
-
stmt.assignments.forEach(a => traverseAst(a.value, callbacks));
|
|
87
|
-
traverseAst(stmt.where, callbacks);
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
case 'delete': {
|
|
91
|
-
const stmt = node as AST.DeleteStmt;
|
|
92
|
-
traverseAst(stmt.table, callbacks);
|
|
93
|
-
traverseAst(stmt.where, callbacks);
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
case 'values': {
|
|
97
|
-
const stmt = node as AST.ValuesStmt;
|
|
98
|
-
stmt.values.forEach(row => row.forEach(v => traverseAst(v, callbacks)));
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
case 'table':
|
|
102
|
-
// Handled by specific visitor or enterNode
|
|
103
|
-
break;
|
|
104
|
-
case 'join': {
|
|
105
|
-
const join = node as AST.JoinClause;
|
|
106
|
-
traverseAst(join.left, callbacks);
|
|
107
|
-
traverseAst(join.right, callbacks);
|
|
108
|
-
traverseAst(join.condition, callbacks);
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
case 'functionSource': {
|
|
112
|
-
const funcSource = node as AST.FunctionSource;
|
|
113
|
-
traverseAst(funcSource.name, callbacks);
|
|
114
|
-
funcSource.args.forEach(a => traverseAst(a, callbacks));
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
case 'subquerySource': {
|
|
118
|
-
const subqSource = node as AST.SubquerySource;
|
|
119
|
-
traverseAst(subqSource.subquery, callbacks);
|
|
120
|
-
break;
|
|
121
|
-
}
|
|
122
|
-
case 'binary': {
|
|
123
|
-
const expr = node as AST.BinaryExpr;
|
|
124
|
-
traverseAst(expr.left, callbacks);
|
|
125
|
-
traverseAst(expr.right, callbacks);
|
|
126
|
-
break;
|
|
127
|
-
}
|
|
128
|
-
case 'unary':
|
|
129
|
-
case 'cast':
|
|
130
|
-
case 'collate': {
|
|
131
|
-
traverseAst((node as AST.UnaryExpr | AST.CastExpr | AST.CollateExpr).expr, callbacks);
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
134
|
-
case 'function': {
|
|
135
|
-
const func = node as AST.FunctionExpr;
|
|
136
|
-
func.args.forEach(a => traverseAst(a, callbacks));
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
case 'subquery': {
|
|
140
|
-
const subq = node as AST.SubqueryExpr;
|
|
141
|
-
traverseAst(subq.query, callbacks);
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
case 'windowFunction': {
|
|
145
|
-
const winFunc = node as AST.WindowFunctionExpr;
|
|
146
|
-
traverseAst(winFunc.function, callbacks);
|
|
147
|
-
traverseAst(winFunc.window, callbacks);
|
|
148
|
-
break;
|
|
149
|
-
}
|
|
150
|
-
case 'windowDefinition': {
|
|
151
|
-
const winDef = node as AST.WindowDefinition;
|
|
152
|
-
(winDef.partitionBy ?? []).forEach(p => traverseAst(p, callbacks));
|
|
153
|
-
(winDef.orderBy ?? []).forEach(o => traverseAst(o.expr, callbacks));
|
|
154
|
-
// traverseAst(winDef.frame, callbacks); // TODO: Traverse frame bounds if needed
|
|
155
|
-
break;
|
|
156
|
-
}
|
|
157
|
-
// Leaf nodes (literal, identifier, column, parameter) are handled by specific visitors or enterNode
|
|
158
|
-
case 'literal':
|
|
159
|
-
case 'identifier':
|
|
160
|
-
case 'column':
|
|
161
|
-
case 'parameter':
|
|
162
|
-
break;
|
|
163
|
-
// DDL / Transaction statements - might need traversal depending on use case
|
|
164
|
-
// Currently not traversing into them
|
|
165
|
-
case 'createTable':
|
|
166
|
-
case 'createIndex':
|
|
167
|
-
case 'createView':
|
|
168
|
-
case 'alterTable':
|
|
169
|
-
case 'drop':
|
|
170
|
-
case 'begin':
|
|
171
|
-
case 'commit':
|
|
172
|
-
case 'rollback':
|
|
173
|
-
case 'savepoint':
|
|
174
|
-
case 'release':
|
|
175
|
-
case 'pragma':
|
|
176
|
-
case 'with': // Usually handled separately before main traversal
|
|
177
|
-
case 'commonTableExpr': // Usually handled separately
|
|
178
|
-
break;
|
|
179
|
-
// Default case for unhandled node types
|
|
180
|
-
default:
|
|
181
|
-
warnLog(`AST Visitor: Unhandled node type: ${node.type}`);
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (callbacks.exitNode) {
|
|
186
|
-
callbacks.exitNode(node);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# Constant Folding Implementation
|
|
2
|
-
|
|
3
|
-
This directory contains the Phase 3 constant folding implementation for the Titan optimizer.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The constant folding system implements the two-phase algorithm described in `docs/optimizer-const.md`:
|
|
8
|
-
|
|
9
|
-
1. **Bottom-up classification**: Assign `ConstInfo` to every node during post-order DFS
|
|
10
|
-
2. **Top-down propagation**: Walk relational tree carrying known constant attributes
|
|
11
|
-
|
|
12
|
-
## Files
|
|
13
|
-
|
|
14
|
-
### `const-pass.ts`
|
|
15
|
-
Core constant folding analysis with:
|
|
16
|
-
- `ConstInfo` types: `const`, `dep`, `non-const`
|
|
17
|
-
- `classifyConstants()` - bottom-up classification using generic tree walking
|
|
18
|
-
- `applyConstPropagation()` - top-down propagation and folding
|
|
19
|
-
- Framework ready for runtime-based evaluation
|
|
20
|
-
|
|
21
|
-
### `const-evaluator.ts`
|
|
22
|
-
Runtime-based expression evaluation:
|
|
23
|
-
- `createRuntimeExpressionEvaluator()` - uses existing runtime via mini-scheduler
|
|
24
|
-
- Avoids duplicate expression interpreter by reusing `emitPlanNode()` + `Scheduler`
|
|
25
|
-
- Minimal `RuntimeContext` for constant-only evaluation
|
|
26
|
-
|
|
27
|
-
### `constraint-extractor.ts`
|
|
28
|
-
Existing predicate analysis utilities (Phase 0 infrastructure).
|
|
29
|
-
|
|
30
|
-
## Integration Points
|
|
31
|
-
|
|
32
|
-
### Builder Level
|
|
33
|
-
```typescript
|
|
34
|
-
import { foldScalars } from '../util/fold-scalars.js';
|
|
35
|
-
|
|
36
|
-
// In VALUES, default expressions, etc.
|
|
37
|
-
const foldedExpr = foldScalars(originalExpression);
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### Optimizer Rules
|
|
41
|
-
Constant folding runs as early `rewrite` phase rules (priority 10) targeting nodes with expressions:
|
|
42
|
-
- Project (projection expressions)
|
|
43
|
-
- Filter (predicate expressions)
|
|
44
|
-
- Window, Aggregate, Sort, Values, Join
|
|
45
|
-
|
|
46
|
-
### Key Design Principles
|
|
47
|
-
|
|
48
|
-
✅ **Generic Tree Walking**: Uses `getChildren()`/`withChildren()` exclusively
|
|
49
|
-
✅ **Minimal Node-Type Knowledge**: Only checks types for targeting, not folding logic
|
|
50
|
-
✅ **Expression Boundary Triggering**: Only runs on relational nodes with expressions
|
|
51
|
-
✅ **Functional Safety**: Only folds expressions marked as `functional` (pure + deterministic)
|
|
52
|
-
✅ **Attribute ID Preservation**: Maintains column reference validity through transformations
|
|
53
|
-
|
|
54
|
-
## Usage
|
|
55
|
-
|
|
56
|
-
### Basic Builder Usage
|
|
57
|
-
```typescript
|
|
58
|
-
import { foldScalars } from '../util/fold-scalars.js';
|
|
59
|
-
|
|
60
|
-
// Automatically fold constant expressions in builders
|
|
61
|
-
const expr = buildExpression(ctx, ast);
|
|
62
|
-
const folded = foldScalars(expr); // e.g., "1 + 2 * 3" → "7"
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Advanced Runtime-Based Usage
|
|
66
|
-
```typescript
|
|
67
|
-
import { classifyConstants, applyConstPropagation, createConstFoldingContext } from '../analysis/const-pass.js';
|
|
68
|
-
import { createRuntimeExpressionEvaluator } from '../analysis/const-evaluator.js';
|
|
69
|
-
|
|
70
|
-
// For complex expressions requiring runtime evaluation
|
|
71
|
-
const evaluator = createRuntimeExpressionEvaluator(database);
|
|
72
|
-
const ctx = createConstFoldingContext(evaluator);
|
|
73
|
-
classifyConstants(planTree, ctx);
|
|
74
|
-
const foldedTree = applyConstPropagation(relationalNode, ctx);
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### Debug Tracing
|
|
78
|
-
```bash
|
|
79
|
-
# Enable constant folding debug output
|
|
80
|
-
DEBUG=quereus:optimizer:folding* yarn test
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Current Status
|
|
84
|
-
|
|
85
|
-
- ✅ Infrastructure complete with `functional` flag and generic tree walking
|
|
86
|
-
- ✅ Synchronous folding for basic arithmetic/logical operations
|
|
87
|
-
- ✅ Optimizer rule integration using generic `getProducingExprs()` interface
|
|
88
|
-
- ✅ `MaybePromise<SqlValue>` support for async subquery constant folding
|
|
89
|
-
- ✅ Builder-level utility for immediate expression folding
|
|
90
|
-
- 🔄 Runtime evaluation framework ready for complex expressions
|
|
91
|
-
- 🔄 Advanced expression types (CASE, CAST, functions) need implementation
|
|
92
|
-
|
|
93
|
-
The implementation provides immediate value through synchronous folding while supporting promise-based values for subquery constants, eliminating the "projection list" specificity through the generic `getProducingExprs()` interface.
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import type { PlanNode, ScalarPlanNode } from '../nodes/plan-node.js';
|
|
2
|
-
import { isRelationalNode } from '../nodes/plan-node.js';
|
|
3
|
-
import { PlanNodeType } from '../nodes/plan-node-type.js';
|
|
4
|
-
import type { TableReferenceNode, ColumnReferenceNode } from '../nodes/reference.js';
|
|
5
|
-
|
|
6
|
-
function buildAttrIdSet(tableRef: TableReferenceNode): Set<number> {
|
|
7
|
-
const set = new Set<number>();
|
|
8
|
-
for (const attr of tableRef.getAttributes()) set.add(attr.id);
|
|
9
|
-
return set;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function collectBindingsInExpr(expr: ScalarPlanNode, tableRef: TableReferenceNode): ScalarPlanNode[] {
|
|
13
|
-
const targetAttrIds = buildAttrIdSet(tableRef);
|
|
14
|
-
const result: ScalarPlanNode[] = [];
|
|
15
|
-
|
|
16
|
-
function walkScalar(node: ScalarPlanNode): void {
|
|
17
|
-
// Parameter bindings
|
|
18
|
-
if (node.nodeType === PlanNodeType.ParameterReference) {
|
|
19
|
-
result.push(node);
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
// Correlated column refs (not produced by tableRef)
|
|
23
|
-
if (node.nodeType === PlanNodeType.ColumnReference) {
|
|
24
|
-
const col = node as unknown as ColumnReferenceNode;
|
|
25
|
-
if (!targetAttrIds.has(col.attributeId)) {
|
|
26
|
-
result.push(node);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
// Recurse into scalar children
|
|
31
|
-
for (const child of node.getChildren()) {
|
|
32
|
-
// child here should also be scalar nodes
|
|
33
|
-
walkScalar(child as unknown as ScalarPlanNode);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
walkScalar(expr);
|
|
38
|
-
return dedupeById(result);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function collectBindingsInPlan(plan: PlanNode, tableRef: TableReferenceNode): ScalarPlanNode[] {
|
|
42
|
-
const targetAttrIds = buildAttrIdSet(tableRef);
|
|
43
|
-
const result: ScalarPlanNode[] = [];
|
|
44
|
-
|
|
45
|
-
function walk(node: PlanNode): void {
|
|
46
|
-
if (!isRelationalNode(node)) {
|
|
47
|
-
// Scalar node
|
|
48
|
-
const scalar = node as unknown as ScalarPlanNode;
|
|
49
|
-
if (scalar.nodeType === PlanNodeType.ParameterReference) {
|
|
50
|
-
result.push(scalar);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
if (scalar.nodeType === PlanNodeType.ColumnReference) {
|
|
54
|
-
const col = scalar as unknown as ColumnReferenceNode;
|
|
55
|
-
if (!targetAttrIds.has(col.attributeId)) {
|
|
56
|
-
result.push(scalar);
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
// Recurse into all children (relational and scalar)
|
|
62
|
-
for (const child of node.getChildren()) {
|
|
63
|
-
walk(child);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
walk(plan);
|
|
68
|
-
return dedupeById(result);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function dedupeById(nodes: ScalarPlanNode[]): ScalarPlanNode[] {
|
|
72
|
-
const seen = new Set<string>();
|
|
73
|
-
const out: ScalarPlanNode[] = [];
|
|
74
|
-
for (const n of nodes) {
|
|
75
|
-
if (!seen.has(n.id)) {
|
|
76
|
-
seen.add(n.id);
|
|
77
|
-
out.push(n);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return out;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Runtime-based expression evaluator for constant folding
|
|
3
|
-
*
|
|
4
|
-
* This module provides evaluation of constant expressions using the existing runtime
|
|
5
|
-
* through a mini-scheduler, avoiding the need for a separate expression interpreter.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { MaybePromise, OutputValue } from '../../common/types.js';
|
|
9
|
-
import type { Database } from '../../core/database.js';
|
|
10
|
-
import { emitPlanNode } from '../../runtime/emitters.js';
|
|
11
|
-
import { EmissionContext } from '../../runtime/emission-context.js';
|
|
12
|
-
import { Scheduler } from '../../runtime/scheduler.js';
|
|
13
|
-
import type { RuntimeContext } from '../../runtime/types.js';
|
|
14
|
-
import { createLogger } from '../../common/logger.js';
|
|
15
|
-
import { PlanNode } from '../nodes/plan-node.js';
|
|
16
|
-
|
|
17
|
-
const log = createLogger('optimizer:folding:eval');
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Create an expression evaluator that uses the runtime to evaluate constant expressions
|
|
21
|
-
*/
|
|
22
|
-
export function createRuntimeExpressionEvaluator(db: Database): (expr: PlanNode) => MaybePromise<OutputValue> {
|
|
23
|
-
return function evaluateExpression(expr: PlanNode): MaybePromise<OutputValue> {
|
|
24
|
-
log('Evaluating constant expression: %s', expr.nodeType);
|
|
25
|
-
|
|
26
|
-
try {
|
|
27
|
-
// Create temporary emission context
|
|
28
|
-
const emissionCtx = new EmissionContext(db);
|
|
29
|
-
|
|
30
|
-
// Emit the expression to an instruction
|
|
31
|
-
const instruction = emitPlanNode(expr, emissionCtx);
|
|
32
|
-
|
|
33
|
-
// Create a scheduler to execute the instruction
|
|
34
|
-
const scheduler = new Scheduler(instruction);
|
|
35
|
-
|
|
36
|
-
// Create minimal runtime context for evaluation
|
|
37
|
-
// No row context is needed since we only evaluate constant expressions
|
|
38
|
-
const runtimeCtx: RuntimeContext = {
|
|
39
|
-
db,
|
|
40
|
-
stmt: undefined,
|
|
41
|
-
params: {}, // No parameters needed for constants
|
|
42
|
-
context: new Map(), // No row context needed
|
|
43
|
-
tableContexts: new Map(), // No table contexts needed for constants
|
|
44
|
-
enableMetrics: false
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
// Execute and get the result
|
|
48
|
-
const result = scheduler.run(runtimeCtx);
|
|
49
|
-
|
|
50
|
-
// Ensure result is a valid OutputValue
|
|
51
|
-
if (result === undefined) {
|
|
52
|
-
throw new Error('Expression evaluation returned undefined');
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
log('Expression evaluated to: %s', result);
|
|
56
|
-
return result as MaybePromise<OutputValue>;
|
|
57
|
-
|
|
58
|
-
} catch (error) {
|
|
59
|
-
log('Failed to evaluate expression %s: %s', expr.nodeType, error);
|
|
60
|
-
throw new Error(`Expression evaluation failed: ${error}`);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
}
|