@quereus/quereus 0.7.2 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/dist/src/common/constants.js.map +0 -1
- package/dist/src/common/datatype.js.map +0 -1
- package/dist/src/common/errors.js.map +0 -1
- package/dist/src/common/json-types.js.map +0 -1
- package/dist/src/common/logger.js.map +0 -1
- package/dist/src/common/type-inference.js.map +0 -1
- package/dist/src/common/types.js.map +0 -1
- package/dist/src/core/database-options.js.map +0 -1
- package/dist/src/core/database.js.map +0 -1
- package/dist/src/core/param.js.map +0 -1
- package/dist/src/core/statement.js.map +0 -1
- package/dist/src/func/builtins/aggregate.js.map +0 -1
- package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
- package/dist/src/func/builtins/conversion.js.map +0 -1
- package/dist/src/func/builtins/datetime.js.map +0 -1
- package/dist/src/func/builtins/explain.js.map +0 -1
- package/dist/src/func/builtins/generation.js.map +0 -1
- package/dist/src/func/builtins/index.js.map +0 -1
- package/dist/src/func/builtins/json-helpers.js.map +0 -1
- package/dist/src/func/builtins/json-tvf.js.map +0 -1
- package/dist/src/func/builtins/json.js.map +0 -1
- package/dist/src/func/builtins/scalar.js.map +0 -1
- package/dist/src/func/builtins/schema.js.map +0 -1
- package/dist/src/func/builtins/string.js.map +0 -1
- package/dist/src/func/builtins/timespan.js.map +0 -1
- package/dist/src/func/context.js.map +0 -1
- package/dist/src/func/registration.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/parser/ast.js.map +0 -1
- package/dist/src/parser/index.js.map +0 -1
- package/dist/src/parser/lexer.js.map +0 -1
- package/dist/src/parser/parser.js.map +0 -1
- package/dist/src/parser/utils.js.map +0 -1
- package/dist/src/parser/visitor.js.map +0 -1
- package/dist/src/planner/analysis/binding-collector.js.map +0 -1
- package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
- package/dist/src/planner/analysis/const-pass.js.map +0 -1
- package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
- package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
- package/dist/src/planner/building/alter-table.js.map +0 -1
- package/dist/src/planner/building/block.js.map +0 -1
- package/dist/src/planner/building/constraint-builder.js.map +0 -1
- package/dist/src/planner/building/create-assertion.js.map +0 -1
- package/dist/src/planner/building/create-view.js.map +0 -1
- package/dist/src/planner/building/ddl.js.map +0 -1
- package/dist/src/planner/building/declare-schema.js.map +0 -1
- package/dist/src/planner/building/delete.js.map +0 -1
- package/dist/src/planner/building/drop-assertion.js.map +0 -1
- package/dist/src/planner/building/drop-table.js.map +0 -1
- package/dist/src/planner/building/drop-view.js.map +0 -1
- package/dist/src/planner/building/expression.js.map +0 -1
- package/dist/src/planner/building/function-call.js.map +0 -1
- package/dist/src/planner/building/insert.js.map +0 -1
- package/dist/src/planner/building/pragma.js.map +0 -1
- package/dist/src/planner/building/schema-resolution.js.map +0 -1
- package/dist/src/planner/building/select-aggregates.js.map +0 -1
- package/dist/src/planner/building/select-compound.js.map +0 -1
- package/dist/src/planner/building/select-context.js.map +0 -1
- package/dist/src/planner/building/select-modifiers.js.map +0 -1
- package/dist/src/planner/building/select-projections.js.map +0 -1
- package/dist/src/planner/building/select-window.js.map +0 -1
- package/dist/src/planner/building/select.js.map +0 -1
- package/dist/src/planner/building/table-function.js.map +0 -1
- package/dist/src/planner/building/table.js.map +0 -1
- package/dist/src/planner/building/transaction.js.map +0 -1
- package/dist/src/planner/building/update.js.map +0 -1
- package/dist/src/planner/building/with.js.map +0 -1
- package/dist/src/planner/cache/correlation-detector.js.map +0 -1
- package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
- package/dist/src/planner/cache/reference-graph.js.map +0 -1
- package/dist/src/planner/cost/index.js.map +0 -1
- package/dist/src/planner/debug/logger-utils.js.map +0 -1
- package/dist/src/planner/debug.js.map +0 -1
- package/dist/src/planner/framework/characteristics.js.map +0 -1
- package/dist/src/planner/framework/context.js.map +0 -1
- package/dist/src/planner/framework/pass.js.map +0 -1
- package/dist/src/planner/framework/physical-utils.js.map +0 -1
- package/dist/src/planner/framework/registry.js.map +0 -1
- package/dist/src/planner/framework/trace.js.map +0 -1
- package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
- package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
- package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
- package/dist/src/planner/nodes/array-index-node.js.map +0 -1
- package/dist/src/planner/nodes/block.js.map +0 -1
- package/dist/src/planner/nodes/cache-node.js.map +0 -1
- package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
- package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
- package/dist/src/planner/nodes/create-index-node.js.map +0 -1
- package/dist/src/planner/nodes/create-table-node.js.map +0 -1
- package/dist/src/planner/nodes/create-view-node.js.map +0 -1
- package/dist/src/planner/nodes/cte-node.js.map +0 -1
- package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
- package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
- package/dist/src/planner/nodes/delete-node.js.map +0 -1
- package/dist/src/planner/nodes/distinct-node.js.map +0 -1
- package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
- package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
- package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
- package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
- package/dist/src/planner/nodes/filter.js.map +0 -1
- package/dist/src/planner/nodes/function.js.map +0 -1
- package/dist/src/planner/nodes/insert-node.js.map +0 -1
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
- package/dist/src/planner/nodes/join-node.js.map +0 -1
- package/dist/src/planner/nodes/limit-offset.js.map +0 -1
- package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
- package/dist/src/planner/nodes/plan-node.js.map +0 -1
- package/dist/src/planner/nodes/pragma.js.map +0 -1
- package/dist/src/planner/nodes/project-node.js.map +0 -1
- package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
- package/dist/src/planner/nodes/reference.js.map +0 -1
- package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
- package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
- package/dist/src/planner/nodes/returning-node.js.map +0 -1
- package/dist/src/planner/nodes/scalar.js.map +0 -1
- package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
- package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
- package/dist/src/planner/nodes/single-row.js.map +0 -1
- package/dist/src/planner/nodes/sink-node.js.map +0 -1
- package/dist/src/planner/nodes/sort.js.map +0 -1
- package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
- package/dist/src/planner/nodes/subquery.js.map +0 -1
- package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
- package/dist/src/planner/nodes/table-function-call.js.map +0 -1
- package/dist/src/planner/nodes/transaction-node.js.map +0 -1
- package/dist/src/planner/nodes/update-node.js.map +0 -1
- package/dist/src/planner/nodes/values-node.js.map +0 -1
- package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
- package/dist/src/planner/nodes/window-function.js.map +0 -1
- package/dist/src/planner/nodes/window-node.js.map +0 -1
- package/dist/src/planner/optimizer-tuning.js.map +0 -1
- package/dist/src/planner/optimizer.js.map +0 -1
- package/dist/src/planner/planning-context.js.map +0 -1
- package/dist/src/planner/resolve.js.map +0 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
- package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
- package/dist/src/planner/scopes/aliased.js.map +0 -1
- package/dist/src/planner/scopes/base.js.map +0 -1
- package/dist/src/planner/scopes/empty.js.map +0 -1
- package/dist/src/planner/scopes/global.js.map +0 -1
- package/dist/src/planner/scopes/multi.js.map +0 -1
- package/dist/src/planner/scopes/param.js.map +0 -1
- package/dist/src/planner/scopes/registered.js.map +0 -1
- package/dist/src/planner/scopes/scope.js.map +0 -1
- package/dist/src/planner/stats/basic-estimates.js.map +0 -1
- package/dist/src/planner/stats/index.js.map +0 -1
- package/dist/src/planner/type-utils.js.map +0 -1
- package/dist/src/planner/util/key-utils.js.map +0 -1
- package/dist/src/planner/validation/determinism-validator.js.map +0 -1
- package/dist/src/planner/validation/plan-validator.js.map +0 -1
- package/dist/src/runtime/async-util.js.map +0 -1
- package/dist/src/runtime/cache/shared-cache.js.map +0 -1
- package/dist/src/runtime/context-helpers.js.map +0 -1
- package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
- package/dist/src/runtime/emission-context.js.map +0 -1
- package/dist/src/runtime/emit/add-constraint.js.map +0 -1
- package/dist/src/runtime/emit/aggregate.js.map +0 -1
- package/dist/src/runtime/emit/array-index.js.map +0 -1
- package/dist/src/runtime/emit/between.js.map +0 -1
- package/dist/src/runtime/emit/binary.js.map +0 -1
- package/dist/src/runtime/emit/block.js.map +0 -1
- package/dist/src/runtime/emit/cache.js.map +0 -1
- package/dist/src/runtime/emit/case.js.map +0 -1
- package/dist/src/runtime/emit/cast.js.map +0 -1
- package/dist/src/runtime/emit/collate.js.map +0 -1
- package/dist/src/runtime/emit/column-reference.js.map +0 -1
- package/dist/src/runtime/emit/constraint-check.js.map +0 -1
- package/dist/src/runtime/emit/create-assertion.js.map +0 -1
- package/dist/src/runtime/emit/create-index.js.map +0 -1
- package/dist/src/runtime/emit/create-table.js.map +0 -1
- package/dist/src/runtime/emit/create-view.js.map +0 -1
- package/dist/src/runtime/emit/cte-reference.js.map +0 -1
- package/dist/src/runtime/emit/cte.js.map +0 -1
- package/dist/src/runtime/emit/delete.js.map +0 -1
- package/dist/src/runtime/emit/distinct.js.map +0 -1
- package/dist/src/runtime/emit/dml-executor.js.map +0 -1
- package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
- package/dist/src/runtime/emit/drop-table.js.map +0 -1
- package/dist/src/runtime/emit/drop-view.js.map +0 -1
- package/dist/src/runtime/emit/filter.js.map +0 -1
- package/dist/src/runtime/emit/insert.js.map +0 -1
- package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
- package/dist/src/runtime/emit/join.js.map +0 -1
- package/dist/src/runtime/emit/limit-offset.js.map +0 -1
- package/dist/src/runtime/emit/literal.js.map +0 -1
- package/dist/src/runtime/emit/parameter.js.map +0 -1
- package/dist/src/runtime/emit/pragma.js.map +0 -1
- package/dist/src/runtime/emit/project.js.map +0 -1
- package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
- package/dist/src/runtime/emit/remote-query.js.map +0 -1
- package/dist/src/runtime/emit/retrieve.js.map +0 -1
- package/dist/src/runtime/emit/returning.js.map +0 -1
- package/dist/src/runtime/emit/scalar-function.js.map +0 -1
- package/dist/src/runtime/emit/scan.js.map +0 -1
- package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
- package/dist/src/runtime/emit/sequencing.js.map +0 -1
- package/dist/src/runtime/emit/set-operation.js.map +0 -1
- package/dist/src/runtime/emit/sink.js.map +0 -1
- package/dist/src/runtime/emit/sort.js.map +0 -1
- package/dist/src/runtime/emit/subquery.js.map +0 -1
- package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
- package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
- package/dist/src/runtime/emit/transaction.js.map +0 -1
- package/dist/src/runtime/emit/unary.js.map +0 -1
- package/dist/src/runtime/emit/update.js.map +0 -1
- package/dist/src/runtime/emit/values.js.map +0 -1
- package/dist/src/runtime/emit/window-function.js.map +0 -1
- package/dist/src/runtime/emit/window.js.map +0 -1
- package/dist/src/runtime/emitters.js.map +0 -1
- package/dist/src/runtime/register.js.map +0 -1
- package/dist/src/runtime/scheduler.js.map +0 -1
- package/dist/src/runtime/types.js.map +0 -1
- package/dist/src/runtime/utils.js.map +0 -1
- package/dist/src/schema/assertion.js.map +0 -1
- package/dist/src/schema/catalog.js.map +0 -1
- package/dist/src/schema/change-events.js.map +0 -1
- package/dist/src/schema/column.js.map +0 -1
- package/dist/src/schema/declared-schema-manager.js.map +0 -1
- package/dist/src/schema/function.js.map +0 -1
- package/dist/src/schema/manager.js.map +0 -1
- package/dist/src/schema/schema-differ.js.map +0 -1
- package/dist/src/schema/schema-hasher.js.map +0 -1
- package/dist/src/schema/schema.js.map +0 -1
- package/dist/src/schema/table.js.map +0 -1
- package/dist/src/schema/view.js.map +0 -1
- package/dist/src/schema/window-function.js.map +0 -1
- package/dist/src/types/builtin-types.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/json-type.js.map +0 -1
- package/dist/src/types/logical-type.js.map +0 -1
- package/dist/src/types/plugin-interface.js.map +0 -1
- package/dist/src/types/registry.js.map +0 -1
- package/dist/src/types/temporal-types.js.map +0 -1
- package/dist/src/types/validation.js.map +0 -1
- package/dist/src/util/affinity.js.map +0 -1
- package/dist/src/util/ast-stringify.js.map +0 -1
- package/dist/src/util/cached.js.map +0 -1
- package/dist/src/util/coercion.js.map +0 -1
- package/dist/src/util/comparison.js.map +0 -1
- package/dist/src/util/environment.js.map +0 -1
- package/dist/src/util/hash.js.map +0 -1
- package/dist/src/util/latches.js.map +0 -1
- package/dist/src/util/mutation-statement.js.map +0 -1
- package/dist/src/util/patterns.js.map +0 -1
- package/dist/src/util/plan-formatter.js.map +0 -1
- package/dist/src/util/plugin-helper.js.map +0 -1
- package/dist/src/util/row-descriptor.js.map +0 -1
- package/dist/src/util/serialization.js.map +0 -1
- package/dist/src/util/sql-literal.js.map +0 -1
- package/dist/src/util/working-table-iterable.js.map +0 -1
- package/dist/src/vtab/best-access-plan.js.map +0 -1
- package/dist/src/vtab/connection.js.map +0 -1
- package/dist/src/vtab/filter-info.js.map +0 -1
- package/dist/src/vtab/index-info.js.map +0 -1
- package/dist/src/vtab/manifest.js.map +0 -1
- package/dist/src/vtab/memory/connection.js.map +0 -1
- package/dist/src/vtab/memory/index.js.map +0 -1
- package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
- package/dist/src/vtab/memory/layer/base.js.map +0 -1
- package/dist/src/vtab/memory/layer/connection.js.map +0 -1
- package/dist/src/vtab/memory/layer/interface.js.map +0 -1
- package/dist/src/vtab/memory/layer/manager.js.map +0 -1
- package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
- package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
- package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
- package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
- package/dist/src/vtab/memory/module.js.map +0 -1
- package/dist/src/vtab/memory/table.js.map +0 -1
- package/dist/src/vtab/memory/types.js.map +0 -1
- package/dist/src/vtab/memory/utils/logging.js.map +0 -1
- package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
- package/dist/src/vtab/module.js.map +0 -1
- package/dist/src/vtab/table.js.map +0 -1
- package/src/common/constants.ts +0 -60
- package/src/common/datatype.ts +0 -85
- package/src/common/errors.ts +0 -189
- package/src/common/json-types.ts +0 -16
- package/src/common/logger.ts +0 -97
- package/src/common/type-inference.ts +0 -39
- package/src/common/types.ts +0 -151
- package/src/core/database-options.ts +0 -258
- package/src/core/database.ts +0 -1461
- package/src/core/param.ts +0 -56
- package/src/core/statement.ts +0 -528
- package/src/func/builtins/aggregate.ts +0 -269
- package/src/func/builtins/builtin-window-functions.ts +0 -166
- package/src/func/builtins/conversion.ts +0 -226
- package/src/func/builtins/datetime.ts +0 -500
- package/src/func/builtins/explain.ts +0 -779
- package/src/func/builtins/generation.ts +0 -43
- package/src/func/builtins/index.ts +0 -167
- package/src/func/builtins/json-helpers.ts +0 -237
- package/src/func/builtins/json-tvf.ts +0 -224
- package/src/func/builtins/json.ts +0 -588
- package/src/func/builtins/scalar.ts +0 -423
- package/src/func/builtins/schema.ts +0 -213
- package/src/func/builtins/string.ts +0 -306
- package/src/func/builtins/timespan.ts +0 -179
- package/src/func/context.ts +0 -258
- package/src/func/registration.ts +0 -201
- package/src/index.ts +0 -172
- package/src/parser/ast.ts +0 -581
- package/src/parser/index.ts +0 -65
- package/src/parser/lexer.ts +0 -806
- package/src/parser/parser.ts +0 -3352
- package/src/parser/utils.ts +0 -10
- package/src/parser/visitor.ts +0 -188
- package/src/planner/analysis/README.md +0 -93
- package/src/planner/analysis/binding-collector.ts +0 -83
- package/src/planner/analysis/const-evaluator.ts +0 -63
- package/src/planner/analysis/const-pass.ts +0 -282
- package/src/planner/analysis/constraint-extractor.ts +0 -764
- package/src/planner/analysis/predicate-normalizer.ts +0 -237
- package/src/planner/building/alter-table.ts +0 -49
- package/src/planner/building/block.ts +0 -93
- package/src/planner/building/constraint-builder.ts +0 -178
- package/src/planner/building/create-assertion.ts +0 -7
- package/src/planner/building/create-view.ts +0 -29
- package/src/planner/building/ddl.ts +0 -24
- package/src/planner/building/declare-schema.ts +0 -22
- package/src/planner/building/delete.ts +0 -218
- package/src/planner/building/drop-assertion.ts +0 -11
- package/src/planner/building/drop-table.ts +0 -13
- package/src/planner/building/drop-view.ts +0 -19
- package/src/planner/building/expression.ts +0 -205
- package/src/planner/building/function-call.ts +0 -129
- package/src/planner/building/insert.ts +0 -435
- package/src/planner/building/pragma.ts +0 -34
- package/src/planner/building/schema-resolution.ts +0 -176
- package/src/planner/building/select-aggregates.ts +0 -318
- package/src/planner/building/select-compound.ts +0 -119
- package/src/planner/building/select-context.ts +0 -85
- package/src/planner/building/select-modifiers.ts +0 -236
- package/src/planner/building/select-projections.ts +0 -177
- package/src/planner/building/select-window.ts +0 -259
- package/src/planner/building/select.ts +0 -567
- package/src/planner/building/table-function.ts +0 -49
- package/src/planner/building/table.ts +0 -40
- package/src/planner/building/transaction.ts +0 -23
- package/src/planner/building/update.ts +0 -331
- package/src/planner/building/with.ts +0 -180
- package/src/planner/cache/correlation-detector.ts +0 -83
- package/src/planner/cache/materialization-advisory.ts +0 -265
- package/src/planner/cache/reference-graph.ts +0 -196
- package/src/planner/cost/index.ts +0 -169
- package/src/planner/debug/logger-utils.ts +0 -68
- package/src/planner/debug.ts +0 -480
- package/src/planner/framework/README.md +0 -132
- package/src/planner/framework/characteristics.ts +0 -503
- package/src/planner/framework/context.ts +0 -239
- package/src/planner/framework/pass.ts +0 -354
- package/src/planner/framework/physical-utils.ts +0 -210
- package/src/planner/framework/registry.ts +0 -261
- package/src/planner/framework/trace.ts +0 -259
- package/src/planner/nodes/add-constraint-node.ts +0 -62
- package/src/planner/nodes/aggregate-function.ts +0 -155
- package/src/planner/nodes/aggregate-node.ts +0 -267
- package/src/planner/nodes/array-index-node.ts +0 -50
- package/src/planner/nodes/block.ts +0 -80
- package/src/planner/nodes/cache-node.ts +0 -103
- package/src/planner/nodes/constraint-check-node.ts +0 -138
- package/src/planner/nodes/create-assertion-node.ts +0 -51
- package/src/planner/nodes/create-index-node.ts +0 -41
- package/src/planner/nodes/create-table-node.ts +0 -35
- package/src/planner/nodes/create-view-node.ts +0 -44
- package/src/planner/nodes/cte-node.ts +0 -168
- package/src/planner/nodes/cte-reference-node.ts +0 -125
- package/src/planner/nodes/declarative-schema.ts +0 -221
- package/src/planner/nodes/delete-node.ts +0 -102
- package/src/planner/nodes/distinct-node.ts +0 -107
- package/src/planner/nodes/dml-executor-node.ts +0 -104
- package/src/planner/nodes/drop-assertion-node.ts +0 -50
- package/src/planner/nodes/drop-table-node.ts +0 -36
- package/src/planner/nodes/drop-view-node.ts +0 -37
- package/src/planner/nodes/filter.ts +0 -144
- package/src/planner/nodes/function.ts +0 -98
- package/src/planner/nodes/insert-node.ts +0 -126
- package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
- package/src/planner/nodes/join-node.ts +0 -336
- package/src/planner/nodes/limit-offset.ts +0 -144
- package/src/planner/nodes/plan-node-type.ts +0 -95
- package/src/planner/nodes/plan-node.ts +0 -503
- package/src/planner/nodes/pragma.ts +0 -98
- package/src/planner/nodes/project-node.ts +0 -337
- package/src/planner/nodes/recursive-cte-node.ts +0 -158
- package/src/planner/nodes/reference.ts +0 -334
- package/src/planner/nodes/remote-query-node.ts +0 -73
- package/src/planner/nodes/retrieve-node.ts +0 -86
- package/src/planner/nodes/returning-node.ts +0 -269
- package/src/planner/nodes/scalar.ts +0 -772
- package/src/planner/nodes/sequencing-node.ts +0 -113
- package/src/planner/nodes/set-operation-node.ts +0 -87
- package/src/planner/nodes/single-row.ts +0 -85
- package/src/planner/nodes/sink-node.ts +0 -61
- package/src/planner/nodes/sort.ts +0 -166
- package/src/planner/nodes/stream-aggregate.ts +0 -293
- package/src/planner/nodes/subquery.ts +0 -268
- package/src/planner/nodes/table-access-nodes.ts +0 -323
- package/src/planner/nodes/table-function-call.ts +0 -134
- package/src/planner/nodes/transaction-node.ts +0 -55
- package/src/planner/nodes/update-node.ts +0 -138
- package/src/planner/nodes/values-node.ts +0 -244
- package/src/planner/nodes/view-reference-node.ts +0 -97
- package/src/planner/nodes/window-function.ts +0 -73
- package/src/planner/nodes/window-node.ts +0 -199
- package/src/planner/optimizer-tuning.ts +0 -105
- package/src/planner/optimizer.ts +0 -332
- package/src/planner/planning-context.ts +0 -190
- package/src/planner/resolve.ts +0 -101
- package/src/planner/rules/README.md +0 -96
- package/src/planner/rules/access/rule-select-access-path.ts +0 -399
- package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
- package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
- package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
- package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
- package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
- package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
- package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
- package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
- package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
- package/src/planner/scopes/aliased.ts +0 -50
- package/src/planner/scopes/base.ts +0 -10
- package/src/planner/scopes/empty.ts +0 -12
- package/src/planner/scopes/global.ts +0 -73
- package/src/planner/scopes/multi.ts +0 -40
- package/src/planner/scopes/param.ts +0 -95
- package/src/planner/scopes/registered.ts +0 -67
- package/src/planner/scopes/scope.ts +0 -16
- package/src/planner/stats/basic-estimates.ts +0 -107
- package/src/planner/stats/index.ts +0 -158
- package/src/planner/type-utils.ts +0 -87
- package/src/planner/util/key-utils.ts +0 -46
- package/src/planner/validation/determinism-validator.ts +0 -104
- package/src/planner/validation/plan-validator.ts +0 -335
- package/src/runtime/async-util.ts +0 -283
- package/src/runtime/cache/shared-cache.ts +0 -169
- package/src/runtime/context-helpers.ts +0 -191
- package/src/runtime/deferred-constraint-queue.ts +0 -196
- package/src/runtime/emission-context.ts +0 -319
- package/src/runtime/emit/add-constraint.ts +0 -78
- package/src/runtime/emit/aggregate.ts +0 -581
- package/src/runtime/emit/array-index.ts +0 -25
- package/src/runtime/emit/between.ts +0 -51
- package/src/runtime/emit/binary.ts +0 -357
- package/src/runtime/emit/block.ts +0 -23
- package/src/runtime/emit/cache.ts +0 -64
- package/src/runtime/emit/case.ts +0 -87
- package/src/runtime/emit/cast.ts +0 -151
- package/src/runtime/emit/collate.ts +0 -9
- package/src/runtime/emit/column-reference.ts +0 -17
- package/src/runtime/emit/constraint-check.ts +0 -290
- package/src/runtime/emit/create-assertion.ts +0 -82
- package/src/runtime/emit/create-index.ts +0 -15
- package/src/runtime/emit/create-table.ts +0 -15
- package/src/runtime/emit/create-view.ts +0 -52
- package/src/runtime/emit/cte-reference.ts +0 -38
- package/src/runtime/emit/cte.ts +0 -39
- package/src/runtime/emit/delete.ts +0 -24
- package/src/runtime/emit/distinct.ts +0 -40
- package/src/runtime/emit/dml-executor.ts +0 -198
- package/src/runtime/emit/drop-assertion.ts +0 -45
- package/src/runtime/emit/drop-table.ts +0 -27
- package/src/runtime/emit/drop-view.ts +0 -49
- package/src/runtime/emit/filter.ts +0 -30
- package/src/runtime/emit/insert.ts +0 -42
- package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
- package/src/runtime/emit/join.ts +0 -148
- package/src/runtime/emit/limit-offset.ts +0 -73
- package/src/runtime/emit/literal.ts +0 -17
- package/src/runtime/emit/parameter.ts +0 -59
- package/src/runtime/emit/pragma.ts +0 -56
- package/src/runtime/emit/project.ts +0 -46
- package/src/runtime/emit/recursive-cte.ts +0 -111
- package/src/runtime/emit/remote-query.ts +0 -47
- package/src/runtime/emit/retrieve.ts +0 -15
- package/src/runtime/emit/returning.ts +0 -41
- package/src/runtime/emit/scalar-function.ts +0 -69
- package/src/runtime/emit/scan.ts +0 -106
- package/src/runtime/emit/schema-declarative.ts +0 -215
- package/src/runtime/emit/sequencing.ts +0 -24
- package/src/runtime/emit/set-operation.ts +0 -141
- package/src/runtime/emit/sink.ts +0 -27
- package/src/runtime/emit/sort.ts +0 -75
- package/src/runtime/emit/subquery.ts +0 -203
- package/src/runtime/emit/table-valued-function.ts +0 -106
- package/src/runtime/emit/temporal-arithmetic.ts +0 -302
- package/src/runtime/emit/transaction.ts +0 -205
- package/src/runtime/emit/unary.ts +0 -101
- package/src/runtime/emit/update.ts +0 -66
- package/src/runtime/emit/values.ts +0 -66
- package/src/runtime/emit/window-function.ts +0 -42
- package/src/runtime/emit/window.ts +0 -458
- package/src/runtime/emitters.ts +0 -183
- package/src/runtime/register.ts +0 -150
- package/src/runtime/scheduler.ts +0 -488
- package/src/runtime/types.ts +0 -242
- package/src/runtime/utils.ts +0 -177
- package/src/schema/assertion.ts +0 -21
- package/src/schema/catalog.ts +0 -269
- package/src/schema/change-events.ts +0 -80
- package/src/schema/column.ts +0 -51
- package/src/schema/declared-schema-manager.ts +0 -82
- package/src/schema/function.ts +0 -188
- package/src/schema/manager.ts +0 -1034
- package/src/schema/schema-differ.ts +0 -214
- package/src/schema/schema-hasher.ts +0 -26
- package/src/schema/schema.ts +0 -222
- package/src/schema/table.ts +0 -409
- package/src/schema/view.ts +0 -19
- package/src/schema/window-function.ts +0 -56
- package/src/types/builtin-types.ts +0 -350
- package/src/types/index.ts +0 -17
- package/src/types/json-type.ts +0 -152
- package/src/types/logical-type.ts +0 -91
- package/src/types/plugin-interface.ts +0 -10
- package/src/types/registry.ts +0 -204
- package/src/types/temporal-types.ts +0 -290
- package/src/types/validation.ts +0 -120
- package/src/util/affinity.ts +0 -151
- package/src/util/ast-stringify.ts +0 -887
- package/src/util/cached.ts +0 -25
- package/src/util/coercion.ts +0 -113
- package/src/util/comparison.ts +0 -510
- package/src/util/environment.ts +0 -52
- package/src/util/hash.ts +0 -90
- package/src/util/latches.ts +0 -47
- package/src/util/mutation-statement.ts +0 -135
- package/src/util/patterns.ts +0 -56
- package/src/util/plan-formatter.ts +0 -48
- package/src/util/plugin-helper.ts +0 -110
- package/src/util/row-descriptor.ts +0 -105
- package/src/util/serialization.ts +0 -47
- package/src/util/sql-literal.ts +0 -22
- package/src/util/working-table-iterable.ts +0 -38
- package/src/vtab/best-access-plan.ts +0 -244
- package/src/vtab/connection.ts +0 -36
- package/src/vtab/filter-info.ts +0 -23
- package/src/vtab/index-info.ts +0 -84
- package/src/vtab/manifest.ts +0 -86
- package/src/vtab/memory/connection.ts +0 -73
- package/src/vtab/memory/index.ts +0 -191
- package/src/vtab/memory/layer/base-cursor.ts +0 -124
- package/src/vtab/memory/layer/base.ts +0 -275
- package/src/vtab/memory/layer/connection.ts +0 -203
- package/src/vtab/memory/layer/interface.ts +0 -47
- package/src/vtab/memory/layer/manager.ts +0 -909
- package/src/vtab/memory/layer/safe-iterate.ts +0 -49
- package/src/vtab/memory/layer/scan-plan.ts +0 -84
- package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
- package/src/vtab/memory/layer/transaction.ts +0 -229
- package/src/vtab/memory/module.ts +0 -667
- package/src/vtab/memory/table.ts +0 -251
- package/src/vtab/memory/types.ts +0 -23
- package/src/vtab/memory/utils/logging.ts +0 -36
- package/src/vtab/memory/utils/primary-key.ts +0 -163
- package/src/vtab/module.ts +0 -162
- package/src/vtab/table.ts +0 -177
package/src/types/registry.ts
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import type { LogicalType } from './logical-type.js';
|
|
2
|
-
import {
|
|
3
|
-
NULL_TYPE,
|
|
4
|
-
INTEGER_TYPE,
|
|
5
|
-
REAL_TYPE,
|
|
6
|
-
TEXT_TYPE,
|
|
7
|
-
BLOB_TYPE,
|
|
8
|
-
BOOLEAN_TYPE,
|
|
9
|
-
NUMERIC_TYPE,
|
|
10
|
-
ANY_TYPE,
|
|
11
|
-
} from './builtin-types.js';
|
|
12
|
-
import { DATE_TYPE, TIME_TYPE, DATETIME_TYPE, TIMESPAN_TYPE } from './temporal-types.js';
|
|
13
|
-
import { JSON_TYPE } from './json-type.js';
|
|
14
|
-
import { createLogger } from '../common/logger.js';
|
|
15
|
-
|
|
16
|
-
const log = createLogger('types:registry');
|
|
17
|
-
const warnLog = log.extend('warn');
|
|
18
|
-
const debugLog = log.extend('debug');
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Global type registry that maps type names to logical type definitions.
|
|
22
|
-
*/
|
|
23
|
-
class TypeRegistry {
|
|
24
|
-
private types = new Map<string, LogicalType>();
|
|
25
|
-
|
|
26
|
-
constructor() {
|
|
27
|
-
// Register built-in types
|
|
28
|
-
this.registerType(NULL_TYPE);
|
|
29
|
-
this.registerType(INTEGER_TYPE);
|
|
30
|
-
this.registerType(REAL_TYPE);
|
|
31
|
-
this.registerType(TEXT_TYPE);
|
|
32
|
-
this.registerType(BLOB_TYPE);
|
|
33
|
-
this.registerType(BOOLEAN_TYPE);
|
|
34
|
-
this.registerType(NUMERIC_TYPE);
|
|
35
|
-
this.registerType(ANY_TYPE);
|
|
36
|
-
this.registerType(DATE_TYPE);
|
|
37
|
-
this.registerType(TIME_TYPE);
|
|
38
|
-
this.registerType(DATETIME_TYPE);
|
|
39
|
-
this.registerType(TIMESPAN_TYPE);
|
|
40
|
-
this.registerType(JSON_TYPE);
|
|
41
|
-
|
|
42
|
-
// Register common aliases
|
|
43
|
-
// Temporal type aliases
|
|
44
|
-
this.types.set('INTERVAL', TIMESPAN_TYPE); // SQL standard alias
|
|
45
|
-
this.types.set('DURATION', TIMESPAN_TYPE); // Alternative name
|
|
46
|
-
this.types.set('INT', INTEGER_TYPE);
|
|
47
|
-
this.types.set('BIGINT', INTEGER_TYPE);
|
|
48
|
-
this.types.set('SMALLINT', INTEGER_TYPE);
|
|
49
|
-
this.types.set('TINYINT', INTEGER_TYPE);
|
|
50
|
-
this.types.set('MEDIUMINT', INTEGER_TYPE);
|
|
51
|
-
|
|
52
|
-
this.types.set('FLOAT', REAL_TYPE);
|
|
53
|
-
this.types.set('DOUBLE', REAL_TYPE);
|
|
54
|
-
this.types.set('DECIMAL', NUMERIC_TYPE);
|
|
55
|
-
|
|
56
|
-
this.types.set('VARCHAR', TEXT_TYPE);
|
|
57
|
-
this.types.set('CHAR', TEXT_TYPE);
|
|
58
|
-
this.types.set('CHARACTER', TEXT_TYPE);
|
|
59
|
-
this.types.set('CLOB', TEXT_TYPE);
|
|
60
|
-
this.types.set('STRING', TEXT_TYPE);
|
|
61
|
-
|
|
62
|
-
this.types.set('BOOL', BOOLEAN_TYPE);
|
|
63
|
-
|
|
64
|
-
this.types.set('BYTES', BLOB_TYPE);
|
|
65
|
-
this.types.set('BINARY', BLOB_TYPE);
|
|
66
|
-
this.types.set('VARBINARY', BLOB_TYPE);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Register a new logical type.
|
|
71
|
-
* @param type The logical type to register
|
|
72
|
-
*/
|
|
73
|
-
registerType(type: LogicalType): void {
|
|
74
|
-
const upperName = type.name.toUpperCase();
|
|
75
|
-
if (this.types.has(upperName)) {
|
|
76
|
-
warnLog(`Overwriting existing type: ${upperName}`);
|
|
77
|
-
}
|
|
78
|
-
this.types.set(upperName, type);
|
|
79
|
-
debugLog(`Registered type: ${upperName}`);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Get a logical type by name.
|
|
84
|
-
* @param name The type name (case-insensitive)
|
|
85
|
-
* @returns The logical type, or undefined if not found
|
|
86
|
-
*/
|
|
87
|
-
getType(name: string): LogicalType | undefined {
|
|
88
|
-
return this.types.get(name.toUpperCase());
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Get a logical type by name, with fallback to BLOB if not found.
|
|
93
|
-
* This matches SQLite's behavior where unknown types default to BLOB affinity.
|
|
94
|
-
* @param name The type name (case-insensitive)
|
|
95
|
-
* @returns The logical type (defaults to BLOB if not found)
|
|
96
|
-
*/
|
|
97
|
-
getTypeOrDefault(name: string | undefined): LogicalType {
|
|
98
|
-
if (!name) return BLOB_TYPE;
|
|
99
|
-
return this.getType(name) ?? BLOB_TYPE;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Check if a type is registered.
|
|
104
|
-
* @param name The type name (case-insensitive)
|
|
105
|
-
* @returns True if the type is registered
|
|
106
|
-
*/
|
|
107
|
-
hasType(name: string): boolean {
|
|
108
|
-
return this.types.has(name.toUpperCase());
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Get all registered type names.
|
|
113
|
-
* @returns Array of type names
|
|
114
|
-
*/
|
|
115
|
-
getTypeNames(): string[] {
|
|
116
|
-
return Array.from(this.types.keys());
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Infer logical type from a type name string.
|
|
121
|
-
* This handles SQLite-style type affinity rules where type names can contain
|
|
122
|
-
* keywords like "INT", "CHAR", "REAL", etc.
|
|
123
|
-
*
|
|
124
|
-
* @param typeName The declared type name (e.g., "VARCHAR(100)", "UNSIGNED INT")
|
|
125
|
-
* @returns The inferred logical type
|
|
126
|
-
*/
|
|
127
|
-
inferType(typeName: string | undefined): LogicalType {
|
|
128
|
-
if (!typeName) return BLOB_TYPE;
|
|
129
|
-
|
|
130
|
-
const upperName = typeName.toUpperCase();
|
|
131
|
-
|
|
132
|
-
// First try exact match
|
|
133
|
-
const exactMatch = this.types.get(upperName);
|
|
134
|
-
if (exactMatch) return exactMatch;
|
|
135
|
-
|
|
136
|
-
// SQLite-style affinity rules
|
|
137
|
-
// INTEGER affinity: INT
|
|
138
|
-
if (upperName.includes('INT')) return INTEGER_TYPE;
|
|
139
|
-
|
|
140
|
-
// TEXT affinity: CHAR, CLOB, TEXT
|
|
141
|
-
if (upperName.includes('CHAR') || upperName.includes('CLOB') || upperName.includes('TEXT')) {
|
|
142
|
-
return TEXT_TYPE;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// BLOB affinity: BLOB
|
|
146
|
-
if (upperName.includes('BLOB')) return BLOB_TYPE;
|
|
147
|
-
|
|
148
|
-
// REAL affinity: REAL, FLOA, DOUB
|
|
149
|
-
if (upperName.includes('REAL') || upperName.includes('FLOA') || upperName.includes('DOUB')) {
|
|
150
|
-
return REAL_TYPE;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// BOOLEAN affinity: BOOL
|
|
154
|
-
if (upperName.includes('BOOL')) return BOOLEAN_TYPE;
|
|
155
|
-
|
|
156
|
-
// NUMERIC affinity: everything else with NUMERIC, DECIMAL
|
|
157
|
-
if (upperName.includes('NUMERIC') || upperName.includes('DECIMAL')) {
|
|
158
|
-
return NUMERIC_TYPE;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// Default to BLOB (SQLite behavior)
|
|
162
|
-
debugLog(`Unknown type '${typeName}', defaulting to BLOB`);
|
|
163
|
-
return BLOB_TYPE;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Global singleton instance
|
|
168
|
-
export const typeRegistry = new TypeRegistry();
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Register a custom logical type.
|
|
172
|
-
* @param type The logical type to register
|
|
173
|
-
*/
|
|
174
|
-
export function registerType(type: LogicalType): void {
|
|
175
|
-
typeRegistry.registerType(type);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Get a logical type by name.
|
|
180
|
-
* @param name The type name (case-insensitive)
|
|
181
|
-
* @returns The logical type, or undefined if not found
|
|
182
|
-
*/
|
|
183
|
-
export function getType(name: string): LogicalType | undefined {
|
|
184
|
-
return typeRegistry.getType(name);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Get a logical type by name, with fallback to BLOB if not found.
|
|
189
|
-
* @param name The type name (case-insensitive)
|
|
190
|
-
* @returns The logical type (defaults to BLOB if not found)
|
|
191
|
-
*/
|
|
192
|
-
export function getTypeOrDefault(name: string | undefined): LogicalType {
|
|
193
|
-
return typeRegistry.getTypeOrDefault(name);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Infer logical type from a type name string.
|
|
198
|
-
* @param typeName The declared type name
|
|
199
|
-
* @returns The inferred logical type
|
|
200
|
-
*/
|
|
201
|
-
export function inferType(typeName: string | undefined): LogicalType {
|
|
202
|
-
return typeRegistry.inferType(typeName);
|
|
203
|
-
}
|
|
204
|
-
|
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
import { PhysicalType, type LogicalType } from './logical-type.js';
|
|
2
|
-
import { Temporal } from 'temporal-polyfill';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* DATE type - stores ISO 8601 date strings (YYYY-MM-DD)
|
|
6
|
-
* Uses Temporal.PlainDate for validation and parsing
|
|
7
|
-
*/
|
|
8
|
-
export const DATE_TYPE: LogicalType = {
|
|
9
|
-
name: 'DATE',
|
|
10
|
-
physicalType: PhysicalType.TEXT,
|
|
11
|
-
isTemporal: true,
|
|
12
|
-
|
|
13
|
-
validate: (v) => {
|
|
14
|
-
if (v === null) return true;
|
|
15
|
-
if (typeof v !== 'string') return false;
|
|
16
|
-
try {
|
|
17
|
-
Temporal.PlainDate.from(v);
|
|
18
|
-
return true;
|
|
19
|
-
} catch {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
parse: (v) => {
|
|
25
|
-
if (v === null) return null;
|
|
26
|
-
if (typeof v === 'string') {
|
|
27
|
-
try {
|
|
28
|
-
const date = Temporal.PlainDate.from(v);
|
|
29
|
-
return date.toString(); // ISO 8601 format: YYYY-MM-DD
|
|
30
|
-
} catch (e) {
|
|
31
|
-
throw new TypeError(`Cannot convert '${v}' to DATE: ${e instanceof Error ? e.message : String(e)}`);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
if (typeof v === 'number') {
|
|
35
|
-
// Unix timestamp (milliseconds)
|
|
36
|
-
const instant = Temporal.Instant.fromEpochMilliseconds(v);
|
|
37
|
-
return instant.toZonedDateTimeISO('UTC').toPlainDate().toString();
|
|
38
|
-
}
|
|
39
|
-
throw new TypeError(`Cannot convert ${typeof v} to DATE`);
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
compare: (a, b) => {
|
|
43
|
-
if (a === null && b === null) return 0;
|
|
44
|
-
if (a === null) return -1;
|
|
45
|
-
if (b === null) return 1;
|
|
46
|
-
// ISO 8601 dates can be compared lexicographically
|
|
47
|
-
return (a as string).localeCompare(b as string);
|
|
48
|
-
},
|
|
49
|
-
|
|
50
|
-
supportedCollations: [],
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* TIME type - stores ISO 8601 time strings (HH:MM:SS or HH:MM:SS.sss)
|
|
55
|
-
* Uses Temporal.PlainTime for validation and parsing
|
|
56
|
-
*/
|
|
57
|
-
export const TIME_TYPE: LogicalType = {
|
|
58
|
-
name: 'TIME',
|
|
59
|
-
physicalType: PhysicalType.TEXT,
|
|
60
|
-
isTemporal: true,
|
|
61
|
-
|
|
62
|
-
validate: (v) => {
|
|
63
|
-
if (v === null) return true;
|
|
64
|
-
if (typeof v !== 'string') return false;
|
|
65
|
-
try {
|
|
66
|
-
Temporal.PlainTime.from(v);
|
|
67
|
-
return true;
|
|
68
|
-
} catch {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
parse: (v) => {
|
|
74
|
-
if (v === null) return null;
|
|
75
|
-
if (typeof v === 'string') {
|
|
76
|
-
try {
|
|
77
|
-
const time = Temporal.PlainTime.from(v);
|
|
78
|
-
return time.toString(); // ISO 8601 format: HH:MM:SS or HH:MM:SS.sss
|
|
79
|
-
} catch (e) {
|
|
80
|
-
throw new TypeError(`Cannot convert '${v}' to TIME: ${e instanceof Error ? e.message : String(e)}`);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
if (typeof v === 'number') {
|
|
84
|
-
// Seconds since midnight
|
|
85
|
-
const hours = Math.floor(v / 3600) % 24;
|
|
86
|
-
const minutes = Math.floor((v % 3600) / 60);
|
|
87
|
-
const seconds = v % 60;
|
|
88
|
-
const time = new Temporal.PlainTime(hours, minutes, seconds);
|
|
89
|
-
return time.toString();
|
|
90
|
-
}
|
|
91
|
-
throw new TypeError(`Cannot convert ${typeof v} to TIME`);
|
|
92
|
-
},
|
|
93
|
-
|
|
94
|
-
compare: (a, b) => {
|
|
95
|
-
if (a === null && b === null) return 0;
|
|
96
|
-
if (a === null) return -1;
|
|
97
|
-
if (b === null) return 1;
|
|
98
|
-
// ISO 8601 times can be compared lexicographically
|
|
99
|
-
return (a as string).localeCompare(b as string);
|
|
100
|
-
},
|
|
101
|
-
|
|
102
|
-
supportedCollations: [],
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* DATETIME type - stores ISO 8601 datetime strings (YYYY-MM-DDTHH:MM:SS or with timezone)
|
|
107
|
-
* Uses Temporal.PlainDateTime for validation and parsing
|
|
108
|
-
*/
|
|
109
|
-
export const DATETIME_TYPE: LogicalType = {
|
|
110
|
-
name: 'DATETIME',
|
|
111
|
-
physicalType: PhysicalType.TEXT,
|
|
112
|
-
isTemporal: true,
|
|
113
|
-
|
|
114
|
-
validate: (v) => {
|
|
115
|
-
if (v === null) return true;
|
|
116
|
-
if (typeof v !== 'string') return false;
|
|
117
|
-
try {
|
|
118
|
-
// Try PlainDateTime first
|
|
119
|
-
Temporal.PlainDateTime.from(v);
|
|
120
|
-
return true;
|
|
121
|
-
} catch {
|
|
122
|
-
try {
|
|
123
|
-
// Also accept ZonedDateTime
|
|
124
|
-
Temporal.ZonedDateTime.from(v);
|
|
125
|
-
return true;
|
|
126
|
-
} catch {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
|
-
|
|
132
|
-
parse: (v) => {
|
|
133
|
-
if (v === null) return null;
|
|
134
|
-
if (typeof v === 'string') {
|
|
135
|
-
try {
|
|
136
|
-
// Try PlainDateTime first
|
|
137
|
-
const dt = Temporal.PlainDateTime.from(v);
|
|
138
|
-
return dt.toString(); // ISO 8601 format: YYYY-MM-DDTHH:MM:SS
|
|
139
|
-
} catch {
|
|
140
|
-
try {
|
|
141
|
-
// Try ZonedDateTime
|
|
142
|
-
const zdt = Temporal.ZonedDateTime.from(v);
|
|
143
|
-
return zdt.toString(); // ISO 8601 with timezone
|
|
144
|
-
} catch (e) {
|
|
145
|
-
throw new TypeError(`Cannot convert '${v}' to DATETIME: ${e instanceof Error ? e.message : String(e)}`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
if (typeof v === 'number') {
|
|
150
|
-
// Unix timestamp (milliseconds)
|
|
151
|
-
const instant = Temporal.Instant.fromEpochMilliseconds(v);
|
|
152
|
-
return instant.toZonedDateTimeISO('UTC').toString();
|
|
153
|
-
}
|
|
154
|
-
throw new TypeError(`Cannot convert ${typeof v} to DATETIME`);
|
|
155
|
-
},
|
|
156
|
-
|
|
157
|
-
compare: (a, b) => {
|
|
158
|
-
if (a === null && b === null) return 0;
|
|
159
|
-
if (a === null) return -1;
|
|
160
|
-
if (b === null) return 1;
|
|
161
|
-
// ISO 8601 datetimes can be compared lexicographically
|
|
162
|
-
return (a as string).localeCompare(b as string);
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
supportedCollations: [],
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Parse human-readable duration strings into Temporal.Duration
|
|
170
|
-
* Supports formats like "1 hour", "30 minutes", "2 days 3 hours"
|
|
171
|
-
*/
|
|
172
|
-
function parseHumanReadableDuration(input: string): Temporal.Duration | null {
|
|
173
|
-
const normalized = input.trim().toLowerCase();
|
|
174
|
-
|
|
175
|
-
// Handle negative durations
|
|
176
|
-
const isNegative = normalized.startsWith('-');
|
|
177
|
-
const workingInput = isNegative ? normalized.substring(1).trim() : normalized;
|
|
178
|
-
|
|
179
|
-
// Pattern: [number] [unit]
|
|
180
|
-
// Units: year(s), month(s), week(s), day(s), hour(s), minute(s), second(s), min(s), sec(s)
|
|
181
|
-
const pattern = /(\d+(?:\.\d+)?)\s*(years?|months?|weeks?|days?|hours?|minutes?|seconds?|mins?|secs?)/g;
|
|
182
|
-
|
|
183
|
-
const components: Record<string, number> = {};
|
|
184
|
-
let match;
|
|
185
|
-
let hasMatch = false;
|
|
186
|
-
|
|
187
|
-
while ((match = pattern.exec(workingInput)) !== null) {
|
|
188
|
-
hasMatch = true;
|
|
189
|
-
const value = parseFloat(match[1]);
|
|
190
|
-
const unit = match[2];
|
|
191
|
-
|
|
192
|
-
// Map unit to Temporal.Duration field
|
|
193
|
-
if (unit.startsWith('year')) {
|
|
194
|
-
components.years = (components.years || 0) + value;
|
|
195
|
-
} else if (unit.startsWith('month')) {
|
|
196
|
-
components.months = (components.months || 0) + value;
|
|
197
|
-
} else if (unit.startsWith('week')) {
|
|
198
|
-
components.weeks = (components.weeks || 0) + value;
|
|
199
|
-
} else if (unit.startsWith('day')) {
|
|
200
|
-
components.days = (components.days || 0) + value;
|
|
201
|
-
} else if (unit.startsWith('hour')) {
|
|
202
|
-
components.hours = (components.hours || 0) + value;
|
|
203
|
-
} else if (unit.startsWith('min')) {
|
|
204
|
-
components.minutes = (components.minutes || 0) + value;
|
|
205
|
-
} else if (unit.startsWith('sec')) {
|
|
206
|
-
components.seconds = (components.seconds || 0) + value;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
if (!hasMatch) return null;
|
|
211
|
-
|
|
212
|
-
try {
|
|
213
|
-
const duration = Temporal.Duration.from(components);
|
|
214
|
-
return isNegative ? duration.negated() : duration;
|
|
215
|
-
} catch {
|
|
216
|
-
return null;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* TIMESPAN type - stores ISO 8601 duration strings
|
|
222
|
-
* Uses Temporal.Duration for validation and parsing
|
|
223
|
-
*/
|
|
224
|
-
export const TIMESPAN_TYPE: LogicalType = {
|
|
225
|
-
name: 'TIMESPAN',
|
|
226
|
-
physicalType: PhysicalType.TEXT,
|
|
227
|
-
isTemporal: true,
|
|
228
|
-
|
|
229
|
-
validate: (v) => {
|
|
230
|
-
if (v === null) return true;
|
|
231
|
-
if (typeof v !== 'string') return false;
|
|
232
|
-
try {
|
|
233
|
-
Temporal.Duration.from(v);
|
|
234
|
-
return true;
|
|
235
|
-
} catch {
|
|
236
|
-
// Try parsing human-readable format
|
|
237
|
-
return parseHumanReadableDuration(v) !== null;
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
|
-
|
|
241
|
-
parse: (v) => {
|
|
242
|
-
if (v === null) return null;
|
|
243
|
-
|
|
244
|
-
if (typeof v === 'number') {
|
|
245
|
-
// Interpret as seconds
|
|
246
|
-
const duration = Temporal.Duration.from({ seconds: v });
|
|
247
|
-
return duration.toString();
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
if (typeof v === 'string') {
|
|
251
|
-
try {
|
|
252
|
-
// Try ISO 8601 first
|
|
253
|
-
const duration = Temporal.Duration.from(v);
|
|
254
|
-
return duration.toString();
|
|
255
|
-
} catch {
|
|
256
|
-
// Try human-readable format
|
|
257
|
-
const duration = parseHumanReadableDuration(v);
|
|
258
|
-
if (duration) return duration.toString();
|
|
259
|
-
throw new TypeError(`Cannot convert '${v}' to TIMESPAN`);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
throw new TypeError(`Cannot convert ${typeof v} to TIMESPAN`);
|
|
264
|
-
},
|
|
265
|
-
|
|
266
|
-
compare: (a, b) => {
|
|
267
|
-
if (a === null && b === null) return 0;
|
|
268
|
-
if (a === null) return -1;
|
|
269
|
-
if (b === null) return 1;
|
|
270
|
-
|
|
271
|
-
try {
|
|
272
|
-
const durationA = Temporal.Duration.from(a as string);
|
|
273
|
-
const durationB = Temporal.Duration.from(b as string);
|
|
274
|
-
|
|
275
|
-
// Use a reference date to resolve calendar units
|
|
276
|
-
// This ensures consistent comparison of durations with months/years
|
|
277
|
-
const referenceDate = Temporal.PlainDate.from('2024-01-01');
|
|
278
|
-
const totalA = durationA.total({ unit: 'seconds', relativeTo: referenceDate });
|
|
279
|
-
const totalB = durationB.total({ unit: 'seconds', relativeTo: referenceDate });
|
|
280
|
-
|
|
281
|
-
return totalA < totalB ? -1 : totalA > totalB ? 1 : 0;
|
|
282
|
-
} catch {
|
|
283
|
-
// If parsing fails, fall back to string comparison
|
|
284
|
-
return (a as string).localeCompare(b as string);
|
|
285
|
-
}
|
|
286
|
-
},
|
|
287
|
-
|
|
288
|
-
supportedCollations: [],
|
|
289
|
-
};
|
|
290
|
-
|
package/src/types/validation.ts
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import type { SqlValue } from '../common/types.js';
|
|
2
|
-
import { StatusCode } from '../common/types.js';
|
|
3
|
-
import { QuereusError } from '../common/errors.js';
|
|
4
|
-
import type { LogicalType } from './logical-type.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Validate a value against a logical type.
|
|
8
|
-
* Throws an error if the value is invalid.
|
|
9
|
-
*
|
|
10
|
-
* @param value The value to validate
|
|
11
|
-
* @param type The logical type to validate against
|
|
12
|
-
* @param columnName Optional column name for better error messages
|
|
13
|
-
* @returns The validated value
|
|
14
|
-
* @throws QuereusError if validation fails
|
|
15
|
-
*/
|
|
16
|
-
export function validateValue(
|
|
17
|
-
value: SqlValue,
|
|
18
|
-
type: LogicalType,
|
|
19
|
-
columnName?: string
|
|
20
|
-
): SqlValue {
|
|
21
|
-
// NULL is always valid
|
|
22
|
-
if (value === null) return null;
|
|
23
|
-
|
|
24
|
-
// Type-specific validation
|
|
25
|
-
if (type.validate && !type.validate(value)) {
|
|
26
|
-
const colInfo = columnName ? ` for column '${columnName}'` : '';
|
|
27
|
-
throw new QuereusError(
|
|
28
|
-
`Type mismatch${colInfo}: expected ${type.name}, got ${typeof value}`,
|
|
29
|
-
StatusCode.MISMATCH
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return value;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Parse/convert a value to match a logical type.
|
|
38
|
-
* This performs type conversion and normalization.
|
|
39
|
-
*
|
|
40
|
-
* @param value The value to parse
|
|
41
|
-
* @param type The logical type to convert to
|
|
42
|
-
* @param columnName Optional column name for better error messages
|
|
43
|
-
* @returns The parsed/converted value
|
|
44
|
-
* @throws QuereusError if conversion fails
|
|
45
|
-
*/
|
|
46
|
-
export function parseValue(
|
|
47
|
-
value: SqlValue,
|
|
48
|
-
type: LogicalType,
|
|
49
|
-
columnName?: string
|
|
50
|
-
): SqlValue {
|
|
51
|
-
// NULL is always valid
|
|
52
|
-
if (value === null) return null;
|
|
53
|
-
|
|
54
|
-
// Type-specific parsing
|
|
55
|
-
if (type.parse) {
|
|
56
|
-
try {
|
|
57
|
-
return type.parse(value);
|
|
58
|
-
} catch (error) {
|
|
59
|
-
const colInfo = columnName ? ` for column '${columnName}'` : '';
|
|
60
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
61
|
-
throw new QuereusError(
|
|
62
|
-
`Type conversion failed${colInfo}: ${message}`,
|
|
63
|
-
StatusCode.MISMATCH
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return value;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Validate and parse a value in one step.
|
|
73
|
-
* This is the main entry point for type checking at INSERT/UPDATE boundaries.
|
|
74
|
-
*
|
|
75
|
-
* @param value The value to validate and parse
|
|
76
|
-
* @param type The logical type
|
|
77
|
-
* @param columnName Optional column name for better error messages
|
|
78
|
-
* @returns The validated and parsed value
|
|
79
|
-
* @throws QuereusError if validation or parsing fails
|
|
80
|
-
*/
|
|
81
|
-
export function validateAndParse(
|
|
82
|
-
value: SqlValue,
|
|
83
|
-
type: LogicalType,
|
|
84
|
-
columnName?: string
|
|
85
|
-
): SqlValue {
|
|
86
|
-
// Parse first (which may convert the value)
|
|
87
|
-
const parsed = parseValue(value, type, columnName);
|
|
88
|
-
|
|
89
|
-
// Then validate the parsed result
|
|
90
|
-
return validateValue(parsed, type, columnName);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Check if a value is compatible with a logical type without throwing.
|
|
95
|
-
*
|
|
96
|
-
* @param value The value to check
|
|
97
|
-
* @param type The logical type
|
|
98
|
-
* @returns True if the value is valid for the type
|
|
99
|
-
*/
|
|
100
|
-
export function isValidForType(value: SqlValue, type: LogicalType): boolean {
|
|
101
|
-
if (value === null) return true;
|
|
102
|
-
if (!type.validate) return true;
|
|
103
|
-
return type.validate(value);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Try to parse a value, returning null if parsing fails.
|
|
108
|
-
*
|
|
109
|
-
* @param value The value to parse
|
|
110
|
-
* @param type The logical type
|
|
111
|
-
* @returns The parsed value, or null if parsing fails
|
|
112
|
-
*/
|
|
113
|
-
export function tryParse(value: SqlValue, type: LogicalType): SqlValue | null {
|
|
114
|
-
try {
|
|
115
|
-
return parseValue(value, type);
|
|
116
|
-
} catch {
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|